 Chromium Code Reviews
 Chromium Code Reviews Issue 1000503002:
  Add BeginFrameObserverProxy  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master
    
  
    Issue 1000503002:
  Add BeginFrameObserverProxy  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master| 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..46287ec1fa301ed4679404b37ff08956f5b6c26a | 
| --- /dev/null | 
| +++ b/content/browser/renderer_host/compositor_begin_frame_observer_impl.cc | 
| @@ -0,0 +1,72 @@ | 
| +// 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; | 
| + if (needs_begin_frames_) | 
| + StartObservingBeginFrames(); | 
| +} | 
| + | 
| +void CompositorBeginFrameObserverImpl::ResetCompositor() { | 
| + if (!compositor_) | 
| + return; | 
| + | 
| + if (needs_begin_frames_) | 
| + StopObservingBeginFrames(); | 
| + compositor_ = nullptr; | 
| +} | 
| + | 
| +void CompositorBeginFrameObserverImpl::OnSendBeginFrame( | 
| + const cc::BeginFrameArgs& args) { | 
| + if (last_sent_begin_frame_args_.frame_time != args.frame_time) | 
| 
danakj
2015/03/20 16:46:11
Ya this is what I mean :)
 | 
| + client_->SendBeginFrame(args); | 
| + last_sent_begin_frame_args_ = args; | 
| +} | 
| + | 
| +void CompositorBeginFrameObserverImpl::StartObservingBeginFrames() { | 
| + DCHECK(compositor_); | 
| + compositor_->AddBeginFrameObserver(this); | 
| +} | 
| + | 
| +void CompositorBeginFrameObserverImpl::StopObservingBeginFrames() { | 
| + DCHECK(compositor_); | 
| + compositor_->RemoveBeginFrameObserver(this); | 
| +} | 
| + | 
| +} // namespace content |