aboutsummaryrefslogtreecommitdiff
path: root/src/library_sdl.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-07-11 19:02:24 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-07-11 19:02:24 -0700
commit86aa2d0352d39244a5f3c0ba26fc1a0a0e10d746 (patch)
tree6b89db5e05783f427979becdadde6932a179064e /src/library_sdl.js
parent9f9af4cefb142960cad37b3f43f4777e4334f2f2 (diff)
parent500f11387322611d3fb8d46f415febc32879093a (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.js9
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);