Lol, daniel, I'm doing that right now.

On Mon, Mar 14, 2016 at 8:15 PM, Daniel Foerster <pydsig...@gmail.com>
wrote:

> Perhaps a function to blit multiple surfaces at once would be more helpful?
>
>
> On 03/14/2016 07:01 PM, Leif Theden wrote:
>
> Thanks for the benchmark, but your example is not using the
> SDL_LowerBlit.  I did my own testing at home using SDL_LowerBlit and got
> similar results, meaning there is little difference between
> SDL_BlitSurface, and SDL_LowerBlit when all inputs are valid and optimal.
> As my use case has checked all the boxes for requiring
> optimized/lower-level blits (many small blits for small surfaces, all valid
> parameters without need to check each time), I felt compelled to test it.
> I will consider different approaches.
>
> On Mon, Mar 14, 2016 at 5:19 PM, Peter Finlayson <frnkn...@iafrica.com>
> wrote:
>
>> Well, if it gives you any satisfaction... I am not a pygame-team
>> developer, but Ubuntu makes building this stuff easy-ish.
>>
>>
>> I wrote a quick test script, using cProfile for timing information. I
>> stripped almost everything out of the blit call, both in PySurface_Blit()
>> and surf_blit() which calls it.
>>
>> *Results with blit()*
>>
>> 372532 function calls (370644 primitive calls) in 13.809 seconds
>> ncalls  tottime  percall  cumtime  percall filename:lineno(function)
>> 288000    8.232    0.000    8.232    0.000 {method 'blit' of
>> 'pygame.Surface' objects}
>>    600    5.080    0.008    5.080    0.008 {pygame.display.flip}
>>
>>
>> *Results with unsafe_blit()*
>>
>> 372532 function calls (370644 primitive calls) in 13.899 seconds
>> ncalls  tottime  percall  cumtime  percall filename:lineno(function)
>> 288000    8.231    0.000    8.231    0.000 {method 'blit' of
>> 'pygame.Surface' objects}
>>    600    5.125    0.009    5.125    0.009 {pygame.display.flip}
>>
>>
>> Sorry, guys. There really wasn't much there to strip out. Just a couple
>> of if statements.
>>
>> Here is are the C functions I used:
>> https://bitbucket.org/snippets/frnknstn/bKqAz
>>
>> Here is the test Python code I used:
>> https://bitbucket.org/snippets/frnknstn/dKqAr
>>
>> Regards,
>> Peter Finlayson
>>
>>
>>
>> On 2016/03/14 08:55 PM, Leif Theden wrote:
>>
>>> Thanks for taking the time Peter to do this benchmark, but I don't
>>> believe that
>>> this is testing the overhead that exists in the pygame C code.  To
>>> clarify, your
>>> benchmark is slightly contrived in that it is doubling the python
>>> workload, when
>>> I am interested in seeing the results of getting lower to SDL blitting.
>>> I get
>>> your message, I am absolutely clear that python is generally the
>>> bottleneck.  If
>>> you can find a way to isolate and test the following parts of the C
>>> extension
>>> library, I would be happy to see the results.
>>>
>>>
>>> https://bitbucket.org/pygame/pygame/src/d61ea8eabd56025fcb4ceb24d63f9a6a30fbe8d4/src/surface.c?at=default&fileviewer=file-view-default#surface.c-2988:3114
>>>
>>>
>>>
>>> On Mon, Mar 14, 2016 at 12:06 PM, Peter Finlayson <
>>> <frnkn...@iafrica.com>frnkn...@iafrica.com
>>> <mailto:frnkn...@iafrica.com>> wrote:
>>>
>>>     On 2016/03/14 04:35 PM, herve wrote:
>>>
>>>         before being a skilled pygame developer, there is a newby
>>> developer and
>>>         _maybe_
>>>         giving him good performance for simple things will let him stay
>>> and
>>>         growing to
>>>         skilled developer.
>>>
>>>
>>>     A newbie developer seeing a "faster" unchecked function, trying to
>>> use it,
>>>     and then getting discouraged when it inevitably fails... That is
>>> exactly why
>>>     unsafe_blit() is a bad fit for Pygame.
>>>
>>>     If you want a quick benchmark to show you are barking up the wrong
>>> tree, you
>>>     can do one at home, with no C experience needed! Take some game code
>>> you
>>>     wrote, and run it three ways:
>>>
>>>     1. Once unaltered
>>>     2. Once where you run the sprite update code twice (logic, movement
>>> and physics)
>>>     3. Once where you draw every sprite twice
>>>
>>>     Record the FPS every time and see if that shows you where the real
>>>     bottleneck lies. Here are the results I got from one of my projects:
>>>
>>>     1. Base:        125 FPS
>>>     2. Double logic: 75 FPS
>>>     3. Double draw: 115 FPS
>>>
>>>     I had to take the game all the way up to 6x draw calls per frame
>>> (4000+
>>>     blits!) before I got it down to the 75 FPS mark.
>>>
>>>     The point here is that if I was writing a game to have even double
>>> the
>>>     sprites I do now, the game logic overhead would be the problem. Even
>>> if the
>>>     unsafe_blit() magically doubled the speed of my draw routines, it
>>> would have
>>>     little effect on my overall frame rate.
>>>
>>>     Regards,
>>>     Peter Finlayson
>>>
>>>
>>>
>>
>
>

Reply via email to