| 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) {
|
|
|