From 90c8fc7888c3cca574a627f58d5c2b170e4e871e Mon Sep 17 00:00:00 2001 From: ahocevar Date: Sun, 13 Jan 2019 23:09:24 +0100 Subject: [PATCH] Properly unregister prepareTile listeners --- src/ol/renderer/canvas/VectorTileLayer.js | 10 ++++++++-- test/spec/ol/renderer/canvas/vectortilelayer.test.js | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/ol/renderer/canvas/VectorTileLayer.js b/src/ol/renderer/canvas/VectorTileLayer.js index 4bee342199..9929c3fe9f 100644 --- a/src/ol/renderer/canvas/VectorTileLayer.js +++ b/src/ol/renderer/canvas/VectorTileLayer.js @@ -162,9 +162,14 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { */ prepareTile(tile, pixelRatio, projection) { const tileUid = getUid(tile); - if (tile.getState() === TileState.LOADED || tile.getState() === TileState.ERROR) { + const state = tile.getState(); + if (((state === TileState.LOADED && tile.hifi) || + state === TileState.ERROR || state === TileState.ABORT) && + tileUid in this.tileListenerKeys_) { unlistenByKey(this.tileListenerKeys_[tileUid]); delete this.tileListenerKeys_[tileUid]; + } + if (state === TileState.LOADED || state === TileState.ERROR) { this.updateExecutorGroup_(tile, pixelRatio, projection); if (this.tileImageNeedsRender_(tile, pixelRatio, projection)) { this.renderTileImageQueue_[tileUid] = tile; @@ -177,13 +182,14 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { */ getTile(z, x, y, pixelRatio, projection) { const tile = /** @type {import("../../VectorRenderTile.js").default} */ (super.getTile(z, x, y, pixelRatio, projection)); - this.prepareTile(tile, pixelRatio, projection); if (tile.getState() < TileState.LOADED) { const tileUid = getUid(tile); if (!(tileUid in this.tileListenerKeys_)) { const listenerKey = listen(tile, EventType.CHANGE, this.prepareTile.bind(this, tile, pixelRatio, projection)); this.tileListenerKeys_[tileUid] = listenerKey; } + } else { + this.prepareTile(tile, pixelRatio, projection); } return tile; } diff --git a/test/spec/ol/renderer/canvas/vectortilelayer.test.js b/test/spec/ol/renderer/canvas/vectortilelayer.test.js index 4ffb3365d8..b2b402e73e 100644 --- a/test/spec/ol/renderer/canvas/vectortilelayer.test.js +++ b/test/spec/ol/renderer/canvas/vectortilelayer.test.js @@ -281,6 +281,7 @@ describe('ol.renderer.canvas.VectorTileLayer', function() { layer.changed(); renderer.renderFrame(frameState, {}); expect(replayState.renderedTileRevision).to.be(revision + 1); + expect(Object.keys(renderer.tileListenerKeys_).length).to.be(0); }); });