From 26ff8899c39039459b67e5dbe0fe7133c3653d9a Mon Sep 17 00:00:00 2001 From: ahocevar Date: Fri, 25 Jan 2019 00:28:38 +0100 Subject: [PATCH 1/5] Do not load new tiles when low on frame budget --- src/ol/PluggableMap.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ol/PluggableMap.js b/src/ol/PluggableMap.js index f8ceb3310d..40ca6fad56 100644 --- a/src/ol/PluggableMap.js +++ b/src/ol/PluggableMap.js @@ -934,8 +934,9 @@ class PluggableMap extends BaseObject { if (frameState) { const hints = frameState.viewHints; if (hints[ViewHint.ANIMATING] || hints[ViewHint.INTERACTING]) { - maxTotalLoading = 8; - maxNewLoads = 2; + const lowOnFrameBudget = Date.now() - frameState.time > 8; + maxTotalLoading = lowOnFrameBudget ? 0 : 8; + maxNewLoads = lowOnFrameBudget ? 0 : 2; } } if (tileQueue.getTilesLoading() < maxTotalLoading) { @@ -943,6 +944,7 @@ class PluggableMap extends BaseObject { tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads); } } + if (frameState && this.hasListener(RenderEventType.RENDERCOMPLETE) && !frameState.animate && !this.tileQueue_.getTilesLoading() && !getLoading(this.getLayers().getArray())) { this.renderer_.dispatchRenderEvent(RenderEventType.RENDERCOMPLETE, frameState); From 6e58796f663a231917d6d68c001d4bc3fac66505 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Fri, 25 Jan 2019 01:21:40 +0100 Subject: [PATCH 2/5] Do not keep potentially unused tiles in the render queue --- src/ol/renderer/canvas/VectorTileLayer.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/ol/renderer/canvas/VectorTileLayer.js b/src/ol/renderer/canvas/VectorTileLayer.js index e38fc9384d..a9286c2210 100644 --- a/src/ol/renderer/canvas/VectorTileLayer.js +++ b/src/ol/renderer/canvas/VectorTileLayer.js @@ -29,7 +29,7 @@ import { makeInverse } from '../../transform.js'; import CanvasExecutorGroup, {replayDeclutter} from '../../render/canvas/ExecutorGroup.js'; -import {isEmpty} from '../../obj.js'; +import {clear} from '../../obj.js'; /** @@ -550,10 +550,7 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { delete this.renderTileImageQueue_[uid]; this.renderTileImage_(tile, frameState.pixelRatio, frameState.viewState.projection); } - if (!isEmpty(this.renderTileImageQueue_)) { - // If there's items left in the queue, render them in another frame - frameState.animate = true; - } + clear(this.renderTileImageQueue_); } /** From 4f487c4df1b392677ca4d2caa267f0258d9dcbf2 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Fri, 25 Jan 2019 01:29:05 +0100 Subject: [PATCH 3/5] Update comment --- src/ol/renderer/canvas/VectorTileLayer.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ol/renderer/canvas/VectorTileLayer.js b/src/ol/renderer/canvas/VectorTileLayer.js index a9286c2210..7c9c643fb9 100644 --- a/src/ol/renderer/canvas/VectorTileLayer.js +++ b/src/ol/renderer/canvas/VectorTileLayer.js @@ -479,8 +479,7 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { for (let t = 0, tt = executorGroups.length; t < tt; ++t) { const executorGroup = executorGroups[t]; if (!executorGroup.hasExecutors(replayTypes)) { - // sourceTile was not yet loaded when this.createReplayGroup_() was - // called, or it has no replays of the types we want to render + // sourceTile has no instructions of the types we want to render continue; } const currentZ = tile.tileCoord[0]; From 59cf0c31b6bf2f2e41f82a5f8ce23bc75869366f Mon Sep 17 00:00:00 2001 From: ahocevar Date: Fri, 25 Jan 2019 01:30:16 +0100 Subject: [PATCH 4/5] Allow bigger cache now that we do less clipping --- src/ol/source/Tile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ol/source/Tile.js b/src/ol/source/Tile.js index 3eda3a99c0..9ea34b0ea7 100644 --- a/src/ol/source/Tile.js +++ b/src/ol/source/Tile.js @@ -78,7 +78,7 @@ class TileSource extends Source { const canUseScreen = 'screen ' in self; const width = canUseScreen ? (screen.availWidth || screen.width) : 1920; const height = canUseScreen ? (screen.availHeight || screen.height) : 1080; - cacheSize = 2 * Math.ceil(width / tileSize[0]) * Math.ceil(height / tileSize[1]); + cacheSize = 4 * Math.ceil(width / tileSize[0]) * Math.ceil(height / tileSize[1]); } /** From 1ba85a11e946e4d2ea31528474ab398270b2e6ba Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Fri, 25 Jan 2019 14:26:04 +0100 Subject: [PATCH 5/5] Change 'cacheSize' description in typedef --- src/ol/source/BingMaps.js | 2 +- src/ol/source/CartoDB.js | 2 +- src/ol/source/OSM.js | 2 +- src/ol/source/Stamen.js | 2 +- src/ol/source/TileArcGISRest.js | 2 +- src/ol/source/TileImage.js | 2 +- src/ol/source/TileJSON.js | 2 +- src/ol/source/TileWMS.js | 2 +- src/ol/source/WMTS.js | 2 +- src/ol/source/XYZ.js | 2 +- src/ol/source/Zoomify.js | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/ol/source/BingMaps.js b/src/ol/source/BingMaps.js index 7db6aa1fff..e2bed7b93b 100644 --- a/src/ol/source/BingMaps.js +++ b/src/ol/source/BingMaps.js @@ -50,7 +50,7 @@ const TOS_ATTRIBUTION = '