Index: content/browser/renderer_host/compositor_impl_android.cc |
diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc |
index 0b24d8730da65bbc7d1303c43ff393db2eaabe62..032239f506d355024d1abcbbaaac0c30bc45ea85 100644 |
--- a/content/browser/renderer_host/compositor_impl_android.cc |
+++ b/content/browser/renderer_host/compositor_impl_android.cc |
@@ -208,9 +208,11 @@ void CreateContextProviderAfterGpuChannelEstablished( |
class AndroidOutputSurface : public cc::OutputSurface { |
public: |
- explicit AndroidOutputSurface( |
- scoped_refptr<ui::ContextProviderCommandBuffer> context_provider) |
+ AndroidOutputSurface( |
+ scoped_refptr<ui::ContextProviderCommandBuffer> context_provider, |
+ base::Closure swap_buffers_callback) |
: cc::OutputSurface(std::move(context_provider)), |
+ swap_buffers_callback_(std::move(swap_buffers_callback)), |
overlay_candidate_validator_( |
new display_compositor:: |
CompositorOverlayCandidateValidatorAndroid()), |
@@ -292,10 +294,12 @@ class AndroidOutputSurface : public cc::OutputSurface { |
const gpu::GpuProcessHostedCALayerTreeParamsMac* params_mac) { |
RenderWidgetHostImpl::CompositorFrameDrawn(latency_info); |
client_->DidReceiveSwapBuffersAck(); |
+ swap_buffers_callback_.Run(); |
} |
private: |
cc::OutputSurfaceClient* client_ = nullptr; |
+ base::Closure swap_buffers_callback_; |
std::unique_ptr<cc::OverlayCandidateValidator> overlay_candidate_validator_; |
base::WeakPtrFactory<AndroidOutputSurface> weak_ptr_factory_; |
}; |
@@ -718,8 +722,10 @@ void CompositorImpl::OnGpuChannelEstablished( |
HandlePendingCompositorFrameSinkRequest(); |
} |
- auto display_output_surface = |
- base::MakeUnique<AndroidOutputSurface>(context_provider); |
+ // Unretained is safe this owns cc::Display which owns OutputSurface. |
+ auto display_output_surface = base::MakeUnique<AndroidOutputSurface>( |
+ context_provider, |
+ base::Bind(&CompositorImpl::DidSwapBuffers, base::Unretained(this))); |
InitializeDisplay(std::move(display_output_surface), nullptr, |
std::move(context_provider)); |
} |
@@ -767,6 +773,10 @@ void CompositorImpl::InitializeDisplay( |
host_->SetCompositorFrameSink(std::move(compositor_frame_sink)); |
} |
+void CompositorImpl::DidSwapBuffers() { |
+ client_->DidSwapBuffers(); |
+} |
+ |
cc::UIResourceId CompositorImpl::CreateUIResource( |
cc::UIResourceClient* client) { |
TRACE_EVENT0("compositor", "CompositorImpl::CreateUIResource"); |