Improve performance of image loading in QML on dual core embedded systems



  • Hi,

    I was testing QML performance on a dual-core embedded system. I created a grid with 200 items and showed 21 items in the grid. I noticed that while I scroll, the performance wasn't so good. After doing a lot of digging and comparison I got to some conclusion which is a bit odd: during scroll, core 0 is running at 100%. That's fine. The low priority thread that loads the images was running on core 1. This means that the fact that it has a lower priority is meaningless as core 1 was mostly idle so the scheduler was actually letting it run. Every time it finished decoding an image, it copied it to the main thread, which caused a hick-up. I disabled core 1 and scroll performance was MUCH better and images were decoded only when I was not scrolling.

    I think a good idea would be to set the affinity of these two threads to the same CPU. That's a temporary fix. I think that a better fix would be that the image loader, would not immediatelly return the job upon complete, but wait for a good time (when no animations are running for example) to copy the images to the main thread. Anyone has other ideas?

    Give it a try if you are facing the same issue. If you want to disable a core on linux do the following:

    echo 0 > /sys/devices/system/cpu/cpu1/online

    -Yuval


  • Moderators

    A very interesting and important discovery. Thanks!

    I think you should consider posting this to "QML mailing list":http://lists.qt-project.org/mailman/listinfo. I assume you are talking about Qt4? Have you tried this with Qt5/ scenegraph?



  • Yeah, it's qt4. I'm trying to get qt5 working with eglfs.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.