aboutsummaryrefslogtreecommitdiff
path: root/src/library_sdl.js
diff options
context:
space:
mode:
authorFelix H. Dahlke <fhd@ubercode.de>2013-07-08 17:18:29 +0200
committerFelix H. Dahlke <fhd@ubercode.de>2013-07-08 17:18:29 +0200
commit907a96af0c740dfa188cfb6dbce2e8ecf1f48859 (patch)
tree5241636f214b2aedb8e2845a793686ee2fb95b47 /src/library_sdl.js
parent6dff9374e3cb873968f9a58f80b625e7f256d6d9 (diff)
Fix GC pauses by reusing canvas elements
Diffstat (limited to 'src/library_sdl.js')
-rw-r--r--src/library_sdl.js7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js
index 176a2fae..eb582273 100644
--- a/src/library_sdl.js
+++ b/src/library_sdl.js
@@ -21,6 +21,7 @@ var LibrarySDL = {
version: null,
surfaces: {},
+ canvasPool: [],
events: [],
fonts: [null],
@@ -288,7 +289,10 @@ 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 +359,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);