Index: content/browser/frame_host/render_widget_host_view_child_frame.cc |
diff --git a/content/browser/frame_host/render_widget_host_view_child_frame.cc b/content/browser/frame_host/render_widget_host_view_child_frame.cc |
index e960e39f4a6278c5fb0a12834dc9c846f2e143dc..1453acb03deefaa213af67284da295b01b33d041 100644 |
--- a/content/browser/frame_host/render_widget_host_view_child_frame.cc |
+++ b/content/browser/frame_host/render_widget_host_view_child_frame.cc |
@@ -69,9 +69,7 @@ RenderWidgetHostViewChildFrame::RenderWidgetHostViewChildFrame( |
} |
RenderWidgetHostViewChildFrame::~RenderWidgetHostViewChildFrame() { |
- if (local_frame_id_.is_valid()) |
- surface_factory_->Destroy(local_frame_id_); |
- |
+ surface_factory_->EvictSurface(); |
if (GetSurfaceManager()) |
GetSurfaceManager()->InvalidateFrameSinkId(frame_sink_id_); |
} |
@@ -400,10 +398,22 @@ void RenderWidgetHostViewChildFrame::OnSwapCompositorFrame( |
current_surface_scale_factor_ = scale_factor; |
} |
+ bool allocated_new_local_frame_id = false; |
if (!local_frame_id_.is_valid()) { |
local_frame_id_ = id_allocator_->GenerateId(); |
- surface_factory_->Create(local_frame_id_); |
+ allocated_new_local_frame_id = true; |
+ } |
+ |
+ cc::SurfaceFactory::DrawCallback ack_callback = |
+ base::Bind(&RenderWidgetHostViewChildFrame::SurfaceDrawn, AsWeakPtr(), |
+ compositor_frame_sink_id); |
+ ack_pending_count_++; |
+ // If this value grows very large, something is going wrong. |
+ DCHECK_LT(ack_pending_count_, 1000U); |
+ surface_factory_->SubmitCompositorFrame(local_frame_id_, std::move(frame), |
+ ack_callback); |
+ if (allocated_new_local_frame_id) { |
cc::SurfaceSequence sequence = |
cc::SurfaceSequence(frame_sink_id_, next_surface_sequence_++); |
// The renderer process will satisfy this dependency when it creates a |
@@ -415,16 +425,6 @@ void RenderWidgetHostViewChildFrame::OnSwapCompositorFrame( |
cc::SurfaceId(frame_sink_id_, local_frame_id_), frame_size, |
scale_factor, sequence); |
} |
- |
- cc::SurfaceFactory::DrawCallback ack_callback = |
- base::Bind(&RenderWidgetHostViewChildFrame::SurfaceDrawn, AsWeakPtr(), |
- compositor_frame_sink_id); |
- ack_pending_count_++; |
- // If this value grows very large, something is going wrong. |
- DCHECK_LT(ack_pending_count_, 1000U); |
- surface_factory_->SubmitCompositorFrame(local_frame_id_, std::move(frame), |
- ack_callback); |
- |
ProcessFrameSwappedCallbacks(); |
} |
@@ -619,7 +619,7 @@ void RenderWidgetHostViewChildFrame::SubmitSurfaceCopyRequest( |
if (!src_subrect.IsEmpty()) |
request->set_area(src_subrect); |
- surface_factory_->RequestCopyOfSurface(local_frame_id_, std::move(request)); |
+ surface_factory_->RequestCopyOfSurface(std::move(request)); |
} |
void RenderWidgetHostViewChildFrame::CopyFromCompositingSurfaceToVideoFrame( |
@@ -726,8 +726,7 @@ RenderWidgetHostViewChildFrame::CreateBrowserAccessibilityManager( |
} |
void RenderWidgetHostViewChildFrame::ClearCompositorSurfaceIfNecessary() { |
- if (local_frame_id_.is_valid()) |
- surface_factory_->Destroy(local_frame_id_); |
+ surface_factory_->EvictSurface(); |
local_frame_id_ = cc::LocalFrameId(); |
} |