Skip to content

Commit 81667e6

Browse files
authored
setToRedraw in _removeTileLoading to let tiles blocked by loadingLimit continue to load (#2055)
1 parent 0a8b69e commit 81667e6

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

src/layer/tile/GroupTileLayer.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,8 +274,7 @@ class GroupTileLayer extends TileLayer {
274274
for (const key in tilesLoading) {
275275
cache = tilesLoading[key];
276276
if (validateCache()) {
277-
renderer.abortTileLoading(cache.image);
278-
delete tilesLoading[key];
277+
renderer.abortTileLoading(cache.image, cache.info);
279278
}
280279
}
281280
return this;

src/renderer/layer/tilelayer/TileLayerCanvasRenderer.js

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -537,15 +537,26 @@ class TileLayerCanvasRenderer extends CanvasRenderer {
537537
return loadImage(tileImage, [url]);
538538
}
539539

540-
abortTileLoading(tileImage) {
540+
abortTileLoading(tileImage, tileInfo) {
541+
if (tileInfo && tileInfo.id !== undefined) {
542+
this.removeTileLoading(tileInfo);
543+
}
541544
if (!tileImage) return;
542545
tileImage.onload = falseFn;
543546
tileImage.onerror = falseFn;
544547
tileImage.src = emptyImageUrl;
545548
}
546549

547550
onTileLoad(tileImage, tileInfo) {
551+
this.removeTileLoading(tileInfo);
548552
this._tileQueue.push({ tileInfo: tileInfo, tileData: tileImage });
553+
this.setToRedraw();
554+
}
555+
556+
removeTileLoading(tileInfo) {
557+
delete this.tilesLoading[tileInfo.id];
558+
// need to setToRedraw to let tiles blocked by loadingLimit continue to load
559+
this.setToRedraw();
549560
}
550561

551562
_consumeTileQueue() {
@@ -588,7 +599,6 @@ class TileLayerCanvasRenderer extends CanvasRenderer {
588599
if (!this.layer) {
589600
return;
590601
}
591-
const id = tileInfo['id'];
592602
if (!this.tilesInView) {
593603
// removed
594604
return;
@@ -608,7 +618,7 @@ class TileLayerCanvasRenderer extends CanvasRenderer {
608618
// let user update tileImage in listener if needed
609619
tileImage = e.tileImage;
610620
this.resetTileLoadTime(tileImage);
611-
delete this.tilesLoading[id];
621+
this.removeTileLoading(tileInfo);
612622
this._addTileToCache(tileInfo, tileImage);
613623
this.setToRedraw();
614624
}
@@ -626,12 +636,14 @@ class TileLayerCanvasRenderer extends CanvasRenderer {
626636
if (tileRetryCount > tileImage.onerrorTick) {
627637
tileImage.onerrorTick++;
628638
this._fetchImage(tileImage, tileInfo);
639+
this.removeTileLoading(tileInfo);
629640
return;
630641
}
631642
const errorUrl = this.layer.options['errorUrl'];
632643
if (errorUrl) {
633644
if ((tileImage instanceof Image) && tileImage.src !== errorUrl) {
634645
tileImage.src = errorUrl;
646+
this.removeTileLoading(tileInfo);
635647
return;
636648
} else {
637649
tileImage = new Image();
@@ -642,7 +654,7 @@ class TileLayerCanvasRenderer extends CanvasRenderer {
642654
this.abortTileLoading(tileImage, tileInfo);
643655

644656
tileImage.loadTime = 0;
645-
delete this.tilesLoading[tileInfo['id']];
657+
this.removeTileLoading(tileInfo);
646658
this._addTileToCache(tileInfo, tileImage);
647659
this.setToRedraw();
648660
/**
@@ -955,7 +967,7 @@ class TileLayerCanvasRenderer extends CanvasRenderer {
955967
this.abortTileLoading(tile.image, tile.info);
956968
}
957969
this.deleteTile(tile);
958-
delete this.tilesLoading[i];
970+
this.removeTileLoading(tile.info);
959971
}
960972
}
961973
for (const i in this.tilesInView) {

0 commit comments

Comments
 (0)