diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index 737f424398f9188da074fadfc1cf0827052a1ced..b03be1313afa245269769a0ce5529bfd0a14ae22 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -332,6 +332,7 @@ RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost *widget , m_cursorPosition(0) , m_emptyPreviousSelection(true) , m_wheelAckPending(false) + , m_pendingResize(false) , m_mouseWheelPhaseHandler(this) { host()->SetView(this); @@ -348,6 +349,8 @@ RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost *widget const QPlatformInputContext *context = QGuiApplicationPrivate::platformIntegration()->inputContext(); m_imeHasHiddenTextCapability = context && context->hasCapability(QPlatformInputContext::HiddenTextCapability); + + m_localSurfaceId = m_localSurfaceIdAllocator.GenerateId(); } RenderWidgetHostViewQt::~RenderWidgetHostViewQt() @@ -734,11 +737,6 @@ void RenderWidgetHostViewQt::SubmitCompositorFrame(const viz::LocalSurfaceId &lo bool contentsSizeChanged = (m_lastContentsSize != frame.metadata.root_layer_size); m_lastScrollOffset = frame.metadata.root_scroll_offset; m_lastContentsSize = frame.metadata.root_layer_size; - if (m_localSurfaceId != local_surface_id) { - m_localSurfaceId = local_surface_id; - // FIXME: update frame_size and device_scale_factor? - // FIXME: showPrimarySurface()? - } // Force to process swap messages uint32_t frame_token = frame.metadata.frame_token; @@ -940,15 +938,41 @@ void RenderWidgetHostViewQt::OnGestureEvent(const ui::GestureEventData& gesture) host()->ForwardGestureEvent(ui::CreateWebGestureEventFromGestureEventData(gesture)); } +viz::ScopedSurfaceIdAllocator RenderWidgetHostViewQt::DidUpdateVisualProperties(const cc::RenderFrameMetadata &metadata) +{ + base::OnceCallback<void()> allocation_task = + base::BindOnce(&RenderWidgetHostViewQt::OnDidUpdateVisualPropertiesComplete, + base::Unretained(this), metadata); + return viz::ScopedSurfaceIdAllocator(std::move(allocation_task)); +} + +void RenderWidgetHostViewQt::OnDidUpdateVisualPropertiesComplete(const cc::RenderFrameMetadata &metadata) +{ + if (metadata.local_surface_id) + m_localSurfaceIdAllocator.UpdateFromChild(*metadata.local_surface_id); + + m_localSurfaceId = m_localSurfaceIdAllocator.GenerateId(); + host()->SendScreenRects(); + if (m_pendingResize) { + if (host()->SynchronizeVisualProperties()) + m_pendingResize = false; + } +} + QSGNode *RenderWidgetHostViewQt::updatePaintNode(QSGNode *oldNode) { + if (m_pendingResize && host()) { + if (host()->SynchronizeVisualProperties()) + m_pendingResize = false; + } return m_compositor->updatePaintNode(oldNode); } void RenderWidgetHostViewQt::notifyResize() { - host()->SynchronizeVisualProperties(); - host()->SendScreenRects(); + m_pendingResize = true; + if (host()->SynchronizeVisualProperties()) + m_pendingResize = false; } void RenderWidgetHostViewQt::notifyShown() diff --git a/src/core/render_widget_host_view_qt.h b/src/core/render_widget_host_view_qt.h index 92cc422a8db8d73034458ac4e3747370c36fc881..9624e1c6d07962e21b621dec6d071a8784842dee 100644 --- a/src/core/render_widget_host_view_qt.h +++ b/src/core/render_widget_host_view_qt.h @@ -45,6 +45,7 @@ #include "base/memory/weak_ptr.h" #include "components/viz/common/frame_sinks/begin_frame_source.h" #include "components/viz/common/resources/transferable_resource.h" +#include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" #include "content/browser/accessibility/browser_accessibility_manager.h" #include "content/browser/renderer_host/input/mouse_wheel_phase_handler.h" #include "content/browser/renderer_host/render_widget_host_view_base.h" @@ -143,6 +144,8 @@ public: void SubmitCompositorFrame(const viz::LocalSurfaceId&, viz::CompositorFrame, base::Optional<viz::HitTestRegionList>) override; void WheelEventAck(const blink::WebMouseWheelEvent &event, content::InputEventAckState ack_result) override; content::MouseWheelPhaseHandler *GetMouseWheelPhaseHandler() override; + viz::ScopedSurfaceIdAllocator DidUpdateVisualProperties(const cc::RenderFrameMetadata &metadata) override; + void OnDidUpdateVisualPropertiesComplete(const cc::RenderFrameMetadata &metadata); void GetScreenInfo(content::ScreenInfo* results) const override; gfx::Rect GetBoundsInRootWindow() override; @@ -245,6 +248,7 @@ private: gfx::Vector2dF m_lastScrollOffset; gfx::SizeF m_lastContentsSize; viz::LocalSurfaceId m_localSurfaceId; + viz::ParentLocalSurfaceIdAllocator m_localSurfaceIdAllocator; uint m_imState; int m_anchorPositionWithinSelection; @@ -256,6 +260,7 @@ private: bool m_imeHasHiddenTextCapability; bool m_wheelAckPending; + bool m_pendingResize; QList<blink::WebMouseWheelEvent> m_pendingWheelEvents; content::MouseWheelPhaseHandler m_mouseWheelPhaseHandler;