1// Copyright 2013 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_EXAMPLES_COMPOSITOR_APP_COMPOSITOR_HOST_H_
6#define MOJO_EXAMPLES_COMPOSITOR_APP_COMPOSITOR_HOST_H_
7
8#include "base/compiler_specific.h"
9#include "base/memory/scoped_ptr.h"
10#include "base/threading/thread.h"
11#include "cc/trees/layer_tree_host_client.h"
12#include "mojo/public/cpp/system/core.h"
13#include "ui/gfx/size.h"
14
15namespace cc {
16class Layer;
17class LayerTreeHost;
18}  // namespace cc
19
20namespace mojo {
21namespace examples {
22class GLES2ClientImpl;
23
24class CompositorHost : public cc::LayerTreeHostClient {
25 public:
26  explicit CompositorHost(ScopedMessagePipeHandle command_buffer_handle);
27  virtual ~CompositorHost();
28
29  void SetSize(const gfx::Size& viewport_size);
30
31  // cc::LayerTreeHostClient implementation.
32  virtual void WillBeginMainFrame(int frame_id) OVERRIDE;
33  virtual void DidBeginMainFrame() OVERRIDE;
34  virtual void BeginMainFrame(const cc::BeginFrameArgs& args) OVERRIDE;
35  virtual void Layout() OVERRIDE;
36  virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta,
37                                   float page_scale,
38                                   float top_controls_delta) OVERRIDE;
39  virtual void RequestNewOutputSurface(bool fallback) OVERRIDE;
40  virtual void DidInitializeOutputSurface() OVERRIDE;
41  virtual void WillCommit() OVERRIDE;
42  virtual void DidCommit() OVERRIDE;
43  virtual void DidCommitAndDrawFrame() OVERRIDE;
44  virtual void DidCompleteSwapBuffers() OVERRIDE;
45
46 private:
47  void SetupScene();
48
49  ScopedMessagePipeHandle command_buffer_handle_;
50  scoped_ptr<cc::LayerTreeHost> tree_;
51  scoped_refptr<cc::Layer> child_layer_;
52  base::Thread compositor_thread_;
53};
54
55}  // namespace examples
56}  // namespace mojo
57
58#endif  // MOJO_EXAMPLES_COMPOSITOR_APP_COMPOSITOR_HOST_H_
59