| Index: ui/compositor/compositor.cc
|
| diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc
|
| index 6293c2c19cf6d6e2fbb2fda6a548b18226e15cfa..69d10bf438cbcb34f2a50a9157ebd617fbdd98b6 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())
|
| + 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())
|
| + host_->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();
|
| }
|
|
|