Commit 4f5918fa authored by Maksim Sisov's avatar Maksim Sisov Committed by Commit Bot

X11 and Ozone: //components: choose code path with IsUsingOzonePlatform

This patch adds for usage of ozone platform in //components.
And changes the following patterns:

#ifdef(USE_X11)
DoXxx();
#endif

to

#ifdef(USE_X11)
if (!IsUsingOzonePlatform())
  DoXxx();
#endif

and

#ifdef(USE_OZONE)
DoXxx();
#endif

to

#ifdef(USE_OZONE)
if (IsUsingOzonePlatform())
  DoXxx();
#endif

-----

Please note that this ugliness is added temporarily and
will be removed as soon as use_x11 is removed (hopefully
by Q1 2021 depending on how the finch trial goes).

Please also note that it's impossible to build use_x11 && use_ozone
without some hacks in PlatformCursor code. The changes to that are
on their way to upstream.

----

Bug: 1085700
Change-Id: Icce90019c12db275a796dcab993abffa158023af
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2250006
Commit-Queue: Maksim Sisov <msisov@igalia.com>
Reviewed-by: default avatarThomas Anderson <thomasanderson@chromium.org>
Reviewed-by: default avatarRobert Kroeger <rjkroege@chromium.org>
Cr-Commit-Position: refs/heads/master@{#781766}
parent 0c3fb9c4
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#if defined(USE_X11) #if defined(USE_X11)
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include "ui/base/ui_base_features.h"
#include "ui/events/keycodes/keyboard_code_conversion_x.h" // nogncheck #include "ui/events/keycodes/keyboard_code_conversion_x.h" // nogncheck
#endif #endif
...@@ -56,10 +57,12 @@ MenuItemProperties ComputeMenuPropertiesForMenuItem(ui::MenuModel* menu, ...@@ -56,10 +57,12 @@ MenuItemProperties ComputeMenuPropertiesForMenuItem(ui::MenuModel* menu,
if (accelerator.IsCmdDown()) if (accelerator.IsCmdDown())
parts.push_back(DbusString("Super")); parts.push_back(DbusString("Super"));
#if defined(USE_X11) #if defined(USE_X11)
parts.push_back(DbusString(XKeysymToString( if (!features::IsUsingOzonePlatform()) {
XKeysymForWindowsKeyCode(accelerator.key_code(), false)))); parts.push_back(DbusString(XKeysymToString(
properties["shortcut"] = XKeysymForWindowsKeyCode(accelerator.key_code(), false))));
MakeDbusVariant(MakeDbusArray(DbusArray<DbusString>(std::move(parts)))); properties["shortcut"] = MakeDbusVariant(
MakeDbusArray(DbusArray<DbusString>(std::move(parts))));
}
#else #else
NOTIMPLEMENTED(); NOTIMPLEMENTED();
#endif #endif
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#endif #endif
#if defined(USE_X11) #if defined(USE_X11)
#include "ui/base/ui_base_features.h" // nogncheck
#include "ui/platform_window/x11/x11_window.h" // nogncheck #include "ui/platform_window/x11/x11_window.h" // nogncheck
#endif #endif
...@@ -84,7 +85,8 @@ class InitUI { ...@@ -84,7 +85,8 @@ class InitUI {
public: public:
InitUI() { InitUI() {
#if defined(USE_X11) #if defined(USE_X11)
XInitThreads(); if (!features::IsUsingOzonePlatform())
XInitThreads();
#endif #endif
event_source_ = ui::PlatformEventSource::CreateDefault(); event_source_ = ui::PlatformEventSource::CreateDefault();
} }
......
...@@ -95,6 +95,10 @@ viz_source_set("unit_tests") { ...@@ -95,6 +95,10 @@ viz_source_set("unit_tests") {
if (use_ozone) { if (use_ozone) {
deps += [ "//ui/ozone" ] deps += [ "//ui/ozone" ]
} }
if (use_x11 || use_ozone) {
deps += [ "//ui/base:features" ]
}
} }
fuzzer_test("hit_test_query_fuzzer") { fuzzer_test("hit_test_query_fuzzer") {
......
...@@ -36,6 +36,10 @@ ...@@ -36,6 +36,10 @@
#include "ui/gfx/win/rendering_window_manager.h" #include "ui/gfx/win/rendering_window_manager.h"
#endif #endif
#if defined(USE_OZONE)
#include "ui/base/ui_base_features.h"
#endif
namespace viz { namespace viz {
namespace { namespace {
...@@ -125,7 +129,8 @@ GpuHostImpl::GpuHostImpl(Delegate* delegate, ...@@ -125,7 +129,8 @@ GpuHostImpl::GpuHostImpl(Delegate* delegate,
GetFontRenderParams().Get()->subpixel_rendering); GetFontRenderParams().Get()->subpixel_rendering);
#if defined(USE_OZONE) #if defined(USE_OZONE)
InitOzone(); if (features::IsUsingOzonePlatform())
InitOzone();
#endif // defined(USE_OZONE) #endif // defined(USE_OZONE)
} }
...@@ -294,6 +299,7 @@ mojom::InfoCollectionGpuService* GpuHostImpl::info_collection_gpu_service() { ...@@ -294,6 +299,7 @@ mojom::InfoCollectionGpuService* GpuHostImpl::info_collection_gpu_service() {
#if defined(USE_OZONE) #if defined(USE_OZONE)
void GpuHostImpl::InitOzone() { void GpuHostImpl::InitOzone() {
DCHECK(features::IsUsingOzonePlatform());
// Ozone needs to send the primary DRM device to GPU service as early as // Ozone needs to send the primary DRM device to GPU service as early as
// possible to ensure the latter always has a valid device. // possible to ensure the latter always has a valid device.
// https://crbug.com/608839 // https://crbug.com/608839
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "gpu/ipc/common/gpu_memory_buffer_impl_shared_memory.h" #include "gpu/ipc/common/gpu_memory_buffer_impl_shared_memory.h"
#include "gpu/ipc/common/gpu_memory_buffer_support.h" #include "gpu/ipc/common/gpu_memory_buffer_support.h"
#include "services/viz/privileged/mojom/gl/gpu_service.mojom.h" #include "services/viz/privileged/mojom/gl/gpu_service.mojom.h"
#include "ui/base/ui_base_features.h"
#include "ui/gfx/buffer_format_util.h" #include "ui/gfx/buffer_format_util.h"
#include "ui/gfx/buffer_usage_util.h" #include "ui/gfx/buffer_usage_util.h"
...@@ -46,11 +47,15 @@ HostGpuMemoryBufferManager::HostGpuMemoryBufferManager( ...@@ -46,11 +47,15 @@ HostGpuMemoryBufferManager::HostGpuMemoryBufferManager(
client_id_(client_id), client_id_(client_id),
gpu_memory_buffer_support_(std::move(gpu_memory_buffer_support)), gpu_memory_buffer_support_(std::move(gpu_memory_buffer_support)),
task_runner_(std::move(task_runner)) { task_runner_(std::move(task_runner)) {
#if !defined(USE_X11) bool should_get_native_configs = true;
native_configurations_ = gpu::GetNativeGpuMemoryBufferConfigurations( #if defined(USE_X11)
gpu_memory_buffer_support_.get()); should_get_native_configs = features::IsUsingOzonePlatform();
native_configurations_initialized_.Signal();
#endif #endif
if (should_get_native_configs) {
native_configurations_ = gpu::GetNativeGpuMemoryBufferConfigurations(
gpu_memory_buffer_support_.get());
native_configurations_initialized_.Signal();
}
base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
this, "HostGpuMemoryBufferManager", task_runner_); this, "HostGpuMemoryBufferManager", task_runner_);
} }
......
...@@ -19,6 +19,10 @@ ...@@ -19,6 +19,10 @@
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/client_native_pixmap_factory.h" #include "ui/gfx/client_native_pixmap_factory.h"
#if defined(USE_OZONE) || defined(USE_X11)
#include "ui/base/ui_base_features.h" // nogncheck
#endif
#if defined(USE_OZONE) #if defined(USE_OZONE)
#include "ui/ozone/public/ozone_platform.h" #include "ui/ozone/public/ozone_platform.h"
#endif #endif
...@@ -229,7 +233,8 @@ class HostGpuMemoryBufferManagerTest : public ::testing::Test { ...@@ -229,7 +233,8 @@ class HostGpuMemoryBufferManagerTest : public ::testing::Test {
base::ThreadTaskRunnerHandle::Get()); base::ThreadTaskRunnerHandle::Get());
#if defined(USE_X11) #if defined(USE_X11)
// X11 requires GPU process initialization to determine GMB support. // X11 requires GPU process initialization to determine GMB support.
gpu_memory_buffer_manager_->native_configurations_initialized_.Signal(); if (!features::IsUsingOzonePlatform())
gpu_memory_buffer_manager_->native_configurations_initialized_.Signal();
#endif #endif
} }
...@@ -238,9 +243,11 @@ class HostGpuMemoryBufferManagerTest : public ::testing::Test { ...@@ -238,9 +243,11 @@ class HostGpuMemoryBufferManagerTest : public ::testing::Test {
bool IsNativePixmapConfigSupported() { bool IsNativePixmapConfigSupported() {
bool native_pixmap_supported = false; bool native_pixmap_supported = false;
#if defined(USE_OZONE) #if defined(USE_OZONE)
native_pixmap_supported = if (features::IsUsingOzonePlatform()) {
ui::OzonePlatform::GetInstance()->IsNativePixmapConfigSupported( native_pixmap_supported =
gfx::BufferFormat::RGBA_8888, gfx::BufferUsage::GPU_READ); ui::OzonePlatform::GetInstance()->IsNativePixmapConfigSupported(
gfx::BufferFormat::RGBA_8888, gfx::BufferUsage::GPU_READ);
}
#elif defined(OS_ANDROID) #elif defined(OS_ANDROID)
native_pixmap_supported = native_pixmap_supported =
base::AndroidHardwareBufferCompat::IsSupportAvailable(); base::AndroidHardwareBufferCompat::IsSupportAvailable();
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#endif #endif
#if defined(USE_OZONE) #if defined(USE_OZONE)
#include "ui/base/ui_base_features.h"
#include "ui/ozone/public/ozone_platform.h" #include "ui/ozone/public/ozone_platform.h"
#endif #endif
...@@ -86,16 +87,18 @@ RendererSettings CreateRendererSettings() { ...@@ -86,16 +87,18 @@ RendererSettings CreateRendererSettings() {
} }
#if defined(USE_OZONE) #if defined(USE_OZONE)
if (command_line->HasSwitch(switches::kEnableHardwareOverlays)) { if (features::IsUsingOzonePlatform()) {
renderer_settings.overlay_strategies = ParseOverlayStrategies( if (command_line->HasSwitch(switches::kEnableHardwareOverlays)) {
command_line->GetSwitchValueASCII(switches::kEnableHardwareOverlays)); renderer_settings.overlay_strategies = ParseOverlayStrategies(
} else { command_line->GetSwitchValueASCII(switches::kEnableHardwareOverlays));
auto& host_properties = } else {
ui::OzonePlatform::GetInstance()->GetInitializedHostProperties(); auto& host_properties =
if (host_properties.supports_overlays) { ui::OzonePlatform::GetInstance()->GetInitializedHostProperties();
renderer_settings.overlay_strategies = {OverlayStrategy::kFullscreen, if (host_properties.supports_overlays) {
OverlayStrategy::kSingleOnTop, renderer_settings.overlay_strategies = {OverlayStrategy::kFullscreen,
OverlayStrategy::kUnderlay}; OverlayStrategy::kSingleOnTop,
OverlayStrategy::kUnderlay};
}
} }
} }
#endif #endif
......
...@@ -83,6 +83,10 @@ ...@@ -83,6 +83,10 @@
#include "ui/gfx/rrect_f.h" #include "ui/gfx/rrect_f.h"
#include "ui/gfx/skia_util.h" #include "ui/gfx/skia_util.h"
#if defined(USE_X11)
#include "ui/base/ui_base_features.h"
#endif
using gpu::gles2::GLES2Interface; using gpu::gles2::GLES2Interface;
namespace viz { namespace viz {
...@@ -2826,7 +2830,12 @@ void GLRenderer::FinishDrawingFrame() { ...@@ -2826,7 +2830,12 @@ void GLRenderer::FinishDrawingFrame() {
ScheduleOutputSurfaceAsOverlay(); ScheduleOutputSurfaceAsOverlay();
#if defined(OS_ANDROID) || defined(USE_OZONE) #if defined(OS_ANDROID) || defined(USE_OZONE)
ScheduleOverlays(); bool schedule_overlays = true;
#if defined(USE_X11)
schedule_overlays = features::IsUsingOzonePlatform();
#endif
if (schedule_overlays)
ScheduleOverlays();
#elif defined(OS_MACOSX) #elif defined(OS_MACOSX)
ScheduleCALayers(); ScheduleCALayers();
#elif defined(OS_WIN) #elif defined(OS_WIN)
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "components/viz/common/display/renderer_settings.h" #include "components/viz/common/display/renderer_settings.h"
#include "components/viz/common/features.h" #include "components/viz/common/features.h"
#include "components/viz/service/display/overlay_processor_stub.h"
#if defined(OS_MACOSX) #if defined(OS_MACOSX)
#include "components/viz/service/display/overlay_processor_mac.h" #include "components/viz/service/display/overlay_processor_mac.h"
...@@ -18,10 +19,9 @@ ...@@ -18,10 +19,9 @@
#include "components/viz/service/display/overlay_processor_surface_control.h" #include "components/viz/service/display/overlay_processor_surface_control.h"
#elif defined(USE_OZONE) #elif defined(USE_OZONE)
#include "components/viz/service/display/overlay_processor_ozone.h" #include "components/viz/service/display/overlay_processor_ozone.h"
#include "ui/base/ui_base_features.h"
#include "ui/ozone/public/overlay_manager_ozone.h" #include "ui/ozone/public/overlay_manager_ozone.h"
#include "ui/ozone/public/ozone_platform.h" #include "ui/ozone/public/ozone_platform.h"
#else
#include "components/viz/service/display/overlay_processor_stub.h"
#endif #endif
namespace viz { namespace viz {
...@@ -98,6 +98,8 @@ OverlayProcessorInterface::CreateOverlayProcessor( ...@@ -98,6 +98,8 @@ OverlayProcessorInterface::CreateOverlayProcessor(
enable_dc_overlay, enable_dc_overlay,
std::make_unique<DCLayerOverlayProcessor>(renderer_settings))); std::make_unique<DCLayerOverlayProcessor>(renderer_settings)));
#elif defined(USE_OZONE) #elif defined(USE_OZONE)
if (!features::IsUsingOzonePlatform())
return std::make_unique<OverlayProcessorStub>();
bool overlay_enabled = surface_handle != gpu::kNullSurfaceHandle; bool overlay_enabled = surface_handle != gpu::kNullSurfaceHandle;
overlay_enabled &= !renderer_settings.overlay_strategies.empty(); overlay_enabled &= !renderer_settings.overlay_strategies.empty();
std::unique_ptr<ui::OverlayCandidatesOzone> overlay_candidates; std::unique_ptr<ui::OverlayCandidatesOzone> overlay_candidates;
......
...@@ -64,6 +64,10 @@ ...@@ -64,6 +64,10 @@
#include "ui/gfx/skia_util.h" #include "ui/gfx/skia_util.h"
#include "ui/gfx/transform.h" #include "ui/gfx/transform.h"
#if defined(USE_OZONE)
#include "ui/base/ui_base_features.h"
#endif
namespace viz { namespace viz {
namespace { namespace {
...@@ -2207,10 +2211,19 @@ void SkiaRenderer::ScheduleOverlays() { ...@@ -2207,10 +2211,19 @@ void SkiaRenderer::ScheduleOverlays() {
skia_output_surface_->ScheduleOverlays( skia_output_surface_->ScheduleOverlays(
std::move(current_frame()->overlay_list), std::move(sync_tokens)); std::move(current_frame()->overlay_list), std::move(sync_tokens));
#elif defined(USE_OZONE) #elif defined(USE_OZONE)
// For platforms that don't support overlays, the
// current_frame()->overlay_list should be empty, and this code should not be
// reached.
if (!features::IsUsingOzonePlatform()) {
NOTREACHED();
return;
}
NOTIMPLEMENTED_LOG_ONCE(); NOTIMPLEMENTED_LOG_ONCE();
#else #else
// For platforms doesn't support overlays, the current_frame()->overlay_list // For platforms that don't support overlays, the
// should be empty, and here should not be reached. // current_frame()->overlay_list should be empty, and this code should not be
// reached.
NOTREACHED(); NOTREACHED();
#endif #endif
} }
......
...@@ -57,6 +57,7 @@ ...@@ -57,6 +57,7 @@
#if defined(USE_OZONE) #if defined(USE_OZONE)
#include "components/viz/service/display_embedder/software_output_device_ozone.h" #include "components/viz/service/display_embedder/software_output_device_ozone.h"
#include "ui/base/ui_base_features.h"
#include "ui/display/types/display_snapshot.h" #include "ui/display/types/display_snapshot.h"
#include "ui/ozone/public/ozone_platform.h" #include "ui/ozone/public/ozone_platform.h"
#include "ui/ozone/public/platform_window_surface.h" #include "ui/ozone/public/platform_window_surface.h"
...@@ -177,6 +178,10 @@ std::unique_ptr<OutputSurface> OutputSurfaceProviderImpl::CreateOutputSurface( ...@@ -177,6 +178,10 @@ std::unique_ptr<OutputSurface> OutputSurfaceProviderImpl::CreateOutputSurface(
std::move(context_provider)); std::move(context_provider));
} else if (context_provider->ContextCapabilities().surfaceless) { } else if (context_provider->ContextCapabilities().surfaceless) {
#if defined(USE_OZONE) || defined(OS_MACOSX) || defined(OS_ANDROID) #if defined(USE_OZONE) || defined(OS_MACOSX) || defined(OS_ANDROID)
#if defined(USE_OZONE)
if (!features::IsUsingOzonePlatform())
NOTREACHED();
#endif
output_surface = std::make_unique<GLOutputSurfaceBufferQueue>( output_surface = std::make_unique<GLOutputSurfaceBufferQueue>(
std::move(context_provider), surface_handle, std::move(context_provider), surface_handle,
std::make_unique<BufferQueue>( std::make_unique<BufferQueue>(
...@@ -228,24 +233,31 @@ OutputSurfaceProviderImpl::CreateSoftwareOutputDeviceForPlatform( ...@@ -228,24 +233,31 @@ OutputSurfaceProviderImpl::CreateSoftwareOutputDeviceForPlatform(
NOTREACHED(); NOTREACHED();
return nullptr; return nullptr;
#elif defined(USE_OZONE) #elif defined(USE_OZONE)
ui::SurfaceFactoryOzone* factory = if (features::IsUsingOzonePlatform()) {
ui::OzonePlatform::GetInstance()->GetSurfaceFactoryOzone(); ui::SurfaceFactoryOzone* factory =
std::unique_ptr<ui::PlatformWindowSurface> platform_window_surface = ui::OzonePlatform::GetInstance()->GetSurfaceFactoryOzone();
factory->CreatePlatformWindowSurface(surface_handle); std::unique_ptr<ui::PlatformWindowSurface> platform_window_surface =
bool in_host_process = factory->CreatePlatformWindowSurface(surface_handle);
!gpu_service_impl_ || gpu_service_impl_->in_host_process(); bool in_host_process =
std::unique_ptr<ui::SurfaceOzoneCanvas> surface_ozone = !gpu_service_impl_ || gpu_service_impl_->in_host_process();
factory->CreateCanvasForWidget( std::unique_ptr<ui::SurfaceOzoneCanvas> surface_ozone =
surface_handle, factory->CreateCanvasForWidget(
in_host_process ? nullptr : gpu_service_impl_->main_runner()); surface_handle,
CHECK(surface_ozone); in_host_process ? nullptr : gpu_service_impl_->main_runner());
return std::make_unique<SoftwareOutputDeviceOzone>( CHECK(surface_ozone);
std::move(platform_window_surface), std::move(surface_ozone)); return std::make_unique<SoftwareOutputDeviceOzone>(
#elif defined(USE_X11) std::move(platform_window_surface), std::move(surface_ozone));
}
#endif
#if defined(USE_X11)
return std::make_unique<SoftwareOutputDeviceX11>( return std::make_unique<SoftwareOutputDeviceX11>(
surface_handle, gpu_service_impl_->in_host_process() surface_handle, gpu_service_impl_->in_host_process()
? nullptr ? nullptr
: gpu_service_impl_->main_runner()); : gpu_service_impl_->main_runner());
#else
NOTREACHED();
return nullptr;
#endif #endif
} }
......
...@@ -89,6 +89,10 @@ ...@@ -89,6 +89,10 @@
#endif #endif
#endif #endif
#if defined(USE_OZONE) || defined(USE_X11)
#include "ui/base/ui_base_features.h"
#endif
namespace viz { namespace viz {
namespace { namespace {
...@@ -1473,11 +1477,13 @@ bool SkiaOutputSurfaceImplOnGpu::Initialize() { ...@@ -1473,11 +1477,13 @@ bool SkiaOutputSurfaceImplOnGpu::Initialize() {
"is_using_vulkan", is_using_vulkan()); "is_using_vulkan", is_using_vulkan());
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
#if defined(USE_OZONE) #if defined(USE_OZONE)
gpu::SurfaceHandle surface_handle = dependency_->GetSurfaceHandle(); if (features::IsUsingOzonePlatform()) {
if (surface_handle != gpu::kNullSurfaceHandle) { gpu::SurfaceHandle surface_handle = dependency_->GetSurfaceHandle();
window_surface_ = ui::OzonePlatform::GetInstance() if (surface_handle != gpu::kNullSurfaceHandle) {
->GetSurfaceFactoryOzone() window_surface_ = ui::OzonePlatform::GetInstance()
->CreatePlatformWindowSurface(surface_handle); ->GetSurfaceFactoryOzone()
->CreatePlatformWindowSurface(surface_handle);
}
} }
#endif #endif
...@@ -1591,42 +1597,45 @@ bool SkiaOutputSurfaceImplOnGpu::InitializeForVulkan() { ...@@ -1591,42 +1597,45 @@ bool SkiaOutputSurfaceImplOnGpu::InitializeForVulkan() {
supports_alpha_ = renderer_settings_.requires_alpha_channel; supports_alpha_ = renderer_settings_.requires_alpha_channel;
} else { } else {
#if defined(USE_X11) #if defined(USE_X11)
supports_alpha_ = true; if (!features::IsUsingOzonePlatform()) {
if (!gpu_preferences_.disable_vulkan_surface) { supports_alpha_ = true;
output_device_ = SkiaOutputDeviceVulkan::Create( if (!gpu_preferences_.disable_vulkan_surface) {
vulkan_context_provider_, dependency_->GetSurfaceHandle(), output_device_ = SkiaOutputDeviceVulkan::Create(
memory_tracker_.get(), did_swap_buffer_complete_callback_); vulkan_context_provider_, dependency_->GetSurfaceHandle(),
memory_tracker_.get(), did_swap_buffer_complete_callback_);
}
if (!output_device_) {
output_device_ = std::make_unique<SkiaOutputDeviceX11>(
context_state_, dependency_->GetSurfaceHandle(),
memory_tracker_.get(), did_swap_buffer_complete_callback_);
}
} }
#endif
if (!output_device_) { if (!output_device_) {
output_device_ = std::make_unique<SkiaOutputDeviceX11>( auto output_presenter =
context_state_, dependency_->GetSurfaceHandle(), OutputPresenterGL::Create(dependency_, memory_tracker_.get());
memory_tracker_.get(), did_swap_buffer_complete_callback_); if (output_presenter) {
} // TODO(https://crbug.com/1012401): don't depend on GL.
#else gl_surface_ = output_presenter->gl_surface();
auto output_presenter = output_device_ = std::make_unique<SkiaOutputDeviceBufferQueue>(
OutputPresenterGL::Create(dependency_, memory_tracker_.get()); std::move(output_presenter), dependency_, memory_tracker_.get(),
if (output_presenter) { did_swap_buffer_complete_callback_);
// TODO(https://crbug.com/1012401): don't depend on GL. } else {
gl_surface_ = output_presenter->gl_surface(); auto output_device = SkiaOutputDeviceVulkan::Create(
output_device_ = std::make_unique<SkiaOutputDeviceBufferQueue>( vulkan_context_provider_, dependency_->GetSurfaceHandle(),
std::move(output_presenter), dependency_, memory_tracker_.get(), memory_tracker_.get(), did_swap_buffer_complete_callback_);
did_swap_buffer_complete_callback_);
} else {
auto output_device = SkiaOutputDeviceVulkan::Create(
vulkan_context_provider_, dependency_->GetSurfaceHandle(),
memory_tracker_.get(), did_swap_buffer_complete_callback_);
#if defined(OS_WIN) #if defined(OS_WIN)
gpu::SurfaceHandle child_surface = gpu::SurfaceHandle child_surface =
output_device ? output_device->GetChildSurfaceHandle() output_device ? output_device->GetChildSurfaceHandle()
: gpu::kNullSurfaceHandle; : gpu::kNullSurfaceHandle;
if (child_surface != gpu::kNullSurfaceHandle) { if (child_surface != gpu::kNullSurfaceHandle) {
DidCreateAcceleratedSurfaceChildWindow(dependency_->GetSurfaceHandle(), DidCreateAcceleratedSurfaceChildWindow(
child_surface); dependency_->GetSurfaceHandle(), child_surface);
} }
#endif #endif
output_device_ = std::move(output_device); output_device_ = std::move(output_device);
}
} }
#endif
} }
#endif #endif
return !!output_device_; return !!output_device_;
...@@ -1646,9 +1655,13 @@ bool SkiaOutputSurfaceImplOnGpu::InitializeForDawn() { ...@@ -1646,9 +1655,13 @@ bool SkiaOutputSurfaceImplOnGpu::InitializeForDawn() {
#if defined(USE_X11) #if defined(USE_X11)
// TODO(sgilhuly): Set up a Vulkan swapchain so that Linux can also use // TODO(sgilhuly): Set up a Vulkan swapchain so that Linux can also use
// SkiaOutputDeviceDawn. // SkiaOutputDeviceDawn.
output_device_ = std::make_unique<SkiaOutputDeviceX11>( if (!features::IsUsingOzonePlatform()) {
context_state_, dependency_->GetSurfaceHandle(), memory_tracker_.get(), output_device_ = std::make_unique<SkiaOutputDeviceX11>(
did_swap_buffer_complete_callback_); context_state_, dependency_->GetSurfaceHandle(),
memory_tracker_.get(), did_swap_buffer_complete_callback_);
} else {
return false;
}
#elif defined(OS_WIN) #elif defined(OS_WIN)
std::unique_ptr<SkiaOutputDeviceDawn> output_device = std::unique_ptr<SkiaOutputDeviceDawn> output_device =
std::make_unique<SkiaOutputDeviceDawn>( std::make_unique<SkiaOutputDeviceDawn>(
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#endif #endif
#if defined(USE_OZONE) #if defined(USE_OZONE)
#include "ui/base/ui_base_features.h"
#include "ui/ozone/public/ozone_platform.h" #include "ui/ozone/public/ozone_platform.h"
#endif #endif
...@@ -147,15 +148,17 @@ TestGpuServiceHolder::TestGpuServiceHolder( ...@@ -147,15 +148,17 @@ TestGpuServiceHolder::TestGpuServiceHolder(
: gpu_thread_("GPUMainThread"), io_thread_("GPUIOThread") { : gpu_thread_("GPUMainThread"), io_thread_("GPUIOThread") {
base::Thread::Options gpu_thread_options; base::Thread::Options gpu_thread_options;
#if defined(USE_OZONE) #if defined(USE_OZONE)
base::MessagePumpType message_pump_type_for_gpu = if (features::IsUsingOzonePlatform()) {
ui::OzonePlatform::GetInstance() base::MessagePumpType message_pump_type_for_gpu =
->GetPlatformProperties() ui::OzonePlatform::GetInstance()
.message_pump_type_for_gpu; ->GetPlatformProperties()
// X11 platform uses UI thread for GPU main, but 2 UI threads is .message_pump_type_for_gpu;
// causing crashes in linux-ozone-rel. // X11 platform uses UI thread for GPU main, but 2 UI threads is
// TODO(crbug.com/1078392): Investigate and fix. // causing crashes in linux-ozone-rel.
if (message_pump_type_for_gpu != base::MessagePumpType::UI) { // TODO(crbug.com/1078392): Investigate and fix.
gpu_thread_options.message_pump_type = message_pump_type_for_gpu; if (message_pump_type_for_gpu != base::MessagePumpType::UI) {
gpu_thread_options.message_pump_type = message_pump_type_for_gpu;
}
} }
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment