Index: content/browser/compositor/gpu_process_transport_factory.cc |
diff --git a/content/browser/compositor/gpu_process_transport_factory.cc b/content/browser/compositor/gpu_process_transport_factory.cc |
index 7d1cf0c2d283a6620d1de210bc8fc8348d66ee4d..787f053274ac3f9d4e048fc23c62de0bd1796577 100644 |
--- a/content/browser/compositor/gpu_process_transport_factory.cc |
+++ b/content/browser/compositor/gpu_process_transport_factory.cc |
@@ -157,6 +157,13 @@ bool IsCALayersDisabledFromCommandLine() { |
} |
#endif |
+void UpdateVSyncParameters(base::WeakPtr<ui::Compositor> compositor, |
+ base::TimeTicks timebase, |
+ base::TimeDelta interval) { |
+ DCHECK(!!compositor); |
+ compositor->SetDisplayVSyncParameters(timebase, interval); |
+} |
+ |
} // namespace |
namespace content { |
@@ -447,13 +454,15 @@ void GpuProcessTransportFactory::EstablishedGpuChannel( |
compositor->task_runner().get()))); |
} |
+ BrowserCompositorOutputSurface::UpdateVSyncParametersCallback vsync_callback = |
+ base::Bind(&UpdateVSyncParameters, compositor); |
+ |
std::unique_ptr<BrowserCompositorOutputSurface> display_output_surface; |
#if defined(ENABLE_VULKAN) |
std::unique_ptr<VulkanBrowserCompositorOutputSurface> vulkan_surface; |
if (vulkan_context_provider) { |
vulkan_surface.reset(new VulkanBrowserCompositorOutputSurface( |
- vulkan_context_provider, compositor->vsync_manager(), |
- begin_frame_source.get())); |
+ vulkan_context_provider, vsync_callback)); |
if (!vulkan_surface->Initialize(compositor.get()->widget())) { |
vulkan_surface->Destroy(); |
vulkan_surface.reset(); |
@@ -467,8 +476,7 @@ void GpuProcessTransportFactory::EstablishedGpuChannel( |
if (!create_gpu_output_surface) { |
display_output_surface = |
base::MakeUnique<SoftwareBrowserCompositorOutputSurface>( |
- CreateSoftwareOutputDevice(compositor.get()), |
- compositor->vsync_manager(), begin_frame_source.get(), |
+ CreateSoftwareOutputDevice(compositor.get()), vsync_callback, |
compositor->task_runner()); |
} else { |
DCHECK(context_provider); |
@@ -476,22 +484,20 @@ void GpuProcessTransportFactory::EstablishedGpuChannel( |
if (data->surface_handle == gpu::kNullSurfaceHandle) { |
display_output_surface = |
base::MakeUnique<OffscreenBrowserCompositorOutputSurface>( |
- context_provider, compositor->vsync_manager(), |
- begin_frame_source.get(), |
+ context_provider, vsync_callback, |
std::unique_ptr< |
display_compositor::CompositorOverlayCandidateValidator>()); |
} else if (capabilities.surfaceless) { |
#if defined(OS_MACOSX) |
display_output_surface = base::MakeUnique<GpuOutputSurfaceMac>( |
compositor->widget(), context_provider, data->surface_handle, |
- compositor->vsync_manager(), begin_frame_source.get(), |
+ vsync_callback, |
CreateOverlayCandidateValidator(compositor->widget()), |
GetGpuMemoryBufferManager()); |
#else |
display_output_surface = |
base::MakeUnique<GpuSurfacelessBrowserCompositorOutputSurface>( |
- context_provider, data->surface_handle, |
- compositor->vsync_manager(), begin_frame_source.get(), |
+ context_provider, data->surface_handle, vsync_callback, |
CreateOverlayCandidateValidator(compositor->widget()), |
GL_TEXTURE_2D, GL_RGB, ui::DisplaySnapshot::PrimaryFormat(), |
GetGpuMemoryBufferManager()); |
@@ -508,8 +514,7 @@ void GpuProcessTransportFactory::EstablishedGpuChannel( |
if (!use_mus) { |
display_output_surface = |
base::MakeUnique<GpuBrowserCompositorOutputSurface>( |
- context_provider, compositor->vsync_manager(), |
- begin_frame_source.get(), std::move(validator)); |
+ context_provider, vsync_callback, std::move(validator)); |
} else { |
#if defined(USE_AURA) |
if (compositor->window()) { |
@@ -518,8 +523,8 @@ void GpuProcessTransportFactory::EstablishedGpuChannel( |
display_output_surface = |
base::MakeUnique<MusBrowserCompositorOutputSurface>( |
compositor->window(), context_provider, |
- GetGpuMemoryBufferManager(), compositor->vsync_manager(), |
- begin_frame_source.get(), std::move(validator)); |
+ GetGpuMemoryBufferManager(), vsync_callback, |
+ std::move(validator)); |
} else { |
aura::WindowTreeHost* host = |
aura::WindowTreeHost::GetForAcceleratedWidget( |
@@ -527,8 +532,8 @@ void GpuProcessTransportFactory::EstablishedGpuChannel( |
display_output_surface = |
base::MakeUnique<MusBrowserCompositorOutputSurface>( |
host->window(), context_provider, |
- GetGpuMemoryBufferManager(), compositor->vsync_manager(), |
- begin_frame_source.get(), std::move(validator)); |
+ GetGpuMemoryBufferManager(), vsync_callback, |
+ std::move(validator)); |
} |
#else |
NOTREACHED(); |
@@ -614,6 +619,7 @@ void GpuProcessTransportFactory::RemoveCompositor(ui::Compositor* compositor) { |
if (data->surface_handle) |
gpu::GpuSurfaceTracker::Get()->RemoveSurface(data->surface_handle); |
#endif |
+ |
per_compositor_data_.erase(it); |
if (per_compositor_data_.empty()) { |
// Destroying the GLHelper may cause some async actions to be cancelled, |