I have an application which needs to do frequent redraws, lets say 30 times per second. When I do this, the larger my component is the more the CPU use increases, even if I do nothing in paint. To illustrate this I have modified the juce tutorial, to do nothing but start a timer which calls repaint every 33 ms. There is a single component and it has nothing in paint. In Full screen, on a computer with a single CPU Pentium 4 2.0 GHz, 1 GB of RAM, this takes more then 30 % of CPU. It takes less then 2% in a smaller size.
I do realize that some of this makes sense, as we go through a lot of pixels, even if I do noting in repaint, juce must still do something and paint all pixels grey and there are more of them when in full screen. (I can see my (empty - grey) component being re-drawn when I use JUCE_ENABLE_REPAINT_DEBUGGING). I am also afraid this might be an OS problem, but so far I observed the increase Windows 7 and Windows XP. I also realize it might not be so bad that the thread that does the painting used up the CPU when there is nothing else to do, however the problem is it uses it even when there is.
My actual application is a video player. I use ffmpeg for decoding the video. On the computer mentioned above, my video player was unusable in full screen mode, while other video players(VLC, Windows Media Player) worked fine. VLC in fact at full screen uses 5 % CPU, while doing all the decoding, re-sampiling, re-scaling necessary and displaying the images. Even forgetting about possible hardware acceleration that I am not doing, my empty full screen app refreshing at the obvious same rate eats 30% .
I have been profiling this for a while, although I did not concentrate on this (repaint frequent rate) directly yet. My previous bottleneck was the image rescaling (I tracked it all the way inside TransformedImageFillEdgeTableRenderer::generate), in particular even with low quality rendering at neirest-neghbour, CPU was very high. I was able to push the rescaling down in the FFMPEG library, which saved me a bit of CPU - from 30% to 22% on a Intel Core i5, but didn’t help much on the less powerful one.
I have however checked all my CPU uses and my next bottleneck is indeed the frequent repaint. I am about to start profiling this scenario and see where the CPU is used most, but I would like to know if anyone else experience something like this and was able to fix it. Alternatively, if it is impossible/ not recomended to do a repaint every 33 ms in full screen, I would also like to know so I know where to compromise.
Thank you very much for all your help,
I have attached the app source, although it is simply the tutorial modified…