| 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 0a2423a7af0d520294d5555a91d403d643eff175..8511ff2d92dc3fb40f9329f8113432d3d632f15a 100644
|
| --- a/content/browser/compositor/gpu_process_transport_factory.cc
|
| +++ b/content/browser/compositor/gpu_process_transport_factory.cc
|
| @@ -39,7 +39,6 @@
|
| #include "content/browser/compositor/reflector_impl.h"
|
| #include "content/browser/compositor/software_browser_compositor_output_surface.h"
|
| #include "content/browser/compositor/software_output_device_mus.h"
|
| -#include "content/browser/gpu/browser_gpu_channel_host_factory.h"
|
| #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h"
|
| #include "content/browser/gpu/gpu_data_manager_impl.h"
|
| #include "content/browser/renderer_host/render_widget_host_impl.h"
|
| @@ -51,6 +50,7 @@
|
| #include "gpu/command_buffer/client/shared_memory_limits.h"
|
| #include "gpu/command_buffer/common/mailbox.h"
|
| #include "gpu/ipc/client/gpu_channel_host.h"
|
| +#include "services/shell/runner/common/client_util.h"
|
| #include "third_party/khronos/GLES2/gl2.h"
|
| #include "ui/compositor/compositor.h"
|
| #include "ui/compositor/compositor_constants.h"
|
| @@ -58,10 +58,9 @@
|
| #include "ui/compositor/layer.h"
|
| #include "ui/gfx/geometry/size.h"
|
|
|
| -#if defined(MOJO_RUNNER_CLIENT)
|
| +#if defined(USE_AURA)
|
| #include "content/browser/compositor/mus_browser_compositor_output_surface.h"
|
| #include "content/public/common/mojo_shell_connection.h"
|
| -#include "services/shell/runner/common/client_util.h"
|
| #include "services/ui/common/gpu_service.h"
|
| #endif
|
|
|
| @@ -104,11 +103,7 @@ namespace {
|
| const int kNumRetriesBeforeSoftwareFallback = 4;
|
|
|
| bool IsUsingMus() {
|
| -#if defined(MOJO_RUNNER_CLIENT)
|
| return shell::ShellIsRemote();
|
| -#else
|
| - return false;
|
| -#endif
|
| }
|
|
|
| scoped_refptr<content::ContextProviderCommandBuffer> CreateContextCommon(
|
| @@ -205,7 +200,7 @@ GpuProcessTransportFactory::~GpuProcessTransportFactory() {
|
| std::unique_ptr<cc::SoftwareOutputDevice>
|
| GpuProcessTransportFactory::CreateSoftwareOutputDevice(
|
| ui::Compositor* compositor) {
|
| -#if defined(MOJO_RUNNER_CLIENT)
|
| +#if defined(USE_AURA)
|
| if (shell::ShellIsRemote()) {
|
| return std::unique_ptr<cc::SoftwareOutputDevice>(
|
| new SoftwareOutputDeviceMus(compositor));
|
| @@ -302,32 +297,25 @@ 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) {
|
| - BrowserGpuChannelHostFactory::instance()->EstablishGpuChannel(callback);
|
| - } else {
|
| -#if defined(MOJO_RUNNER_CLIENT)
|
| - ui::GpuService::GetInstance()->EstablishGpuChannel(callback);
|
| -#else
|
| - NOTREACHED();
|
| -#endif
|
| - }
|
| + DCHECK(gpu_channel_factory_);
|
| + gpu_channel_factory_->EstablishGpuChannel(callback);
|
| } 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;
|
|
|
| @@ -355,7 +343,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.
|
| @@ -373,20 +360,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;
|
| @@ -451,19 +426,12 @@ 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) {
|
| - BrowserGpuChannelHostFactory::instance()->EstablishGpuChannel(callback);
|
| - } else {
|
| -#if defined(MOJO_RUNNER_CLIENT)
|
| - ui::GpuService::GetInstance()->EstablishGpuChannel(callback);
|
| -#else
|
| - NOTREACHED();
|
| -#endif
|
| - }
|
| + DCHECK(gpu_channel_factory_);
|
| + gpu_channel_factory_->EstablishGpuChannel(callback);
|
| return;
|
| }
|
| }
|
| @@ -530,6 +498,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)
|
| @@ -541,7 +510,7 @@ void GpuProcessTransportFactory::EstablishedGpuChannel(
|
| context_provider, compositor->vsync_manager(),
|
| begin_frame_source.get(), std::move(validator)));
|
| } else {
|
| -#if defined(MOJO_RUNNER_CLIENT)
|
| +#if defined(USE_AURA)
|
| display_output_surface =
|
| base::WrapUnique(new MusBrowserCompositorOutputSurface(
|
| data->surface_handle, context_provider,
|
| @@ -772,6 +741,12 @@ display_compositor::GLHelper* GpuProcessTransportFactory::GetGLHelper() {
|
| return gl_helper_.get();
|
| }
|
|
|
| +void GpuProcessTransportFactory::SetGpuChannelEstablishFactory(
|
| + gpu::GpuChannelEstablishFactory* factory) {
|
| + DCHECK(!gpu_channel_factory_ || !factory);
|
| + gpu_channel_factory_ = factory;
|
| +}
|
| +
|
| #if defined(OS_MACOSX)
|
| void GpuProcessTransportFactory::SetCompositorSuspendedForRecycle(
|
| ui::Compositor* compositor,
|
| @@ -794,19 +769,9 @@ GpuProcessTransportFactory::SharedMainThreadContextProvider() {
|
| if (!GpuDataManagerImpl::GetInstance()->CanUseGpuBrowserCompositor())
|
| return nullptr;
|
|
|
| - const bool use_mus = IsUsingMus();
|
| - scoped_refptr<gpu::GpuChannelHost> gpu_channel_host;
|
| - if (!use_mus) {
|
| - gpu_channel_host =
|
| - BrowserGpuChannelHostFactory::instance()->EstablishGpuChannelSync();
|
| - } else {
|
| -#if defined(MOJO_RUNNER_CLIENT)
|
| - gpu_channel_host = ui::GpuService::GetInstance()->EstablishGpuChannelSync();
|
| -#else
|
| - NOTREACHED();
|
| -#endif
|
| - }
|
| -
|
| + DCHECK(gpu_channel_factory_);
|
| + scoped_refptr<gpu::GpuChannelHost> gpu_channel_host =
|
| + gpu_channel_factory_->EstablishGpuChannelSync();
|
| if (!gpu_channel_host)
|
| return nullptr;
|
|
|
|
|