Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / cc / surfaces / display.h
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 CC_SURFACES_DISPLAY_H_
6 #define CC_SURFACES_DISPLAY_H_
7
8 #include "base/memory/scoped_ptr.h"
9 #include "cc/output/output_surface_client.h"
10 #include "cc/output/renderer.h"
11 #include "cc/resources/returned_resource.h"
12 #include "cc/surfaces/surface_aggregator.h"
13 #include "cc/surfaces/surface_id.h"
14 #include "cc/surfaces/surface_manager.h"
15 #include "cc/surfaces/surfaces_export.h"
16
17 namespace gfx {
18 class Size;
19 }
20
21 namespace cc {
22
23 class BlockingTaskRunner;
24 class DirectRenderer;
25 class DisplayClient;
26 class OutputSurface;
27 class ResourceProvider;
28 class SharedBitmapManager;
29 class Surface;
30 class SurfaceAggregator;
31 class SurfaceIdAllocator;
32 class SurfaceFactory;
33 class TextureMailboxDeleter;
34
35 // A Display produces a surface that can be used to draw to a physical display
36 // (OutputSurface). The client is responsible for creating and sizing the
37 // surface IDs used to draw into the display and deciding when to draw.
38 class CC_SURFACES_EXPORT Display : public OutputSurfaceClient,
39                                    public RendererClient,
40                                    public SurfaceDamageObserver {
41  public:
42   Display(DisplayClient* client,
43           SurfaceManager* manager,
44           SharedBitmapManager* bitmap_manager,
45           gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager);
46   ~Display() override;
47
48   bool Initialize(scoped_ptr<OutputSurface> output_surface);
49
50   // device_scale_factor is used to communicate to the external window system
51   // what scale this was rendered at.
52   void Resize(SurfaceId id,
53               const gfx::Size& new_size,
54               float device_scale_factor);
55   bool Draw();
56
57   SurfaceId CurrentSurfaceId();
58   int GetMaxFramesPending();
59
60   // OutputSurfaceClient implementation.
61   void DeferredInitialize() override {}
62   void ReleaseGL() override {}
63   void CommitVSyncParameters(base::TimeTicks timebase,
64                              base::TimeDelta interval) override;
65   void SetNeedsRedrawRect(const gfx::Rect& damage_rect) override {}
66   void BeginFrame(const BeginFrameArgs& args) override {}
67   void DidSwapBuffers() override;
68   void DidSwapBuffersComplete() override;
69   void ReclaimResources(const CompositorFrameAck* ack) override {}
70   void DidLoseOutputSurface() override;
71   void SetExternalDrawConstraints(
72       const gfx::Transform& transform,
73       const gfx::Rect& viewport,
74       const gfx::Rect& clip,
75       const gfx::Rect& viewport_rect_for_tile_priority,
76       const gfx::Transform& transform_for_tile_priority,
77       bool resourceless_software_draw) override {}
78   void SetMemoryPolicy(const ManagedMemoryPolicy& policy) override;
79   void SetTreeActivationCallback(const base::Closure& callback) override {}
80
81   // RendererClient implementation.
82   void SetFullRootLayerDamage() override {}
83
84   // SurfaceDamageObserver implementation.
85   void OnSurfaceDamaged(SurfaceId surface) override;
86
87  private:
88   void InitializeRenderer();
89
90   DisplayClient* client_;
91   SurfaceManager* manager_;
92   SharedBitmapManager* bitmap_manager_;
93   gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager_;
94   SurfaceId current_surface_id_;
95   gfx::Size current_surface_size_;
96   float device_scale_factor_;
97   LayerTreeSettings settings_;
98   scoped_ptr<OutputSurface> output_surface_;
99   scoped_ptr<ResourceProvider> resource_provider_;
100   scoped_ptr<SurfaceAggregator> aggregator_;
101   scoped_ptr<DirectRenderer> renderer_;
102   scoped_ptr<BlockingTaskRunner> blocking_main_thread_task_runner_;
103   scoped_ptr<TextureMailboxDeleter> texture_mailbox_deleter_;
104
105   DISALLOW_COPY_AND_ASSIGN(Display);
106 };
107
108 }  // namespace cc
109
110 #endif  // CC_SURFACES_DISPLAY_H_