Emscripten SDL2 performance

I tried the software renderer on Chome (haven’t had chance to do it on Firefox or Safari yet).

It turns out that SDL_FillRect is significantly faster on the software render than hardware acclerated!?!?!

Even SDL_CopyRect is only something like 30% slower on Software.

To try it yourself, switch the second parameter to the render index, e.g.:
renderer = SDL_CreateRenderer(window, 1, SDL_RENDERER_ACCELERATED);

Astrid:SDL2_emscripten_tests rob$ emrun --browser=chrome sdl2_test2.html
Starting browser: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --enable-nacl --enable-pnacl --disable-restore-session-state --enable-webgl --no-default-browser-check --no-first-run --allow-file-access-from-files http://localhost:6931/sdl2_test2.html
We compiled against SDL version 2.0.9 …
But we are linking against SDL version 2.0.9.
Number of renderers = 2
Renderer 0: opengles2 ACCELERATED PRESENTVSYNC TARGETTEXTURE
Renderer 1: software SOFTWARE TARGETTEXTURE
Current Renderer: software SOFTWARE TARGETTEXTURE
Starting main loop
FPS = 20.408163 inf inf Sprites=100 Rects=0
FPS = 55.555556 60.118464 66.666667 Sprites=100 Rects=0
FPS = 55.555556 60.077614 66.666667 Sprites=200 Rects=0
FPS = 55.555556 60.093273 66.666667 Sprites=200 Rects=0
FPS = 55.555556 60.084423 66.666667 Sprites=300 Rects=0
FPS = 28.571429 59.905170 66.666667 Sprites=300 Rects=0
FPS = 29.411765 59.042354 66.666667 Sprites=400 Rects=0
FPS = 55.555556 60.075572 66.666667 Sprites=400 Rects=0
==snip==
FPS = 18.181818 19.844733 21.276596 Sprites=1400 Rects=0
FPS = 18.181818 19.885803 21.276596 Sprites=1400 Rects=0
FPS = 17.241379 18.654962 20.000000 Sprites=1500 Rects=0
FPS = 16.666667 18.526014 20.000000 Sprites=1500 Rects=0
Switch to fixed width rects
FPS = 29.411765 59.954528 66.666667 Sprites=0 Rects=100
FPS = 52.631579 60.134266 66.666667 Sprites=0 Rects=100
FPS = 52.631579 60.178664 66.666667 Sprites=0 Rects=200
FPS = 52.631579 60.148758 71.428571 Sprites=0 Rects=200
FPS = 52.631579 60.139713 66.666667 Sprites=0 Rects=300
FPS = 55.555556 60.019744 66.666667 Sprites=0 Rects=300
FPS = 55.555556 60.121187 66.666667 Sprites=0 Rects=400
FPS = 55.555556 60.099401 66.666667 Sprites=0 Rects=400
==snip==
FPS = 52.631579 60.136452 66.666667 Sprites=0 Rects=1300
FPS = 52.631579 60.128139 66.666667 Sprites=0 Rects=1300
FPS = 55.555556 60.190146 71.428571 Sprites=0 Rects=1400
FPS = 52.631579 60.059375 66.666667 Sprites=0 Rects=1400
FPS = 52.631579 60.177159 66.666667 Sprites=0 Rects=1500
FPS = 52.631579 60.206721 66.666667 Sprites=0 Rects=1500
Switch to variable rects
FPS = 55.555556 60.093273 66.666667 Sprites=0 Rects=100
FPS = 55.555556 60.109613 66.666667 Sprites=0 Rects=100
FPS = 55.555556 60.086465 66.666667 Sprites=0 Rects=200
FPS = 52.631579 60.231768 66.666667 Sprites=0 Rects=200
FPS = 52.631579 60.103629 66.666667 Sprites=0 Rects=300
FPS = 55.555556 60.136166 66.666667 Sprites=0 Rects=300
FPS = 55.555556 60.113017 66.666667 Sprites=0 Rects=400
FPS = 55.555556 60.121187 66.666667 Sprites=0 Rects=400
==snip==
FPS = 47.619048 57.486573 62.500000 Sprites=0 Rects=1300
FPS = 45.454545 57.255866 58.823529 Sprites=0 Rects=1300
FPS = 43.478261 53.468696 55.555556 Sprites=0 Rects=1400
FPS = 45.454545 53.556176 55.555556 Sprites=0 Rects=1400
FPS = 41.666667 50.425543 52.631579 Sprites=0 Rects=1500
FPS = 41.666667 50.758383 52.631579 Sprites=0 Rects=1500
Switch to sprites

