// 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. #ifndef CONTENT_BROWSER_RENDERER_HOST_BEGIN_FRAME_OBSERVER_PROXY_H_ #define CONTENT_BROWSER_RENDERER_HOST_BEGIN_FRAME_OBSERVER_PROXY_H_ #include "base/macros.h" #include "content/common/content_export.h" #include "ui/compositor/compositor.h" #include "ui/compositor/compositor_observer.h" namespace cc { struct BeginFrameArgs; } namespace content { // This is the interface from the BeginFrameObserverProxy which manages sending // BeginFrame messages. class BeginFrameObserverProxyClient { public: virtual void SendBeginFrame(const cc::BeginFrameArgs& args) = 0; }; // This class is used to manage all of the RenderWidgetHostView state and // functionality that is associated with BeginFrame message handling. class CONTENT_EXPORT BeginFrameObserverProxy : public ui::CompositorBeginFrameObserver, public ui::CompositorObserver { public: explicit BeginFrameObserverProxy(BeginFrameObserverProxyClient* client); ~BeginFrameObserverProxy() override; void SetNeedsBeginFrames(bool needs_begin_frames); void SetCompositor(ui::Compositor* compositor); void ResetCompositor(); // Overridden from ui::CompositorBeginFrameObserver: void OnSendBeginFrame(const cc::BeginFrameArgs& args) override; // Overridden from ui::CompositorObserver: // TODO(simonhong): Stop overriding ui::CompositorObserver. We need to make // sure that this class should be destroyed before ui::Compositor. void OnCompositingDidCommit(ui::Compositor* compositor) override {} void OnCompositingStarted(ui::Compositor* compositor, base::TimeTicks start_time) override {} void OnCompositingEnded(ui::Compositor* compositor) override {} void OnCompositingAborted(ui::Compositor* compositor) override {} void OnCompositingLockStateChanged(ui::Compositor* compositor) override {} void OnCompositingShuttingDown(ui::Compositor* compositor) override; private: void StartObservingBeginFrames(); void StopObservingBeginFrames(); // True when RenderWidget needs a BeginFrame message. bool needs_begin_frames_; // Used whether to send begin frame to client or not. When |args| from // Compositor is different from this, send to client. cc::BeginFrameArgs last_sent_begin_frame_args_; BeginFrameObserverProxyClient* client_; ui::Compositor* compositor_; DISALLOW_COPY_AND_ASSIGN(BeginFrameObserverProxy); }; } // namespace content #endif // CONTENT_BROWSER_RENDERER_HOST_BEGIN_FRAME_OBSERVER_PROXY_H_