From a5d93117ed0797ef70931dc95fa6976dc063d6e2 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Mon, 21 Jan 2019 22:34:01 +0100 Subject: [PATCH] Also consider lower resolution tiles as used tiles --- src/ol/PluggableMap.js | 2 +- src/ol/TileCache.js | 3 +-- src/ol/renderer/Layer.js | 18 +++++------------- src/ol/renderer/canvas/TileLayer.js | 2 +- 4 files changed, 8 insertions(+), 17 deletions(-) diff --git a/src/ol/PluggableMap.js b/src/ol/PluggableMap.js index 97ecd273ec..f8ceb3310d 100644 --- a/src/ol/PluggableMap.js +++ b/src/ol/PluggableMap.js @@ -47,7 +47,7 @@ import {create as createTransform, apply as applyTransform} from './transform.js * @property {import("./size.js").Size} size * @property {!Object} skippedFeatureUids * @property {TileQueue} tileQueue - * @property {Object>} usedTiles + * @property {!Object>} usedTiles * @property {Array} viewHints * @property {!Object>} wantedTiles */ diff --git a/src/ol/TileCache.js b/src/ol/TileCache.js index 54b0cb4fd6..701e48e076 100644 --- a/src/ol/TileCache.js +++ b/src/ol/TileCache.js @@ -21,8 +21,7 @@ class TileCache extends LRUCache { expireCache(usedTiles) { while (this.canExpireCache()) { const tile = this.peekLast(); - const zKey = tile.tileCoord[0].toString(); - if (zKey in usedTiles && usedTiles[zKey].contains(tile.tileCoord)) { + if (tile.getKey() in usedTiles) { break; } else { this.pop().dispose(); diff --git a/src/ol/renderer/Layer.js b/src/ol/renderer/Layer.js index 3dd5682626..4d2249a180 100644 --- a/src/ol/renderer/Layer.js +++ b/src/ol/renderer/Layer.js @@ -192,26 +192,18 @@ class LayerRenderer extends Observable { } /** - * @param {!Object>} usedTiles Used tiles. + * @param {!Object>} usedTiles Used tiles. * @param {import("../source/Tile.js").default} tileSource Tile source. - * @param {number} z Z. - * @param {import("../TileRange.js").default} tileRange Tile range. + * @param {import('../Tile.js').default} tile Tile. * @protected */ - updateUsedTiles(usedTiles, tileSource, z, tileRange) { + updateUsedTiles(usedTiles, tileSource, tile) { // FIXME should we use tilesToDrawByZ instead? const tileSourceKey = getUid(tileSource); - const zKey = z.toString(); - if (tileSourceKey in usedTiles) { - if (zKey in usedTiles[tileSourceKey]) { - usedTiles[tileSourceKey][zKey].extend(tileRange); - } else { - usedTiles[tileSourceKey][zKey] = tileRange; - } - } else { + if (!(tileSourceKey in usedTiles)) { usedTiles[tileSourceKey] = {}; - usedTiles[tileSourceKey][zKey] = tileRange; } + usedTiles[tileSourceKey][tile.getKey()] = true; } /** diff --git a/src/ol/renderer/canvas/TileLayer.js b/src/ol/renderer/canvas/TileLayer.js index 104ae39ad1..42c51e60e6 100644 --- a/src/ol/renderer/canvas/TileLayer.js +++ b/src/ol/renderer/canvas/TileLayer.js @@ -283,6 +283,7 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer { this.drawTileImage(tile, frameState, layerState, x, y, w, h, tileGutter, z === currentZ); this.renderedTiles.push(tile); + this.updateUsedTiles(frameState.usedTiles, tileSource, tile); } } @@ -291,7 +292,6 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer { this.renderedResolution = tileResolution; this.renderedExtent_ = canvasExtent; - this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio, projection, extent, z, tileLayer.getPreload()); this.scheduleExpireCache(frameState, tileSource);