Compare this to the hardware acceleration…

Astrid:SDL2_emscripten_tests rob$ emrun --browser=chrome sdl2_test2.html
Starting browser: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --enable-nacl --enable-pnacl --disable-restore-session-state --enable-webgl --no-default-browser-check --no-first-run --allow-file-access-from-files http://localhost:6931/sdl2_test2.html
We compiled against SDL version 2.0.9 …
But we are linking against SDL version 2.0.9.
Number of renderers = 2
Renderer 0: opengles2 ACCELERATED PRESENTVSYNC TARGETTEXTURE
Renderer 1: software SOFTWARE TARGETTEXTURE
Current Renderer: opengles2 ACCELERATED TARGETTEXTURE
Starting main loop
FPS = 30.303030 inf inf Sprites=100 Rects=0
FPS = 55.555556 60.182462 66.666667 Sprites=100 Rects=0
FPS = 55.555556 60.069444 66.666667 Sprites=200 Rects=0
FPS = 55.555556 60.061275 66.666667 Sprites=200 Rects=0
FPS = 55.555556 60.091912 66.666667 Sprites=300 Rects=0
FPS = 55.555556 60.111656 66.666667 Sprites=300 Rects=0
FPS = 52.631579 60.120650 66.666667 Sprites=400 Rects=0
FPS = 55.555556 60.085784 66.666667 Sprites=400 Rects=0
==snip==
FPS = 17.857143 28.652802 58.823529 Sprites=1400 Rects=0
FPS = 17.857143 28.616811 47.619048 Sprites=1400 Rects=0
FPS = 11.627907 27.712723 47.619048 Sprites=1500 Rects=0
FPS = 17.241379 27.114697 47.619048 Sprites=1500 Rects=0
Switch to fixed width rects
FPS = 11.904762 59.699560 66.666667 Sprites=0 Rects=100
FPS = 55.555556 60.081019 66.666667 Sprites=0 Rects=100
FPS = 52.631579 60.160281 66.666667 Sprites=0 Rects=200
FPS = 52.631579 60.134947 66.666667 Sprites=0 Rects=200
FPS = 52.631579 60.170350 66.666667 Sprites=0 Rects=300
FPS = 55.555556 60.095997 66.666667 Sprites=0 Rects=300
FPS = 55.555556 60.063317 66.666667 Sprites=0 Rects=400
FPS = 55.555556 60.072849 62.500000 Sprites=0 Rects=400
==snip==
FPS = 7.142857 31.452951 142.857143 Sprites=0 Rects=1300
FPS = 9.433962 28.237564 142.857143 Sprites=0 Rects=1300
FPS = 10.989011 44.452337 200.000000 Sprites=0 Rects=1400
FPS = 7.299270 36.446927 125.000000 Sprites=0 Rects=1400
FPS = 6.289308 29.953635 166.666667 Sprites=0 Rects=1500
FPS = 4.201681 33.029884 142.857143 Sprites=0 Rects=1500
Switch to variable rects
FPS = 18.518519 62.726817 500.000000 Sprites=0 Rects=100
FPS = 55.555556 60.123911 66.666667 Sprites=0 Rects=100
FPS = 52.631579 60.179969 71.428571 Sprites=0 Rects=200
FPS = 52.631579 60.149245 66.666667 Sprites=0 Rects=200
FPS = 55.555556 60.084423 66.666667 Sprites=0 Rects=300
FPS = 55.555556 60.075572 66.666667 Sprites=0 Rects=300
FPS = 52.631579 60.134266 66.666667 Sprites=0 Rects=400
FPS = 55.555556 60.095997 66.666667 Sprites=0 Rects=400
==snip==
FPS = 9.708738 43.691633 125.000000 Sprites=0 Rects=1300
FPS = 10.101010 42.506288 142.857143 Sprites=0 Rects=1300
FPS = 9.009009 36.010872 125.000000 Sprites=0 Rects=1400
FPS = 9.708738 39.058487 142.857143 Sprites=0 Rects=1400
FPS = 7.518797 35.660855 166.666667 Sprites=0 Rects=1500
FPS = 9.345794 28.156400 142.857143 Sprites=0 Rects=1500