123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import defined from '../Core/defined.js';
- import DoublyLinkedList from '../Core/DoublyLinkedList.js';
- /**
- * Stores tiles with content loaded.
- *
- * @private
- */
- function Cesium3DTilesetCache() {
- // [head, sentinel) -> tiles that weren't selected this frame and may be removed from the cache
- // (sentinel, tail] -> tiles that were selected this frame
- this._list = new DoublyLinkedList();
- this._sentinel = this._list.add();
- this._trimTiles = false;
- }
- Cesium3DTilesetCache.prototype.reset = function() {
- // Move sentinel node to the tail so, at the start of the frame, all tiles
- // may be potentially replaced. Tiles are moved to the right of the sentinel
- // when they are selected so they will not be replaced.
- this._list.splice(this._list.tail, this._sentinel);
- };
- Cesium3DTilesetCache.prototype.touch = function(tile) {
- var node = tile.cacheNode;
- if (defined(node)) {
- this._list.splice(this._sentinel, node);
- }
- };
- Cesium3DTilesetCache.prototype.add = function(tile) {
- if (!defined(tile.cacheNode)) {
- tile.cacheNode = this._list.add(tile);
- }
- };
- Cesium3DTilesetCache.prototype.unloadTile = function(tileset, tile, unloadCallback) {
- var node = tile.cacheNode;
- if (!defined(node)) {
- return;
- }
- this._list.remove(node);
- tile.cacheNode = undefined;
- unloadCallback(tileset, tile);
- };
- Cesium3DTilesetCache.prototype.unloadTiles = function(tileset, unloadCallback) {
- var trimTiles = this._trimTiles;
- this._trimTiles = false;
- var list = this._list;
- var maximumMemoryUsageInBytes = tileset.maximumMemoryUsage * 1024 * 1024;
- // Traverse the list only to the sentinel since tiles/nodes to the
- // right of the sentinel were used this frame.
- //
- // The sub-list to the left of the sentinel is ordered from LRU to MRU.
- var sentinel = this._sentinel;
- var node = list.head;
- while ((node !== sentinel) && ((tileset.totalMemoryUsageInBytes > maximumMemoryUsageInBytes) || trimTiles)) {
- var tile = node.item;
- node = node.next;
- this.unloadTile(tileset, tile, unloadCallback);
- }
- };
- Cesium3DTilesetCache.prototype.trim = function() {
- this._trimTiles = true;
- };
- export default Cesium3DTilesetCache;
|