title: Pygame simple loop runs very slowly on Mac
body: <p><strong>E:</strong> After testing the same on OS X and Linux, I can confirm that the following only happens on OS X. On Linux it literally runs at a thousand fps, as I happened to wonder. Any explanation? I would much prefer developing on Mac, thanks to TextMate.</p>
  
  <p><hr>
  Here's a simple loop that does almost nothing, and still runs very slowly. Can anyone explain why? FPS averages at little over 30, it takes a little over 30ms for each pass over the loop. Window size does not seem to affect this at all, as even setting a tiny window size like (50,50) has the same fps.</p>
  
  <p>I find this weird, I would expect that any contemporary hardware could do a thousand fps for such a simple loop, even when we update every pixel every time. From the profile I can see that <code>{built-in method get}</code> and <code>{built-in method update}</code> combined seem to take around 30ms of time per call, is that really the best we can get out without using dirty rects?</p>
  
  <pre><code>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()
  </code></pre>
  
  <p>Here's the beginning of a cProfile of the main function.</p>
  
  <pre><code>         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 &lt;frozen importlib._bootstrap&gt;:2234(_find_and_load)
       72/1    0.000    0.000    0.151    0.151 &lt;frozen importlib._bootstrap&gt;:2207(_find_and_load_unlocked)
       71/1    0.000    0.000    0.151    0.151 &lt;frozen importlib._bootstrap&gt;:1186(_load_unlocked)
       46/1    0.000    0.000    0.151    0.151 &lt;frozen importlib._bootstrap&gt;:1122(_exec)
       46/1    0.000    0.000    0.151    0.151 &lt;frozen importlib._bootstrap&gt;:1465(exec_module)
       74/1    0.000    0.000    0.151    0.151 &lt;frozen importlib._bootstrap&gt;: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(&lt;module&gt;)
          1    0.000    0.000    0.150    0.150 pkgdata.py:18(&lt;module&gt;)
       25/3    0.000    0.000    0.122    0.041 &lt;frozen importlib._bootstrap&gt;: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(&lt;module&gt;)
          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 &lt;frozen importlib._bootstrap&gt;:2147(_find_spec)
      70/69    0.000    0.000    0.043    0.001 &lt;frozen importlib._bootstrap&gt;:1934(find_spec)
      70/69    0.001    0.000    0.043    0.001 &lt;frozen importlib._bootstrap&gt;: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)
  </code></pre>