Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6d12fde

Browse files
ftoromanoffDesplandis
authored andcommitted
refactor(cache): use LRUCache instead of own cache
BREAKING CHANGE: - remove Source#onParsedFile callback
1 parent fdd2bd9 commit 6d12fde

26 files changed

+493
-770
lines changed

package-lock.json

Lines changed: 20 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
"copc": "^0.0.6",
6767
"earcut": "^3.0.0",
6868
"js-priority-queue": "^0.1.5",
69+
"lru-cache": "^11.0.1",
6970
"pbf": "^4.0.1",
7071
"shpjs": "^6.1.0",
7172
"threads": "^1.7.0"

src/Core/MainLoop.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ function updateElements(context, geometryLayer, elements) {
5353
for (const attachedLayer of geometryLayer.attachedLayers) {
5454
if (attachedLayer.ready) {
5555
attachedLayer.update(context, attachedLayer, sub.element, sub.parent);
56-
attachedLayer.cache.flush();
5756
}
5857
}
5958
} else if (sub.elements) {
@@ -67,7 +66,6 @@ function updateElements(context, geometryLayer, elements) {
6766
for (const attachedLayer of geometryLayer.attachedLayers) {
6867
if (attachedLayer.ready) {
6968
attachedLayer.update(context, attachedLayer, sub.elements[i], sub.parent);
70-
attachedLayer.cache.flush();
7169
}
7270
}
7371
}
@@ -161,7 +159,6 @@ class MainLoop extends EventDispatcher {
161159
}
162160

163161
// Clear the cache of expired resources
164-
geometryLayer.cache.flush();
165162

166163
view.execFrameRequesters(MAIN_LOOP_EVENTS.AFTER_LAYER_UPDATE, dt, this.#updateLoopRestarted, geometryLayer);
167164
}

src/Core/Prefab/TileBuilder.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as THREE from 'three';
22
import { TileGeometry } from 'Core/TileGeometry';
3-
import Cache from 'Core/Scheduler/Cache';
3+
import { LRUCache } from 'lru-cache';
44
import { computeBuffers } from 'Core/Prefab/computeBufferTileGeometry';
55
import OBB from 'Renderer/OBB';
66
import type Extent from 'Core/Geographic/Extent';
@@ -10,7 +10,7 @@ const cacheBuffer = new Map<string, {
1010
index: THREE.BufferAttribute,
1111
uv: THREE.BufferAttribute,
1212
}>();
13-
const cacheTile = new Cache();
13+
const cacheTile = new LRUCache<string, Promise<TileGeometry>>({ max: 500 });
1414

1515
export type GpuBufferAttributes = {
1616
index: THREE.BufferAttribute | null;
@@ -84,13 +84,14 @@ export function newTileGeometry(
8484
const bufferKey =
8585
`${builder.crs}_${params.disableSkirt ? 0 : 1}_${params.segments}`;
8686

87-
let promiseGeometry = cacheTile.get(south, params.level, bufferKey);
87+
const key = `s${south}l${params.level}bK${bufferKey}`;
88+
let promiseGeometry = cacheTile.get(key);
8889

8990
// build geometry if doesn't exist
9091
if (!promiseGeometry) {
9192
let resolve;
9293
promiseGeometry = new Promise((r) => { resolve = r; });
93-
cacheTile.set(promiseGeometry, south, params.level, bufferKey);
94+
cacheTile.set(key, promiseGeometry);
9495

9596
params.extent = shareableExtent;
9697
params.center = builder.center(params.extent).clone();
@@ -145,7 +146,7 @@ export function newTileGeometry(
145146
const geometry = new TileGeometry(builder, params, gpuBuffers);
146147
geometry.OBB =
147148
new OBB(geometry.boundingBox!.min, geometry.boundingBox!.max);
148-
geometry.initRefCount(cacheTile, [south, params.level, bufferKey]);
149+
geometry.initRefCount(cacheTile, key);
149150
resolve!(geometry);
150151

151152
return Promise.resolve({ geometry, quaternion, position });

0 commit comments

Comments
 (0)