Quantcast
Channel: Jobs
Viewing all articles
Browse latest Browse all 18427

QML/SceneGraph rendering performance on eglfs

$
0
0
I’m currently observing a strange behavior on Qt-5.0.1 running on a TI AM3517 with eglfs platform. With a very simple QML app (NumberAnimation on rotation of a 400×400 Rectangle) I obtain a render frequency (measured using the signal QQuickWindow::beforeRendering()) of 22 Hz but the rendering looks very jerky (at an estimated 10 Hz). import QtQuick 2.0 Rectangle {     id: root       property int frameCounter: 0     property int fps: 0;       width: 800     height: 480       Rectangle {             id: image             color: "green"             width: 400; height: 400             anchors.centerIn: parent               NumberAnimation on rotation {                 from: 0.0; to: 360.0                 duration: 5000                 loops: Animation.Infinite             }               onRotationChanged: frameCounter++     }       MouseArea {         anchors.fill: parent         onClicked: Qt.quit()     } } Measuring the call timing of QSGDefaultRenderer::render() method yields that every third frame takes about 100 ms whereas all others are ready after ~4 ms: QSGDefaultRenderer::render period: 3.00449e+07 ms (first measurement invalid) QSGDefaultRenderer::render period: 154.114 ms QSGDefaultRenderer::render period: 6.62231 ms QSGDefaultRenderer::render period: 5.24902 ms QSGDefaultRenderer::render period: 4.60815 ms QSGDefaultRenderer::render period: 103.455 ms QSGDefaultRenderer::render period: 4.60815 ms QSGDefaultRenderer::render period: 4.18091 ms QSGDefaultRenderer::render period: 100.555 ms QSGDefaultRenderer::render period: 4.57764 ms QSGDefaultRenderer::render period: 4.24194 ms QSGDefaultRenderer::render period: 100.586 ms QSGDefaultRenderer::render period: 4.54712 ms QSGDefaultRenderer::render period: 4.21142 ms … Well, on eglfs it is said that the threaded renderer is activated by default, so I tried QML_BAD_GUI_RENDER_LOOP=1. The good news is that the animation is running much smoother (real 43 fps), the bad is that from time to time (every ~2 sec) I still observe a render period of ~100 ms: QSGDefaultRenderer::render period: 3.00853e+07 ms QSGDefaultRenderer::render period: 153.351 ms QSGDefaultRenderer::render period: 20.4163 ms QSGDefaultRenderer::render period: 12.7869 ms QSGDefaultRenderer::render period: 16.4795 ms … 92 times QSGDefaultRenderer::render period: ~15.5 ms … QSGDefaultRenderer::render period: 15.1672 ms QSGDefaultRenderer::render period: 105.499 ms QSGDefaultRenderer::render period: 17.1509 ms 105 times QSGDefaultRenderer::render period: ~15.5 ms QSGDefaultRenderer::render period: 15.3503 ms QSGDefaultRenderer::render period: 100.342 ms QSGDefaultRenderer::render period: 17.0593 ms … I tracked it further down to the glDrawElements call in QSGRenderer::draw() which is responsible for ~96 ms of the 100 ms mentioned above. This call seems to be blocked somewhere very regularly. Any hints what could be the reason? Why does the threaded renderer sometimes have a rendering period of ~4 ms? It should never be smaller than 16.66? Flobe.

Viewing all articles
Browse latest Browse all 18427

Trending Articles