@vune-ui/execution 0.1.20

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.
package/dist/index.js ADDED
@@ -0,0 +1,560 @@
1
+ /** Resolve the public toggle. The default is deliberately completely disabled. */
2
+ export function resolveResidentComputeExperimental(options) {
3
+ const value = typeof options === "boolean" ? { enabled: options } : (options ?? {});
4
+ const enabled = value.enabled === true;
5
+ return Object.freeze({
6
+ enabled,
7
+ wasm: enabled && value.wasm !== false,
8
+ worker: enabled && value.worker !== false,
9
+ gpu: enabled && value.gpu !== false,
10
+ });
11
+ }
12
+ export function residentComputeExperimentalEnabled(options) {
13
+ return resolveResidentComputeExperimental(options).enabled;
14
+ }
15
+ const SCALAR_BYTES = Object.freeze({
16
+ f32: 4,
17
+ f64: 8,
18
+ i32: 4,
19
+ u32: 4,
20
+ u8: 1,
21
+ });
22
+ function positiveInteger(value, name) {
23
+ if (!Number.isSafeInteger(value) || value <= 0) {
24
+ throw new RangeError(`${name} must be a positive safe integer`);
25
+ }
26
+ return value;
27
+ }
28
+ function nonNegativeInteger(value, name) {
29
+ if (!Number.isSafeInteger(value) || value < 0) {
30
+ throw new RangeError(`${name} must be a non-negative safe integer`);
31
+ }
32
+ return value;
33
+ }
34
+ function align(value, alignment) {
35
+ return Math.ceil(value / alignment) * alignment;
36
+ }
37
+ export function defineBufferLayout(fields, options = {}) {
38
+ if (fields.length === 0)
39
+ throw new TypeError("BufferLayout requires at least one field");
40
+ const alignment = positiveInteger(options.alignment ?? 16, "BufferLayout alignment");
41
+ const names = new Set();
42
+ let cursor = 0;
43
+ const normalized = fields.map((field, index) => {
44
+ if (!/^[A-Za-z_$][\w$]*$/u.test(field.name) || names.has(field.name)) {
45
+ throw new TypeError(`BufferLayout field ${index} has an invalid or duplicate name`);
46
+ }
47
+ names.add(field.name);
48
+ const scalarBytes = SCALAR_BYTES[field.type];
49
+ if (scalarBytes === undefined)
50
+ throw new TypeError(`Unsupported BufferLayout scalar type: ${String(field.type)}`);
51
+ const length = nonNegativeInteger(field.length, `BufferLayout field ${field.name} length`);
52
+ const byteStride = positiveInteger(field.byteStride ?? scalarBytes, `BufferLayout field ${field.name} byteStride`);
53
+ if (byteStride < scalarBytes)
54
+ throw new RangeError(`BufferLayout field ${field.name} byteStride is smaller than its scalar`);
55
+ const byteOffset = field.byteOffset === undefined
56
+ ? align(cursor, Math.min(alignment, scalarBytes))
57
+ : nonNegativeInteger(field.byteOffset, `BufferLayout field ${field.name} byteOffset`);
58
+ if (byteOffset % scalarBytes !== 0)
59
+ throw new RangeError(`BufferLayout field ${field.name} is not scalar-aligned`);
60
+ const fieldEnd = byteOffset + (length === 0 ? 0 : ((length - 1) * byteStride) + scalarBytes);
61
+ if (byteOffset < cursor && field.byteOffset === undefined)
62
+ throw new RangeError(`BufferLayout field ${field.name} overlaps a previous field`);
63
+ cursor = Math.max(cursor, fieldEnd);
64
+ return Object.freeze({ name: field.name, type: field.type, byteOffset, length, byteStride });
65
+ });
66
+ return Object.freeze({
67
+ version: 1,
68
+ fields: Object.freeze(normalized),
69
+ byteLength: align(cursor, alignment),
70
+ alignment,
71
+ });
72
+ }
73
+ export class ResidentBuffer {
74
+ layout;
75
+ byteLength;
76
+ #storageEpoch = 0;
77
+ #contentVersion = 0;
78
+ #dirtyRanges = [];
79
+ constructor(layout, byteLength = layout.byteLength) {
80
+ this.layout = layout;
81
+ this.byteLength = nonNegativeInteger(byteLength, "ResidentBuffer byteLength");
82
+ if (this.byteLength < layout.byteLength)
83
+ throw new RangeError("ResidentBuffer is smaller than its BufferLayout");
84
+ }
85
+ get storageEpoch() {
86
+ return this.#storageEpoch;
87
+ }
88
+ get contentVersion() {
89
+ return this.#contentVersion;
90
+ }
91
+ get dirtyRanges() {
92
+ return Object.freeze(this.#dirtyRanges.map(range => Object.freeze({ ...range })));
93
+ }
94
+ markWritten(start = 0, end = this.byteLength) {
95
+ return this.markWrittenRanges([{ start, end }]);
96
+ }
97
+ markWrittenRanges(ranges) {
98
+ for (const range of ranges) {
99
+ nonNegativeInteger(range.start, "ResidentBuffer dirty range start");
100
+ nonNegativeInteger(range.end, "ResidentBuffer dirty range end");
101
+ if (range.start > range.end || range.end > this.byteLength)
102
+ throw new RangeError("ResidentBuffer dirty range is outside storage");
103
+ }
104
+ this.#contentVersion += 1;
105
+ const next = ranges
106
+ .filter(range => range.start !== range.end)
107
+ .map(range => ({ ...range, version: this.#contentVersion }));
108
+ if (next.length > 0) {
109
+ const merged = [];
110
+ for (const range of [...this.#dirtyRanges, ...next].sort((left, right) => left.start - right.start)) {
111
+ const previous = merged.at(-1);
112
+ if (previous && range.start <= previous.end) {
113
+ merged[merged.length - 1] = {
114
+ start: previous.start,
115
+ end: Math.max(previous.end, range.end),
116
+ version: Math.max(previous.version, range.version),
117
+ };
118
+ }
119
+ else {
120
+ merged.push({ ...range });
121
+ }
122
+ }
123
+ this.#dirtyRanges = merged;
124
+ }
125
+ return this.#contentVersion;
126
+ }
127
+ consumeDirtyRanges() {
128
+ const ranges = this.dirtyRanges;
129
+ this.#dirtyRanges = [];
130
+ return ranges;
131
+ }
132
+ markStorageRebound() {
133
+ this.#storageEpoch += 1;
134
+ this.markWritten();
135
+ return this.#storageEpoch;
136
+ }
137
+ static js(layout, views) {
138
+ return new CpuResidentBuffer("js", layout, views);
139
+ }
140
+ static wasm(layout, memory, views) {
141
+ return new WasmResidentBuffer("wasm", layout, memory, views);
142
+ }
143
+ static sharedWasm(layout, memory, views) {
144
+ return new WasmResidentBuffer("shared-wasm", layout, memory, views);
145
+ }
146
+ static gpu(layout, resource, byteLength = layout.byteLength) {
147
+ return new GpuResidentBuffer(layout, resource, byteLength);
148
+ }
149
+ }
150
+ function validateCpuViews(layout, views) {
151
+ if (views.length !== layout.fields.length) {
152
+ throw new TypeError(`ResidentBuffer expected ${layout.fields.length} CPU views, received ${views.length}`);
153
+ }
154
+ for (let index = 0; index < views.length; index += 1) {
155
+ const view = views[index];
156
+ const field = layout.fields[index];
157
+ if (view.byteLength < field.length * SCALAR_BYTES[field.type]) {
158
+ throw new RangeError(`ResidentBuffer view ${field.name} is smaller than its field`);
159
+ }
160
+ }
161
+ return Object.freeze([...views]);
162
+ }
163
+ export class CpuResidentBuffer extends ResidentBuffer {
164
+ kind;
165
+ #views;
166
+ constructor(kind, layout, views) {
167
+ const normalized = validateCpuViews(layout, views);
168
+ super(layout, Math.max(layout.byteLength, ...normalized.map(view => view.byteLength)));
169
+ this.kind = kind;
170
+ this.#views = normalized;
171
+ }
172
+ get cpuViews() {
173
+ return this.#views;
174
+ }
175
+ rebindCpuViews(views) {
176
+ this.#views = validateCpuViews(this.layout, views);
177
+ return this.markStorageRebound();
178
+ }
179
+ }
180
+ export class WasmResidentBuffer extends CpuResidentBuffer {
181
+ #memory;
182
+ constructor(kind, layout, memory, views) {
183
+ super(kind, layout, views);
184
+ const shared = typeof SharedArrayBuffer !== "undefined" && memory.buffer instanceof SharedArrayBuffer;
185
+ if ((kind === "shared-wasm") !== shared) {
186
+ throw new TypeError(`${kind} requires ${kind === "shared-wasm" ? "shared" : "unshared"} WebAssembly.Memory`);
187
+ }
188
+ for (const view of views) {
189
+ if (view.buffer !== memory.buffer)
190
+ throw new TypeError(`${kind} CPU views must reference its WebAssembly.Memory`);
191
+ }
192
+ this.#memory = memory;
193
+ }
194
+ get memory() {
195
+ return this.#memory;
196
+ }
197
+ rebindMemory(memory, views) {
198
+ const shared = typeof SharedArrayBuffer !== "undefined" && memory.buffer instanceof SharedArrayBuffer;
199
+ if ((this.kind === "shared-wasm") !== shared)
200
+ throw new TypeError("WebAssembly.Memory sharing mode changed");
201
+ for (const view of views) {
202
+ if (view.buffer !== memory.buffer)
203
+ throw new TypeError("CPU views must reference the replacement WebAssembly.Memory");
204
+ }
205
+ this.#memory = memory;
206
+ return this.rebindCpuViews(views);
207
+ }
208
+ }
209
+ export class GpuResidentBuffer extends ResidentBuffer {
210
+ kind = "gpu";
211
+ #resource;
212
+ constructor(layout, resource, byteLength = layout.byteLength) {
213
+ if (resource === null || resource === undefined)
214
+ throw new TypeError("GpuResidentBuffer requires an opaque GPU resource");
215
+ super(layout, byteLength);
216
+ this.#resource = resource;
217
+ }
218
+ get resource() {
219
+ return this.#resource;
220
+ }
221
+ rebindResource(resource) {
222
+ if (resource === null || resource === undefined)
223
+ throw new TypeError("GpuResidentBuffer requires an opaque GPU resource");
224
+ this.#resource = resource;
225
+ return this.markStorageRebound();
226
+ }
227
+ }
228
+ export class ExecutionRegion {
229
+ id;
230
+ inputs;
231
+ outputs;
232
+ lifetime;
233
+ noMaterialization = true;
234
+ noReadback = true;
235
+ entrypoints;
236
+ metadata;
237
+ constructor(options) {
238
+ if (!options.id.trim())
239
+ throw new TypeError("ExecutionRegion requires a non-empty id");
240
+ if (options.inputs.length === 0 || options.outputs.length === 0) {
241
+ throw new TypeError("ExecutionRegion requires resident inputs and outputs");
242
+ }
243
+ if (options.noMaterialization !== true)
244
+ throw new TypeError("ExecutionRegion cannot materialize objects inside the region");
245
+ if (options.noReadback !== true)
246
+ throw new TypeError("ExecutionRegion cannot read GPU results back inside the region");
247
+ this.id = options.id;
248
+ this.inputs = Object.freeze([...options.inputs]);
249
+ this.outputs = Object.freeze([...options.outputs]);
250
+ this.lifetime = options.lifetime;
251
+ this.entrypoints = Object.freeze({ ...(options.entrypoints ?? {}) });
252
+ this.metadata = options.metadata;
253
+ }
254
+ get source() {
255
+ return this.inputs[0];
256
+ }
257
+ get sink() {
258
+ return this.outputs[0];
259
+ }
260
+ entrypoint(backend) {
261
+ return this.entrypoints[backend];
262
+ }
263
+ execute(backend, context) {
264
+ const entrypoint = this.entrypoint(backend);
265
+ if (!entrypoint)
266
+ throw new TypeError(`ExecutionRegion ${this.id} has no ${backend} entrypoint`);
267
+ return entrypoint(context, this);
268
+ }
269
+ }
270
+ export class BackendCapability {
271
+ backend;
272
+ available;
273
+ residentKinds;
274
+ supportsPersistentMemory;
275
+ supportsSharedMemory;
276
+ supportsGpuSink;
277
+ supportsSimd;
278
+ requiresCrossOriginIsolated;
279
+ crossOriginIsolated;
280
+ sharedMemoryAvailable;
281
+ webgpuLimits;
282
+ requiredWebgpuLimits;
283
+ deviceState;
284
+ deviceLossReason;
285
+ reason;
286
+ constructor(options) {
287
+ if (!options.backend)
288
+ throw new TypeError("BackendCapability requires a backend id");
289
+ this.backend = options.backend;
290
+ this.available = options.available;
291
+ this.residentKinds = Object.freeze([...new Set(options.residentKinds)]);
292
+ this.supportsPersistentMemory = options.supportsPersistentMemory;
293
+ this.supportsSharedMemory = options.supportsSharedMemory;
294
+ this.supportsGpuSink = options.supportsGpuSink;
295
+ this.supportsSimd = options.supportsSimd ?? false;
296
+ this.requiresCrossOriginIsolated = options.requiresCrossOriginIsolated ?? false;
297
+ this.crossOriginIsolated = options.crossOriginIsolated ?? !this.requiresCrossOriginIsolated;
298
+ this.sharedMemoryAvailable = options.sharedMemoryAvailable ?? options.supportsSharedMemory;
299
+ this.webgpuLimits = Object.freeze({ ...(options.webgpuLimits ?? {}) });
300
+ this.requiredWebgpuLimits = Object.freeze({ ...(options.requiredWebgpuLimits ?? {}) });
301
+ this.deviceState = options.deviceState ?? (options.available ? "ready" : "unavailable");
302
+ this.deviceLossReason = options.deviceLossReason;
303
+ this.reason = options.reason;
304
+ }
305
+ rejectionReason(region) {
306
+ if (!this.available)
307
+ return this.reason ?? "backend-unavailable";
308
+ if (this.deviceState !== "ready")
309
+ return this.deviceLossReason ?? `device-${this.deviceState}`;
310
+ const residentKinds = [...region.inputs, ...region.outputs].map(buffer => buffer.kind);
311
+ if (residentKinds.some(kind => !this.residentKinds.includes(kind)))
312
+ return "unsupported-resident-kind";
313
+ if (region.lifetime !== "single-use" && !this.supportsPersistentMemory)
314
+ return "persistent-memory-unsupported";
315
+ if (residentKinds.includes("shared-wasm")) {
316
+ if (!this.supportsSharedMemory || !this.sharedMemoryAvailable)
317
+ return "shared-memory-unavailable";
318
+ if (this.requiresCrossOriginIsolated && !this.crossOriginIsolated)
319
+ return "cross-origin-isolation-required";
320
+ }
321
+ if (region.outputs.some(buffer => buffer.kind === "gpu") && !this.supportsGpuSink)
322
+ return "gpu-sink-unsupported";
323
+ for (const [limit, required] of Object.entries(this.requiredWebgpuLimits)) {
324
+ if ((this.webgpuLimits[limit] ?? 0) < required)
325
+ return `webgpu-limit-${limit}`;
326
+ }
327
+ return null;
328
+ }
329
+ supports(region) {
330
+ return this.rejectionReason(region) === null;
331
+ }
332
+ }
333
+ function finiteMetric(value, name) {
334
+ const normalized = value ?? 0;
335
+ if (!Number.isFinite(normalized) || normalized < 0)
336
+ throw new RangeError(`${name} must be a finite non-negative number`);
337
+ return normalized;
338
+ }
339
+ export class ExecutionTelemetry {
340
+ baselineBackend = "packed-js";
341
+ #aggregates = new Map();
342
+ #recent = new Map();
343
+ recentCapacity = 31;
344
+ record(sample) {
345
+ const computeMs = finiteMetric(sample.computeMs, "computeMs");
346
+ const transferBytes = finiteMetric(sample.transferBytes, "transferBytes");
347
+ const transferMs = finiteMetric(sample.transferMs, "transferMs");
348
+ const materializationBytes = finiteMetric(sample.materializationBytes, "materializationBytes");
349
+ const materializationMs = finiteMetric(sample.materializationMs, "materializationMs");
350
+ const readbackBytes = finiteMetric(sample.readbackBytes, "readbackBytes");
351
+ const readbackMs = finiteMetric(sample.readbackMs, "readbackMs");
352
+ const synchronizationBytes = finiteMetric(sample.synchronizationBytes, "synchronizationBytes");
353
+ const synchronizationMs = finiteMetric(sample.synchronizationMs, "synchronizationMs");
354
+ const measuredTotal = computeMs + transferMs + materializationMs + readbackMs + synchronizationMs;
355
+ const totalMs = sample.totalMs === undefined ? measuredTotal : finiteMetric(sample.totalMs, "totalMs");
356
+ if (totalMs + Number.EPSILON < measuredTotal)
357
+ throw new RangeError("totalMs cannot be smaller than its measured components");
358
+ const aggregate = this.#aggregates.get(sample.backend) ?? {
359
+ backend: sample.backend,
360
+ samples: 0,
361
+ computeMs: 0,
362
+ transferBytes: 0,
363
+ transferMs: 0,
364
+ materializationBytes: 0,
365
+ materializationMs: 0,
366
+ readbackBytes: 0,
367
+ readbackMs: 0,
368
+ synchronizationBytes: 0,
369
+ synchronizationMs: 0,
370
+ totalMs: 0,
371
+ };
372
+ aggregate.samples += 1;
373
+ aggregate.computeMs += computeMs;
374
+ aggregate.transferBytes += transferBytes;
375
+ aggregate.transferMs += transferMs;
376
+ aggregate.materializationBytes += materializationBytes;
377
+ aggregate.materializationMs += materializationMs;
378
+ aggregate.readbackBytes += readbackBytes;
379
+ aggregate.readbackMs += readbackMs;
380
+ aggregate.synchronizationBytes += synchronizationBytes;
381
+ aggregate.synchronizationMs += synchronizationMs;
382
+ aggregate.totalMs += totalMs;
383
+ this.#aggregates.set(sample.backend, aggregate);
384
+ const recent = this.#recent.get(sample.backend) ?? [];
385
+ recent.push(Object.freeze({
386
+ ...sample,
387
+ computeMs,
388
+ transferBytes,
389
+ transferMs,
390
+ materializationBytes,
391
+ materializationMs,
392
+ readbackBytes,
393
+ readbackMs,
394
+ synchronizationBytes,
395
+ synchronizationMs,
396
+ totalMs,
397
+ }));
398
+ if (recent.length > this.recentCapacity)
399
+ recent.splice(0, recent.length - this.recentCapacity);
400
+ this.#recent.set(sample.backend, recent);
401
+ return this.aggregate(sample.backend);
402
+ }
403
+ aggregate(backend) {
404
+ const aggregate = this.#aggregates.get(backend);
405
+ if (!aggregate)
406
+ return null;
407
+ const divisor = aggregate.samples;
408
+ return Object.freeze({
409
+ backend,
410
+ samples: divisor,
411
+ computeMs: aggregate.computeMs / divisor,
412
+ transferBytes: aggregate.transferBytes / divisor,
413
+ transferMs: aggregate.transferMs / divisor,
414
+ materializationBytes: aggregate.materializationBytes / divisor,
415
+ materializationMs: aggregate.materializationMs / divisor,
416
+ readbackBytes: aggregate.readbackBytes / divisor,
417
+ readbackMs: aggregate.readbackMs / divisor,
418
+ synchronizationBytes: aggregate.synchronizationBytes / divisor,
419
+ synchronizationMs: aggregate.synchronizationMs / divisor,
420
+ totalMs: aggregate.totalMs / divisor,
421
+ });
422
+ }
423
+ packedJsBaseline() {
424
+ return this.aggregate(this.baselineBackend);
425
+ }
426
+ /**
427
+ * Median of the most recent measurements. Promotion decisions use this
428
+ * instead of lifetime means so one cold compile/GC pause cannot permanently
429
+ * bias a region and later workload changes can be observed.
430
+ */
431
+ recentAggregate(backend, windowSize = 9) {
432
+ const source = this.#recent.get(backend);
433
+ if (!source || source.length === 0)
434
+ return null;
435
+ const size = Math.max(1, Math.min(source.length, Math.floor(windowSize)));
436
+ const samples = source.slice(-size);
437
+ const median = (key) => {
438
+ const values = samples.map(sample => finiteMetric(sample[key], String(key))).sort((left, right) => left - right);
439
+ const middle = Math.floor(values.length / 2);
440
+ return values.length % 2 === 0 ? (values[middle - 1] + values[middle]) / 2 : values[middle];
441
+ };
442
+ return Object.freeze({
443
+ backend,
444
+ samples: samples.length,
445
+ computeMs: median("computeMs"),
446
+ transferBytes: median("transferBytes"),
447
+ transferMs: median("transferMs"),
448
+ materializationBytes: median("materializationBytes"),
449
+ materializationMs: median("materializationMs"),
450
+ readbackBytes: median("readbackBytes"),
451
+ readbackMs: median("readbackMs"),
452
+ synchronizationBytes: median("synchronizationBytes"),
453
+ synchronizationMs: median("synchronizationMs"),
454
+ totalMs: median("totalMs"),
455
+ });
456
+ }
457
+ recentPackedJsBaseline(windowSize = 9) {
458
+ return this.recentAggregate(this.baselineBackend, windowSize);
459
+ }
460
+ compareWithPackedJs(backend) {
461
+ const baseline = this.packedJsBaseline();
462
+ const candidate = this.aggregate(backend);
463
+ if (!baseline || !candidate || backend === this.baselineBackend) {
464
+ return Object.freeze({ ready: false, wins: false, ratio: null, savedMs: null });
465
+ }
466
+ const ratio = baseline.totalMs === 0 ? (candidate.totalMs === 0 ? 1 : Number.POSITIVE_INFINITY) : candidate.totalMs / baseline.totalMs;
467
+ return Object.freeze({ ready: true, wins: candidate.totalMs < baseline.totalMs, ratio, savedMs: baseline.totalMs - candidate.totalMs });
468
+ }
469
+ compareRecentWithPackedJs(backend, windowSize = 9) {
470
+ const baseline = this.recentPackedJsBaseline(windowSize);
471
+ const candidate = this.recentAggregate(backend, windowSize);
472
+ if (!baseline || !candidate || backend === this.baselineBackend) {
473
+ return Object.freeze({ ready: false, wins: false, ratio: null, savedMs: null });
474
+ }
475
+ const ratio = baseline.totalMs === 0 ? (candidate.totalMs === 0 ? 1 : Number.POSITIVE_INFINITY) : candidate.totalMs / baseline.totalMs;
476
+ return Object.freeze({ ready: true, wins: candidate.totalMs < baseline.totalMs, ratio, savedMs: baseline.totalMs - candidate.totalMs });
477
+ }
478
+ snapshot() {
479
+ return Object.freeze(Object.fromEntries([...this.#aggregates.keys()].map(backend => [backend, this.aggregate(backend)])));
480
+ }
481
+ }
482
+ export class FrameBudgetSignal {
483
+ budgetMs;
484
+ alpha;
485
+ #samples = 0;
486
+ #emaMainThreadMs = 0;
487
+ #peakMainThreadMs = 0;
488
+ #listeners = new Set();
489
+ constructor(options = {}) {
490
+ const budgetMs = Number(options.budgetMs ?? 8);
491
+ const alpha = Number(options.alpha ?? 0.12);
492
+ this.budgetMs = Number.isFinite(budgetMs) ? Math.max(0.1, budgetMs) : 8;
493
+ this.alpha = Number.isFinite(alpha) ? Math.min(1, Math.max(0.01, alpha)) : 0.12;
494
+ }
495
+ get pressure() {
496
+ return this.#emaMainThreadMs / this.budgetMs;
497
+ }
498
+ get level() {
499
+ const pressure = this.pressure;
500
+ return pressure >= 1.15 ? "critical" : pressure >= 0.75 ? "pressured" : pressure >= 0.25 ? "comfortable" : "idle";
501
+ }
502
+ observe(mainThreadMs) {
503
+ if (!Number.isFinite(mainThreadMs) || mainThreadMs < 0)
504
+ return this.snapshot();
505
+ this.#samples += 1;
506
+ if (this.#samples === 1)
507
+ this.#emaMainThreadMs = mainThreadMs;
508
+ else
509
+ this.#emaMainThreadMs += (mainThreadMs - this.#emaMainThreadMs) * this.alpha;
510
+ this.#peakMainThreadMs = Math.max(this.#peakMainThreadMs * 0.995, mainThreadMs);
511
+ const snapshot = this.snapshot();
512
+ for (const listener of this.#listeners)
513
+ listener(snapshot);
514
+ return snapshot;
515
+ }
516
+ snapshot() {
517
+ return Object.freeze({
518
+ budgetMs: this.budgetMs,
519
+ emaMainThreadMs: this.#emaMainThreadMs,
520
+ peakMainThreadMs: this.#peakMainThreadMs,
521
+ pressure: this.pressure,
522
+ level: this.level,
523
+ samples: this.#samples,
524
+ });
525
+ }
526
+ subscribe(listener, options = {}) {
527
+ this.#listeners.add(listener);
528
+ if (options.emitCurrent)
529
+ listener(this.snapshot());
530
+ return () => this.#listeners.delete(listener);
531
+ }
532
+ }
533
+ export class FrameBudgetGovernor extends FrameBudgetSignal {
534
+ }
535
+ export class SerializedExecutionQueue {
536
+ #tail = Promise.resolve();
537
+ #pending = 0;
538
+ #closed = false;
539
+ get pending() {
540
+ return this.#pending;
541
+ }
542
+ get closed() {
543
+ return this.#closed;
544
+ }
545
+ enqueue(task) {
546
+ if (this.#closed)
547
+ return Promise.reject(new Error("SerializedExecutionQueue is closed"));
548
+ this.#pending += 1;
549
+ const result = this.#tail.then(task);
550
+ this.#tail = result.then(() => { this.#pending -= 1; }, () => { this.#pending -= 1; });
551
+ return result;
552
+ }
553
+ async idle() {
554
+ await this.#tail;
555
+ }
556
+ close() {
557
+ this.#closed = true;
558
+ }
559
+ }
560
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}