Chromium Code Reviews| Index: content/browser/renderer_host/compositor_begin_frame_observer_impl.cc |
| diff --git a/content/browser/renderer_host/compositor_begin_frame_observer_impl.cc b/content/browser/renderer_host/compositor_begin_frame_observer_impl.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..d3eced511ccad7f64f73f1e08e832c3c52b64e1e |
| --- /dev/null |
| +++ b/content/browser/renderer_host/compositor_begin_frame_observer_impl.cc |
| @@ -0,0 +1,73 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "content/browser/renderer_host/compositor_begin_frame_observer_impl.h" |
| + |
| +namespace content { |
| + |
| +CompositorBeginFrameObserverImpl::CompositorBeginFrameObserverImpl( |
| + CompositorBeginFrameObserverImplClient* client) |
| + : needs_begin_frames_(false), |
| + client_(client), |
| + compositor_(nullptr) { |
| +} |
| +CompositorBeginFrameObserverImpl::~CompositorBeginFrameObserverImpl() { |
| +} |
| + |
| +void CompositorBeginFrameObserverImpl::SetNeedsBeginFrames( |
| + bool needs_begin_frames) { |
| + if (needs_begin_frames_ == needs_begin_frames) |
| + return; |
| + |
| + needs_begin_frames_ = needs_begin_frames; |
| + |
| + // In some cases, BeginFrame message is requested before |client_|'s window is |
| + // added in the root window hierarchy. |
| + if (!compositor_) |
| + return; |
| + |
| + if (needs_begin_frames) |
| + StartObservingBeginFrames(); |
| + else |
| + StopObservingBeginFrames(); |
| +} |
| + |
| +void CompositorBeginFrameObserverImpl::SetCompositor( |
| + ui::Compositor* compositor) { |
| + DCHECK(!compositor_); |
| + DCHECK(compositor); |
| + |
| + compositor_ = compositor; |
| + |
|
danakj
2015/03/19 22:36:40
less whitespace?
simonhong
2015/03/20 16:07:36
Done.
|
| + if (needs_begin_frames_) |
| + StartObservingBeginFrames(); |
| +} |
| + |
| +void CompositorBeginFrameObserverImpl::ResetCompositor() { |
| + if (!compositor_) |
| + return; |
| + |
| + if (needs_begin_frames_) |
| + StopObservingBeginFrames(); |
| + |
|
danakj
2015/03/19 22:36:40
dittos
simonhong
2015/03/20 16:07:35
Done.
|
| + compositor_ = nullptr; |
| +} |
| + |
| +void CompositorBeginFrameObserverImpl::OnSendBeginFrame( |
| + const cc::BeginFrameArgs& args) { |
| + client_->SendBeginFrame(args); |
| + last_sent_begin_frame_args_ = args; |
| +} |
| + |
| +void CompositorBeginFrameObserverImpl::StartObservingBeginFrames() { |
| + DCHECK(compositor_); |
| + compositor_->AddBeginFrameObserver(this, last_sent_begin_frame_args_); |
| +} |
| + |
| +void CompositorBeginFrameObserverImpl::StopObservingBeginFrames() { |
| + DCHECK(compositor_); |
| + compositor_->RemoveBeginFrameObserver(this); |
| +} |
| + |
| +} // namespace content |