vibeglobe 0.3.0-rc.2 → 0.3.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"imagery-layers.d.ts","sourceRoot":"","sources":["../../src/globe/imagery-layers.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,aAAa,EAEnB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,iEAAiE;AACjE,UAAU,aAAa;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IAC9C,kGAAkG;IAClG,cAAc,IAAI,IAAI,CAAC;CACxB;AAQD,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAOnE"}
1
+ {"version":3,"file":"imagery-layers.d.ts","sourceRoot":"","sources":["../../src/globe/imagery-layers.ts"],"names":[],"mappings":"AAGA,OAAO,EAOL,KAAK,aAAa,EAEnB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,iEAAiE;AACjE,UAAU,aAAa;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IAC9C,kGAAkG;IAClG,cAAc,IAAI,IAAI,CAAC;CACxB;AAQD,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAOnE"}
@@ -1,4 +1,4 @@
1
- import { applyChanges, sourceInfo, validStack, } from '../imagery/imagery-stack.js';
1
+ import { applyChanges, pinnedLevels, sourceInfo, validStack, } from '../imagery/imagery-stack.js';
2
2
  import { GlobeError, messageOf } from './errors.js';
3
3
  /**
4
4
  * The controllers of the globes' imagery, kept outside the per-frame classes: a field more on those changes how V8 lays
@@ -76,8 +76,11 @@ class ImageryLayersController {
76
76
  const taken = entry.sources.find((source) => imagery.layers.some((layer) => layer.source.id === source.id));
77
77
  if (taken)
78
78
  throw new GlobeError('invalid-option', `An imagery source already has the id "${taken.id}"`);
79
- const chain = entry.sources.map((source) => {
80
- const layer = imagery.newLayer(source, freeIndex(imagery), -1);
79
+ // Its base is pinned as if it had been given at creation, after the layers already there (KB-347).
80
+ const stack = [...imagery.stack.map((layer) => layer.entry), entry];
81
+ const pinned = pinnedLevels(stack, imagery.residency.budgetBytes).slice(-entry.sources.length);
82
+ const chain = entry.sources.map((source, at) => {
83
+ const layer = imagery.newLayer(source, freeIndex(imagery), pinned[at] ?? -1);
81
84
  imagery.layers.push(layer);
82
85
  return layer;
83
86
  });
@@ -1 +1 @@
1
- {"version":3,"file":"imagery-layers.js","sourceRoot":"","sources":["../../src/globe/imagery-layers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"imagery-layers.js","sourceRoot":"","sources":["../../src/globe/imagery-layers.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { FlightPlan } from './flight-preload.js';
2
2
  import { type LoaderContext } from './loader-context.js';
3
3
  import { type Observability, type PhaseTimer } from '../diagnostics/observability.js';
4
+ import { Residency } from '../cache/residency.hot.js';
4
5
  import type { Camera } from '../camera/camera.js';
5
6
  import { type ImageryLayer, type StackLayer } from '../imagery/imagery-draws.js';
6
7
  import { type StackEntry } from '../imagery/imagery-stack.js';
@@ -65,7 +66,8 @@ export declare class ImageryRuntime {
65
66
  readonly network: NetworkPool;
66
67
  /** The engine's share of the page's worker pool (render extensions run their tasks on it too). */
67
68
  readonly lease: WorkerPoolLease;
68
- private readonly residency;
69
+ /** The GPU textures and their budget, shared by every layer (ADR 0007). */
70
+ readonly residency: Residency;
69
71
  private readonly ram;
70
72
  private frame;
71
73
  private readonly fades;
