From b433cfb792429a63a460d4c3d2ce5a21a026d168 Mon Sep 17 00:00:00 2001 From: David Manthey Date: Wed, 26 Jun 2019 08:54:19 -0400 Subject: [PATCH] Explicitly exit retired renderers. Before, this was waiting for GC to clean up unused renderers, which might not happen if renderers were created and destroyed without a major GC event. If GC didn't occur, the webgl context wouldn't be released. This explicitly exits the renderers (and explicitly loses the webgl context) as soon as the renderer is no longer in use (due to autosharing). --- src/webgl/layer.js | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/webgl/layer.js b/src/webgl/layer.js index 80faf8789e..1de01d8644 100644 --- a/src/webgl/layer.js +++ b/src/webgl/layer.js @@ -136,8 +136,6 @@ var webgl_layer = function () { map._updateAutoshareRenderers = function () { var layers = map.sortedLayers(), renderer, - used_canvases = [], - canvases = [], rerender_list = [], opacity; layers.forEach(function (layer) { @@ -149,12 +147,10 @@ var webgl_layer = function () { rerender_list.push(layer.renderer()); } renderer = layer.renderer(); - used_canvases.push(renderer.canvas()[0]); opacity = layer.opacity(); } else { if (layer.renderer() !== renderer) { rerender_list.push(layer.renderer()); - canvases.push(layer.renderer().canvas()[0]); layer.switchRenderer(renderer, false); rerender_list.push(layer.renderer()); } @@ -169,15 +165,13 @@ var webgl_layer = function () { }); layers.forEach(function (layer) { if (rerender_list.indexOf(layer.renderer()) >= 0) { - layer.renderer()._render(); + layer.renderer()._renderFrame(); rerender_list = rerender_list.filter((val) => val !== layer.renderer()); } }); - canvases.forEach(function (canvas) { - if (used_canvases.indexOf(canvas) < 0) { - canvas.remove(); - used_canvases.push(canvas); - } + /* explicitly exit any renderers we no longer use */ + rerender_list.forEach(function (renderer) { + renderer._exit(); }); };