Index: content/renderer/android/synchronous_compositor_output_surface.cc |
diff --git a/content/renderer/android/synchronous_compositor_output_surface.cc b/content/renderer/android/synchronous_compositor_output_surface.cc |
index 7919e83ab878b30f6e8019809ec86b2974d74fd5..f0445322b2bc0712c4c348b2cd9b1ffab4f8b39c 100644 |
--- a/content/renderer/android/synchronous_compositor_output_surface.cc |
+++ b/content/renderer/android/synchronous_compositor_output_surface.cc |
@@ -198,11 +198,10 @@ void SynchronousCompositorOutputSurface::SwapBuffers( |
DCHECK(sync_client_); |
if (fallback_tick_running_) { |
- client_->DidSwapBuffers(); |
- client_->DidSwapBuffersComplete(); |
DCHECK(frame.delegated_frame_data->resource_list.empty()); |
cc::ReturnedResourceArray return_resources; |
ReturnResources(return_resources); |
+ did_swap_ = true; |
return; |
} |
@@ -236,7 +235,6 @@ void SynchronousCompositorOutputSurface::SwapBuffers( |
sync_client_->SwapBuffers(output_surface_id_, std::move(swap_frame)); |
DeliverMessages(); |
- client_->DidSwapBuffers(); |
did_swap_ = true; |
} |
@@ -333,8 +331,12 @@ void SynchronousCompositorOutputSurface::InvokeComposite( |
did_swap_ = false; |
client_->OnDraw(adjusted_transform, viewport, clip, in_software_draw_); |
- if (did_swap_) |
+ if (did_swap_) { |
+ // This must happen after unwinding the stack and leaving the compositor. |
+ // Usually it is a separate task but we just defer it until OnDraw completes |
+ // instead. |
client_->DidSwapBuffersComplete(); |
+ } |
} |
void SynchronousCompositorOutputSurface::OnReclaimResources( |