surfaces_impl.h revision 116680a4aac90f2aa7413d9095a592090648e557
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef MOJO_SERVICES_SURFACES_SURFACES_IMPL_H_ 6#define MOJO_SERVICES_SURFACES_SURFACES_IMPL_H_ 7 8#include "base/compiler_specific.h" 9#include "cc/surfaces/display_client.h" 10#include "cc/surfaces/surface_factory.h" 11#include "cc/surfaces/surface_factory_client.h" 12#include "mojo/public/cpp/application/application_connection.h" 13#include "mojo/services/gles2/command_buffer.mojom.h" 14#include "mojo/services/public/interfaces/surfaces/surfaces.mojom.h" 15 16namespace cc { 17class Display; 18} 19 20namespace mojo { 21class ServiceManager; 22 23namespace surfaces { 24 25class SurfaceNativeViewportClient; 26 27class SurfacesImpl : public InterfaceImpl<Surface>, 28 public cc::SurfaceFactoryClient, 29 public cc::DisplayClient { 30 public: 31 class Context { 32 public: 33 virtual cc::SurfaceManager* Manager() = 0; 34 virtual uint32_t IdNamespace() = 0; 35 virtual void FrameSubmitted() = 0; 36 virtual void SetDisplay(cc::Display*) = 0; 37 }; 38 SurfacesImpl(ApplicationConnection* app, Context* context); 39 virtual ~SurfacesImpl(); 40 41 // InterfaceImpl<Surface> implementation. 42 virtual void OnConnectionEstablished() OVERRIDE; 43 44 // Surface implementation. 45 virtual void CreateSurface(SurfaceIdPtr id, mojo::SizePtr size) OVERRIDE; 46 virtual void SubmitFrame(SurfaceIdPtr id, FramePtr frame) OVERRIDE; 47 virtual void DestroySurface(SurfaceIdPtr id) OVERRIDE; 48 virtual void CreateGLES2BoundSurface(CommandBufferPtr gles2_client, 49 SurfaceIdPtr id, 50 mojo::SizePtr size) OVERRIDE; 51 52 // SurfaceFactoryClient implementation. 53 virtual void ReturnResources( 54 const cc::ReturnedResourceArray& resources) OVERRIDE; 55 56 // DisplayClient implementation. 57 virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface() OVERRIDE; 58 59 cc::SurfaceFactory* factory() { return &factory_; } 60 61 private: 62 Context* context_; 63 cc::SurfaceFactory factory_; 64 uint32_t id_namespace_; 65 scoped_ptr<cc::Display> display_; 66 ScopedMessagePipeHandle command_buffer_handle_; 67 68 DISALLOW_COPY_AND_ASSIGN(SurfacesImpl); 69}; 70 71} // namespace surfaces 72} // namespace mojo 73 74#endif // MOJO_SERVICES_SURFACES_SURFACES_IMPL_H_ 75