Replace getTile with getTileZXY

This massively reduces the number of temporary ol.TileCoord objects.

Previously an ol.TileCoord object was generated for every potentially
visible tile at the current zoom level and lower, every frame.  This
commit eliminates all of those.  Now new ol.TileCoord objects are only
allocated when a new tile is created.
This commit is contained in:
Tom Payne
2013-03-24 14:51:54 +01:00
parent 247fc8f031
commit dfb631a08f
9 changed files with 87 additions and 75 deletions

View File

@@ -22,8 +22,8 @@ describe('ol.source.TileSource', function() {
var grid = source.getTileGrid();
var range = grid.getTileRangeForExtentAndZ(source.getExtent(), 3);
function getTileIfLoaded(tileCoord) {
var tile = source.getTile(tileCoord, null, null);
function getTileIfLoaded(z, x, y) {
var tile = source.getTileZXY(z, x, y, null, null);
return (!goog.isNull(tile) && tile.getState() === ol.TileState.LOADED) ?
tile : null;
}
@@ -44,8 +44,8 @@ describe('ol.source.TileSource', function() {
var grid = source.getTileGrid();
var range = grid.getTileRangeForExtentAndZ(source.getExtent(), 0);
function getTileIfLoaded(tileCoord) {
var tile = source.getTile(tileCoord, null, null);
function getTileIfLoaded(z, x, y) {
var tile = source.getTileZXY(z, x, y, null, null);
return (!goog.isNull(tile) && tile.getState() === ol.TileState.LOADED) ?
tile : null;
}
@@ -68,8 +68,8 @@ describe('ol.source.TileSource', function() {
var grid = source.getTileGrid();
var range = grid.getTileRangeForExtentAndZ(source.getExtent(), 1);
function getTileIfLoaded(tileCoord) {
var tile = source.getTile(tileCoord, null, null);
function getTileIfLoaded(z, x, y) {
var tile = source.getTileZXY(z, x, y, null, null);
return (!goog.isNull(tile) && tile.getState() === ol.TileState.LOADED) ?
tile : null;
}
@@ -93,8 +93,8 @@ describe('ol.source.TileSource', function() {
var loadedTilesByZ = {};
var grid = source.getTileGrid();
var range = grid.getTileRangeForExtentAndZ(source.getExtent(), 1);
function getTileIfLoaded(tileCoord) {
var tile = source.getTile(tileCoord, null, null);
function getTileIfLoaded(z, x, y) {
var tile = source.getTileZXY(z, x, y, null, null);
return (!goog.isNull(tile) && tile.getState() === ol.TileState.LOADED) ?
tile : null;
}
@@ -119,8 +119,8 @@ describe('ol.source.TileSource', function() {
var grid = source.getTileGrid();
var range = grid.getTileRangeForExtentAndZ(source.getExtent(), 1);
function getTileIfLoaded(tileCoord) {
var tile = source.getTile(tileCoord, null, null);
function getTileIfLoaded(z, x, y) {
var tile = source.getTileZXY(z, x, y, null, null);
return (!goog.isNull(tile) && tile.getState() === ol.TileState.LOADED) ?
tile : null;
}
@@ -142,8 +142,8 @@ describe('ol.source.TileSource', function() {
var grid = source.getTileGrid();
var range = grid.getTileRangeForExtentAndZ(source.getExtent(), 1);
function getTileIfLoaded(tileCoord) {
var tile = source.getTile(tileCoord, null, null);
function getTileIfLoaded(z, x, y) {
var tile = source.getTileZXY(z, x, y, null, null);
return (!goog.isNull(tile) && tile.getState() === ol.TileState.LOADED) ?
tile : null;
}
@@ -167,8 +167,8 @@ describe('ol.source.TileSource', function() {
var grid = source.getTileGrid();
var range = grid.getTileRangeForExtentAndZ(source.getExtent(), 1);
function getTileIfLoaded(tileCoord) {
var tile = source.getTile(tileCoord, null, null);
function getTileIfLoaded(z, x, y) {
var tile = source.getTileZXY(z, x, y, null, null);
return (!goog.isNull(tile) && tile.getState() === ol.TileState.LOADED) ?
tile : null;
}
@@ -219,10 +219,10 @@ goog.inherits(ol.test.source.MockTileSource, ol.source.TileSource);
/**
* @inheritDoc
*/
ol.test.source.MockTileSource.prototype.getTile = function(tileCoord) {
var key = tileCoord.toString();
ol.test.source.MockTileSource.prototype.getTileZXY = function(z, x, y) {
var key = ol.TileCoord.getKeyZXY(z, x, y);
var tileState = this.loaded_[key] ? ol.TileState.LOADED : ol.TileState.IDLE;
return new ol.Tile(tileCoord, tileState);
return new ol.Tile(new ol.TileCoord(z, x, y), tileState);
};
@@ -236,7 +236,7 @@ describe('ol.test.source.MockTileSource', function() {
});
});
describe('#getTile()', function() {
describe('#getTileZXY()', function() {
it('returns a tile with state based on constructor arg', function() {
var source = new ol.test.source.MockTileSource({
'0/0/0': true,
@@ -245,17 +245,17 @@ describe('ol.test.source.MockTileSource', function() {
var tile;
// check a loaded tile
tile = source.getTile(new ol.TileCoord(0, 0, 0));
tile = source.getTileZXY(0, 0, 0);
expect(tile).to.be.a(ol.Tile);
expect(tile.state).to.be(ol.TileState.LOADED);
// check a tile that is not loaded
tile = source.getTile(new ol.TileCoord(1, 0, -1));
tile = source.getTileZXY(1, 0, -1);
expect(tile).to.be.a(ol.Tile);
expect(tile.state).to.be(ol.TileState.IDLE);
// check another loaded tile
tile = source.getTile(new ol.TileCoord(1, 0, 0));
tile = source.getTileZXY(1, 0, 0);
expect(tile).to.be.a(ol.Tile);
expect(tile.state).to.be(ol.TileState.LOADED);