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