 Chromium Code Reviews
 Chromium Code Reviews Issue 1414533003:
  Make ui::Compositor BeginFrame subscription robust  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master
    
  
    Issue 1414533003:
  Make ui::Compositor BeginFrame subscription robust  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master| Index: ui/compositor/compositor.cc | 
| diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc | 
| index cab5d6eab3787386d62b9a60c15ced8ef41c4663..767595caa95982dfc377c9107a2c84888084cd6b 100644 | 
| --- a/ui/compositor/compositor.cc | 
| +++ b/ui/compositor/compositor.cc | 
| @@ -190,8 +190,6 @@ Compositor::~Compositor() { | 
| FOR_EACH_OBSERVER(CompositorAnimationObserver, animation_observer_list_, | 
| OnCompositingShuttingDown(this)); | 
| - DCHECK(begin_frame_observer_list_.empty()); | 
| - | 
| if (root_layer_) | 
| root_layer_->ResetCompositor(); | 
| @@ -355,27 +353,20 @@ bool Compositor::HasAnimationObserver( | 
| } | 
| void Compositor::AddBeginFrameObserver(CompositorBeginFrameObserver* observer) { | 
| - DCHECK(std::find(begin_frame_observer_list_.begin(), | 
| - begin_frame_observer_list_.end(), observer) == | 
| - begin_frame_observer_list_.end()); | 
| - | 
| - if (begin_frame_observer_list_.empty()) | 
| + if (!begin_frame_observer_list_.might_have_observers()) | 
| host_->SetChildrenNeedBeginFrames(true); | 
| + begin_frame_observer_list_.AddObserver(observer); | 
| + | 
| if (missed_begin_frame_args_.IsValid()) | 
| observer->OnSendBeginFrame(missed_begin_frame_args_); | 
| - | 
| - begin_frame_observer_list_.push_back(observer); | 
| } | 
| void Compositor::RemoveBeginFrameObserver( | 
| CompositorBeginFrameObserver* observer) { | 
| - auto it = std::find(begin_frame_observer_list_.begin(), | 
| - begin_frame_observer_list_.end(), observer); | 
| - DCHECK(it != begin_frame_observer_list_.end()); | 
| - begin_frame_observer_list_.erase(it); | 
| + begin_frame_observer_list_.RemoveObserver(observer); | 
| - if (begin_frame_observer_list_.empty()) { | 
| + if (!begin_frame_observer_list_.might_have_observers()) { | 
| host_->SetChildrenNeedBeginFrames(false); | 
| 
danakj
2015/10/21 20:23:51
What if might_have is true, but actually this was
 
jdduke (slow)
2015/10/21 20:48:12
Good call, we can check after iterating over the o
 | 
| missed_begin_frame_args_ = cc::BeginFrameArgs(); | 
| } | 
| @@ -448,8 +439,8 @@ void Compositor::DidAbortSwapBuffers() { | 
| } | 
| void Compositor::SendBeginFramesToChildren(const cc::BeginFrameArgs& args) { | 
| - for (auto observer : begin_frame_observer_list_) | 
| - observer->OnSendBeginFrame(args); | 
| + FOR_EACH_OBSERVER(CompositorBeginFrameObserver, begin_frame_observer_list_, | 
| + OnSendBeginFrame(args)); | 
| missed_begin_frame_args_ = args; | 
| missed_begin_frame_args_.type = cc::BeginFrameArgs::MISSED; |