Index: content/browser/renderer_host/browser_compositor_view_mac.h |
diff --git a/content/browser/renderer_host/browser_compositor_view_mac.h b/content/browser/renderer_host/browser_compositor_view_mac.h |
index 4558e0721dc0225d7c377ca0fc48b3dda4e385be..ca10f25279154f501dab764f0b1b9175f4cb5749 100644 |
--- a/content/browser/renderer_host/browser_compositor_view_mac.h |
+++ b/content/browser/renderer_host/browser_compositor_view_mac.h |
@@ -8,6 +8,7 @@ |
#include <memory> |
#include "base/macros.h" |
+#include "cc/scheduler/begin_frame_source.h" |
#include "content/browser/renderer_host/delegated_frame_host.h" |
#include "ui/compositor/compositor.h" |
#include "ui/compositor/compositor_observer.h" |
@@ -21,6 +22,24 @@ namespace content { |
class RecyclableCompositorMac; |
+class BrowserCompositorMacClient { |
+ public: |
+ virtual NSView* BrowserCompositorMacGetNSView() const = 0; |
+ virtual bool BrowserCompositorMacIsVisible() const = 0; |
+ virtual SkColor BrowserCompositorMacGetGutterColor(SkColor color) const = 0; |
+ virtual void BrowserCompositorMacSendCompositorSwapAck( |
+ int output_surface_id, |
+ const cc::CompositorFrameAck& ack) = 0; |
+ virtual void BrowserCompositorMacSendReclaimCompositorResources( |
+ int output_surface_id, |
+ const cc::CompositorFrameAck& ack) = 0; |
+ virtual void BrowserCompositorMacOnLostCompositorResources() = 0; |
+ virtual void BrowserCompositorMacUpdateVSyncParameters( |
+ const base::TimeTicks& timebase, |
+ const base::TimeDelta& interval) = 0; |
+ virtual void BrowserCompositorMacSendBeginFrame( |
+ const cc::BeginFrameArgs& args) = 0; |
+}; |
// This class owns a DelegatedFrameHost, and will dynamically attach and |
// detach it from a ui::Compositor as needed. The ui::Compositor will be |
@@ -31,23 +50,17 @@ class RecyclableCompositorMac; |
// is visible. |
// - The RenderWidgetHostViewMac that is used to display these frames is |
// attached to the NSView hierarchy of an NSWindow. |
-class BrowserCompositorMac { |
+class BrowserCompositorMac : public cc::BeginFrameObserver, |
+ public DelegatedFrameHostClient { |
public: |
BrowserCompositorMac( |
ui::AcceleratedWidgetMacNSView* accelerated_widget_mac_ns_view, |
- DelegatedFrameHostClient* delegated_frame_host_client, |
+ BrowserCompositorMacClient* client, |
bool render_widget_host_is_hidden, |
bool ns_view_attached_to_window); |
- ~BrowserCompositorMac(); |
- |
- // This must be called before the destructor. |
- // TODO(ccameron): This is because the RWHVMac is still the |
- // DelegatedFrameHostClient. When that is cleaned up, this can be rolled |
- // into the destructor. |
- void Destroy(); |
+ ~BrowserCompositorMac() override; |
// These will not return nullptr until Destroy is called. |
- ui::Layer* GetRootLayer(); |
DelegatedFrameHost* GetDelegatedFrameHost(); |
// This may return nullptr, if this has detached itself from its |
@@ -60,6 +73,7 @@ class BrowserCompositorMac { |
void SetDisplayColorSpace(const gfx::ColorSpace& color_space); |
void UpdateVSyncParameters(const base::TimeTicks& timebase, |
const base::TimeDelta& interval); |
+ void SetNeedsBeginFrames(bool needs_begin_frames); |
// This is used to ensure that the ui::Compositor be attached to the |
// DelegatedFrameHost while the RWHImpl is visible. |
@@ -89,6 +103,32 @@ class BrowserCompositorMac { |
// compositors should be recycled. |
static void DisableRecyclingForShutdown(); |
+ // DelegatedFrameHostClient implementation. |
+ ui::Layer* DelegatedFrameHostGetLayer() const override; |
+ bool DelegatedFrameHostIsVisible() const override; |
+ SkColor DelegatedFrameHostGetGutterColor(SkColor color) const override; |
+ gfx::Size DelegatedFrameHostDesiredSizeInDIP() const override; |
+ bool DelegatedFrameCanCreateResizeLock() const override; |
+ std::unique_ptr<ResizeLock> DelegatedFrameHostCreateResizeLock( |
+ bool defer_compositor_lock) override; |
+ void DelegatedFrameHostResizeLockWasReleased() override; |
+ void DelegatedFrameHostSendCompositorSwapAck( |
+ int output_surface_id, |
+ const cc::CompositorFrameAck& ack) override; |
+ void DelegatedFrameHostSendReclaimCompositorResources( |
+ int output_surface_id, |
+ const cc::CompositorFrameAck& ack) override; |
+ void DelegatedFrameHostOnLostCompositorResources() override; |
+ void DelegatedFrameHostUpdateVSyncParameters( |
+ const base::TimeTicks& timebase, |
+ const base::TimeDelta& interval) override; |
+ void SetBeginFrameSource(cc::BeginFrameSource* source) override; |
+ |
+ // cc::BeginFrameObserver implementation. |
+ void OnBeginFrame(const cc::BeginFrameArgs& args) override; |
+ const cc::BeginFrameArgs& LastUsedBeginFrameArgs() const override; |
+ void OnBeginFrameSourcePausedChanged(bool paused) override; |
+ |
private: |
// The state of |delegated_frame_host_| and |recyclable_compositor_| to |
// manage being visible, hidden, or occluded. |
@@ -139,6 +179,7 @@ class BrowserCompositorMac { |
bool render_widget_host_is_hidden_ = true; |
bool ns_view_attached_to_window_ = false; |
+ BrowserCompositorMacClient* client_ = nullptr; |
ui::AcceleratedWidgetMacNSView* accelerated_widget_mac_ns_view_ = nullptr; |
std::unique_ptr<RecyclableCompositorMac> recyclable_compositor_; |
@@ -147,7 +188,10 @@ class BrowserCompositorMac { |
bool has_transparent_background_ = false; |
- bool has_been_destroyed_ = false; |
+ // The begin frame source being observed. Null if none. |
+ cc::BeginFrameSource* begin_frame_source_ = nullptr; |
+ cc::BeginFrameArgs last_begin_frame_args_; |
+ bool needs_begin_frames_ = false; |
base::WeakPtrFactory<BrowserCompositorMac> weak_factory_; |
}; |