Index: content/browser/frame_host/render_widget_host_view_guest.cc |
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 2df2d5606cb8f5619d4082ca527f16c2ed1ee5a6..6282765c88fbdf6c7b05dd4c9097193ef48cded5 100644 |
--- a/content/browser/frame_host/render_widget_host_view_guest.cc |
+++ b/content/browser/frame_host/render_widget_host_view_guest.cc |
@@ -300,10 +300,22 @@ void RenderWidgetHostViewGuest::OnSwapCompositorFrame( |
current_surface_scale_factor_ = scale_factor; |
} |
+ bool was_null = false; |
if (!local_frame_id_.is_valid()) { |
local_frame_id_ = id_allocator_->GenerateId(); |
- surface_factory_->Create(local_frame_id_); |
+ was_null = true; |
+ } |
+ |
+ cc::SurfaceFactory::DrawCallback ack_callback = base::Bind( |
+ &RenderWidgetHostViewChildFrame::SurfaceDrawn, |
+ RenderWidgetHostViewChildFrame::AsWeakPtr(), compositor_frame_sink_id); |
+ ack_pending_count_++; |
+ // If this value grows very large, something is going wrong. |
+ DCHECK(ack_pending_count_ < 1000); |
+ surface_factory_->SubmitCompositorFrame(local_frame_id_, std::move(frame), |
+ ack_callback); |
+ if (was_null) { |
cc::SurfaceSequence sequence = |
cc::SurfaceSequence(frame_sink_id_, next_surface_sequence_++); |
// The renderer process will satisfy this dependency when it creates a |
@@ -320,16 +332,6 @@ void RenderWidgetHostViewGuest::OnSwapCompositorFrame( |
sequence); |
} |
} |
- |
- cc::SurfaceFactory::DrawCallback ack_callback = base::Bind( |
- &RenderWidgetHostViewChildFrame::SurfaceDrawn, |
- RenderWidgetHostViewChildFrame::AsWeakPtr(), compositor_frame_sink_id); |
- ack_pending_count_++; |
- // If this value grows very large, something is going wrong. |
- DCHECK(ack_pending_count_ < 1000); |
- surface_factory_->SubmitCompositorFrame(local_frame_id_, std::move(frame), |
- ack_callback); |
- |
ProcessFrameSwappedCallbacks(); |
// If after detaching we are sent a frame, we should finish processing it, and |