summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content/browser/frame_host/render_widget_host_view_guest.cc11
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) {