@@ -1 +1 @@
1
- {"version":3,"file":"imagery-runtime.d.ts","sourceRoot":"","sources":["../../src/globe/imagery-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"imagery-runtime.d.ts","sourceRoot":"","sources":["../../src/globe/imagery-runtime.ts"],"names":[],"mappings":"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"}
@@ -80,6 +80,7 @@ export class ImageryRuntime {
80
80
  network;
81
81
  /** The engine's share of the page's worker pool (render extensions run their tasks on it too). */
82
82
  lease;
83
+ /** The GPU textures and their budget, shared by every layer (ADR 0007). */
83
84
  residency;
84
85
  ram;
85
86
  frame = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"imagery-runtime.js","sourceRoot":"","sources":["../../src/globe/imagery-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"imagery-runtime.js","sourceRoot":"","sources":["../../src/globe/imagery-runtime.ts"],"names":[],"mappings":"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"}
@@ -172,11 +172,15 @@ const MAX_PINNED_START = 8;
172
172
  */
173
173
  export function pinnedLevels(entries, gpuBudgetBytes) {
174
174
  const sources = entries.flatMap((entry) => entry.sources);
175
- // One source of a chain pins a base, the later ones serving finer levels or standing in (F247): the first that has
176
- // level 0, so a chain over a world source from a source that starts deeper pins the world's low levels (KB-218); in
177
- // a chain without one, its first source, from its first level (F634).
175
+ // One source of a chain pins a base, the later ones serving finer levels or standing in (F247): the one that starts
176
+ // coarsest, the first among equals, from its first level (F634). A chain over a world source from a regional one
177
+ // that starts deeper so pins the world's low levels (KB-218, KB-346).
178
178
  const heads = entries.flatMap((entry) => {
179
- const base = Math.max(0, entry.sources.findIndex((source) => !source.minLevel));
179
+ let base = 0;
180
+ entry.sources.forEach((source, index) => {
181
+ if (source.minLevel < (entry.sources[base]?.minLevel ?? 0))
182
+ base = index;
183
+ });
180
184
  return entry.sources.map((_, index) => index === base);
181
185
  });
182
186
  // A source starting deeper than this pins nothing: its first level has too many tiles to count, let alone pin.
@@ -1 +1 @@
1
- {"version":3,"file":"imagery-stack.js","sourceRoot":"","sources":["../../src/imagery/imagery-stack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"imagery-stack.js","sourceRoot":"","sources":["../../src/imagery/imagery-stack.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  import type { StackLayer } from '../imagery/imagery-draws.js';
4
4
  import {
5
5
  applyChanges,
6
+ pinnedLevels,
6
7
  sourceInfo,
7
8
  validStack,
8
9
  type ImageryLayerChanges,
@@ -97,8 +98,11 @@ class ImageryLayersController implements ImageryLayers {
97
98
  throw new GlobeError('invalid-option', `An imagery layer already has the id "${entry.id}"`);
98
99
  const taken = entry.sources.find((source) => imagery.layers.some((layer) => layer.source.id === source.id));
99
100
  if (taken) throw new GlobeError('invalid-option', `An imagery source already has the id "${taken.id}"`);
100
- const chain = entry.sources.map((source) => {
101
- const layer = imagery.newLayer(source, freeIndex(imagery), -1);
101
+ // Its base is pinned as if it had been given at creation, after the layers already there (KB-347).
102
+ const stack = [...imagery.stack.map((layer) => layer.entry), entry];
103
+ const pinned = pinnedLevels(stack, imagery.residency.budgetBytes).slice(-entry.sources.length);
104
+ const chain = entry.sources.map((source, at) => {
105
+ const layer = imagery.newLayer(source, freeIndex(imagery), pinned[at] ?? -1);
102
106
  imagery.layers.push(layer);
103
107
  return layer;
104
108
  });
@@ -115,7 +115,8 @@ export class ImageryRuntime {
115
115
  readonly network: NetworkPool;
116
116
  /** The engine's share of the page's worker pool (render extensions run their tasks on it too). */
117
117
  readonly lease: WorkerPoolLease;
118
- private readonly residency: Residency;
118
+ /** The GPU textures and their budget, shared by every layer (ADR 0007). */
119
+ readonly residency: Residency;
119
120
  private readonly ram: RamTier;
120
121
  private frame = 0;
121
122
  private readonly fades = new ImageryFades();
@@ -318,14 +318,14 @@ const MAX_PINNED_START = 8;
318
318
  */
319
319
  export function pinnedLevels(entries: readonly StackEntry[], gpuBudgetBytes: number): number[] {
320
320
  const sources = entries.flatMap((entry) => entry.sources);
321
- // One source of a chain pins a base, the later ones serving finer levels or standing in (F247): the first that has
322
- // level 0, so a chain over a world source from a source that starts deeper pins the world's low levels (KB-218); in
323
- // a chain without one, its first source, from its first level (F634).
321
+ // One source of a chain pins a base, the later ones serving finer levels or standing in (F247): the one that starts
322
+ // coarsest, the first among equals, from its first level (F634). A chain over a world source from a regional one
323
+ // that starts deeper so pins the world's low levels (KB-218, KB-346).
324
324
  const heads = entries.flatMap((entry) => {
325
- const base = Math.max(
326
- 0,
327
- entry.sources.findIndex((source) => !source.minLevel),
328
- );
325
+ let base = 0;
326
+ entry.sources.forEach((source, index) => {
327
+ if (source.minLevel < (entry.sources[base]?.minLevel ?? 0)) base = index;
328
+ });
329
329
  return entry.sources.map((_, index) => index === base);
330
330
  });
331
331
  // A source starting deeper than this pins nothing: its first level has too many tiles to count, let alone pin.
@@ -1 +1 @@
1
- {"version":3,"file":"idb-store.d.ts","sourceRoot":"","sources":["../src/idb-store.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAc,UAAU,EAAgB,MAAM,YAAY,CAAC;AAEvE,yCAAyC;AACzC,MAAM,WAAW,qBAAqB;IACpC,6GAA6G;IAC7G,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED,kDAAkD;AAClD,eAAO,MAAM,mBAAmB,QAAoB,CAAC;AAgBrD,mHAAmH;AACnH,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,UAAU,CAE9E"}
1
+ {"version":3,"file":"idb-store.d.ts","sourceRoot":"","sources":["../src/idb-store.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAc,UAAU,EAAgB,MAAM,YAAY,CAAC;AAEvE,yCAAyC;AACzC,MAAM,WAAW,qBAAqB;IACpC,6GAA6G;IAC7G,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED,kDAAkD;AAClD,eAAO,MAAM,mBAAmB,QAAoB,CAAC;AA0BrD,mHAAmH;AACnH,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,UAAU,CAE9E"}
@@ -10,6 +10,8 @@ const EVICT_TO = 0.9;
10
10
  * after this fraction of the limit was written here, so the shared database stays within its limit.
11
11
  */
12
12
  const RESUM_EVERY = 0.05;
13
+ /** The most tiles one write transaction holds: a read that comes after it waits for these alone. */
14
+ const WRITES_PER_TRANSACTION = 16;
13
15
  /** A persistent {@link CacheStore} in IndexedDB with least-recently-used eviction to a byte limit (F273, F274). */
14
16
  export function indexedDbStore(options = {}) {
15
17
  return new IndexedDbStore(options);
@@ -26,47 +28,40 @@ class IndexedDbStore {
26
28
  /** Access times waiting to be written, batched so reads cost no write each. */
27
29
  touched = new Map();
28
30
  touchTimer;
31
+ /**
32
+ * Tiles waiting to be written. One write transaction runs at a time and the tiles that arrive meanwhile share the
33
+ * next ones: a write transaction holds back every read that comes after it, so one per tile queued each frame's
34
+ * reads, misses included, behind the writes of the tiles before (400 tiles: 380 ms against 17 ms without writes).
35
+ */
36
+ writes = new Map();
37
+ flushing;
29
38
  constructor(options) {
30
39
  this.options = options;
31
40
  this.maxBytes = options.maxBytes ?? DEFAULT_CACHE_BYTES;
32
41
  this.factory = options.indexedDB ?? (typeof indexedDB === 'undefined' ? undefined : indexedDB);
33
42
  }
34
43
  async get(key) {
44
+ // A tile still waiting for its transaction reads back as written; a copy, since the caller may transfer its bytes.
45
+ const waiting = this.writes.get(key)?.tile;
46
+ if (waiting)
47
+ return { ...waiting, bytes: waiting.bytes.slice(0) };
35
48
  const db = await this.open();
36
49
  const tile = (await requestResult(db.transaction(TILES).objectStore(TILES).get(key)));
37
50
  if (tile)
38
51
  this.touch(key);
39
52
  return tile;
40
53
  }
41
- async put(key, tile) {
42
- const size = tile.bytes.byteLength;
43
- if (size > this.maxBytes)
44
- return 'quota';
45
- const db = await this.open();
46
- const tx = db.transaction([TILES, TILE_INDEX], 'readwrite');
47
- const index = tx.objectStore(TILE_INDEX);
48
- const previous = requestResult(index.get(key)).catch(() => undefined);
49
- tx.objectStore(TILES).put(tile, key);
50
- index.put({ size, accessMs: Date.now() }, key);
51
- try {
52
- await transactionDone(tx);
53
- this.bytes += size - ((await previous)?.size ?? 0);
54
- this.writtenSinceSum += size;
55
- }
56
- catch (error) {
57
- if (!isQuotaError(error))
58
- throw error;
59
- // The browser quota: make room for the next writes (F274).
60
- await this.evict(Math.floor(this.bytes * 0.75));
61
- return 'quota';
62
- }
63
- if (this.writtenSinceSum >= this.maxBytes * RESUM_EVERY)
64
- await this.resum(db);
65
- if (this.bytes > this.maxBytes)
66
- await this.evict(Math.floor(this.maxBytes * EVICT_TO));
67
- return 'stored';
54
+ put(key, tile) {
55
+ if (tile.bytes.byteLength > this.maxBytes)
56
+ return Promise.resolve('quota');
57
+ return new Promise((done, failed) => {
58
+ this.writes.get(key)?.done('stored');
59
+ this.writes.set(key, { tile, done, failed });
60
+ void this.flush();
61
+ });
68
62
  }
69
63
  async delete(key) {
64
+ await this.flush();
70
65
  const db = await this.open();
71
66
  const tx = db.transaction([TILES, TILE_INDEX], 'readwrite');
72
67
  const index = tx.objectStore(TILE_INDEX);
@@ -78,6 +73,7 @@ class IndexedDbStore {
78
73
  this.bytes -= old.size;
79
74
  }
80
75
  async deletePrefix(prefix) {
76
+ await this.flush();
81
77
  const db = await this.open();
82
78
  const tx = db.transaction([TILES, TILE_INDEX], 'readwrite');
83
79
  const range = prefixRange(prefix);
@@ -97,14 +93,17 @@ class IndexedDbStore {
97
93
  return removed;
98
94
  }
99
95
  async usage() {
96
+ await this.flush();
100
97
  await this.resum(await this.open());
101
98
  return { bytes: this.bytes, quotaBytes: this.maxBytes };
102
99
  }
103
100
  close() {
101
+ // The waiting tiles' transaction starts before the store closes, and the connection closes once it ends.
102
+ const last = this.flush();
103
+ const db = this.db;
104
104
  this.closed = true;
105
- clearTimeout(this.touchTimer);
106
- void this.db?.then((db) => db.close()).catch(() => undefined);
107
105
  this.db = undefined;
106
+ void last.then(() => db?.then((open) => open.close())).catch(() => undefined);
108
107
  }
109
108
  open() {
110
109
  if (this.closed)
@@ -123,6 +122,9 @@ class IndexedDbStore {
123
122
  this.db = undefined;
124
123
  this.bytes = 0;
125
124
  this.touched.clear();
125
+ for (const write of this.writes.values())
126
+ write.failed(new StorageUnavailableError(reason));
127
+ this.writes.clear();
126
128
  this.options.onLost?.(reason);
127
129
  });
128
130
  this.bytes = await this.sumSizes(db);
@@ -150,7 +152,6 @@ class IndexedDbStore {
150
152
  }
151
153
  /** Deletes least-recently-used tiles until at most `targetBytes` remain. */
152
154
  async evict(targetBytes) {
153
- await this.flushTouches();
154
155
  const db = await this.open();
155
156
  const tx = db.transaction([TILES, TILE_INDEX], 'readwrite');
156
157
  const tiles = tx.objectStore(TILES);
@@ -168,27 +169,89 @@ class IndexedDbStore {
168
169
  }
169
170
  touch(key) {
170
171
  this.touched.set(key, Date.now());
171
- this.touchTimer ??= setTimeout(() => void this.flushTouches().catch(() => undefined), 500);
172
+ this.touchTimer ??= setTimeout(() => void this.flush().catch(() => undefined), 500);
172
173
  }
173
- async flushTouches() {
174
- clearTimeout(this.touchTimer);
175
- this.touchTimer = undefined;
176
- if (this.touched.size === 0)
177
- return;
178
- const entries = [...this.touched];
174
+ /** Writes the waiting tiles and access times, a transaction at a time, until none waits. */
175
+ flush() {
176
+ if (!this.flushing && (this.writes.size > 0 || this.touched.size > 0))
177
+ this.flushing = this.writeWaiting();
178
+ return this.flushing ?? Promise.resolve();
179
+ }
180
+ async writeWaiting() {
181
+ try {
182
+ while (this.writes.size > 0 || this.touched.size > 0) {
183
+ clearTimeout(this.touchTimer);
184
+ this.touchTimer = undefined;
185
+ await this.open().then((db) => this.commit(db), (error) => this.drop(error));
186
+ }
187
+ }
188
+ finally {
189
+ this.flushing = undefined;
190
+ }
191
+ }
192
+ /** Fails the waiting tiles' `put`s with `error`. */
193
+ drop(error) {
194
+ for (const write of this.writes.values())
195
+ write.failed(error);
196
+ this.writes.clear();
179
197
  this.touched.clear();
180
- const db = await this.open();
181
- const tx = db.transaction(TILE_INDEX, 'readwrite');
198
+ }
199
+ /** One transaction with the first waiting tiles (up to 16) and every access time, then the eviction they call for. */
200
+ async commit(db) {
201
+ const writes = [...this.writes].slice(0, WRITES_PER_TRANSACTION);
202
+ for (const [key] of writes)
203
+ this.writes.delete(key);
204
+ const touched = [...this.touched];
205
+ this.touched.clear();
206
+ await this.write(db, writes, touched).catch((error) => {
207
+ for (const [, write] of writes)
208
+ write.failed(error);
209
+ });
210
+ }
211
+ async write(db, writes, touched) {
212
+ // A cache can lose its last writes in a power cut: relaxed durability spares a disk flush per transaction.
213
+ const tx = db.transaction([TILES, TILE_INDEX], 'readwrite', { durability: 'relaxed' });
214
+ const tiles = tx.objectStore(TILES);
182
215
  const index = tx.objectStore(TILE_INDEX);
183
- for (const [key, accessMs] of entries) {
216
+ const accessMs = Date.now();
217
+ let grown = 0;
218
+ let written = 0;
219
+ for (const [key, { tile }] of writes) {
220
+ const size = tile.bytes.byteLength;
221
+ const previous = index.get(key);
222
+ previous.onsuccess = () => (grown += size - (previous.result?.size ?? 0));
223
+ tiles.put(tile, key);
224
+ index.put({ size, accessMs }, key);
225
+ written += size;
226
+ }
227
+ for (const [key, at] of touched) {
184
228
  const request = index.get(key);
185
229
  request.onsuccess = () => {
186
230
  const record = request.result;
187
231
  if (record)
188
- index.put({ size: record.size, accessMs }, key);
232
+ index.put({ size: record.size, accessMs: at }, key);
189
233
  };
190
234
  }
191
- await transactionDone(tx);
235
+ try {
236
+ await transactionDone(tx);
237
+ }
238
+ catch (error) {
239
+ if (!isQuotaError(error))
240
+ throw error;
241
+ // The browser quota: make room for the next writes (F274).
242
+ await this.evict(Math.floor(this.bytes * 0.75));
243
+ for (const [, write] of writes)
244
+ write.done('quota');
245
+ return;
246
+ }
247
+ this.bytes += grown;
248
+ this.writtenSinceSum += written;
249
+ if (this.writtenSinceSum >= this.maxBytes * RESUM_EVERY)
250
+ await this.resum(db);
251
+ if (this.bytes > this.maxBytes)
252
+ await this.evict(Math.floor(this.maxBytes * EVICT_TO));
253
+ for (const [, write] of writes)
254
+ write.done('stored');
192
255
  }
193
256
  }
194
257
  //# sourceMappingURL=idb-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"idb-store.js","sourceRoot":"","sources":["../src/idb-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idb-store.js","sourceRoot":"","sources":["../src/idb-store.ts"],"names":[],"mappings":"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"}
@@ -41,11 +41,21 @@ const EVICT_TO = 0.9;
41
41
  */
42
42
  const RESUM_EVERY = 0.05;
43
43
 
44
+ /** The most tiles one write transaction holds: a read that comes after it waits for these alone. */
45
+ const WRITES_PER_TRANSACTION = 16;
46
+
44
47
  interface IndexRecord {
45
48
  readonly size: number;
46
49
  readonly accessMs: number;
47
50
  }
48
51
 
52
+ /** A tile waiting for the next write transaction, and its `put`'s answer. */
53
+ interface Write {
54
+ readonly tile: CachedTile;
55
+ readonly done: (result: 'stored' | 'quota') => void;
56
+ readonly failed: (error: unknown) => void;
57
+ }
58
+
49
59
  /** A persistent {@link CacheStore} in IndexedDB with least-recently-used eviction to a byte limit (F273, F274). */
50
60
  export function indexedDbStore(options: IndexedDbStoreOptions = {}): CacheStore {
51
61
  return new IndexedDbStore(options);
@@ -62,6 +72,13 @@ class IndexedDbStore implements CacheStore {
62
72
  /** Access times waiting to be written, batched so reads cost no write each. */
63
73
  private readonly touched = new Map<string, number>();
64
74
  private touchTimer: ReturnType<typeof setTimeout> | undefined;
75
+ /**
76
+ * Tiles waiting to be written. One write transaction runs at a time and the tiles that arrive meanwhile share the
77
+ * next ones: a write transaction holds back every read that comes after it, so one per tile queued each frame's
78
+ * reads, misses included, behind the writes of the tiles before (400 tiles: 380 ms against 17 ms without writes).
79
+ */
80
+ private readonly writes = new Map<string, Write>();
81
+ private flushing: Promise<void> | undefined;
65
82
 
66
83
  constructor(private readonly options: IndexedDbStoreOptions) {
67
84
  this.maxBytes = options.maxBytes ?? DEFAULT_CACHE_BYTES;
@@ -69,37 +86,26 @@ class IndexedDbStore implements CacheStore {
69
86
  }
70
87
 
71
88
  async get(key: string): Promise<CachedTile | undefined> {
89
+ // A tile still waiting for its transaction reads back as written; a copy, since the caller may transfer its bytes.
90
+ const waiting = this.writes.get(key)?.tile;
91
+ if (waiting) return { ...waiting, bytes: waiting.bytes.slice(0) };
72
92
  const db = await this.open();
73
93
  const tile = (await requestResult(db.transaction(TILES).objectStore(TILES).get(key))) as CachedTile | undefined;
74
94
  if (tile) this.touch(key);
75
95
  return tile;
76
96
  }
77
97
 
78
- async put(key: string, tile: CachedTile): Promise<'stored' | 'quota'> {
79
- const size = tile.bytes.byteLength;
80
- if (size > this.maxBytes) return 'quota';
81
- const db = await this.open();
82
- const tx = db.transaction([TILES, TILE_INDEX], 'readwrite');
83
- const index = tx.objectStore(TILE_INDEX);
84
- const previous = (requestResult(index.get(key)) as Promise<IndexRecord | undefined>).catch(() => undefined);
85
- tx.objectStore(TILES).put(tile, key);
86
- index.put({ size, accessMs: Date.now() } satisfies IndexRecord, key);
87
- try {
88
- await transactionDone(tx);
89
- this.bytes += size - ((await previous)?.size ?? 0);
90
- this.writtenSinceSum += size;
91
- } catch (error) {
92
- if (!isQuotaError(error)) throw error;
93
- // The browser quota: make room for the next writes (F274).
94
- await this.evict(Math.floor(this.bytes * 0.75));
95
- return 'quota';
96
- }
97
- if (this.writtenSinceSum >= this.maxBytes * RESUM_EVERY) await this.resum(db);
98
- if (this.bytes > this.maxBytes) await this.evict(Math.floor(this.maxBytes * EVICT_TO));
99
- return 'stored';
98
+ put(key: string, tile: CachedTile): Promise<'stored' | 'quota'> {
99
+ if (tile.bytes.byteLength > this.maxBytes) return Promise.resolve('quota');
100
+ return new Promise((done, failed) => {
101
+ this.writes.get(key)?.done('stored');
102
+ this.writes.set(key, { tile, done, failed });
103
+ void this.flush();
104
+ });
100
105
  }
101
106
 
102
107
  async delete(key: string): Promise<void> {
108
+ await this.flush();
103
109
  const db = await this.open();
104
110
  const tx = db.transaction([TILES, TILE_INDEX], 'readwrite');
105
111
  const index = tx.objectStore(TILE_INDEX);
@@ -111,6 +117,7 @@ class IndexedDbStore implements CacheStore {
111
117
  }
112
118
 
113
119
  async deletePrefix(prefix: string): Promise<number> {
120
+ await this.flush();
114
121
  const db = await this.open();
115
122
  const tx = db.transaction([TILES, TILE_INDEX], 'readwrite');
116
123
  const range = prefixRange(prefix);
@@ -130,15 +137,18 @@ class IndexedDbStore implements CacheStore {
130
137
  }
131
138
 
132
139
  async usage(): Promise<StorageUsage> {
140
+ await this.flush();
133
141
  await this.resum(await this.open());
134
142
  return { bytes: this.bytes, quotaBytes: this.maxBytes };
135
143
  }
136
144
 
137
145
  close(): void {
146
+ // The waiting tiles' transaction starts before the store closes, and the connection closes once it ends.
147
+ const last = this.flush();
148
+ const db = this.db;
138
149
  this.closed = true;
139
- clearTimeout(this.touchTimer);
140
- void this.db?.then((db) => db.close()).catch(() => undefined);
141
150
  this.db = undefined;
151
+ void last.then(() => db?.then((open) => open.close())).catch(() => undefined);
142
152
  }
143
153
 
144
154
  private open(): Promise<IDBDatabase> {
@@ -157,6 +167,8 @@ class IndexedDbStore implements CacheStore {
157
167
  this.db = undefined;
158
168
  this.bytes = 0;
159
169
  this.touched.clear();
170
+ for (const write of this.writes.values()) write.failed(new StorageUnavailableError(reason));
171
+ this.writes.clear();
160
172
  this.options.onLost?.(reason);
161
173
  });
162
174
  this.bytes = await this.sumSizes(db);
@@ -186,7 +198,6 @@ class IndexedDbStore implements CacheStore {
186
198
 
187
199
  /** Deletes least-recently-used tiles until at most `targetBytes` remain. */
188
200
  private async evict(targetBytes: number): Promise<void> {
189
- await this.flushTouches();
190
201
  const db = await this.open();
191
202
  const tx = db.transaction([TILES, TILE_INDEX], 'readwrite');
192
203
  const tiles = tx.objectStore(TILES);
@@ -204,25 +215,84 @@ class IndexedDbStore implements CacheStore {
204
215
 
205
216
  private touch(key: string): void {
206
217
  this.touched.set(key, Date.now());
207
- this.touchTimer ??= setTimeout(() => void this.flushTouches().catch(() => undefined), 500);
218
+ this.touchTimer ??= setTimeout(() => void this.flush().catch(() => undefined), 500);
219
+ }
220
+
221
+ /** Writes the waiting tiles and access times, a transaction at a time, until none waits. */
222
+ private flush(): Promise<void> {
223
+ if (!this.flushing && (this.writes.size > 0 || this.touched.size > 0)) this.flushing = this.writeWaiting();
224
+ return this.flushing ?? Promise.resolve();
208
225
  }
209
226
 
210
- private async flushTouches(): Promise<void> {
211
- clearTimeout(this.touchTimer);
212
- this.touchTimer = undefined;
213
- if (this.touched.size === 0) return;
214
- const entries = [...this.touched];
227
+ private async writeWaiting(): Promise<void> {
228
+ try {
229
+ while (this.writes.size > 0 || this.touched.size > 0) {
230
+ clearTimeout(this.touchTimer);
231
+ this.touchTimer = undefined;
232
+ await this.open().then(
233
+ (db) => this.commit(db),
234
+ (error: unknown) => this.drop(error),
235
+ );
236
+ }
237
+ } finally {
238
+ this.flushing = undefined;
239
+ }
240
+ }
241
+
242
+ /** Fails the waiting tiles' `put`s with `error`. */
243
+ private drop(error: unknown): void {
244
+ for (const write of this.writes.values()) write.failed(error);
245
+ this.writes.clear();
215
246
  this.touched.clear();
216
- const db = await this.open();
217
- const tx = db.transaction(TILE_INDEX, 'readwrite');
247
+ }
248
+
249
+ /** One transaction with the first waiting tiles (up to 16) and every access time, then the eviction they call for. */
250
+ private async commit(db: IDBDatabase): Promise<void> {
251
+ const writes = [...this.writes].slice(0, WRITES_PER_TRANSACTION);
252
+ for (const [key] of writes) this.writes.delete(key);
253
+ const touched = [...this.touched];
254
+ this.touched.clear();
255
+ await this.write(db, writes, touched).catch((error: unknown) => {
256
+ for (const [, write] of writes) write.failed(error);
257
+ });
258
+ }
259
+
260
+ private async write(db: IDBDatabase, writes: [string, Write][], touched: [string, number][]): Promise<void> {
261
+ // A cache can lose its last writes in a power cut: relaxed durability spares a disk flush per transaction.
262
+ const tx = db.transaction([TILES, TILE_INDEX], 'readwrite', { durability: 'relaxed' });
263
+ const tiles = tx.objectStore(TILES);
218
264
  const index = tx.objectStore(TILE_INDEX);
219
- for (const [key, accessMs] of entries) {
265
+ const accessMs = Date.now();
266
+ let grown = 0;
267
+ let written = 0;
268
+ for (const [key, { tile }] of writes) {
269
+ const size = tile.bytes.byteLength;
270
+ const previous = index.get(key);
271
+ previous.onsuccess = () => (grown += size - ((previous.result as IndexRecord | undefined)?.size ?? 0));
272
+ tiles.put(tile, key);
273
+ index.put({ size, accessMs } satisfies IndexRecord, key);
274
+ written += size;
275
+ }
276
+ for (const [key, at] of touched) {
220
277
  const request = index.get(key);
221
278
  request.onsuccess = () => {
222
279
  const record = request.result as IndexRecord | undefined;
223
- if (record) index.put({ size: record.size, accessMs } satisfies IndexRecord, key);
280
+ if (record) index.put({ size: record.size, accessMs: at } satisfies IndexRecord, key);
224
281
  };
225
282
  }
226
- await transactionDone(tx);
283
+ try {
284
+ await transactionDone(tx);
285
+ } catch (error) {
286
+ if (!isQuotaError(error)) throw error;
287
+ // The browser quota: make room for the next writes (F274).
288
+ await this.evict(Math.floor(this.bytes * 0.75));
289
+ for (const [, write] of writes) write.done('quota');
290
+ return;
291
+ }
292
+ this.bytes += grown;
293
+ this.writtenSinceSum += written;
294
+ if (this.writtenSinceSum >= this.maxBytes * RESUM_EVERY) await this.resum(db);
295
+ if (this.bytes > this.maxBytes) await this.evict(Math.floor(this.maxBytes * EVICT_TO));
296
+ for (const [, write] of writes) write.done('stored');
227
297
  }
228
298
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibeglobe",
3
- "version": "0.3.0-rc.2",
3
+ "version": "0.3.0-rc.3",
4
4
  "description": "VibeGlobe: a 3D globe and 2D map engine for the web, started in one call with the application's tile, terrain and geocoder services.",
5
5
  "license": "MPL-2.0",
6
6
  "repository": {
@@ -983,8 +983,10 @@ function Zt(e, t, n) {
983
983
  var Qt = 8;
984
984
  function $t(e, t) {
985
985
  let n = e.flatMap((e) => e.sources), r = e.flatMap((e) => {
986
- let t = Math.max(0, e.sources.findIndex((e) => !e.minLevel));
987
- return e.sources.map((e, n) => n === t);
986
+ let t = 0;
987
+ return e.sources.forEach((n, r) => {
988
+ n.minLevel < (e.sources[t]?.minLevel ?? 0) && (t = r);
989
+ }), e.sources.map((e, n) => n === t);
988
990
  }), i = n.map((e) => e.minLevel > Qt ? -2 : Math.max(0, e.minLevel) - 1), a = [...i], o = 0;
989
991
  for (let e = 0; e <= 25; e++) {
990
992
  let s = !1;
@@ -2403,13 +2405,13 @@ var Ba = class {
2403
2405
  if (n.stack.some((e) => e.entry.id === i.id)) throw new b("invalid-option", `An imagery layer already has the id "${i.id}"`);
2404
2406
  let a = i.sources.find((e) => n.layers.some((t) => t.source.id === e.id));
2405
2407
  if (a) throw new b("invalid-option", `An imagery source already has the id "${a.id}"`);
2406
- let o = i.sources.map((e) => {
2407
- let t = n.newLayer(e, Va(n), -1);
2408
- return n.layers.push(t), t;
2409
- }), s = Math.max(0, Math.min(n.stack.length, Math.round(t ?? n.stack.length)));
2410
- n.stack.splice(s, 0, {
2408
+ let o = $t([...n.stack.map((e) => e.entry), i], n.residency.budgetBytes).slice(-i.sources.length), s = i.sources.map((e, t) => {
2409
+ let r = n.newLayer(e, Va(n), o[t] ?? -1);
2410
+ return n.layers.push(r), r;
2411
+ }), c = Math.max(0, Math.min(n.stack.length, Math.round(t ?? n.stack.length)));
2412
+ n.stack.splice(c, 0, {
2411
2413
  entry: i,
2412
- chain: o
2414
+ chain: s
2413
2415
  }), this.restacked(n);
2414
2416
  }
2415
2417
  remove(e) {