Chromium Code Reviews| Index: ui/compositor/compositor.cc | 
| diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc | 
| index f050a64e1a74dede9134fcfe075fd614dcd9841c..ce53936816d4e023a4841f5050e62751c8e8bbb7 100644 | 
| --- a/ui/compositor/compositor.cc | 
| +++ b/ui/compositor/compositor.cc | 
| @@ -156,6 +156,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); | 
| @@ -283,6 +285,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()) | 
| 
 
danakj
2015/03/17 18:56:45
From the name "might have", this feels like a bug
 
brianderson
2015/03/17 22:29:32
Looks like might_have_observers() can return the i
 
simonhong
2015/03/19 15:48:46
I used it to check whether the list is empty or no
 
 | 
| + host_->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()) | 
| 
 
danakj
2015/03/17 18:56:45
Dittos
 
 | 
| + host_->SetChildrenNeedBeginFrames(false); | 
| +} | 
| + | 
| void Compositor::BeginMainFrame(const cc::BeginFrameArgs& args) { | 
| FOR_EACH_OBSERVER(CompositorAnimationObserver, | 
| animation_observer_list_, | 
| @@ -345,6 +371,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(); | 
| } |