Chromium Code Reviews| Index: ui/compositor/compositor.h | 
| diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h | 
| index 7c4a706a5175cbec50cec49b392bd105670633b9..cc53f5e5fcb3a4046fb742ae7bb1389c1af8490c 100644 | 
| --- a/ui/compositor/compositor.h | 
| +++ b/ui/compositor/compositor.h | 
| @@ -13,6 +13,7 @@ | 
| #include "base/observer_list.h" | 
| #include "base/single_thread_task_runner.h" | 
| #include "base/time/time.h" | 
| +#include "cc/output/begin_frame_args.h" | 
| #include "cc/surfaces/surface_sequence.h" | 
| #include "cc/trees/layer_tree_host_client.h" | 
| #include "cc/trees/layer_tree_host_single_thread_client.h" | 
| @@ -53,7 +54,6 @@ struct Mailbox; | 
| namespace ui { | 
| class Compositor; | 
| -class CompositorVSyncManager; | 
| class Layer; | 
| class Reflector; | 
| class Texture; | 
| @@ -128,6 +128,14 @@ class COMPOSITOR_EXPORT CompositorLock | 
| DISALLOW_COPY_AND_ASSIGN(CompositorLock); | 
| }; | 
| +// This class observes BeginFrame notification from LayerTreeHost. | 
| +class COMPOSITOR_EXPORT CompositorBeginFrameObserver { | 
| + public: | 
| + virtual ~CompositorBeginFrameObserver() {} | 
| + | 
| + virtual void OnSendBeginFrame(const cc::BeginFrameArgs& args) = 0; | 
| +}; | 
| + | 
| // Compositor object to take care of GPU painting. | 
| // A Browser compositor object is responsible for generating the final | 
| // displayable form of pixels comprising a single widget's contents. It draws an | 
| @@ -201,12 +209,17 @@ class COMPOSITOR_EXPORT Compositor | 
| // Gets the visibility of the underlying compositor. | 
| bool IsVisible(); | 
| + // The "authoritative" vsync interval, if provided, will override interval | 
| + // reported from 3D context. This is typically the value reported by a more | 
| + // reliable source, e.g, the platform display configuration. | 
| + // In the particular case of ChromeOS -- this is the value queried through | 
| + // XRandR, which is more reliable than the value queried through the 3D | 
| + // context. | 
| + void SetAuthoritativeVSyncInterval(const base::TimeDelta& interval); | 
| + | 
| // Returns the widget for this compositor. | 
| gfx::AcceleratedWidget widget() const { return widget_; } | 
| - // Returns the vsync manager for this compositor. | 
| - scoped_refptr<CompositorVSyncManager> vsync_manager() const; | 
| - | 
| // Returns the main thread task runner this compositor uses. Users of the | 
| // compositor generally shouldn't use this. | 
| scoped_refptr<base::SingleThreadTaskRunner> task_runner() const { | 
| @@ -223,6 +236,11 @@ class COMPOSITOR_EXPORT Compositor | 
| void RemoveAnimationObserver(CompositorAnimationObserver* observer); | 
| bool HasAnimationObserver(const CompositorAnimationObserver* observer) const; | 
| + void AddBeginFrameObserver( | 
| + CompositorBeginFrameObserver* observer, | 
| + const cc::BeginFrameArgs& last_begin_frame_args_sent_to_observer); | 
| + void RemoveBeginFrameObserver(CompositorBeginFrameObserver* observer); | 
| + | 
| // Creates a compositor lock. Returns NULL if it is not possible to lock at | 
| // this time (i.e. we're waiting to complete a previous unlock). | 
| scoped_refptr<CompositorLock> GetCompositorLock(); | 
| @@ -261,6 +279,7 @@ class COMPOSITOR_EXPORT Compositor | 
| void DidCommitAndDrawFrame() override; | 
| void DidCompleteSwapBuffers() override; | 
| void DidCompletePageScaleAnimation() override {} | 
| + void SendBeginFramesToChildren(const cc::BeginFrameArgs& args) override; | 
| // cc::LayerTreeHostSingleThreadClient implementation. | 
| void DidPostSwapBuffers() override; | 
| @@ -283,6 +302,7 @@ class COMPOSITOR_EXPORT Compositor | 
| private: | 
| friend class base::RefCounted<Compositor>; | 
| friend class CompositorLock; | 
| + friend class CompositorTestAPI; | 
| 
 
brianderson
2015/03/06 20:36:59
Instead of adding a CompositorTestAPI as a friend,
 
 | 
| // Called by CompositorLock. | 
| void UnlockCompositor(); | 
| @@ -290,6 +310,9 @@ class COMPOSITOR_EXPORT Compositor | 
| // Called to release any pending CompositorLock | 
| void CancelCompositorLock(); | 
| + // Request scheduling of next BeginFrame to LayerTreeHost. | 
| + void SetChildrenNeedBeginFrames(bool need_begin_frame); | 
| + | 
| gfx::Size size_; | 
| ui::ContextFactory* context_factory_; | 
| @@ -299,6 +322,7 @@ class COMPOSITOR_EXPORT Compositor | 
| ObserverList<CompositorObserver, true> observer_list_; | 
| ObserverList<CompositorAnimationObserver> animation_observer_list_; | 
| + ObserverList<CompositorBeginFrameObserver> begin_frame_observer_list_; | 
| gfx::AcceleratedWidget widget_; | 
| scoped_ptr<cc::SurfaceIdAllocator> surface_id_allocator_; | 
| @@ -306,9 +330,6 @@ class COMPOSITOR_EXPORT Compositor | 
| scoped_ptr<cc::LayerTreeHost> host_; | 
| scoped_refptr<base::SingleThreadTaskRunner> task_runner_; | 
| - // The manager of vsync parameters for this compositor. | 
| - scoped_refptr<CompositorVSyncManager> vsync_manager_; | 
| - | 
| // The device scale factor of the monitor that this compositor is compositing | 
| // layers on. | 
| float device_scale_factor_; | 
| @@ -322,6 +343,9 @@ class COMPOSITOR_EXPORT Compositor | 
| LayerAnimatorCollection layer_animator_collection_; | 
| + // Used to send to any new CompositorBeginFrameObserver immediately. | 
| + cc::BeginFrameArgs missed_begin_frame_args_; | 
| + | 
| base::WeakPtrFactory<Compositor> weak_ptr_factory_; | 
| DISALLOW_COPY_AND_ASSIGN(Compositor); |