Chromium Code Reviews| Index: ui/compositor/compositor.cc |
| diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc |
| index 6293c2c19cf6d6e2fbb2fda6a548b18226e15cfa..cce8eda257c16b0ad3aeb66b456f445bec039fd6 100644 |
| --- a/ui/compositor/compositor.cc |
| +++ b/ui/compositor/compositor.cc |
| @@ -155,6 +155,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); |
| @@ -282,6 +284,30 @@ bool Compositor::HasAnimationObserver( |
| return animation_observer_list_.HasObserver(observer); |
| } |
| +void Compositor::AddBeginFrameObserver( |
| + 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.frame_time != |
| + missed_begin_frame_args_.frame_time) { |
| + 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_, |
| @@ -342,6 +368,14 @@ 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; |
| + missed_begin_frame_args_.type = cc::BeginFrameArgs::MISSED; |
| +} |
| + |
| const cc::LayerTreeDebugState& Compositor::GetLayerTreeDebugState() const { |
| return host_->debug_state(); |
| } |
| @@ -380,4 +414,8 @@ void Compositor::CancelCompositorLock() { |
| compositor_lock_->CancelLock(); |
| } |
| +void Compositor::SetChildrenNeedBeginFrames(bool need_begin_frames) { |
|
brianderson
2015/03/10 23:36:46
Does this need it's own method?
simonhong
2015/03/11 02:03:37
Removed.
|
| + host_->SetChildrenNeedBeginFrames(need_begin_frames); |
| +} |
| + |
| } // namespace ui |