Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1878)

Unified Diff: content/browser/compositor/gpu_process_transport_factory.cc

Issue 2511273002: Decouple BrowserCompositorOutputSurface from BeginFrameSource. (Closed)
Patch Set: Fixed unit tests Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..82cc8a8fcf3a7d0dc0c5c85dd9412fcfe21e4134 100644
--- a/content/browser/compositor/gpu_process_transport_factory.cc
+++ b/content/browser/compositor/gpu_process_transport_factory.cc
@@ -52,6 +52,7 @@
#include "ui/compositor/compositor.h"
#include "ui/compositor/compositor_constants.h"
#include "ui/compositor/compositor_switches.h"
+#include "ui/compositor/compositor_vsync_manager.h"
#include "ui/compositor/layer.h"
#include "ui/display/types/display_snapshot.h"
#include "ui/gfx/geometry/size.h"
@@ -447,13 +448,16 @@ void GpuProcessTransportFactory::EstablishedGpuChannel(
compositor->task_runner().get())));
}
+ BrowserCompositorOutputSurface::UpdateVSyncParametersCallback vsync_callback =
+ base::Bind(&GpuProcessTransportFactory::UpdateVSyncParametersFromGpu,
+ base::Unretained(this), 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 +471,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 +479,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 +509,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 +518,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 +527,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 +614,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,
@@ -727,6 +728,17 @@ void GpuProcessTransportFactory::SetDisplayVSyncParameters(
data->begin_frame_source->OnUpdateVSyncParameters(timebase, interval);
}
+void GpuProcessTransportFactory::UpdateVSyncParametersFromGpu(
+ base::WeakPtr<ui::Compositor> compositor,
+ base::TimeTicks timebase,
+ base::TimeDelta interval) {
+ if (!compositor)
+ return;
+
+ SetDisplayVSyncParameters(compositor.get(), timebase, interval);
enne (OOO) 2016/11/29 21:25:03 I think UpdateVSyncParametersFromGPU and SetDispla
stanisc 2016/11/29 21:38:44 I tried binding SetDisplayVSyncParameters directly
+ compositor->vsync_manager()->UpdateVSyncParameters(timebase, interval);
+}
+
void GpuProcessTransportFactory::SetOutputIsSecure(ui::Compositor* compositor,
bool secure) {
PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor);

Powered by Google App Engine
This is Rietveld 408576698