diff options
Diffstat (limited to 'chromium/components/viz/service/display_embedder/output_surface_provider_impl.cc')
-rw-r--r-- | chromium/components/viz/service/display_embedder/output_surface_provider_impl.cc | 119 |
1 files changed, 7 insertions, 112 deletions
diff --git a/chromium/components/viz/service/display_embedder/output_surface_provider_impl.cc b/chromium/components/viz/service/display_embedder/output_surface_provider_impl.cc index 8a277c6337d..85857907957 100644 --- a/chromium/components/viz/service/display_embedder/output_surface_provider_impl.cc +++ b/chromium/components/viz/service/display_embedder/output_surface_provider_impl.cc @@ -20,37 +20,21 @@ #include "components/viz/common/display/renderer_settings.h" #include "components/viz/common/frame_sinks/begin_frame_source.h" #include "components/viz/service/display/display_compositor_memory_and_task_controller.h" -#include "components/viz/service/display_embedder/gl_output_surface.h" -#include "components/viz/service/display_embedder/gl_output_surface_buffer_queue.h" -#include "components/viz/service/display_embedder/gl_output_surface_offscreen.h" #include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/display_embedder/skia_output_surface_dependency_impl.h" #include "components/viz/service/display_embedder/skia_output_surface_impl.h" #include "components/viz/service/display_embedder/software_output_surface.h" -#include "components/viz/service/display_embedder/viz_process_context_provider.h" #include "components/viz/service/gl/gpu_service_impl.h" -#include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" #include "gpu/command_buffer/client/shared_memory_limits.h" -#include "gpu/command_buffer/service/image_factory.h" -#include "gpu/command_buffer/service/mailbox_manager_factory.h" #include "gpu/config/gpu_finch_features.h" -#include "gpu/ipc/command_buffer_task_executor.h" #include "gpu/ipc/common/surface_handle.h" #include "gpu/ipc/scheduler_sequence.h" -#include "gpu/ipc/service/gpu_channel_manager_delegate.h" -#include "gpu/ipc/service/image_transport_surface.h" #include "ui/base/ui_base_switches.h" -#include "ui/gl/gl_context.h" -#include "ui/gl/init/gl_factory.h" #if BUILDFLAG(IS_WIN) #include "components/viz/service/display_embedder/software_output_device_win.h" #endif -#if BUILDFLAG(IS_ANDROID) -#include "components/viz/service/display_embedder/gl_output_surface_android.h" -#endif - #if BUILDFLAG(IS_APPLE) #include "components/viz/service/display_embedder/software_output_device_mac.h" #include "ui/base/cocoa/remote_layer_api.h" @@ -66,7 +50,6 @@ #endif #if BUILDFLAG(IS_CHROMEOS_ASH) -#include "components/viz/service/display_embedder/gl_output_surface_chromeos.h" #include "components/viz/service/display_embedder/output_surface_unified.h" #endif @@ -74,26 +57,14 @@ namespace viz { OutputSurfaceProviderImpl::OutputSurfaceProviderImpl( GpuServiceImpl* gpu_service_impl, - gpu::CommandBufferTaskExecutor* task_executor, - gpu::GpuChannelManagerDelegate* gpu_channel_manager_delegate, - gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, - gpu::ImageFactory* image_factory, bool headless) : gpu_service_impl_(gpu_service_impl), - task_executor_(task_executor), - gpu_channel_manager_delegate_(gpu_channel_manager_delegate), - gpu_memory_buffer_manager_(gpu_memory_buffer_manager), - image_factory_(image_factory), task_runner_(base::ThreadTaskRunnerHandle::Get()), headless_(headless) {} OutputSurfaceProviderImpl::OutputSurfaceProviderImpl(bool headless) : OutputSurfaceProviderImpl( /*gpu_service_impl=*/nullptr, - /*task_executor=*/nullptr, - /*gpu_channel_manager_delegate=*/nullptr, - /*gpu_memory_buffer_manager=*/nullptr, - /*image_factory=*/nullptr, headless) {} OutputSurfaceProviderImpl::~OutputSurfaceProviderImpl() = default; @@ -101,23 +72,15 @@ OutputSurfaceProviderImpl::~OutputSurfaceProviderImpl() = default; std::unique_ptr<DisplayCompositorMemoryAndTaskController> OutputSurfaceProviderImpl::CreateGpuDependency( bool gpu_compositing, - gpu::SurfaceHandle surface_handle, - const RendererSettings& renderer_settings) { + gpu::SurfaceHandle surface_handle) { if (!gpu_compositing) return nullptr; - if (renderer_settings.use_skia_renderer) { - gpu::ScopedAllowScheduleGpuTask allow_schedule_gpu_task; - auto skia_deps = std::make_unique<SkiaOutputSurfaceDependencyImpl>( - gpu_service_impl_, surface_handle); - return std::make_unique<DisplayCompositorMemoryAndTaskController>( - std::move(skia_deps)); - } else { - DCHECK(task_executor_); - gpu::ScopedAllowScheduleGpuTask allow_schedule_gpu_task; - return std::make_unique<DisplayCompositorMemoryAndTaskController>( - task_executor_, image_factory_); - } + gpu::ScopedAllowScheduleGpuTask allow_schedule_gpu_task; + auto skia_deps = std::make_unique<SkiaOutputSurfaceDependencyImpl>( + gpu_service_impl_, surface_handle); + return std::make_unique<DisplayCompositorMemoryAndTaskController>( + std::move(skia_deps)); } std::unique_ptr<OutputSurface> OutputSurfaceProviderImpl::CreateOutputSurface( @@ -139,7 +102,7 @@ std::unique_ptr<OutputSurface> OutputSurfaceProviderImpl::CreateOutputSurface( if (!gpu_compositing) { output_surface = std::make_unique<SoftwareOutputSurface>( CreateSoftwareOutputDeviceForPlatform(surface_handle, display_client)); - } else if (renderer_settings.use_skia_renderer) { + } else { DCHECK(gpu_dependency); { gpu::ScopedAllowScheduleGpuTask allow_schedule_gpu_task; @@ -167,74 +130,6 @@ std::unique_ptr<OutputSurface> OutputSurfaceProviderImpl::CreateOutputSurface( #endif return nullptr; } - } else { - DCHECK(task_executor_); - DCHECK(gpu_dependency); - - scoped_refptr<VizProcessContextProvider> context_provider; - - // Retry creating and binding |context_provider| on transient failures. - gpu::ContextResult context_result = gpu::ContextResult::kTransientFailure; - while (context_result != gpu::ContextResult::kSuccess) { - // We are about to exit the GPU process so don't try to create a context. - // It will be recreated after the GPU process restarts. The same check - // also happens on the GPU thread before the context gets initialized - // there. If GPU process starts to exit after this check but before - // context initialization we'll encounter a transient error, loop and hit - // this check again. - if (gpu_channel_manager_delegate_->IsExiting()) - return nullptr; - - context_provider = base::MakeRefCounted<VizProcessContextProvider>( - task_executor_, surface_handle, gpu_memory_buffer_manager_.get(), - image_factory_, gpu_channel_manager_delegate_, gpu_dependency, - renderer_settings); - context_result = context_provider->BindToCurrentThread(); - -#if BUILDFLAG(IS_ANDROID) - display_client->OnContextCreationResult(context_result); -#endif - - if (IsFatalOrSurfaceFailure(context_result)) { -#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMECAST) - // GL compositing is expected to always work on Chrome OS so we should - // never encounter fatal context error. This could be an unrecoverable - // hardware error or a bug. - LOG(FATAL) << "Unexpected fatal context error"; -#elif !BUILDFLAG(IS_ANDROID) - gpu_service_impl_->DisableGpuCompositing(); -#endif - return nullptr; - } - } - - if (surface_handle == gpu::kNullSurfaceHandle) { - output_surface = std::make_unique<GLOutputSurfaceOffscreen>( - std::move(context_provider)); - } else if (context_provider->ContextCapabilities().surfaceless) { -#if defined(USE_OZONE) || BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_ANDROID) - output_surface = std::make_unique<GLOutputSurfaceBufferQueue>( - std::move(context_provider), surface_handle, - std::make_unique<BufferQueue>( - context_provider->SharedImageInterface(), surface_handle)); -#else - NOTREACHED(); -#endif - } else { -#if BUILDFLAG(IS_WIN) - output_surface = std::make_unique<GLOutputSurface>( - std::move(context_provider), surface_handle); -#elif BUILDFLAG(IS_ANDROID) - output_surface = std::make_unique<GLOutputSurfaceAndroid>( - std::move(context_provider), surface_handle); -#elif BUILDFLAG(IS_CHROMEOS_ASH) - output_surface = std::make_unique<GLOutputSurfaceChromeOS>( - std::move(context_provider), surface_handle); -#else - output_surface = std::make_unique<GLOutputSurface>( - std::move(context_provider), surface_handle); -#endif - } } return output_surface; |