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

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

Issue 2156333002: Mac: Clean up visibility state tracking (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2785
Patch Set: 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 | « cc/surfaces/surface_factory.cc ('k') | 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 552a56bacb0994a10b2a330350bd22cd677fc262..5dbc75a2a6585c2c06c434c75409cf90ec3d854c 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,23 @@ namespace content {
class RecyclableCompositorMac;
+class BrowserCompositorMacClient {
+ public:
+ virtual NSView* BrowserCompositorMacGetNSView() 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 +49,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
@@ -59,6 +71,7 @@ class BrowserCompositorMac {
void SetHasTransparentBackground(bool transparent);
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.
@@ -88,6 +101,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.
@@ -138,6 +177,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_;
@@ -146,7 +186,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 | « cc/surfaces/surface_factory.cc ('k') | content/browser/renderer_host/browser_compositor_view_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698