Chromium Code Reviews| Index: ui/compositor/compositor.cc |
| diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc |
| index 287eaf19751ffc5e0d4f4fe09826482f812fef7c..e9af84d0994fee8e1f4bbe6272fd1ebf06265d7b 100644 |
| --- a/ui/compositor/compositor.cc |
| +++ b/ui/compositor/compositor.cc |
| @@ -26,7 +26,6 @@ |
| #include "third_party/skia/include/core/SkBitmap.h" |
| #include "ui/compositor/compositor_observer.h" |
| #include "ui/compositor/compositor_switches.h" |
| -#include "ui/compositor/compositor_vsync_manager.h" |
| #include "ui/compositor/dip_util.h" |
| #include "ui/compositor/layer.h" |
| #include "ui/compositor/layer_animator_collection.h" |
| @@ -72,7 +71,6 @@ Compositor::Compositor(gfx::AcceleratedWidget widget, |
| widget_(widget), |
| surface_id_allocator_(context_factory->CreateSurfaceIdAllocator()), |
| task_runner_(task_runner), |
| - vsync_manager_(new CompositorVSyncManager()), |
| device_scale_factor_(0.0f), |
| last_started_frame_(0), |
| last_ended_frame_(0), |
| @@ -95,6 +93,9 @@ Compositor::Compositor(gfx::AcceleratedWidget widget, |
| settings.main_frame_before_activation_enabled = false; |
| settings.throttle_frame_production = |
| !command_line->HasSwitch(switches::kDisableGpuVsync); |
| +#if defined(USE_AURA) |
| + settings.forward_begin_frames_to_children = true; |
|
brianderson
2015/03/02 22:38:16
This flag doesn't seem useful like we thought it w
simonhong
2015/03/03 22:54:12
Yep, setting state_machine.SetChildrenNeedBeginFra
|
| +#endif |
| #if !defined(OS_MACOSX) |
| settings.renderer_settings.partial_swap_enabled = |
| !command_line->HasSwitch(cc::switches::kUIDisablePartialSwap); |
| @@ -153,6 +154,8 @@ Compositor::~Compositor() { |
| FOR_EACH_OBSERVER(CompositorObserver, observer_list_, |
| OnCompositingShuttingDown(this)); |
| + DCHECK(!begin_frame_observer_list_.might_have_observers()); |
| + |
| if (root_layer_) |
| root_layer_->SetCompositor(NULL); |
| @@ -249,8 +252,9 @@ bool Compositor::IsVisible() { |
| return host_->visible(); |
| } |
| -scoped_refptr<CompositorVSyncManager> Compositor::vsync_manager() const { |
| - return vsync_manager_; |
| +void Compositor::SetAuthoritativeVSyncInterval( |
| + const base::TimeDelta& interval) { |
| + host_->SetAuthoritativeVSyncInterval(interval); |
| } |
| void Compositor::AddObserver(CompositorObserver* observer) { |
| @@ -280,6 +284,31 @@ bool Compositor::HasAnimationObserver( |
| return animation_observer_list_.HasObserver(observer); |
| } |
| +void Compositor::AddBeginFrameObserver( |
|
brianderson
2015/03/02 22:38:17
Please add unit tests for this since the last_begi
|
| + CompositorBeginFrameObserver* observer, |
| + const cc::BeginFrameArgs& last_begin_frame_args_sent_to_observer) { |
| + // If |last_begin_frame_args_| is still effective, send it to the new |
| + // |observer| immediately. |
| + if (!last_begin_frame_args_sent_to_observer.deadline.is_null() && |
|
brianderson
2015/03/02 22:38:16
Is this check for a null deadline necessary?
simonhong
2015/03/03 22:54:12
I also can't remember why I added this a while ago
|
| + last_begin_frame_args_sent_to_observer != missed_begin_frame_args_) { |
|
brianderson
2015/03/02 22:38:16
It is possible that last_begin_frame_args_sent_to_
simonhong
2015/03/03 22:54:12
Done.
|
| + missed_begin_frame_args_.type = cc::BeginFrameArgs::MISSED; |
|
brianderson
2015/03/02 22:38:17
Can you move this line to the end of Compositor::S
simonhong
2015/03/03 22:54:12
Done.
|
| + observer->OnSendBeginFrame(missed_begin_frame_args_); |
| + } |
| + |
| + if (!begin_frame_observer_list_.might_have_observers()) |
| + SetChildrenNeedBeginFrames(true); |
| + begin_frame_observer_list_.AddObserver(observer); |
| +} |
| + |
| +void Compositor::RemoveBeginFrameObserver( |
| + CompositorBeginFrameObserver* observer) { |
| + DCHECK(begin_frame_observer_list_.HasObserver(observer)); |
| + begin_frame_observer_list_.RemoveObserver(observer); |
| + |
| + if (!begin_frame_observer_list_.might_have_observers()) |
| + SetChildrenNeedBeginFrames(false); |
| +} |
| + |
| void Compositor::BeginMainFrame(const cc::BeginFrameArgs& args) { |
| FOR_EACH_OBSERVER(CompositorAnimationObserver, |
| animation_observer_list_, |
| @@ -340,6 +369,13 @@ void Compositor::DidAbortSwapBuffers() { |
| OnCompositingAborted(this)); |
| } |
| +void Compositor::SendBeginFramesToChildren(const cc::BeginFrameArgs& args) { |
| + FOR_EACH_OBSERVER(CompositorBeginFrameObserver, |
| + begin_frame_observer_list_, |
| + OnSendBeginFrame(args)); |
| + missed_begin_frame_args_ = args; |
| +} |
| + |
| const cc::LayerTreeDebugState& Compositor::GetLayerTreeDebugState() const { |
| return host_->debug_state(); |
| } |
| @@ -378,4 +414,8 @@ void Compositor::CancelCompositorLock() { |
| compositor_lock_->CancelLock(); |
| } |
| +void Compositor::SetChildrenNeedBeginFrames(bool need_begin_frames) { |
| + host_->SetChildrenNeedBeginFrames(need_begin_frames); |
| +} |
| + |
| } // namespace ui |