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 ApplicationManager; 22 23class SurfaceNativeViewportClient; 24 25class SurfacesImpl : public InterfaceImpl<Surface>, 26 public cc::SurfaceFactoryClient, 27 public cc::DisplayClient { 28 public: 29 class Client { 30 public: 31 virtual void FrameSubmitted() = 0; 32 virtual void SetDisplay(cc::Display*) = 0; 33 }; 34 35 SurfacesImpl(cc::SurfaceManager* manager, 36 uint32_t id_namespace, 37 Client* client); 38 virtual ~SurfacesImpl(); 39 40 // Surface implementation. 41 virtual void CreateSurface(SurfaceIdPtr id, mojo::SizePtr size) OVERRIDE; 42 virtual void SubmitFrame(SurfaceIdPtr id, FramePtr frame) OVERRIDE; 43 virtual void DestroySurface(SurfaceIdPtr id) OVERRIDE; 44 virtual void CreateGLES2BoundSurface(CommandBufferPtr gles2_client, 45 SurfaceIdPtr id, 46 mojo::SizePtr size) OVERRIDE; 47 48 // SurfaceFactoryClient implementation. 49 virtual void ReturnResources( 50 const cc::ReturnedResourceArray& resources) OVERRIDE; 51 52 // DisplayClient implementation. 53 virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface() OVERRIDE; 54 virtual void DisplayDamaged() OVERRIDE; 55 virtual void DidSwapBuffers() OVERRIDE; 56 virtual void DidSwapBuffersComplete() OVERRIDE; 57 virtual void CommitVSyncParameters(base::TimeTicks timebase, 58 base::TimeDelta interval) OVERRIDE; 59 60 cc::SurfaceFactory* factory() { return &factory_; } 61 62 private: 63 cc::SurfaceManager* manager_; 64 cc::SurfaceFactory factory_; 65 uint32_t id_namespace_; 66 Client* client_; 67 scoped_ptr<cc::Display> display_; 68 ScopedMessagePipeHandle command_buffer_handle_; 69 70 DISALLOW_COPY_AND_ASSIGN(SurfacesImpl); 71}; 72 73} // namespace mojo 74 75#endif // MOJO_SERVICES_SURFACES_SURFACES_IMPL_H_ 76