diff options
-rw-r--r-- | content/browser/frame_host/render_widget_host_view_guest.cc | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/content/browser/frame_host/render_widget_host_view_guest.cc b/content/browser/frame_host/render_widget_host_view_guest.cc index 6d4a181..9240afb 100644 --- a/content/browser/frame_host/render_widget_host_view_guest.cc +++ b/content/browser/frame_host/render_widget_host_view_guest.cc @@ -234,12 +234,6 @@ void RenderWidgetHostViewGuest::SetTooltipText( void RenderWidgetHostViewGuest::OnSwapCompositorFrame( uint32_t output_surface_id, scoped_ptr<cc::CompositorFrame> frame) { - if (!guest_ || !guest_->attached()) { - // We shouldn't hang on to a surface while we are detached. - ClearCompositorSurfaceIfNecessary(); - return; - } - last_scroll_offset_ = frame->metadata.root_scroll_offset; // When not using surfaces, the frame just gets proxied to // the embedder's renderer to be composited. @@ -298,6 +292,11 @@ void RenderWidgetHostViewGuest::OnSwapCompositorFrame( DCHECK(ack_pending_count_ < 1000); surface_factory_->SubmitCompositorFrame(surface_id_, std::move(frame), ack_callback); + // If after detaching we are sent a frame, we should finish processing it, and + // then we should clear the surface so that we are not holding resources we + // no longer need. + if (!guest_ || !guest_->attached()) + ClearCompositorSurfaceIfNecessary(); } bool RenderWidgetHostViewGuest::OnMessageReceived(const IPC::Message& msg) { |