diff options
author | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2013-09-13 15:29:53 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-10-14 15:50:35 +0200 |
commit | 0b9ea2d05d1081ce4a667f0c7036a205bcd751a3 (patch) | |
tree | 3d194274878b1501bbe15428554d74aedafd0d56 /lib/render_widget_host_view_qt.cpp | |
parent | 338e24b48601a3cfdcde0977b6c9390d33d51c9f (diff) |
Render delegated renderer frames using the Qt scene graph.
This provides a stub implementation that renders quads and RenderPasses
using QSGNodes in QQuickWebEngineView.
The BackingStore code path is still supported when the delegated renderer
switch is not enabled. To use the new rendering, pass the following switches:
--enable-delegated-renderer --enable-threaded-compositing
This uses debug, plain color textures until we can fetch tiles and
textures from the ResourceProvider across OpenGL context boundaries.
Change-Id: I33ea0738dc5a326ef79c1435f75c044c42e8551f
Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
Diffstat (limited to 'lib/render_widget_host_view_qt.cpp')
-rw-r--r-- | lib/render_widget_host_view_qt.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/render_widget_host_view_qt.cpp b/lib/render_widget_host_view_qt.cpp index 99bf94653..d9f1a48df 100644 --- a/lib/render_widget_host_view_qt.cpp +++ b/lib/render_widget_host_view_qt.cpp @@ -47,6 +47,7 @@ #include "shared/shared_globals.h" +#include "cc/output/compositor_frame_ack.h" #include "content/browser/renderer_host/render_view_host_impl.h" #include "content/browser/renderer_host/ui_events_helper.h" #include "content/common/gpu/gpu_messages.h" @@ -161,6 +162,18 @@ bool RenderWidgetHostViewQt::handleEvent(QEvent* event) { return true; } +void RenderWidgetHostViewQt::releaseAndAckDelegatedFrame() +{ + cc::CompositorFrameAck ack; + // FIXME: This releases all resources of the frame for now. + ack.resources = m_pendingFrameData->resource_list; + content::RenderWidgetHostImpl::SendSwapCompositorFrameAck( + m_host->GetRoutingID(), m_pendingOutputSurfaceId, + m_host->GetProcess()->GetID(), ack); + + m_pendingFrameData.reset(); +} + BackingStoreQt* RenderWidgetHostViewQt::GetBackingStore() { bool force_create = !m_host->empty(); @@ -554,6 +567,15 @@ bool RenderWidgetHostViewQt::HasAcceleratedSurface(const gfx::Size&) return false; } +void RenderWidgetHostViewQt::OnSwapCompositorFrame(uint32 output_surface_id, scoped_ptr<cc::CompositorFrame> frame) +{ + Q_ASSERT(frame->delegated_frame_data); + SwapDelegatedFrame(output_surface_id, + frame->delegated_frame_data.Pass(), + frame->metadata.device_scale_factor, + frame->metadata.latency_info); +} + void RenderWidgetHostViewQt::GetScreenInfo(WebKit::WebScreenInfo* results) { QWindow* window = m_delegate->window(); @@ -617,6 +639,15 @@ void RenderWidgetHostViewQt::Paint(const gfx::Rect& damage_rect) m_delegate->update(r); } +void RenderWidgetHostViewQt::SwapDelegatedFrame(uint32 output_surface_id, scoped_ptr<cc::DelegatedFrameData> frame_data, float frame_device_scale_factor, const ui::LatencyInfo& latency_info) { + gfx::Size frame_size_in_dip; + if (!frame_data->render_pass_list.empty()) + frame_size_in_dip = gfx::ToFlooredSize(gfx::ScaleSize(frame_data->render_pass_list.back()->output_rect.size(), 1.f/frame_device_scale_factor)); + + m_pendingOutputSurfaceId = output_surface_id; + m_pendingFrameData = frame_data.Pass(); + m_delegate->update(); +} void RenderWidgetHostViewQt::ProcessGestures(ui::GestureRecognizer::Gestures *gestures) { |