[Gambas-user] sdl Draw event overhead is killing frame rate

Kevin Fishburne kevinfishburne at ...1887...
Sun Jan 19 09:11:46 CET 2014


On 01/17/2014 11:00 PM, Kevin Fishburne wrote:
> On 01/16/2014 05:07 PM, Benoît Minisini wrote:
>> Le 16/01/2014 22:40, Benoît Minisini a écrit :
>>> Le 16/01/2014 06:03, Kevin Fishburne a écrit :
>>>> The results are in, and they don't tell me much. :( I attached the
>>>> updated test project, which includes the test results in comments at the
>>>> top. They are:
>>>>
>>>> ' No Stop Event | No Geometry | Binary NVIDIA driver | 236 FPS
>>>> ' Stop Event    | No Geometry | Binary NVIDIA driver | 158 FPS
>>>> ' No Stop Event | No Geometry | Nouveau driver       | 238 FPS
>>>> ' Stop Event    | No Geometry | Nouveau driver       | 159 FPS
>>>> ' No Stop Event | Geometry    | Binary NVIDIA driver | 236 FPS
>>>> ' Stop Event    | Geometry    | Binary NVIDIA driver | 155 FPS
>>>> ' No Stop Event | Geometry    | Nouveau driver       | 218 FPS
>>>> ' Stop Event    | Geometry    | Nouveau driver       | 161 FPS
>>>>
>>>> Adding "Stop Event" reduces thread CPU usage from 100% to 84%. The frame
>>>> rate is consistently lower when using Stop Event. That 16% difference in
>>>> CPU also doesn't seem to correlate with the difference in frame rates,
>>>> as the frame rate difference has a significantly larger discrepancy.
>>>> Factors unknown to me could be contributing to that of course...
>>> It's actually simple: when 'Stop Event' is used, the process is paused
>>> during a little delay (about 10 ms according to the SDL_Delay function
>>> documentation). So it acts as a frame rate limitation.
>>>
>>> If you don't use 'Stop Event', there is no such delay. But you get in
>>> both cases a call to the Gambas event loop with a 10 ms timeout (yes, 10
>>> ms again. This is usually the smallest delay a Linux Kernel can handle).
>>> That means if there is no Gambas event to process, the process is paused
>>> during 10 ms. If there is a Gambas event to process, there is no pause.
>>>
>>> I will try to remove all this delays, and you will tell me if it helps you.
>>>
>> Please test revision #6085, and tell me if it changes anything in your
>> framerate.
>>
>> I removed the delay if Stop Event is called, and I lower the timeout of
>> the Gambas event loop call to 1 ms instead of 10 ms, which force Gambas
>> to use a busy loop instead of sleeping the process.
>>
> The FPS are the same when not calling Stop Event, but are now faster
> when calling Stop Event. Either way they still max out between 230-240 FPS.
>
> I set up a VM so I can compile specific revisions of Gambas and will see
> if older versions exhibit different behavior. I'll let you know what I
> find, and hopefully will be able to narrow it down to a specific
> revision. If I can't do anything to get a higher frame rate on an empty
> SDL loop then something's gone horribly wrong on my end.
>
Here are the results of my test ("---" means similar to the results below):

-=-

Revision  Version   Status  FPS       FPS
                             1280x720  Minimized

5938      3.5.90    Bad ---       ---
5937      3.5.90    Bad     160       187
5936      3.5.90    Good    ---       ---
5931      3.5       Good    ---       ---
5923      3.5       Good    ---       ---
5907      3.5       Good    ---       ---
5875      3.5       Good    530       2595
5750      3.4.90    Good    490       2405
5500      3.4       Good    488       2545

-=-

It seems the change slowing the SDL Draw event (or whatever is 
happening) appeared in revision 5937 and later, with the change absent 
in 5936 and earlier.

What's interesting is that the SDL window being minimized in 5936 or 
earlier greatly increases the frame rate, though it makes no difference 
in later revisions. Regardless, the FPS in 5936 and earlier are 
significantly higher than those of revisions 5937 and newer with both 
empty and populated Draw event procedures. That would effect any program 
using SDL to create/manage a window.

-- 
Kevin Fishburne
Eight Virtues
www: http://sales.eightvirtues.com
e-mail: sales at ...1887...
phone: (770) 853-6271





More information about the User mailing list