summaryrefslogtreecommitdiffstats
path: root/src/core/compositor
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/compositor')
-rw-r--r--src/core/compositor/compositor.cpp5
-rw-r--r--src/core/compositor/compositor.h4
-rw-r--r--src/core/compositor/delegated_frame_node.cpp22
-rw-r--r--src/core/compositor/display_gl_output_surface.cpp32
-rw-r--r--src/core/compositor/display_gl_output_surface.h9
-rw-r--r--src/core/compositor/display_overrides.cpp15
-rw-r--r--src/core/compositor/display_software_output_surface.cpp14
-rw-r--r--src/core/compositor/display_software_output_surface.h2
8 files changed, 55 insertions, 48 deletions
diff --git a/src/core/compositor/compositor.cpp b/src/core/compositor/compositor.cpp
index 56693961c..1578e431e 100644
--- a/src/core/compositor/compositor.cpp
+++ b/src/core/compositor/compositor.cpp
@@ -128,7 +128,7 @@ QSGNode *Compositor::updatePaintNode(QSGNode *oldNode, RenderWidgetHostViewQtDel
m_updatePaintNodeShouldCommit = false;
gfx::PresentationFeedback dummyFeedback(base::TimeTicks::Now(), base::TimeDelta(), gfx::PresentationFeedback::Flags::kVSync);
- m_presentations.insert({m_committedFrame.metadata.frame_token, dummyFeedback});
+ m_presentations.emplace(m_committedFrame.metadata.frame_token, viz::FrameTimingDetails{dummyFeedback});
m_resourceTracker->commitResources();
frameNode->commit(m_pendingFrame, m_committedFrame, m_resourceTracker.get(), viewDelegate);
@@ -161,7 +161,8 @@ void Compositor::notifyFrameCommitted()
void Compositor::sendPresentationFeedback(uint frame_token)
{
gfx::PresentationFeedback dummyFeedback(base::TimeTicks::Now(), base::TimeDelta(), gfx::PresentationFeedback::Flags::kVSync);
- m_presentations.insert({frame_token, dummyFeedback});
+ viz::FrameTimingDetails dummyDetails = {dummyFeedback};
+ m_presentations.emplace(frame_token, dummyDetails);
}
bool Compositor::OnBeginFrameDerivedImpl(const viz::BeginFrameArgs &args)
diff --git a/src/core/compositor/compositor.h b/src/core/compositor/compositor.h
index 6d88dc054..36e62c17a 100644
--- a/src/core/compositor/compositor.h
+++ b/src/core/compositor/compositor.h
@@ -41,9 +41,9 @@
#define COMPOSITOR_H
#include "base/memory/weak_ptr.h"
+#include "components/viz/common/frame_timing_details.h"
#include "components/viz/common/frame_sinks/begin_frame_source.h"
#include "components/viz/common/quads/compositor_frame.h"
-#include "ui/gfx/presentation_feedback.h"
#include <QtCore/qglobal.h>
#include <QtCore/qshareddata.h>
@@ -115,7 +115,7 @@ private:
std::unique_ptr<CompositorResourceTracker> m_resourceTracker;
content::RenderWidgetHost *m_host;
std::unique_ptr<viz::SyntheticBeginFrameSource> m_beginFrameSource;
- base::flat_map<uint32_t, gfx::PresentationFeedback> m_presentations;
+ base::flat_map<uint32_t, viz::FrameTimingDetails> m_presentations;
viz::mojom::CompositorFrameSinkClient *m_frameSinkClient = nullptr;
bool m_updatePaintNodeShouldCommit = false;
bool m_needsBeginFrames = false;
diff --git a/src/core/compositor/delegated_frame_node.cpp b/src/core/compositor/delegated_frame_node.cpp
index 19e8d1b82..2a0df3acd 100644
--- a/src/core/compositor/delegated_frame_node.cpp
+++ b/src/core/compositor/delegated_frame_node.cpp
@@ -570,10 +570,10 @@ static bool areRenderPassStructuresEqual(const viz::CompositorFrame *frameData,
if (quad->material != prevQuad->material)
return false;
#ifndef QT_NO_OPENGL
- if (quad->material == viz::DrawQuad::YUV_VIDEO_CONTENT)
+ if (quad->material == viz::DrawQuad::Material::kYuvVideoContent)
return false;
#ifdef GL_OES_EGL_image_external
- if (quad->material == viz::DrawQuad::STREAM_VIDEO_CONTENT)
+ if (quad->material == viz::DrawQuad::Material::kStreamVideoContent)
return false;
#endif // GL_OES_EGL_image_external
#endif // QT_NO_OPENGL
@@ -840,7 +840,7 @@ void DelegatedFrameNode::handleQuad(
RenderWidgetHostViewQtDelegate *apiDelegate)
{
switch (quad->material) {
- case viz::DrawQuad::RENDER_PASS: {
+ case viz::DrawQuad::Material::kRenderPass: {
const viz::RenderPassDrawQuad *renderPassQuad = viz::RenderPassDrawQuad::MaterialCast(quad);
if (!renderPassQuad->mask_texture_size.IsEmpty()) {
const CompositorResource *resource = findAndHoldResource(renderPassQuad->mask_resource_id(), resourceTracker);
@@ -854,7 +854,7 @@ void DelegatedFrameNode::handleQuad(
break;
}
- case viz::DrawQuad::TEXTURE_CONTENT: {
+ case viz::DrawQuad::Material::kTextureContent: {
const viz::TextureDrawQuad *tquad = viz::TextureDrawQuad::MaterialCast(quad);
const CompositorResource *resource = findAndHoldResource(tquad->resource_id(), resourceTracker);
QSGTexture *texture =
@@ -872,7 +872,7 @@ void DelegatedFrameNode::handleQuad(
currentLayerChain);
break;
}
- case viz::DrawQuad::SOLID_COLOR: {
+ case viz::DrawQuad::Material::kSolidColor: {
const viz::SolidColorDrawQuad *scquad = viz::SolidColorDrawQuad::MaterialCast(quad);
// Qt only supports MSAA and this flag shouldn't be needed.
// If we ever want to use QSGRectangleNode::setAntialiasing for this we should
@@ -882,7 +882,7 @@ void DelegatedFrameNode::handleQuad(
break;
#ifndef QT_NO_OPENGL
}
- case viz::DrawQuad::DEBUG_BORDER: {
+ case viz::DrawQuad::Material::kDebugBorder: {
const viz::DebugBorderDrawQuad *dbquad = viz::DebugBorderDrawQuad::MaterialCast(quad);
QSGGeometry *geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 4);
@@ -905,7 +905,7 @@ void DelegatedFrameNode::handleQuad(
break;
#endif
}
- case viz::DrawQuad::TILED_CONTENT: {
+ case viz::DrawQuad::Material::kTiledContent: {
const viz::TileDrawQuad *tquad = viz::TileDrawQuad::MaterialCast(quad);
const CompositorResource *resource = findAndHoldResource(tquad->resource_id(), resourceTracker);
nodeHandler->setupTextureContentNode(
@@ -915,7 +915,7 @@ void DelegatedFrameNode::handleQuad(
break;
#ifndef QT_NO_OPENGL
}
- case viz::DrawQuad::YUV_VIDEO_CONTENT: {
+ case viz::DrawQuad::Material::kYuvVideoContent: {
const viz::YUVVideoDrawQuad *vquad = viz::YUVVideoDrawQuad::MaterialCast(quad);
const CompositorResource *yResource =
findAndHoldResource(vquad->y_plane_resource_id(), resourceTracker);
@@ -941,7 +941,7 @@ void DelegatedFrameNode::handleQuad(
break;
#ifdef GL_OES_EGL_image_external
}
- case viz::DrawQuad::STREAM_VIDEO_CONTENT: {
+ case viz::DrawQuad::Material::kStreamVideoContent: {
const viz::StreamVideoDrawQuad *squad = viz::StreamVideoDrawQuad::MaterialCast(quad);
const CompositorResource *resource = findAndHoldResource(squad->resource_id(), resourceTracker);
MailboxTexture *texture = static_cast<MailboxTexture *>(
@@ -954,10 +954,10 @@ void DelegatedFrameNode::handleQuad(
#endif // GL_OES_EGL_image_external
#endif // QT_NO_OPENGL
}
- case viz::DrawQuad::SURFACE_CONTENT:
+ case viz::DrawQuad::Material::kSurfaceContent:
Q_UNREACHABLE();
default:
- qWarning("Unimplemented quad material: %d", quad->material);
+ qWarning("Unimplemented quad material: %d", (int)quad->material);
}
}
diff --git a/src/core/compositor/display_gl_output_surface.cpp b/src/core/compositor/display_gl_output_surface.cpp
index 5a78b8322..0077af112 100644
--- a/src/core/compositor/display_gl_output_surface.cpp
+++ b/src/core/compositor/display_gl_output_surface.cpp
@@ -53,20 +53,19 @@
namespace QtWebEngineCore {
-DisplayGLOutputSurface::DisplayGLOutputSurface(
- scoped_refptr<viz::VizProcessContextProvider> contextProvider,
- viz::UpdateVSyncParametersCallback callback)
+DisplayGLOutputSurface::DisplayGLOutputSurface(scoped_refptr<viz::VizProcessContextProvider> contextProvider)
: OutputSurface(contextProvider)
, m_commandBuffer(contextProvider->command_buffer())
, m_gl(contextProvider->ContextGL())
+ , m_vizContextProvider(contextProvider)
{
capabilities_.uses_default_gl_framebuffer = false;
m_gl->GenFramebuffers(1, &m_fboId);
- contextProvider->SetUpdateVSyncParametersCallback(std::move(callback));
}
DisplayGLOutputSurface::~DisplayGLOutputSurface()
{
+ m_vizContextProvider->SetUpdateVSyncParametersCallback(viz::UpdateVSyncParametersCallback());
m_gl->DeleteFramebuffers(1, &m_fboId);
if (m_sink)
m_sink->disconnect(this);
@@ -224,9 +223,10 @@ void DisplayGLOutputSurface::swapBuffersOnVizThread()
m_backBuffer = std::move(m_middleBuffer);
}
- m_display->DidReceiveSwapBuffersAck();
+ const auto now = base::TimeTicks::Now();
+ m_display->DidReceiveSwapBuffersAck(gfx::SwapTimings{now, now});
m_display->DidReceivePresentationFeedback(
- gfx::PresentationFeedback(base::TimeTicks::Now(), base::TimeDelta(),
+ gfx::PresentationFeedback(now, base::TimeDelta(),
gfx::PresentationFeedback::Flags::kVSync));
}
@@ -234,12 +234,6 @@ void DisplayGLOutputSurface::SetDrawRectangle(const gfx::Rect &)
{
}
-// Returning nullptr here effectively disables viz::OverlayProcessor.
-viz::OverlayCandidateValidator *DisplayGLOutputSurface::GetOverlayCandidateValidator() const
-{
- return nullptr;
-}
-
// Returning true here will cause viz::GLRenderer to try to render the output
// surface as an overlay plane (see viz::DirectRenderer::DrawFrame and
// viz::GLRenderer::ScheduleOverlays).
@@ -289,4 +283,18 @@ unsigned DisplayGLOutputSurface::UpdateGpuFence()
return 0;
}
+void DisplayGLOutputSurface::SetUpdateVSyncParametersCallback(viz::UpdateVSyncParametersCallback callback)
+{
+ m_vizContextProvider->SetUpdateVSyncParametersCallback(std::move(callback));
+}
+
+void DisplayGLOutputSurface::SetDisplayTransformHint(gfx::OverlayTransform)
+{
+}
+
+gfx::OverlayTransform DisplayGLOutputSurface::GetDisplayTransform()
+{
+ return gfx::OVERLAY_TRANSFORM_NONE;
+}
+
} // namespace QtWebEngineCore
diff --git a/src/core/compositor/display_gl_output_surface.h b/src/core/compositor/display_gl_output_surface.h
index c42a6630a..67d987263 100644
--- a/src/core/compositor/display_gl_output_surface.h
+++ b/src/core/compositor/display_gl_output_surface.h
@@ -61,9 +61,7 @@ namespace QtWebEngineCore {
class DisplayGLOutputSurface final : public viz::OutputSurface, public DisplayProducer
{
public:
- DisplayGLOutputSurface(
- scoped_refptr<viz::VizProcessContextProvider> contextProvider,
- viz::UpdateVSyncParametersCallback callback);
+ DisplayGLOutputSurface(scoped_refptr<viz::VizProcessContextProvider> contextProvider);
~DisplayGLOutputSurface() override;
// Overridden from viz::OutputSurface.
@@ -72,7 +70,6 @@ public:
void DiscardBackbuffer() override;
void BindFramebuffer() override;
void SetDrawRectangle(const gfx::Rect &drawRect) override;
- viz::OverlayCandidateValidator *GetOverlayCandidateValidator() const override;
bool IsDisplayedAsOverlayPlane() const override;
unsigned GetOverlayTextureId() const override;
gfx::BufferFormat GetOverlayBufferFormat() const override;
@@ -86,6 +83,9 @@ public:
uint32_t GetFramebufferCopyTextureFormat() override;
void SwapBuffers(viz::OutputSurfaceFrame frame) override;
unsigned UpdateGpuFence() override;
+ void SetUpdateVSyncParametersCallback(viz::UpdateVSyncParametersCallback callback) override;
+ void SetDisplayTransformHint(gfx::OverlayTransform transform) override;
+ gfx::OverlayTransform GetDisplayTransform() override;
// Overridden from DisplayProducer.
QSGNode *updatePaintNode(QSGNode *oldNode, RenderWidgetHostViewQtDelegate *delegate) override;
@@ -141,6 +141,7 @@ private:
std::unique_ptr<Buffer> m_middleBuffer;
std::unique_ptr<Buffer> m_frontBuffer;
scoped_refptr<base::SingleThreadTaskRunner> m_taskRunner;
+ scoped_refptr<viz::VizProcessContextProvider> m_vizContextProvider;
};
} // namespace QtWebEngineCore
diff --git a/src/core/compositor/display_overrides.cpp b/src/core/compositor/display_overrides.cpp
index 4547bb04b..5d999ab92 100644
--- a/src/core/compositor/display_overrides.cpp
+++ b/src/core/compositor/display_overrides.cpp
@@ -40,23 +40,20 @@
#include "display_gl_output_surface.h"
#include "display_software_output_surface.h"
-#include "components/viz/service/display_embedder/gpu_display_provider.h"
+#include "components/viz/service/display_embedder/output_surface_provider_impl.h"
#include "gpu/ipc/in_process_command_buffer.h"
std::unique_ptr<viz::OutputSurface>
-viz::GpuDisplayProvider::CreateGLOutputSurface(
- scoped_refptr<VizProcessContextProvider> context_provider,
- UpdateVSyncParametersCallback update_vsync_callback)
+viz::OutputSurfaceProviderImpl::CreateGLOutputSurface(
+ scoped_refptr<VizProcessContextProvider> context_provider)
{
- return std::make_unique<QtWebEngineCore::DisplayGLOutputSurface>(
- std::move(context_provider), std::move(update_vsync_callback));
+ return std::make_unique<QtWebEngineCore::DisplayGLOutputSurface>(std::move(context_provider));
}
std::unique_ptr<viz::OutputSurface>
-viz::GpuDisplayProvider::CreateSoftwareOutputSurface(
- UpdateVSyncParametersCallback update_vsync_callback)
+viz::OutputSurfaceProviderImpl::CreateSoftwareOutputSurface()
{
- return std::make_unique<QtWebEngineCore::DisplaySoftwareOutputSurface>(std::move(update_vsync_callback));
+ return std::make_unique<QtWebEngineCore::DisplaySoftwareOutputSurface>();
}
void gpu::InProcessCommandBuffer::GetTextureQt(
diff --git a/src/core/compositor/display_software_output_surface.cpp b/src/core/compositor/display_software_output_surface.cpp
index 13f8e8f38..5d3c7a6f6 100644
--- a/src/core/compositor/display_software_output_surface.cpp
+++ b/src/core/compositor/display_software_output_surface.cpp
@@ -63,7 +63,7 @@ public:
// Overridden from viz::SoftwareOutputDevice.
void Resize(const gfx::Size &sizeInPixels, float devicePixelRatio) override;
- void OnSwapBuffers(base::OnceClosure swapCompletionCallback) override;
+ void OnSwapBuffers(SwapBuffersCallback swap_ack_callback) override;
// Overridden from DisplayProducer.
QSGNode *updatePaintNode(QSGNode *oldNode, RenderWidgetHostViewQtDelegate *delegate) override;
@@ -73,7 +73,7 @@ private:
scoped_refptr<DisplayFrameSink> m_sink;
float m_devicePixelRatio = 1.0;
scoped_refptr<base::SingleThreadTaskRunner> m_taskRunner;
- base::OnceClosure m_swapCompletionCallback;
+ SwapBuffersCallback m_swapCompletionCallback;
QImage m_image;
float m_imageDevicePixelRatio = 1.0;
};
@@ -99,11 +99,11 @@ void DisplaySoftwareOutputSurface::Device::Resize(const gfx::Size &sizeInPixels,
surface_ = SkSurface::MakeRaster(SkImageInfo::MakeN32Premul(sizeInPixels.width(), sizeInPixels.height()));
}
-void DisplaySoftwareOutputSurface::Device::OnSwapBuffers(base::OnceClosure swapCompletionCallback)
+void DisplaySoftwareOutputSurface::Device::OnSwapBuffers(SwapBuffersCallback swap_ack_callback)
{
QMutexLocker locker(&m_mutex);
m_taskRunner = base::ThreadTaskRunnerHandle::Get();
- m_swapCompletionCallback = std::move(swapCompletionCallback);
+ m_swapCompletionCallback = std::move(swap_ack_callback);
m_sink->scheduleUpdate();
}
@@ -143,7 +143,7 @@ QSGNode *DisplaySoftwareOutputSurface::Device::updatePaintNode(
m_image.detach();
}
m_imageDevicePixelRatio = m_devicePixelRatio;
- m_taskRunner->PostTask(FROM_HERE, std::move(m_swapCompletionCallback));
+ m_taskRunner->PostTask(FROM_HERE, base::BindOnce(std::move(m_swapCompletionCallback), toGfx(m_image.size())));
m_taskRunner.reset();
}
@@ -155,8 +155,8 @@ QSGNode *DisplaySoftwareOutputSurface::Device::updatePaintNode(
return node;
}
-DisplaySoftwareOutputSurface::DisplaySoftwareOutputSurface(viz::UpdateVSyncParametersCallback callback)
- : SoftwareOutputSurface(std::make_unique<Device>(), std::move(callback))
+DisplaySoftwareOutputSurface::DisplaySoftwareOutputSurface()
+ : SoftwareOutputSurface(std::make_unique<Device>())
{}
DisplaySoftwareOutputSurface::~DisplaySoftwareOutputSurface() {}
diff --git a/src/core/compositor/display_software_output_surface.h b/src/core/compositor/display_software_output_surface.h
index 6707c74dc..ae4b277dd 100644
--- a/src/core/compositor/display_software_output_surface.h
+++ b/src/core/compositor/display_software_output_surface.h
@@ -47,7 +47,7 @@ namespace QtWebEngineCore {
class DisplaySoftwareOutputSurface final : public viz::SoftwareOutputSurface
{
public:
- DisplaySoftwareOutputSurface(viz::UpdateVSyncParametersCallback callback);
+ DisplaySoftwareOutputSurface();
~DisplaySoftwareOutputSurface() override;
// Overridden from viz::SoftwareOutputSurface.