diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-07-11 19:02:24 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-07-11 19:02:24 -0700 |
commit | 86aa2d0352d39244a5f3c0ba26fc1a0a0e10d746 (patch) | |
tree | 6b89db5e05783f427979becdadde6932a179064e /src/library_sdl.js | |
parent | 9f9af4cefb142960cad37b3f43f4777e4334f2f2 (diff) | |
parent | 500f11387322611d3fb8d46f415febc32879093a (diff) |
Merge pull request #1354 from fhd/fix-gc-pauses
Fix GC pauses by reusing canvas elements
Diffstat (limited to 'src/library_sdl.js')
-rw-r--r-- | src/library_sdl.js | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js index b64a34ef..50405bb0 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -21,6 +21,8 @@ var LibrarySDL = { version: null, surfaces: {}, + // A pool of freed canvas elements. Reusing them avoids GC pauses. + canvasPool: [], events: [], fonts: [null], @@ -288,7 +290,11 @@ var LibrarySDL = { SDL.GL = SDL.GL || useWebGL; var canvas; if (!usePageCanvas) { - canvas = document.createElement('canvas'); + if (SDL.canvasPool.length > 0) { + canvas = SDL.canvasPool.pop(); + } else { + canvas = document.createElement('canvas'); + } canvas.width = width; canvas.height = height; } else { @@ -355,6 +361,7 @@ var LibrarySDL = { }, freeSurface: function(surf) { + SDL.canvasPool.push(SDL.surfaces[surf].canvas); _free(SDL.surfaces[surf].buffer); _free(SDL.surfaces[surf].pixelFormat); _free(surf); |