1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#ifndef CC_SURFACES_DISPLAY_H_
6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define CC_SURFACES_DISPLAY_H_
7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cc/output/output_surface_client.h"
11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "cc/output/renderer.h"
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cc/surfaces/surface_aggregator.h"
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cc/surfaces/surface_client.h"
14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "cc/surfaces/surface_id.h"
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cc/surfaces/surfaces_export.h"
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace gfx {
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Size;
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace cc {
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class DirectRenderer;
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class DisplayClient;
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class OutputSurface;
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class ResourceProvider;
2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class SharedBitmapManager;
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Surface;
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class SurfaceManager;
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class CC_SURFACES_EXPORT Display : public SurfaceClient,
32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                   public OutputSurfaceClient,
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                   public RendererClient {
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  Display(DisplayClient* client,
3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)          SurfaceManager* manager,
3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)          SharedBitmapManager* bitmap_manager);
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual ~Display();
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void Resize(const gfx::Size& new_size);
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool Draw();
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SurfaceId CurrentSurfaceId();
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // OutputSurfaceClient implementation.
46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void DeferredInitialize() OVERRIDE {}
47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void ReleaseGL() OVERRIDE {}
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void CommitVSyncParameters(base::TimeTicks timebase,
49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                     base::TimeDelta interval) OVERRIDE {}
50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void SetNeedsRedrawRect(const gfx::Rect& damage_rect) OVERRIDE {}
51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE {}
52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void DidSwapBuffers() OVERRIDE {}
53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void DidSwapBuffersComplete() OVERRIDE {}
54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void ReclaimResources(const CompositorFrameAck* ack) OVERRIDE {}
55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void DidLoseOutputSurface() OVERRIDE {}
56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void SetExternalDrawConstraints(
57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const gfx::Transform& transform,
58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const gfx::Rect& viewport,
59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const gfx::Rect& clip,
60f4933c2d2f8300a84cd1cd69e0ecb40f3b807f06Hui Shu      const gfx::Rect& viewport_rect_for_tile_priority,
61f4933c2d2f8300a84cd1cd69e0ecb40f3b807f06Hui Shu      const gfx::Transform& transform_for_tile_priority,
6288109bffdff235e691fea3aefa461782a195ed10boliu@chromium.org      bool resourceless_software_draw) OVERRIDE {}
63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void SetMemoryPolicy(const ManagedMemoryPolicy& policy) OVERRIDE {}
64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void SetTreeActivationCallback(
65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const base::Closure& callback) OVERRIDE {}
66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // RendererClient implementation.
68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void SetFullRootLayerDamage() OVERRIDE {}
69bee9932bab44713b74b422b4b759b49f5a222977Bo Liu  virtual void RunOnDemandRasterTask(Task* on_demand_raster_task) OVERRIDE {}
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // SurfaceClient implementation.
72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void ReturnResources(const ReturnedResourceArray& resources) OVERRIDE;
73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private:
75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  void InitializeOutputSurface();
76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DisplayClient* client_;
78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SurfaceManager* manager_;
79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SurfaceAggregator aggregator_;
8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SharedBitmapManager* bitmap_manager_;
81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  LayerTreeSettings settings_;
82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  scoped_ptr<Surface> current_surface_;
83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  scoped_ptr<OutputSurface> output_surface_;
84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  scoped_ptr<ResourceProvider> resource_provider_;
85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  scoped_ptr<DirectRenderer> renderer_;
86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  int child_id_;
87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(Display);
89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace cc
92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif  // CC_SURFACES_DISPLAY_H_
94