| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef UI_COMPOSITOR_COMPOSITOR_H_ | 5 #ifndef UI_COMPOSITOR_COMPOSITOR_H_ |
| 6 #define UI_COMPOSITOR_COMPOSITOR_H_ | 6 #define UI_COMPOSITOR_COMPOSITOR_H_ |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <memory> |
| 10 #include <string> | 11 #include <string> |
| 11 | 12 |
| 12 #include "base/containers/hash_tables.h" | 13 #include "base/containers/hash_tables.h" |
| 13 #include "base/macros.h" | 14 #include "base/macros.h" |
| 14 #include "base/memory/ref_counted.h" | 15 #include "base/memory/ref_counted.h" |
| 15 #include "base/memory/scoped_ptr.h" | |
| 16 #include "base/observer_list.h" | 16 #include "base/observer_list.h" |
| 17 #include "base/single_thread_task_runner.h" | 17 #include "base/single_thread_task_runner.h" |
| 18 #include "base/time/time.h" | 18 #include "base/time/time.h" |
| 19 #include "cc/output/begin_frame_args.h" | 19 #include "cc/output/begin_frame_args.h" |
| 20 #include "cc/surfaces/surface_sequence.h" | 20 #include "cc/surfaces/surface_sequence.h" |
| 21 #include "cc/trees/layer_tree_host_client.h" | 21 #include "cc/trees/layer_tree_host_client.h" |
| 22 #include "cc/trees/layer_tree_host_single_thread_client.h" | 22 #include "cc/trees/layer_tree_host_single_thread_client.h" |
| 23 #include "third_party/skia/include/core/SkColor.h" | 23 #include "third_party/skia/include/core/SkColor.h" |
| 24 #include "ui/compositor/compositor_animation_observer.h" | 24 #include "ui/compositor/compositor_animation_observer.h" |
| 25 #include "ui/compositor/compositor_export.h" | 25 #include "ui/compositor/compositor_export.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 public: | 74 public: |
| 75 virtual ~ContextFactory() {} | 75 virtual ~ContextFactory() {} |
| 76 | 76 |
| 77 // Creates an output surface for the given compositor. The factory may keep | 77 // Creates an output surface for the given compositor. The factory may keep |
| 78 // per-compositor data (e.g. a shared context), that needs to be cleaned up | 78 // per-compositor data (e.g. a shared context), that needs to be cleaned up |
| 79 // by calling RemoveCompositor when the compositor gets destroyed. | 79 // by calling RemoveCompositor when the compositor gets destroyed. |
| 80 virtual void CreateOutputSurface(base::WeakPtr<Compositor> compositor) = 0; | 80 virtual void CreateOutputSurface(base::WeakPtr<Compositor> compositor) = 0; |
| 81 | 81 |
| 82 // Creates a reflector that copies the content of the |mirrored_compositor| | 82 // Creates a reflector that copies the content of the |mirrored_compositor| |
| 83 // onto |mirroring_layer|. | 83 // onto |mirroring_layer|. |
| 84 virtual scoped_ptr<Reflector> CreateReflector(Compositor* mirrored_compositor, | 84 virtual std::unique_ptr<Reflector> CreateReflector( |
| 85 Layer* mirroring_layer) = 0; | 85 Compositor* mirrored_compositor, |
| 86 Layer* mirroring_layer) = 0; |
| 86 // Removes the reflector, which stops the mirroring. | 87 // Removes the reflector, which stops the mirroring. |
| 87 virtual void RemoveReflector(Reflector* reflector) = 0; | 88 virtual void RemoveReflector(Reflector* reflector) = 0; |
| 88 | 89 |
| 89 // Return a reference to a shared offscreen context provider usable from the | 90 // Return a reference to a shared offscreen context provider usable from the |
| 90 // main thread. | 91 // main thread. |
| 91 virtual scoped_refptr<cc::ContextProvider> | 92 virtual scoped_refptr<cc::ContextProvider> |
| 92 SharedMainThreadContextProvider() = 0; | 93 SharedMainThreadContextProvider() = 0; |
| 93 | 94 |
| 94 // Destroys per-compositor data. | 95 // Destroys per-compositor data. |
| 95 virtual void RemoveCompositor(Compositor* compositor) = 0; | 96 virtual void RemoveCompositor(Compositor* compositor) = 0; |
| 96 | 97 |
| 97 // When true, the factory uses test contexts that do not do real GL | 98 // When true, the factory uses test contexts that do not do real GL |
| 98 // operations. | 99 // operations. |
| 99 virtual bool DoesCreateTestContexts() = 0; | 100 virtual bool DoesCreateTestContexts() = 0; |
| 100 | 101 |
| 101 // Returns the OpenGL target to use for image textures. | 102 // Returns the OpenGL target to use for image textures. |
| 102 virtual uint32_t GetImageTextureTarget(gfx::BufferFormat format, | 103 virtual uint32_t GetImageTextureTarget(gfx::BufferFormat format, |
| 103 gfx::BufferUsage usage) = 0; | 104 gfx::BufferUsage usage) = 0; |
| 104 | 105 |
| 105 // Gets the shared bitmap manager for software mode. | 106 // Gets the shared bitmap manager for software mode. |
| 106 virtual cc::SharedBitmapManager* GetSharedBitmapManager() = 0; | 107 virtual cc::SharedBitmapManager* GetSharedBitmapManager() = 0; |
| 107 | 108 |
| 108 // Gets the GPU memory buffer manager. | 109 // Gets the GPU memory buffer manager. |
| 109 virtual gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() = 0; | 110 virtual gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() = 0; |
| 110 | 111 |
| 111 // Gets the task graph runner. | 112 // Gets the task graph runner. |
| 112 virtual cc::TaskGraphRunner* GetTaskGraphRunner() = 0; | 113 virtual cc::TaskGraphRunner* GetTaskGraphRunner() = 0; |
| 113 | 114 |
| 114 // Creates a Surface ID allocator with a new namespace. | 115 // Creates a Surface ID allocator with a new namespace. |
| 115 virtual scoped_ptr<cc::SurfaceIdAllocator> CreateSurfaceIdAllocator() = 0; | 116 virtual std::unique_ptr<cc::SurfaceIdAllocator> |
| 117 CreateSurfaceIdAllocator() = 0; |
| 116 | 118 |
| 117 // Resize the display corresponding to this compositor to a particular size. | 119 // Resize the display corresponding to this compositor to a particular size. |
| 118 virtual void ResizeDisplay(ui::Compositor* compositor, | 120 virtual void ResizeDisplay(ui::Compositor* compositor, |
| 119 const gfx::Size& size) = 0; | 121 const gfx::Size& size) = 0; |
| 120 }; | 122 }; |
| 121 | 123 |
| 122 // This class represents a lock on the compositor, that can be used to prevent | 124 // This class represents a lock on the compositor, that can be used to prevent |
| 123 // commits to the compositor tree while we're waiting for an asynchronous | 125 // commits to the compositor tree while we're waiting for an asynchronous |
| 124 // event. The typical use case is when waiting for a renderer to produce a frame | 126 // event. The typical use case is when waiting for a renderer to produce a frame |
| 125 // at the right size. The caller keeps a reference on this object, and drops the | 127 // at the right size. The caller keeps a reference on this object, and drops the |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 class COMPOSITOR_EXPORT Compositor | 162 class COMPOSITOR_EXPORT Compositor |
| 161 : NON_EXPORTED_BASE(public cc::LayerTreeHostClient), | 163 : NON_EXPORTED_BASE(public cc::LayerTreeHostClient), |
| 162 NON_EXPORTED_BASE(public cc::LayerTreeHostSingleThreadClient) { | 164 NON_EXPORTED_BASE(public cc::LayerTreeHostSingleThreadClient) { |
| 163 public: | 165 public: |
| 164 Compositor(ui::ContextFactory* context_factory, | 166 Compositor(ui::ContextFactory* context_factory, |
| 165 scoped_refptr<base::SingleThreadTaskRunner> task_runner); | 167 scoped_refptr<base::SingleThreadTaskRunner> task_runner); |
| 166 ~Compositor() override; | 168 ~Compositor() override; |
| 167 | 169 |
| 168 ui::ContextFactory* context_factory() { return context_factory_; } | 170 ui::ContextFactory* context_factory() { return context_factory_; } |
| 169 | 171 |
| 170 void SetOutputSurface(scoped_ptr<cc::OutputSurface> surface); | 172 void SetOutputSurface(std::unique_ptr<cc::OutputSurface> surface); |
| 171 | 173 |
| 172 // Schedules a redraw of the layer tree associated with this compositor. | 174 // Schedules a redraw of the layer tree associated with this compositor. |
| 173 void ScheduleDraw(); | 175 void ScheduleDraw(); |
| 174 | 176 |
| 175 // Sets the root of the layer tree drawn by this Compositor. The root layer | 177 // Sets the root of the layer tree drawn by this Compositor. The root layer |
| 176 // must have no parent. The compositor's root layer is reset if the root layer | 178 // must have no parent. The compositor's root layer is reset if the root layer |
| 177 // is destroyed. NULL can be passed to reset the root layer, in which case the | 179 // is destroyed. NULL can be passed to reset the root layer, in which case the |
| 178 // compositor will stop drawing anything. | 180 // compositor will stop drawing anything. |
| 179 // The Compositor does not own the root layer. | 181 // The Compositor does not own the root layer. |
| 180 const Layer* root_layer() const { return root_layer_; } | 182 const Layer* root_layer() const { return root_layer_; } |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 void RequestNewOutputSurface() override; | 303 void RequestNewOutputSurface() override; |
| 302 void DidInitializeOutputSurface() override; | 304 void DidInitializeOutputSurface() override; |
| 303 void DidFailToInitializeOutputSurface() override; | 305 void DidFailToInitializeOutputSurface() override; |
| 304 void WillCommit() override {} | 306 void WillCommit() override {} |
| 305 void DidCommit() override; | 307 void DidCommit() override; |
| 306 void DidCommitAndDrawFrame() override; | 308 void DidCommitAndDrawFrame() override; |
| 307 void DidCompleteSwapBuffers() override; | 309 void DidCompleteSwapBuffers() override; |
| 308 void DidCompletePageScaleAnimation() override {} | 310 void DidCompletePageScaleAnimation() override {} |
| 309 void SendBeginFramesToChildren(const cc::BeginFrameArgs& args) override; | 311 void SendBeginFramesToChildren(const cc::BeginFrameArgs& args) override; |
| 310 void RecordFrameTimingEvents( | 312 void RecordFrameTimingEvents( |
| 311 scoped_ptr<cc::FrameTimingTracker::CompositeTimingSet> composite_events, | 313 std::unique_ptr<cc::FrameTimingTracker::CompositeTimingSet> |
| 312 scoped_ptr<cc::FrameTimingTracker::MainFrameTimingSet> main_frame_events) | 314 composite_events, |
| 313 override {} | 315 std::unique_ptr<cc::FrameTimingTracker::MainFrameTimingSet> |
| 316 main_frame_events) override {} |
| 314 | 317 |
| 315 // cc::LayerTreeHostSingleThreadClient implementation. | 318 // cc::LayerTreeHostSingleThreadClient implementation. |
| 316 void DidPostSwapBuffers() override; | 319 void DidPostSwapBuffers() override; |
| 317 void DidAbortSwapBuffers() override; | 320 void DidAbortSwapBuffers() override; |
| 318 | 321 |
| 319 bool IsLocked() { return compositor_lock_ != NULL; } | 322 bool IsLocked() { return compositor_lock_ != NULL; } |
| 320 | 323 |
| 321 void SetOutputIsSecure(bool output_is_secure); | 324 void SetOutputIsSecure(bool output_is_secure); |
| 322 | 325 |
| 323 const cc::LayerTreeDebugState& GetLayerTreeDebugState() const; | 326 const cc::LayerTreeDebugState& GetLayerTreeDebugState() const; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 350 Layer* root_layer_; | 353 Layer* root_layer_; |
| 351 | 354 |
| 352 base::ObserverList<CompositorObserver, true> observer_list_; | 355 base::ObserverList<CompositorObserver, true> observer_list_; |
| 353 base::ObserverList<CompositorAnimationObserver> animation_observer_list_; | 356 base::ObserverList<CompositorAnimationObserver> animation_observer_list_; |
| 354 base::ObserverList<CompositorBeginFrameObserver, true> | 357 base::ObserverList<CompositorBeginFrameObserver, true> |
| 355 begin_frame_observer_list_; | 358 begin_frame_observer_list_; |
| 356 | 359 |
| 357 gfx::AcceleratedWidget widget_; | 360 gfx::AcceleratedWidget widget_; |
| 358 bool widget_valid_; | 361 bool widget_valid_; |
| 359 bool output_surface_requested_; | 362 bool output_surface_requested_; |
| 360 scoped_ptr<cc::SurfaceIdAllocator> surface_id_allocator_; | 363 std::unique_ptr<cc::SurfaceIdAllocator> surface_id_allocator_; |
| 361 scoped_refptr<cc::Layer> root_web_layer_; | 364 scoped_refptr<cc::Layer> root_web_layer_; |
| 362 scoped_ptr<cc::LayerTreeHost> host_; | 365 std::unique_ptr<cc::LayerTreeHost> host_; |
| 363 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; | 366 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| 364 | 367 |
| 365 // The manager of vsync parameters for this compositor. | 368 // The manager of vsync parameters for this compositor. |
| 366 scoped_refptr<CompositorVSyncManager> vsync_manager_; | 369 scoped_refptr<CompositorVSyncManager> vsync_manager_; |
| 367 | 370 |
| 368 // The device scale factor of the monitor that this compositor is compositing | 371 // The device scale factor of the monitor that this compositor is compositing |
| 369 // layers on. | 372 // layers on. |
| 370 float device_scale_factor_; | 373 float device_scale_factor_; |
| 371 | 374 |
| 372 int last_started_frame_; | 375 int last_started_frame_; |
| 373 int last_ended_frame_; | 376 int last_ended_frame_; |
| 374 | 377 |
| 375 bool locks_will_time_out_; | 378 bool locks_will_time_out_; |
| 376 CompositorLock* compositor_lock_; | 379 CompositorLock* compositor_lock_; |
| 377 | 380 |
| 378 LayerAnimatorCollection layer_animator_collection_; | 381 LayerAnimatorCollection layer_animator_collection_; |
| 379 scoped_refptr<cc::AnimationTimeline> animation_timeline_; | 382 scoped_refptr<cc::AnimationTimeline> animation_timeline_; |
| 380 | 383 |
| 381 // Used to send to any new CompositorBeginFrameObserver immediately. | 384 // Used to send to any new CompositorBeginFrameObserver immediately. |
| 382 cc::BeginFrameArgs missed_begin_frame_args_; | 385 cc::BeginFrameArgs missed_begin_frame_args_; |
| 383 | 386 |
| 384 base::WeakPtrFactory<Compositor> weak_ptr_factory_; | 387 base::WeakPtrFactory<Compositor> weak_ptr_factory_; |
| 385 | 388 |
| 386 DISALLOW_COPY_AND_ASSIGN(Compositor); | 389 DISALLOW_COPY_AND_ASSIGN(Compositor); |
| 387 }; | 390 }; |
| 388 | 391 |
| 389 } // namespace ui | 392 } // namespace ui |
| 390 | 393 |
| 391 #endif // UI_COMPOSITOR_COMPOSITOR_H_ | 394 #endif // UI_COMPOSITOR_COMPOSITOR_H_ |
| OLD | NEW |