For a example:

WaylandOutput {
    WaylandClientSurface {
        ...
    }

    Button {
       ...
    }
}

In the WaylandOutput, its have two item. The first item is a 
WaylandClientSurface, its will report the damaged area of the surface to 
wayland compositor from the wayland client when the surface is updated, but we 
unable use the damaged area to the WaylandClientSurface. The second item is a 
Button of QtQuick.Controls item, when hover to it, its will request to update 
scene graphics, this is a whole update, we can't get the damage area of  a 
Button. This results in that we have to submit the full buffer for the 
WaylandOutput to the DRM device no matter which region is damaged, and, as 
Giuseppe D'Angelo said, if this WaylandOutput is a VNC screen, then we will 
have to transmit a lot of useless data by network.

Another example is that when a QtQuick program runs as a Wayland client, each 
QQuickWindow will not report its own damaged area to Wayland Compositor, even 
if we only update a 10x10 area in a 1000x1000 window, Wayland Compositor must 
recomposit the whole window buffer.

________________________________
发件人: Shawn Rutledge <[email protected]>
发送时间: 2022年6月2日 10:53
收件人: 弓 长 <[email protected]>
抄送: Qt邮件列表 <[email protected]>
主题: Re: [Development] Do we have some plans about the damage tracking of 
QtQuick's scene graphics?



On 2022 Jun 2, at 11:47, 弓 长 <[email protected]<mailto:[email protected]>> wrote:

I am doing a Wayland compositor use the QtQuick with wlroots, when the client's 
window has update its buffer, I had to update the whole screen, usually the 
dirty area would be small, but this is only possible in QtQuick.

https://bugreports.qt.io/browse/QTBUG-74928<https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugreports.qt.io%2Fbrowse%2FQTBUG-74928&data=05%7C01%7C%7Ca1fd381f297e4406e78b08da448630e9%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637897640382852921%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=hGFcgkGz8qD9Qdh2Azrvy7%2FMqLYaiapRqvHkmbssCq0%3D&reserved=0>
https://bugreports.qt.io/browse/QTBUG-101976<https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugreports.qt.io%2Fbrowse%2FQTBUG-101976&data=05%7C01%7C%7Ca1fd381f297e4406e78b08da448630e9%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637897640383009130%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=opQ5WkQDlky2AL1aVxhj4iLsn4%2BIGn%2FPP4%2BZanEdBjo%3D&reserved=0>

Others have the same problem, so I wanted to ask how we're going to treat this, 
can upstream accept my patch if I try to fix it?

In Qt Quick the strategy has been to build a complete scene graph for all the 
contents of all visible items that you declared, and during rending, the SG 
nodes that are not visible get culled; so we didn’t have anything like 
QPaintEvent::region() to tell you what part of an Item is “dirty”.  But the new 
thing is two new item flags: ItemObservesViewport, and ItemIsViewport.  See 
https://doc.qt.io/qt-6/qquickitem.html#clipRect<https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdoc.qt.io%2Fqt-6%2Fqquickitem.html%23clipRect&data=05%7C01%7C%7Ca1fd381f297e4406e78b08da448630e9%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637897640383009130%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=lruc6B1PL5B5yuz%2BGfdln3zGJu98OdXwwMw03bXAPiQ%3D&reserved=0>
 : if an item observes the viewport, 
https://doc.qt.io/qt-6/qquickitem.html#updatePaintNode<https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdoc.qt.io%2Fqt-6%2Fqquickitem.html%23updatePaintNode&data=05%7C01%7C%7Ca1fd381f297e4406e78b08da448630e9%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637897640383009130%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=aJ5JHk5FpgBBNoRmiLP7fuxWv5oWX%2FqZyNyD7NUenuY%3D&reserved=0>
 can be implemented to use clipRect() to find out what is dirty, update SG 
nodes within that area, and omit SG nodes that fall outside.  This is the 
foundation for an optimization of the Text item (and TextEdit etc): you can 
load a large document, and if the Text is in a window or Flickable that is much 
too small to show it all, we can avoid rendering most of the text that is 
currently outside the viewport; in that case, updatePaintNode is called more 
often during scrolling, and updates the SG nodes according to the updated clip 
rect, according to the part that is now visible in the viewport. 
(Implementation in 
https://codereview.qt-project.org/c/qt/qtdeclarative/+/282970<https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcodereview.qt-project.org%2Fc%2Fqt%2Fqtdeclarative%2F%2B%2F282970&data=05%7C01%7C%7Ca1fd381f297e4406e78b08da448630e9%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637897640383009130%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=PlbL8a3hE6ZXDLDS7R9GDxiNX5M6KMmPbVFXXAK1Sds%3D&reserved=0>
 and 
https://codereview.qt-project.org/c/qt/qtdeclarative/+/366954<https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcodereview.qt-project.org%2Fc%2Fqt%2Fqtdeclarative%2F%2B%2F366954&data=05%7C01%7C%7Ca1fd381f297e4406e78b08da448630e9%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637897640383009130%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=XCH%2BYE%2FRB9XoBw5gxmLrHGvu5ojdm6sUShJac7XBboo%3D&reserved=0>
 and a few more)

So maybe that will help you in this case too, somehow.  But clients give you 
whole-window textures anyway, when they update their content, so what can you 
avoid updating?  On a big panning virtual desktop, much larger than the screen, 
you could omit windows that are completely outside; that would be just like the 
large-text case.  Or if it’s the compositor’s responsibility to tell clients 
what area is damaged, so that they can avoid repainting the whole window… is 
that the point here?

_______________________________________________
Development mailing list
[email protected]
https://lists.qt-project.org/listinfo/development

Reply via email to