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

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

Issue 853883007: Add occlusion support to WebContentsImpl and RenderWidgetHostView (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove mac comment Created 5 years, 11 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/render_widget_host_view_mac.mm
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index e7c3b7fe24e1ce751e2018550b033a2635477b45..130084f31238c5d1c2e5dd174ad349e101d81468 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -597,8 +597,6 @@ void RenderWidgetHostViewMac::EnsureBrowserCompositorView() {
// Create the view, to transition from Destroyed -> Suspended.
if (browser_compositor_state_ == BrowserCompositorDestroyed) {
browser_compositor_ = BrowserCompositorMac::Create();
- browser_compositor_->compositor()->SetRootLayer(
- root_layer_.get());
browser_compositor_->accelerated_widget_mac()->SetNSView(this);
browser_compositor_state_ = BrowserCompositorSuspended;
}
@@ -607,6 +605,8 @@ void RenderWidgetHostViewMac::EnsureBrowserCompositorView() {
if (browser_compositor_state_ == BrowserCompositorSuspended) {
delegated_frame_host_->AddedToWindow();
delegated_frame_host_->WasShown(ui::LatencyInfo());
+ browser_compositor_->compositor()->SetRootLayer(
+ root_layer_.get());
browser_compositor_state_ = BrowserCompositorActive;
}
}
@@ -617,6 +617,9 @@ void RenderWidgetHostViewMac::SuspendBrowserCompositorView() {
// Hide the DelegatedFrameHost to transition from Active -> Suspended.
if (browser_compositor_state_ == BrowserCompositorActive) {
+ // Disconnect the root layer, which will prevent the compositor from
+ // producing more frames.
+ browser_compositor_->compositor()->SetRootLayer(nullptr);
// Marking the DelegatedFrameHost as removed from the window hierarchy is
// necessary to remove all connections to its old ui::Compositor.
delegated_frame_host_->WasHidden();
@@ -636,7 +639,6 @@ void RenderWidgetHostViewMac::DestroyBrowserCompositorView() {
if (browser_compositor_state_ == BrowserCompositorSuspended) {
browser_compositor_->accelerated_widget_mac()->ResetNSView();
browser_compositor_->compositor()->SetScaleAndSize(1.0, gfx::Size(0, 0));
- browser_compositor_->compositor()->SetRootLayer(NULL);
BrowserCompositorMac::Recycle(browser_compositor_.Pass());
browser_compositor_state_ = BrowserCompositorDestroyed;
}
@@ -823,16 +825,10 @@ RenderWidgetHost* RenderWidgetHostViewMac::GetRenderWidgetHost() const {
void RenderWidgetHostViewMac::Show() {
[cocoa_view_ setHidden:NO];
-
if (!render_widget_host_->is_hidden())
return;
- ui::LatencyInfo renderer_latency_info;
- renderer_latency_info.AddLatencyNumber(
- ui::TAB_SHOW_COMPONENT,
- render_widget_host_->GetLatencyComponentId(),
- 0);
- render_widget_host_->WasShown(renderer_latency_info);
+ WasUnOccluded();
// If there is not a frame being currently drawn, kick one, so that the below
// pause will have a frame to wait on.
@@ -842,16 +838,28 @@ void RenderWidgetHostViewMac::Show() {
void RenderWidgetHostViewMac::Hide() {
[cocoa_view_ setHidden:YES];
+ WasOccluded();
+ DestroySuspendedBrowserCompositorViewIfNeeded();
+}
+void RenderWidgetHostViewMac::WasUnOccluded() {
+ if (!render_widget_host_->is_hidden())
+ return;
+
+ ui::LatencyInfo renderer_latency_info;
+ renderer_latency_info.AddLatencyNumber(
+ ui::TAB_SHOW_COMPONENT,
+ render_widget_host_->GetLatencyComponentId(),
+ 0);
+ render_widget_host_->WasShown(renderer_latency_info);
+}
+
+void RenderWidgetHostViewMac::WasOccluded() {
if (render_widget_host_->is_hidden())
return;
- // If we have a renderer, then inform it that we are being hidden so it can
- // reduce its resource utilization.
render_widget_host_->WasHidden();
-
SuspendBrowserCompositorView();
- DestroySuspendedBrowserCompositorViewIfNeeded();
}
void RenderWidgetHostViewMac::SetSize(const gfx::Size& size) {
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_mac.h ('k') | content/browser/web_contents/web_contents_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698