From b0984070dbaf3b5cc025acb0bdbaf2f0726b766b Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Tue, 15 Mar 2016 17:05:02 +0100 Subject: [PATCH] Don't load an already loading tile --- src/ol/tilequeue.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ol/tilequeue.js b/src/ol/tilequeue.js index 62743a5f99..b383b95bbf 100644 --- a/src/ol/tilequeue.js +++ b/src/ol/tilequeue.js @@ -1,6 +1,7 @@ goog.provide('ol.TilePriorityFunction'); goog.provide('ol.TileQueue'); +goog.require('goog.asserts'); goog.require('ol.events'); goog.require('ol.events.EventType'); goog.require('ol.Coordinate'); @@ -56,7 +57,7 @@ ol.TileQueue = function(tilePriorityFunction, tileChangeCallback) { /** * @private - * @type {Object.} + * @type {!Object.} */ this.tilesLoadingKeys_ = {}; @@ -104,6 +105,7 @@ ol.TileQueue.prototype.handleTileChange = function(event) { } this.tileChangeCallback_(); } + goog.asserts.assert(Object.keys(this.tilesLoadingKeys_).length === this.tilesLoading_); }; @@ -113,15 +115,17 @@ ol.TileQueue.prototype.handleTileChange = function(event) { */ ol.TileQueue.prototype.loadMoreTiles = function(maxTotalLoading, maxNewLoads) { var newLoads = 0; - var tile; + var tile, tileKey; while (this.tilesLoading_ < maxTotalLoading && newLoads < maxNewLoads && this.getCount() > 0) { tile = /** @type {ol.Tile} */ (this.dequeue()[0]); - if (tile.getState() === ol.TileState.IDLE) { - this.tilesLoadingKeys_[tile.getKey()] = true; + tileKey = tile.getKey(); + if (tile.getState() === ol.TileState.IDLE && !(tileKey in this.tilesLoadingKeys_)) { + this.tilesLoadingKeys_[tileKey] = true; ++this.tilesLoading_; ++newLoads; tile.load(); } + goog.asserts.assert(Object.keys(this.tilesLoadingKeys_).length === this.tilesLoading_); } };