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

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

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
Index: content/browser/renderer_host/browser_compositor_view_mac.mm
diff --git a/content/browser/renderer_host/browser_compositor_view_mac.mm b/content/browser/renderer_host/browser_compositor_view_mac.mm
index 1c83ace84b3719eb8889cb4531f9e8249759b9d5..0593c725a0f9c61b3315c9d478838ea4adfd3d5e 100644
--- a/content/browser/renderer_host/browser_compositor_view_mac.mm
+++ b/content/browser/renderer_host/browser_compositor_view_mac.mm
@@ -11,6 +11,7 @@
#include "base/lazy_instance.h"
#include "base/trace_event/trace_event.h"
#include "content/browser/compositor/image_transport_factory.h"
+#include "content/browser/renderer_host/resize_lock.h"
#include "content/public/browser/context_factory.h"
#include "ui/accelerated_widget_mac/accelerated_widget_mac.h"
#include "ui/accelerated_widget_mac/window_resize_helper_mac.h"
@@ -149,33 +150,29 @@ void OnCompositingShuttingDown(ui::Compositor* compositor) override {}
BrowserCompositorMac::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)
- : accelerated_widget_mac_ns_view_(accelerated_widget_mac_ns_view),
+ : client_(client),
+ accelerated_widget_mac_ns_view_(accelerated_widget_mac_ns_view),
weak_factory_(this) {
g_browser_compositor_count += 1;
root_layer_.reset(new ui::Layer(ui::LAYER_SOLID_COLOR));
- delegated_frame_host_.reset(
- new DelegatedFrameHost(delegated_frame_host_client));
+ delegated_frame_host_.reset(new DelegatedFrameHost(this));
SetRenderWidgetHostIsHidden(render_widget_host_is_hidden);
SetNSViewAttachedToWindow(ns_view_attached_to_window);
}
BrowserCompositorMac::~BrowserCompositorMac() {
- DCHECK(has_been_destroyed_);
-}
-
-void BrowserCompositorMac::Destroy() {
- if (has_been_destroyed_)
- return;
+ // Ensure that copy callbacks completed or cancelled during further tear-down
+ // do not call back into this.
+ weak_factory_.InvalidateWeakPtrs();
TransitionToState(HasNoCompositor);
delegated_frame_host_.reset();
root_layer_.reset();
- has_been_destroyed_ = true;
DCHECK_GT(g_browser_compositor_count, 0u);
g_browser_compositor_count -= 1;
@@ -192,10 +189,6 @@ void OnCompositingShuttingDown(ui::Compositor* compositor) override {}
return nullptr;
}
-ui::Layer* BrowserCompositorMac::GetRootLayer() {
- return root_layer_.get();
-}
-
DelegatedFrameHost* BrowserCompositorMac::GetDelegatedFrameHost() {
DCHECK(delegated_frame_host_);
return delegated_frame_host_.get();
@@ -259,8 +252,6 @@ void OnCompositingShuttingDown(ui::Compositor* compositor) override {}
void BrowserCompositorMac::SwapCompositorFrame(uint32_t output_surface_id,
cc::CompositorFrame frame) {
- DCHECK(!has_been_destroyed_);
-
// Compute the frame size based on the root render pass rect size.
cc::RenderPass* root_pass =
frame.delegated_frame_data->render_pass_list.back().get();
@@ -277,7 +268,6 @@ void OnCompositingShuttingDown(ui::Compositor* compositor) override {}
}
void BrowserCompositorMac::SetHasTransparentBackground(bool transparent) {
- DCHECK(!has_been_destroyed_);
has_transparent_background_ = transparent;
if (recyclable_compositor_) {
recyclable_compositor_->compositor()->SetHostHasTransparentBackground(
@@ -294,7 +284,6 @@ void OnCompositingShuttingDown(ui::Compositor* compositor) override {}
void BrowserCompositorMac::UpdateVSyncParameters(
const base::TimeTicks& timebase,
const base::TimeDelta& interval) {
- DCHECK(!has_been_destroyed_);
if (recyclable_compositor_) {
recyclable_compositor_->compositor()
->vsync_manager()
@@ -313,11 +302,6 @@ void OnCompositingShuttingDown(ui::Compositor* compositor) override {}
}
void BrowserCompositorMac::UpdateState() {
- if (has_been_destroyed_) {
- DCHECK(state_ == HasNoCompositor);
- return;
- }
-
if (!render_widget_host_is_hidden_ || outstanding_copy_count_ > 0)
TransitionToState(HasAttachedCompositor);
else if (ns_view_attached_to_window_)
@@ -386,4 +370,105 @@ void OnCompositingShuttingDown(ui::Compositor* compositor) override {}
g_spare_recyclable_compositor.Get().reset();
}
+void BrowserCompositorMac::SetNeedsBeginFrames(bool needs_begin_frames) {
+ if (needs_begin_frames_ == needs_begin_frames)
+ return;
+
+ needs_begin_frames_ = needs_begin_frames;
+ if (begin_frame_source_) {
+ if (needs_begin_frames_)
+ begin_frame_source_->AddObserver(this);
+ else
+ begin_frame_source_->RemoveObserver(this);
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// DelegatedFrameHost, public:
+
+ui::Layer* BrowserCompositorMac::DelegatedFrameHostGetLayer() const {
+ return root_layer_.get();
+}
+
+bool BrowserCompositorMac::DelegatedFrameHostIsVisible() const {
+ // TODO(ccameron): This should return the same value as
+ // |render_widget_host_is_hidden_|, rather than going back to the
+ // RenderWidgetHostImpl.
+ return client_->BrowserCompositorMacIsVisible();
+}
+
+SkColor BrowserCompositorMac::DelegatedFrameHostGetGutterColor(
+ SkColor color) const {
+ return client_->BrowserCompositorMacGetGutterColor(color);
+}
+
+gfx::Size BrowserCompositorMac::DelegatedFrameHostDesiredSizeInDIP() const {
+ NSRect bounds = [client_->BrowserCompositorMacGetNSView() bounds];
+ return gfx::Size(bounds.size.width, bounds.size.height);
+}
+
+bool BrowserCompositorMac::DelegatedFrameCanCreateResizeLock() const {
+ // Mac uses the RenderWidgetResizeHelper instead of a resize lock.
+ return false;
+}
+
+std::unique_ptr<ResizeLock>
+BrowserCompositorMac::DelegatedFrameHostCreateResizeLock(
+ bool defer_compositor_lock) {
+ NOTREACHED();
+ return std::unique_ptr<ResizeLock>();
+}
+
+void BrowserCompositorMac::DelegatedFrameHostResizeLockWasReleased() {
+ NOTREACHED();
+}
+
+void BrowserCompositorMac::DelegatedFrameHostSendCompositorSwapAck(
+ int output_surface_id,
+ const cc::CompositorFrameAck& ack) {
+ client_->BrowserCompositorMacSendCompositorSwapAck(output_surface_id, ack);
+}
+
+void BrowserCompositorMac::DelegatedFrameHostSendReclaimCompositorResources(
+ int output_surface_id,
+ const cc::CompositorFrameAck& ack) {
+ client_->BrowserCompositorMacSendReclaimCompositorResources(output_surface_id,
+ ack);
+}
+
+void BrowserCompositorMac::DelegatedFrameHostOnLostCompositorResources() {
+ client_->BrowserCompositorMacOnLostCompositorResources();
+}
+
+void BrowserCompositorMac::DelegatedFrameHostUpdateVSyncParameters(
+ const base::TimeTicks& timebase,
+ const base::TimeDelta& interval) {
+ client_->BrowserCompositorMacUpdateVSyncParameters(timebase, interval);
+}
+
+void BrowserCompositorMac::SetBeginFrameSource(cc::BeginFrameSource* source) {
+ if (begin_frame_source_ && needs_begin_frames_)
+ begin_frame_source_->RemoveObserver(this);
+ begin_frame_source_ = source;
+ if (begin_frame_source_ && needs_begin_frames_)
+ begin_frame_source_->AddObserver(this);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// cc::BeginFrameSourceBase, public:
+
+void BrowserCompositorMac::OnBeginFrame(const cc::BeginFrameArgs& args) {
+ delegated_frame_host_->SetVSyncParameters(args.frame_time, args.interval);
+ client_->BrowserCompositorMacSendBeginFrame(args);
+ last_begin_frame_args_ = args;
+}
+
+const cc::BeginFrameArgs& BrowserCompositorMac::LastUsedBeginFrameArgs() const {
+ return last_begin_frame_args_;
+}
+
+void BrowserCompositorMac::OnBeginFrameSourcePausedChanged(bool paused) {
+ // Only used on Android WebView.
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698