[Development] Using DMA instead of SHM in non OpenGL apps (Linux/Wayland)

David Edmundson davidedmundson at kde.org
Mon Aug 21 10:42:41 CEST 2023


On Fri, Aug 18, 2023 at 8:18 PM Eduardo Hopperdietzel
<ehopperdietzel at gmail.com> wrote:
>
> Hi David,
>
> That's a very good point I hadn't thought about. I will create a testing Wayland client benchmark and measure the time it takes for QPainer to perform different drawing operations using both SHM and DMA. I'll also test buffer resizing and measure the overall (client/compositor) performance by counting the number of frame callbacks (FPS) returned by different compositors.
>
> To ensure the benchmark provides a representative performance evaluation for Qt, I would appreciate it if you could clarify the following doubts:
>
> 1. Does Qt respect the wl_surface frame callbacks sent by the compositor, or does it simply draw as many frames as it can?

Yes to both :)
If you use the normal loop of QWidget::update you'll get the
paintEvent each callback
If you use QWidget::repaint (which docs err against using) you'll
blast out loads of frames then block when you hit some hardcoded limit
which will block till we get buffers released.

> 2. When using SHM, does Qt reuse the same buffer on a wl_surface if it receives a wl_buffer release event before a wl_surface frame callback? And does it use more than one otherwise?

There is a pool that is re-used.
It's double buffered at a minimum but scales to handle the repaint case above.

> 3. If DMA was implemented, I suppose double buffering would be mandatory, or should I consider triple buffering or more?

The logic would be the same.

David


More information about the Development mailing list