| 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");
|
|
|