Chromium Code Reviews| Index: ui/compositor/compositor.cc |
| diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc |
| index 6d1bdace3345cb8ae0d8bd054652013f694ae9cb..afe32ba7a5cbee21485cb820ee00cfaff3e0c0f1 100644 |
| --- a/ui/compositor/compositor.cc |
| +++ b/ui/compositor/compositor.cc |
| @@ -194,8 +194,6 @@ Compositor::~Compositor() { |
| FOR_EACH_OBSERVER(CompositorAnimationObserver, animation_observer_list_, |
| OnCompositingShuttingDown(this)); |
| - DCHECK(begin_frame_observer_list_.empty()); |
|
brianderson
2015/10/21 23:12:59
Why is this no longer valid?
jdduke (slow)
2015/10/21 23:46:16
ObserverList does that for us (the second "true" a
|
| - |
| if (root_layer_) |
| root_layer_->ResetCompositor(); |
| @@ -359,27 +357,20 @@ bool Compositor::HasAnimationObserver( |
| } |
| void Compositor::AddBeginFrameObserver(CompositorBeginFrameObserver* observer) { |
| - DCHECK(std::find(begin_frame_observer_list_.begin(), |
|
brianderson
2015/10/21 23:12:59
Any way to keep this check?
jdduke (slow)
2015/10/21 23:46:16
ObserverList also does that for us.
|
| - 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()) { |
|
danakj
2015/10/22 18:35:59
Do you need to do this here still, since it is don
jdduke (slow)
2015/10/22 18:39:00
I considered that, I suppose it depends on the sem
|
| host_->SetChildrenNeedBeginFrames(false); |
| missed_begin_frame_args_ = cc::BeginFrameArgs(); |
| } |
| @@ -452,8 +443,14 @@ 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)); |
| + |
| + if (!begin_frame_observer_list_.might_have_observers()) { |
| + host_->SetChildrenNeedBeginFrames(false); |
| + missed_begin_frame_args_ = cc::BeginFrameArgs(); |
| + return; |
| + } |
| missed_begin_frame_args_ = args; |
| missed_begin_frame_args_.type = cc::BeginFrameArgs::MISSED; |