Pygame simple loop works really slow on Mac

E: After testing on OS X and Linux, I can confirm that only the following happens on OS X. On Linux, it literally runs at a speed of a thousand frames per second, as I was curious. Any explanation? I would rather develop on a Mac thanks to TextMate.


Here's a simple loop that does almost nothing and still runs very slowly. Can anyone explain why? The average FPS is a little over 30, a little more than 30 ms is required for each loop loop. Window size does not seem to affect this, since even setting a tiny window size, such as (50.50), has the same fps.

I find it strange, I would expect that any modern equipment can make a thousand frames per second for such a simple cycle, even when we update every pixel every time. From the profile, I see that the {built-in method get} and {built-in method update} together, apparently, take about 30 ms to call, is this really the best we can get out without using dirty rectangles?

 pygame.init() clock = pygame.time.Clock() fps = 1000 #milliseconds from last frame new_time, old_time = None, None done = False while not done: clock.tick(fps) for event in pygame.event.get(): if event.type == pygame.QUIT: done = True # show fps and milliseconds if new_time: old_time = new_time new_time = pygame.time.get_ticks() if new_time and old_time: pygame.display.set_caption("fps: " + str(int(clock.get_fps())) + " ms: " + str(new_time-old_time)) pygame.display.update() 

This is where cProfile of the main function begins.

  94503 function calls (92211 primitive calls) in 21.011 seconds Ordered by: cumulative time ncalls tottime percall cumtime percall filename:lineno(function) 1 0.026 0.026 21.011 21.011 new_main.py:34(main) 652 14.048 0.022 14.048 0.022 {built-in method get} 652 5.864 0.009 5.864 0.009 {built-in method update} 1 0.444 0.444 0.634 0.634 {built-in method init} 651 0.278 0.000 0.278 0.000 {built-in method set_caption} 72/1 0.000 0.000 0.151 0.151 <frozen importlib._bootstrap>:2234(_find_and_load) 72/1 0.000 0.000 0.151 0.151 <frozen importlib._bootstrap>:2207(_find_and_load_unlocked) 71/1 0.000 0.000 0.151 0.151 <frozen importlib._bootstrap>:1186(_load_unlocked) 46/1 0.000 0.000 0.151 0.151 <frozen importlib._bootstrap>:1122(_exec) 46/1 0.000 0.000 0.151 0.151 <frozen importlib._bootstrap>:1465(exec_module) 74/1 0.000 0.000 0.151 0.151 <frozen importlib._bootstrap>:313(_call_with_frames_removed) 54/1 0.004 0.000 0.151 0.151 {built-in method exec} 1 0.000 0.000 0.151 0.151 macosx.py:1(<module>) 1 0.000 0.000 0.150 0.150 pkgdata.py:18(<module>) 25/3 0.000 0.000 0.122 0.041 <frozen importlib._bootstrap>:1156(_load_backward_compatible) 8/1 0.026 0.003 0.121 0.121 {method 'load_module' of 'zipimport.zipimporter' objects} 1 0.000 0.000 0.101 0.101 __init__.py:15(<module>) 1 0.000 0.000 0.079 0.079 config_reader.py:115(build_from_config) 2 0.000 0.000 0.056 0.028 common.py:43(reset_screen) 2 0.055 0.027 0.055 0.027 {built-in method set_mode} 72/71 0.001 0.000 0.045 0.001 <frozen importlib._bootstrap>:2147(_find_spec) 70/69 0.000 0.000 0.043 0.001 <frozen importlib._bootstrap>:1934(find_spec) 70/69 0.001 0.000 0.043 0.001 <frozen importlib._bootstrap>:1902(_get_spec) 92 0.041 0.000 0.041 0.000 {built-in method load_extended} 6 0.000 0.000 0.041 0.007 new_map.py:74(add_character) 6 0.000 0.000 0.041 0.007 new_character.py:32(added_to_map) 6 0.001 0.000 0.041 0.007 new_character.py:265(__init__) 1 0.000 0.000 0.038 0.038 macosx.py:14(Video_AutoInit) 1 0.038 0.038 0.038 0.038 {built-in method InstallNSApplication} 1 0.036 0.036 0.036 0.036 {built-in method quit} 65 0.001 0.000 0.036 0.001 re.py:277(_compile) 49 0.000 0.000 0.036 0.001 re.py:221(compile) 
+7
pygame
source share
1 answer

The answer to this ended with the fact that the retina display under OS X is a differentiating factor. Running even on an external display on the same Mac works fine. But moving the window onto the retina screen makes it sluggish. With or without an external monitor connected.

On the other hand, it works great on a single retina screen under Linux. It's not clear what the difference is between display / rendering managers, what causes this, but I doubt there is anything to be done about it.

+6
source share

All Articles