1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef MOJO_SERVICES_SURFACES_SURFACES_IMPL_H_ 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MOJO_SERVICES_SURFACES_SURFACES_IMPL_H_ 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/compiler_specific.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "cc/surfaces/display_client.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "cc/surfaces/surface_factory.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "cc/surfaces/surface_factory_client.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/public/cpp/application/application_connection.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/services/gles2/command_buffer.mojom.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/services/public/interfaces/surfaces/surfaces.mojom.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace cc { 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass Display; 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace mojo { 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class ApplicationManager; 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SurfaceNativeViewportClient; 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SurfacesImpl : public InterfaceImpl<Surface>, 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public cc::SurfaceFactoryClient, 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public cc::DisplayClient { 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) class Client { 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void FrameSubmitted() = 0; 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetDisplay(cc::Display*) = 0; 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }; 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SurfacesImpl(cc::SurfaceManager* manager, 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) uint32_t id_namespace, 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Client* client); 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~SurfacesImpl(); 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Surface implementation. 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void CreateSurface(SurfaceIdPtr id, mojo::SizePtr size) OVERRIDE; 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SubmitFrame(SurfaceIdPtr id, FramePtr frame) OVERRIDE; 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void DestroySurface(SurfaceIdPtr id) OVERRIDE; 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void CreateGLES2BoundSurface(CommandBufferPtr gles2_client, 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SurfaceIdPtr id, 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mojo::SizePtr size) OVERRIDE; 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // SurfaceFactoryClient implementation. 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void ReturnResources( 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const cc::ReturnedResourceArray& resources) OVERRIDE; 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // DisplayClient implementation. 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface() OVERRIDE; 5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void DisplayDamaged() OVERRIDE; 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void DidSwapBuffers() OVERRIDE; 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void DidSwapBuffersComplete() OVERRIDE; 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void CommitVSyncParameters(base::TimeTicks timebase, 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeDelta interval) OVERRIDE; 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cc::SurfaceFactory* factory() { return &factory_; } 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cc::SurfaceManager* manager_; 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cc::SurfaceFactory factory_; 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch uint32_t id_namespace_; 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Client* client_; 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<cc::Display> display_; 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ScopedMessagePipeHandle command_buffer_handle_; 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(SurfacesImpl); 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace mojo 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif // MOJO_SERVICES_SURFACES_SURFACES_IMPL_H_ 76