Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-72578

Bad performance of QtQuick apps under Wayland

    XMLWordPrintable

Details

    • Linux/Wayland
    • 6258c4994200348220be6f35667a2c0f4b705539 (qt/qtwayland/5.12.1)

    Description

      Up until 1dc85b95ab0adc1e805d059e2c35c671ef790011 (Client: Full implementation for frame callbacks) the only usable render loop on Wayland was windows, both basic and threaded resulted in stuttering during scrolling.

      After this recent commit, threaded stutters heavily and windows have incorrect animation timing (too fast). Threaded can be fixed somewhat with:

      diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
      index f596438b..eb48711b 100644
      --- a/src/client/qwaylandwindow.cpp
      +++ b/src/client/qwaylandwindow.cpp
      @@ -1082,6 +1082,9 @@ void QWaylandWindow::requestUpdate()
       // Can be called from the render thread (without locking anything) so make sure to not make races in this method.
       void QWaylandWindow::handleUpdate()
       {
      +    if (mWaitingForFrameCallback)
      +        return;
      +
           // TODO: Should sync subsurfaces avoid requesting frame callbacks?
       
           if (mFrameCallback) {
      

      but the animation timing is still off because those render loops require swap interval = 1, and it now uses 0 instead.

      I can experience it on various Intel GPUs (HD3000, UHD630) and with both Weston and QtWaylandCompositor.

      Attachments

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              johanhelsing Johan Helsing
              nowrep David Rosca
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes