diff options
author | Jüri Valdmann <juri.valdmann@qt.io> | 2019-05-28 11:00:10 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-10-04 10:19:00 +0200 |
commit | 2170ac4a1fd0008382439734c5bceb3d9dad2683 (patch) | |
tree | 113cff39612c002eaa1bb9f3fa568392986cbca0 | |
parent | f2ea32f4a467af4837f81034b6d32474ae5ced49 (diff) | |
download | qtwebengine-chromium-2170ac4a1fd0008382439734c5bceb3d9dad2683.tar.gz |
Use ui::Compositor (3rdparty)
Task-number: QTBUG-71885
Change-Id: I441bd742f3ba6d16bfe58d88574b628d3561ecda
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
13 files changed, 87 insertions, 3 deletions
diff --git a/chromium/components/viz/service/display/display.cc b/chromium/components/viz/service/display/display.cc index f371b4fb836..74d6a6095ef 100644 --- a/chromium/components/viz/service/display/display.cc +++ b/chromium/components/viz/service/display/display.cc @@ -397,6 +397,10 @@ void Display::Initialize(DisplayClient* client, if (output_surface_->software_device()) output_surface_->software_device()->BindToClient(this); +#ifdef TOOLKIT_QT + output_surface_->SetFrameSinkId(frame_sink_id_); +#endif + frame_rate_decider_ = std::make_unique<FrameRateDecider>( surface_manager_, this, hw_support_for_multiple_refresh_rates, SupportsSetFrameRate(output_surface_.get())); diff --git a/chromium/components/viz/service/display/output_surface.cc b/chromium/components/viz/service/display/output_surface.cc index df3d9eab1a3..e0fc77c6c1a 100644 --- a/chromium/components/viz/service/display/output_surface.cc +++ b/chromium/components/viz/service/display/output_surface.cc @@ -76,7 +76,7 @@ void OutputSurface::UpdateLatencyInfoOnSwap( void OutputSurface::SetNeedsSwapSizeNotifications( bool needs_swap_size_notifications) { - DCHECK(!needs_swap_size_notifications); +// DCHECK(!needs_swap_size_notifications); } base::ScopedClosureRunner OutputSurface::GetCacheBackBufferCb() { diff --git a/chromium/components/viz/service/display/output_surface.h b/chromium/components/viz/service/display/output_surface.h index b36ceaa21d0..277f58af2bd 100644 --- a/chromium/components/viz/service/display/output_surface.h +++ b/chromium/components/viz/service/display/output_surface.h @@ -31,6 +31,10 @@ #include "ui/gfx/surface_origin.h" #include "ui/latency/latency_info.h" +#ifdef TOOLKIT_QT +#include "components/viz/common/surfaces/frame_sink_id.h" +#endif + namespace gfx { namespace mojom { class DelegatedInkPointRenderer; @@ -282,6 +286,10 @@ class VIZ_SERVICE_EXPORT OutputSurface { // Notifies the OutputSurface of rate of content updates in frames per second. virtual void SetFrameRate(float frame_rate) {} +#ifdef TOOLKIT_QT + virtual void SetFrameSinkId(const FrameSinkId& frame_sink_id) {} +#endif + // Sends the pending delegated ink renderer receiver to GPU Main to allow the // browser process to send points directly there. virtual void InitDelegatedInkPointRendererReceiver( diff --git a/chromium/components/viz/service/display/overlay_processor_interface.cc b/chromium/components/viz/service/display/overlay_processor_interface.cc index ca783e23fc4..651e5fd206d 100644 --- a/chromium/components/viz/service/display/overlay_processor_interface.cc +++ b/chromium/components/viz/service/display/overlay_processor_interface.cc @@ -15,7 +15,7 @@ #include "components/viz/service/display/display_compositor_memory_and_task_controller.h" #include "components/viz/service/display/overlay_processor_stub.h" -#if defined(OS_APPLE) +#if defined(OS_APPLE) && !defined(TOOLKIT_QT) #include "components/viz/service/display/overlay_processor_mac.h" #elif defined(OS_WIN) #include "components/viz/service/display/overlay_processor_win.h" @@ -89,7 +89,7 @@ OverlayProcessorInterface::CreateOverlayProcessor( if (surface_handle == gpu::kNullSurfaceHandle) return std::make_unique<OverlayProcessorStub>(); -#if defined(OS_APPLE) +#if defined(OS_APPLE) && !defined(TOOLKIT_QT) DCHECK(capabilities.supports_surfaceless); return std::make_unique<OverlayProcessorMac>( 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 bd64ee19f71..efe1e8f490e 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 @@ -142,8 +142,12 @@ std::unique_ptr<OutputSurface> OutputSurfaceProviderImpl::CreateOutputSurface( std::unique_ptr<OutputSurface> output_surface; if (!gpu_compositing) { +#if defined(TOOLKIT_QT) + output_surface = CreateSoftwareOutputSurface(); +#else output_surface = std::make_unique<SoftwareOutputSurface>( CreateSoftwareOutputDeviceForPlatform(surface_handle, display_client)); +#endif } else if (renderer_settings.use_skia_renderer) { DCHECK(gpu_dependency); { @@ -213,6 +217,9 @@ std::unique_ptr<OutputSurface> OutputSurfaceProviderImpl::CreateOutputSurface( } } +#if defined(TOOLKIT_QT) + output_surface = CreateGLOutputSurface(std::move(context_provider)); +#else if (surface_handle == gpu::kNullSurfaceHandle) { output_surface = std::make_unique<GLOutputSurfaceOffscreen>( std::move(context_provider)); @@ -244,6 +251,7 @@ std::unique_ptr<OutputSurface> OutputSurfaceProviderImpl::CreateOutputSurface( std::move(context_provider), surface_handle); #endif } +#endif } return output_surface; diff --git a/chromium/components/viz/service/display_embedder/output_surface_provider_impl.h b/chromium/components/viz/service/display_embedder/output_surface_provider_impl.h index a6bb42cdbc5..b2a4ee6fb20 100644 --- a/chromium/components/viz/service/display_embedder/output_surface_provider_impl.h +++ b/chromium/components/viz/service/display_embedder/output_surface_provider_impl.h @@ -34,6 +34,11 @@ namespace viz { class GpuServiceImpl; class SoftwareOutputDevice; +#if defined(TOOLKIT_QT) +class OutputSurface; +class VizProcessContextProvider; +#endif + // In-process implementation of OutputSurfaceProvider. class VIZ_SERVICE_EXPORT OutputSurfaceProviderImpl : public OutputSurfaceProvider { @@ -64,6 +69,12 @@ class VIZ_SERVICE_EXPORT OutputSurfaceProviderImpl const DebugRendererSettings* debug_settings) override; private: +#if defined(TOOLKIT_QT) + std::unique_ptr<OutputSurface> CreateSoftwareOutputSurface(); + std::unique_ptr<OutputSurface> CreateGLOutputSurface( + scoped_refptr<VizProcessContextProvider> context_provider); +#endif + std::unique_ptr<SoftwareOutputDevice> CreateSoftwareOutputDeviceForPlatform( gpu::SurfaceHandle surface_handle, mojom::DisplayClient* display_client); diff --git a/chromium/components/viz/service/display_embedder/skia_output_device.h b/chromium/components/viz/service/display_embedder/skia_output_device.h index e51844f9f65..277662a8a8d 100644 --- a/chromium/components/viz/service/display_embedder/skia_output_device.h +++ b/chromium/components/viz/service/display_embedder/skia_output_device.h @@ -163,6 +163,10 @@ class SkiaOutputDevice { void SetDrawTimings(base::TimeTicks submitted, base::TimeTicks started); +#ifdef TOOLKIT_QT + virtual void SetFrameSinkId(const FrameSinkId& frame_sink_id) {} +#endif + void SetDependencyTimings(base::TimeTicks task_ready); protected: diff --git a/chromium/components/viz/service/display_embedder/skia_output_surface_impl.cc b/chromium/components/viz/service/display_embedder/skia_output_surface_impl.cc index 4579f810e19..2e49c8a4c31 100644 --- a/chromium/components/viz/service/display_embedder/skia_output_surface_impl.cc +++ b/chromium/components/viz/service/display_embedder/skia_output_surface_impl.cc @@ -1171,6 +1171,15 @@ void SkiaOutputSurfaceImpl::PreserveChildSurfaceControls() { /*need_framebuffer=*/false); } +#ifdef TOOLKIT_QT +void SkiaOutputSurfaceImpl::SetFrameSinkId(const FrameSinkId& frame_sink_id) { + auto task = base::BindOnce(&SkiaOutputSurfaceImplOnGpu::SetFrameSinkId, + base::Unretained(impl_on_gpu_.get()), frame_sink_id); + EnqueueGpuTask(std::move(task), {}, /*make_current=*/false, + /*need_framebuffer=*/false); +} +#endif + void SkiaOutputSurfaceImpl::InitDelegatedInkPointRendererReceiver( mojo::PendingReceiver<gfx::mojom::DelegatedInkPointRenderer> pending_receiver) { diff --git a/chromium/components/viz/service/display_embedder/skia_output_surface_impl.h b/chromium/components/viz/service/display_embedder/skia_output_surface_impl.h index dea6f74111e..f5d90d0db74 100644 --- a/chromium/components/viz/service/display_embedder/skia_output_surface_impl.h +++ b/chromium/components/viz/service/display_embedder/skia_output_surface_impl.h @@ -97,6 +97,9 @@ class VIZ_SERVICE_EXPORT SkiaOutputSurfaceImpl : public SkiaOutputSurface { gfx::Rect GetCurrentFramebufferDamage() const override; void SetFrameRate(float frame_rate) override; void SetNeedsMeasureNextDrawLatency() override; +#ifdef TOOLKIT_QT + void SetFrameSinkId(const FrameSinkId& frame_sink_id) override; +#endif // SkiaOutputSurface implementation: SkCanvas* BeginPaintCurrentFrame() override; diff --git a/chromium/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc b/chromium/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc index 32171ad31af..25350041fdc 100644 --- a/chromium/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc +++ b/chromium/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc @@ -1305,11 +1305,15 @@ bool SkiaOutputSurfaceImplOnGpu::InitializeForGL() { if (!gl_surface_) return false; +#ifdef TOOLKIT_QT + output_device_ = CreateOutputDevice(); +#else output_device_ = std::make_unique<SkiaOutputDeviceOffscreen>( context_state_, gfx::SurfaceOrigin::kTopLeft, renderer_settings_.requires_alpha_channel, shared_gpu_deps_->memory_tracker(), GetDidSwapBuffersCompleteCallback()); +#endif } else { gl_surface_ = dependency_->CreateGLSurface(weak_ptr_factory_.GetWeakPtr(), format); @@ -1366,6 +1370,10 @@ bool SkiaOutputSurfaceImplOnGpu::InitializeForGL() { #if BUILDFLAG(ENABLE_VULKAN) bool SkiaOutputSurfaceImplOnGpu::InitializeForVulkan() { +#ifdef TOOLKIT_QT + output_device_ = CreateOutputDevice(); + return true; +#endif if (dependency_->IsOffscreen()) { output_device_ = std::make_unique<SkiaOutputDeviceOffscreen>( context_state_, gfx::SurfaceOrigin::kBottomLeft, @@ -1853,6 +1861,13 @@ SkiaOutputSurfaceImplOnGpu::GetOrCreateRenderPassOverlayBacking( } #endif +#ifdef TOOLKIT_QT +void SkiaOutputSurfaceImplOnGpu::SetFrameSinkId(const FrameSinkId& frame_sink_id) { + if (output_device_) + output_device_->SetFrameSinkId(frame_sink_id); +} +#endif + void SkiaOutputSurfaceImplOnGpu::InitDelegatedInkPointRendererReceiver( mojo::PendingReceiver<gfx::mojom::DelegatedInkPointRenderer> pending_receiver) { diff --git a/chromium/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h b/chromium/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h index 885aa1f9479..f96bd5cffb8 100644 --- a/chromium/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h +++ b/chromium/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h @@ -221,6 +221,10 @@ class SkiaOutputSurfaceImplOnGpu void PreserveChildSurfaceControls(); +#ifdef TOOLKIT_QT + void SetFrameSinkId(const FrameSinkId& frame_sink_id); +#endif + void InitDelegatedInkPointRendererReceiver( mojo::PendingReceiver<gfx::mojom::DelegatedInkPointRenderer> pending_receiver); @@ -281,6 +285,10 @@ class SkiaOutputSurfaceImplOnGpu const SkSurfaceCharacterization& characterization); #endif +#ifdef TOOLKIT_QT + std::unique_ptr<SkiaOutputDevice> CreateOutputDevice(); +#endif + class ReleaseCurrent { public: ReleaseCurrent(scoped_refptr<gl::GLSurface> gl_surface, diff --git a/chromium/components/viz/service/display_embedder/viz_process_context_provider.h b/chromium/components/viz/service/display_embedder/viz_process_context_provider.h index 065ec673b0d..3758ed8bd3b 100644 --- a/chromium/components/viz/service/display_embedder/viz_process_context_provider.h +++ b/chromium/components/viz/service/display_embedder/viz_process_context_provider.h @@ -91,6 +91,9 @@ class VIZ_SERVICE_EXPORT VizProcessContextProvider virtual base::ScopedClosureRunner GetCacheBackBufferCb(); +#ifdef TOOLKIT_QT + gpu::InProcessCommandBuffer *command_buffer() { return command_buffer_.get(); } +#endif void SetNeedsMeasureNextDrawLatency(); protected: diff --git a/chromium/gpu/ipc/in_process_command_buffer.h b/chromium/gpu/ipc/in_process_command_buffer.h index 6205afd7e6a..88245fdfcba 100644 --- a/chromium/gpu/ipc/in_process_command_buffer.h +++ b/chromium/gpu/ipc/in_process_command_buffer.h @@ -55,6 +55,9 @@ namespace gl { class GLContext; class GLShareGroup; +#ifdef TOOLKIT_QT +class GLFence; +#endif } namespace gfx { @@ -247,6 +250,14 @@ class GL_IN_PROCESS_CONTEXT_EXPORT InProcessCommandBuffer // and |surface_handle| provided in Initialize outlive this callback. base::ScopedClosureRunner GetCacheBackBufferCb(); +#ifdef TOOLKIT_QT + using GetTextureCallback = base::OnceCallback<void(unsigned int, std::unique_ptr<gl::GLFence>)>; + void GetTextureQt(unsigned int client_id, + GetTextureCallback callback, + const std::vector<SyncToken>& sync_token_fences); + void GetTextureQtOnGpuThread(unsigned int client_id, GetTextureCallback callback); +#endif + private: struct InitializeOnGpuThreadParams { SurfaceHandle surface_handle; |