Properly unregister prepareTile listeners

This commit is contained in:
ahocevar
2019-01-13 23:09:24 +01:00
parent e6ca241a27
commit 90c8fc7888
2 changed files with 9 additions and 2 deletions

View File

@@ -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;
}

View File

@@ -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);
});
});