Important: Please read the Qt Code of Conduct -

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


  • Moderators

    A very interesting and important discovery. Thanks!

    I think you should consider posting this to "QML mailing list": 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