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

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

Issue 2197613003: gpu: Introduce GpuChannelEstablishFactory. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 5 months 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 8a60ed12838d8017107585a330d04eb7f0458f8f..77d9f84fcb36d1093c2d7f7f9c0e90e0b7dc907d 100644
--- a/content/browser/compositor/gpu_process_transport_factory.cc
+++ b/content/browser/compositor/gpu_process_transport_factory.cc
@@ -303,33 +303,30 @@ void GpuProcessTransportFactory::CreateOutputSurface(
#endif
const bool use_vulkan = static_cast<bool>(SharedVulkanContextProvider());
- const bool use_mus = IsUsingMus();
const bool create_gpu_output_surface =
ShouldCreateGpuOutputSurface(compositor.get());
if (create_gpu_output_surface && !use_vulkan) {
- base::Closure callback(
+ gpu::GpuChannelEstablishedCallback callback(
base::Bind(&GpuProcessTransportFactory::EstablishedGpuChannel,
callback_factory_.GetWeakPtr(), compositor,
create_gpu_output_surface, 0));
- if (!use_mus) {
+ auto* factory = gpu::GpuChannelEstablishFactory::GetInstance();
+ if (factory) {
+ factory->EstablishGpuChannel(callback);
+ } else {
BrowserGpuChannelHostFactory::instance()->EstablishGpuChannel(
CAUSE_FOR_GPU_LAUNCH_SHARED_WORKER_THREAD_CONTEXT, callback);
- } else {
-#if defined(MOJO_RUNNER_CLIENT)
- ui::GpuService::GetInstance()->EstablishGpuChannel(callback);
-#else
- NOTREACHED();
-#endif
}
} else {
- EstablishedGpuChannel(compositor, create_gpu_output_surface, 0);
+ EstablishedGpuChannel(compositor, create_gpu_output_surface, 0, nullptr);
}
}
void GpuProcessTransportFactory::EstablishedGpuChannel(
base::WeakPtr<ui::Compositor> compositor,
bool create_gpu_output_surface,
- int num_attempts) {
+ int num_attempts,
+ scoped_refptr<gpu::GpuChannelHost> established_channel_host) {
if (!compositor)
return;
@@ -357,7 +354,6 @@ void GpuProcessTransportFactory::EstablishedGpuChannel(
scoped_refptr<cc::VulkanInProcessContextProvider> vulkan_context_provider =
SharedVulkanContextProvider();
- const bool use_mus = IsUsingMus();
scoped_refptr<ContextProviderCommandBuffer> context_provider;
if (create_gpu_output_surface && !vulkan_context_provider) {
// Try to reuse existing worker context provider.
@@ -375,20 +371,8 @@ void GpuProcessTransportFactory::EstablishedGpuChannel(
}
scoped_refptr<gpu::GpuChannelHost> gpu_channel_host;
- if (GpuDataManagerImpl::GetInstance()->CanUseGpuBrowserCompositor()) {
- // We attempted to do EstablishGpuChannel already, so we just use
- // GetGpuChannel() instead of EstablishGpuChannelSync().
- if (!use_mus) {
- gpu_channel_host =
- BrowserGpuChannelHostFactory::instance()->GetGpuChannel();
- } else {
-#if defined(MOJO_RUNNER_CLIENT)
- gpu_channel_host = ui::GpuService::GetInstance()->GetGpuChannel();
-#else
- NOTREACHED();
-#endif
- }
- }
+ if (GpuDataManagerImpl::GetInstance()->CanUseGpuBrowserCompositor())
+ gpu_channel_host = std::move(established_channel_host);
if (!gpu_channel_host) {
shared_worker_context_provider_ = nullptr;
@@ -453,19 +437,17 @@ void GpuProcessTransportFactory::EstablishedGpuChannel(
if (!created_gpu_browser_compositor) {
// Try again.
- base::Closure callback(
+ gpu::GpuChannelEstablishedCallback callback(
base::Bind(&GpuProcessTransportFactory::EstablishedGpuChannel,
callback_factory_.GetWeakPtr(), compositor,
create_gpu_output_surface, num_attempts + 1));
- if (!use_mus) {
+ auto* factory = gpu::GpuChannelEstablishFactory::GetInstance();
+ if (factory) {
+ DCHECK(IsUsingMus());
+ factory->EstablishGpuChannel(callback);
+ } else {
BrowserGpuChannelHostFactory::instance()->EstablishGpuChannel(
CAUSE_FOR_GPU_LAUNCH_SHARED_WORKER_THREAD_CONTEXT, callback);
- } else {
-#if defined(MOJO_RUNNER_CLIENT)
- ui::GpuService::GetInstance()->EstablishGpuChannel(callback);
-#else
- NOTREACHED();
-#endif
}
return;
}
@@ -533,6 +515,7 @@ void GpuProcessTransportFactory::EstablishedGpuChannel(
} else {
std::unique_ptr<display_compositor::CompositorOverlayCandidateValidator>
validator;
+ const bool use_mus = IsUsingMus();
#if !defined(OS_MACOSX)
// Overlays are only supported on surfaceless output surfaces on Mac.
if (!use_mus)
@@ -797,18 +780,14 @@ GpuProcessTransportFactory::SharedMainThreadContextProvider() {
if (!GpuDataManagerImpl::GetInstance()->CanUseGpuBrowserCompositor())
return nullptr;
- const bool use_mus = IsUsingMus();
scoped_refptr<gpu::GpuChannelHost> gpu_channel_host;
- if (!use_mus) {
+ auto* factory = gpu::GpuChannelEstablishFactory::GetInstance();
+ if (factory) {
+ gpu_channel_host = factory->EstablishGpuChannelSync();
+ } else {
gpu_channel_host =
BrowserGpuChannelHostFactory::instance()->EstablishGpuChannelSync(
CAUSE_FOR_GPU_LAUNCH_BROWSER_SHARED_MAIN_THREAD_CONTEXT);
- } else {
-#if defined(MOJO_RUNNER_CLIENT)
- gpu_channel_host = ui::GpuService::GetInstance()->EstablishGpuChannelSync();
-#else
- NOTREACHED();
-#endif
}
if (!gpu_channel_host)

Powered by Google App Engine
This is Rietveld 408576698