diff options
Diffstat (limited to 'src/core/compositor/display_software_output_surface.cpp')
-rw-r--r-- | src/core/compositor/display_software_output_surface.cpp | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/src/core/compositor/display_software_output_surface.cpp b/src/core/compositor/display_software_output_surface.cpp index 2277dfea3..2c208ca57 100644 --- a/src/core/compositor/display_software_output_surface.cpp +++ b/src/core/compositor/display_software_output_surface.cpp @@ -4,15 +4,15 @@ #include "display_software_output_surface.h" #include "compositor.h" -#include "render_widget_host_view_qt_delegate.h" #include "type_conversion.h" -#include "base/threading/thread_task_runner_handle.h" +#include "base/task/single_thread_task_runner.h" #include "components/viz/service/display/display.h" #include "components/viz/service/display/output_surface_frame.h" #include <QMutex> #include <QPainter> +#include <QQuickWindow> namespace QtWebEngineCore { @@ -20,31 +20,35 @@ class DisplaySoftwareOutputSurface::Device final : public viz::SoftwareOutputDev public Compositor { public: - Device(); + Device(bool requiresAlpha); // Overridden from viz::SoftwareOutputDevice. void Resize(const gfx::Size &sizeInPixels, float devicePixelRatio) override; - void OnSwapBuffers(SwapBuffersCallback swap_ack_callback) override; + void OnSwapBuffers(SwapBuffersCallback swap_ack_callback, gfx::FrameData data) override; // Overridden from Compositor. void swapFrame() override; - QImage image() override; + QSGTexture *texture(QQuickWindow *win, uint32_t) override; + bool textureIsFlipped() override; float devicePixelRatio() override; QSize size() override; - bool hasAlphaChannel() override; + bool requiresAlphaChannel() override; private: mutable QMutex m_mutex; float m_devicePixelRatio = 1.0; + bool m_requiresAlpha; scoped_refptr<base::SingleThreadTaskRunner> m_taskRunner; SwapBuffersCallback m_swapCompletionCallback; QImage m_image; float m_imageDevicePixelRatio = 1.0; }; -DisplaySoftwareOutputSurface::Device::Device() +DisplaySoftwareOutputSurface::Device::Device(bool requiresAlpha) : Compositor(Type::Software) -{} + , m_requiresAlpha(requiresAlpha) +{ +} void DisplaySoftwareOutputSurface::Device::Resize(const gfx::Size &sizeInPixels, float devicePixelRatio) { @@ -52,14 +56,14 @@ void DisplaySoftwareOutputSurface::Device::Resize(const gfx::Size &sizeInPixels, return; m_devicePixelRatio = devicePixelRatio; viewport_pixel_size_ = sizeInPixels; - surface_ = SkSurface::MakeRaster(SkImageInfo::MakeN32Premul(sizeInPixels.width(), sizeInPixels.height())); + surface_ = SkSurfaces::Raster(SkImageInfo::MakeN32Premul(sizeInPixels.width(), sizeInPixels.height())); } -void DisplaySoftwareOutputSurface::Device::OnSwapBuffers(SwapBuffersCallback swap_ack_callback) +void DisplaySoftwareOutputSurface::Device::OnSwapBuffers(SwapBuffersCallback swap_ack_callback, gfx::FrameData data) { { // MEMO don't hold a lock together with an 'observer', as the call from Qt's scene graph may come at the same time QMutexLocker locker(&m_mutex); - m_taskRunner = base::ThreadTaskRunnerHandle::Get(); + m_taskRunner = base::SingleThreadTaskRunner::GetCurrentDefault(); m_swapCompletionCallback = std::move(swap_ack_callback); } @@ -107,9 +111,14 @@ void DisplaySoftwareOutputSurface::Device::swapFrame() m_taskRunner.reset(); } -QImage DisplaySoftwareOutputSurface::Device::image() +QSGTexture *DisplaySoftwareOutputSurface::Device::texture(QQuickWindow *win, uint32_t) +{ + return win->createTextureFromImage(m_image); +} + +bool DisplaySoftwareOutputSurface::Device::textureIsFlipped() { - return m_image; + return false; } float DisplaySoftwareOutputSurface::Device::devicePixelRatio() @@ -122,13 +131,13 @@ QSize DisplaySoftwareOutputSurface::Device::size() return m_image.size(); } -bool DisplaySoftwareOutputSurface::Device::hasAlphaChannel() +bool DisplaySoftwareOutputSurface::Device::requiresAlphaChannel() { - return m_image.format() == QImage::Format_ARGB32_Premultiplied; + return m_requiresAlpha; } -DisplaySoftwareOutputSurface::DisplaySoftwareOutputSurface() - : SoftwareOutputSurface(std::make_unique<Device>()) +DisplaySoftwareOutputSurface::DisplaySoftwareOutputSurface(bool requiresAlpha) + : SoftwareOutputSurface(std::make_unique<Device>(requiresAlpha)) {} DisplaySoftwareOutputSurface::~DisplaySoftwareOutputSurface() {} |