Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1970)

Unified Diff: content/browser/renderer_host/browser_compositor_view_mac.h

Issue 2123313002: Mac: Further clean up RWHVMac<->DelegatedFrameHost (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix crash in tryjob Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | content/browser/renderer_host/browser_compositor_view_mac.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_;
};
« no previous file with comments | « no previous file | content/browser/renderer_host/browser_compositor_view_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698