From b770aaa2f5d2b6cfbd6a259a6ed238e6ae9e769b Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 23 Jan 2013 14:22:25 +0100 Subject: [PATCH] Add tile cache expiry infrastructure --- .../canvas/canvastilelayerrenderer.js | 1 + src/ol/renderer/dom/domtilelayerrenderer.js | 1 + src/ol/renderer/layerrenderer.js | 19 +++++++++++++++++++ .../renderer/webgl/webgltilelayerrenderer.js | 1 + src/ol/source/tilesource.js | 13 +++++++++++++ 5 files changed, 35 insertions(+) diff --git a/src/ol/renderer/canvas/canvastilelayerrenderer.js b/src/ol/renderer/canvas/canvastilelayerrenderer.js index 6cdcb478db..de1008c364 100644 --- a/src/ol/renderer/canvas/canvastilelayerrenderer.js +++ b/src/ol/renderer/canvas/canvastilelayerrenderer.js @@ -219,6 +219,7 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame = } this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); + this.scheduleExpireCache(frameState, tileSource); var transform = this.transform_; goog.vec.Mat4.makeIdentity(transform); diff --git a/src/ol/renderer/dom/domtilelayerrenderer.js b/src/ol/renderer/dom/domtilelayerrenderer.js index 9cf215a98e..27b2b6a804 100644 --- a/src/ol/renderer/dom/domtilelayerrenderer.js +++ b/src/ol/renderer/dom/domtilelayerrenderer.js @@ -239,6 +239,7 @@ ol.renderer.dom.TileLayer.prototype.renderFrame = } this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); + this.scheduleExpireCache(frameState, tileSource); }; diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index c460fafb3b..b3243519e9 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -2,10 +2,12 @@ goog.provide('ol.renderer.Layer'); goog.require('goog.events'); goog.require('goog.events.EventType'); +goog.require('ol.FrameState'); goog.require('ol.Object'); goog.require('ol.TileRange'); goog.require('ol.layer.Layer'); goog.require('ol.layer.LayerProperty'); +goog.require('ol.source.TileSource'); @@ -128,6 +130,23 @@ ol.renderer.Layer.prototype.handleLayerSaturationChange = goog.nullFunction; ol.renderer.Layer.prototype.handleLayerVisibleChange = goog.nullFunction; +/** + * @protected + * @param {ol.FrameState} frameState Frame state. + * @param {ol.source.TileSource} tileSource Tile source. + */ +ol.renderer.Layer.prototype.scheduleExpireCache = + function(frameState, tileSource) { + if (tileSource.canExpireCache()) { + frameState.postRenderFunctions.push( + goog.partial(function(tileSource, map, frameState) { + var tileSourceKey = goog.getUid(tileSource).toString(); + tileSource.expireCache(frameState.usedTiles[tileSourceKey]); + }, tileSource)); + } +}; + + /** * @protected * @param {Object.>} usedTiles Used tiles. diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js index 621883f635..fd4e0842e2 100644 --- a/src/ol/renderer/webgl/webgltilelayerrenderer.js +++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js @@ -462,6 +462,7 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame = } this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); + this.scheduleExpireCache(frameState, tileSource); goog.vec.Mat4.makeIdentity(this.matrix_); goog.vec.Mat4.translate(this.matrix_, diff --git a/src/ol/source/tilesource.js b/src/ol/source/tilesource.js index 6b82b8f3b8..cff0556921 100644 --- a/src/ol/source/tilesource.js +++ b/src/ol/source/tilesource.js @@ -1,6 +1,7 @@ goog.provide('ol.source.TileSource'); goog.provide('ol.source.TileSourceOptions'); +goog.require('goog.functions'); goog.require('ol.Attribution'); goog.require('ol.Extent'); goog.require('ol.Projection'); @@ -46,6 +47,18 @@ ol.source.TileSource = function(tileSourceOptions) { goog.inherits(ol.source.TileSource, ol.source.Source); +/** + * @return {boolean} Can expire cache. + */ +ol.source.TileSource.prototype.canExpireCache = goog.functions.FALSE; + + +/** + * @param {Object.} usedTiles Used tiles. + */ +ol.source.TileSource.prototype.expireCache = goog.abstractMethod; + + /** * @inheritDoc */