summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJüri Valdmann <juri.valdmann@qt.io>2019-05-28 11:00:10 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2021-10-04 10:19:00 +0200
commit2170ac4a1fd0008382439734c5bceb3d9dad2683 (patch)
tree113cff39612c002eaa1bb9f3fa568392986cbca0
parentf2ea32f4a467af4837f81034b6d32474ae5ced49 (diff)
downloadqtwebengine-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>
-rw-r--r--chromium/components/viz/service/display/display.cc4
-rw-r--r--chromium/components/viz/service/display/output_surface.cc2
-rw-r--r--chromium/components/viz/service/display/output_surface.h8
-rw-r--r--chromium/components/viz/service/display/overlay_processor_interface.cc4
-rw-r--r--chromium/components/viz/service/display_embedder/output_surface_provider_impl.cc8
-rw-r--r--chromium/components/viz/service/display_embedder/output_surface_provider_impl.h11
-rw-r--r--chromium/components/viz/service/display_embedder/skia_output_device.h4
-rw-r--r--chromium/components/viz/service/display_embedder/skia_output_surface_impl.cc9
-rw-r--r--chromium/components/viz/service/display_embedder/skia_output_surface_impl.h3
-rw-r--r--chromium/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc15
-rw-r--r--chromium/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h8
-rw-r--r--chromium/components/viz/service/display_embedder/viz_process_context_provider.h3
-rw-r--r--chromium/gpu/ipc/in_process_command_buffer.h11
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;