diff --git a/.changeset/clear-hotels-enter.md b/.changeset/clear-hotels-enter.md deleted file mode 100644 index c4248012..00000000 --- a/.changeset/clear-hotels-enter.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Gate every pull request and compare changesets against its base branch. diff --git a/.changeset/famous-cameras-poke.md b/.changeset/famous-cameras-poke.md deleted file mode 100644 index 229770b2..00000000 --- a/.changeset/famous-cameras-poke.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Install only Chromium for the benchmark smoke job; the full browser matrix remains in its dedicated portability job. diff --git a/.changeset/fuzzy-mails-march.md b/.changeset/fuzzy-mails-march.md deleted file mode 100644 index d1384ada..00000000 --- a/.changeset/fuzzy-mails-march.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Remove the unavailable self-hosted benchmark from required CI while retaining its local protocol. diff --git a/.changeset/twenty-deer-act.md b/.changeset/twenty-deer-act.md deleted file mode 100644 index 07fac040..00000000 --- a/.changeset/twenty-deer-act.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Refresh the machine-pinned render baseline and its raw local evidence after the harness lockfile changed. diff --git a/bench/CHANGELOG.md b/bench/CHANGELOG.md index 3738699d..5f29db64 100644 --- a/bench/CHANGELOG.md +++ b/bench/CHANGELOG.md @@ -1,5 +1,24 @@ # @sheetwrite/bench +## 0.0.2 + +### Patch Changes + +- Updated dependencies [8457eca] +- Updated dependencies [dac694a] +- Updated dependencies [0e09ecc] +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [55b1f35] +- Updated dependencies [b225783] +- Updated dependencies [41f6749] +- Updated dependencies [ce1e404] +- Updated dependencies [41f6749] + - @sheetwrite/core@0.4.0 + - @sheetwrite/wasm@0.4.0 + ## 0.0.1 ### Patch Changes diff --git a/bench/package.json b/bench/package.json index 77228cfc..e36fd2f4 100644 --- a/bench/package.json +++ b/bench/package.json @@ -1,6 +1,6 @@ { "name": "@sheetwrite/bench", - "version": "0.0.1", + "version": "0.0.2", "private": true, "type": "module", "description": "Performance comparison benchmarks: Sheetwrite vs Handsontable.", @@ -20,6 +20,7 @@ "bench:resource:smoke": "bun run src/resource-bench.ts --smoke", "bench:render:prepare": "cd .. && bun run build:wasm && bun run --filter '@sheetwrite/core' build", "bench:render": "bun run src/render-driver.ts", + "bench:render:diagnostic": "bun run src/render-driver.ts --scenario-set diagnostic --engine sheetwrite", "bench:render:smoke": "bun run src/render-driver.ts --smoke", "bench:render:validate": "bun run src/render-driver.ts --validate results/render-results.json --gate-mode full", "bench:xlsx": "bun run src/xlsx-bench.ts", diff --git a/bench/results/render-diagnostics.json b/bench/results/render-diagnostics.json new file mode 100644 index 00000000..5fb5ac50 --- /dev/null +++ b/bench/results/render-diagnostics.json @@ -0,0 +1,1519 @@ +{ + "protocolVersion": 1, + "runId": "a42aaa37-341b-413f-95fd-b25c911d4a2f", + "metadata": { + "commit": "66a0df7c6288a89dfb2c8d2226a2fe0b88b3d25e", + "dirty": false, + "timestamp": "2026-08-09T14:10:47.440Z", + "bunVersion": "1.3.14", + "nodeVersion": "24.3.0", + "browserVersion": "149.0.7827.55", + "os": "linux 7.1.3-2-cachyos", + "arch": "x64", + "cpu": "12th Gen Intel(R) Core(TM) i9-12900H", + "engineVersions": { + "sheetwrite": "0.3.1", + "handsontable": "18.0.0" + }, + "datasetSeed": 1592639710, + "datasetHashes": { + "100000": "fnv1a32:178eac66" + }, + "viewport": { + "width": 640, + "height": 480 + }, + "measuredSamples": 3, + "warmupSamples": 1, + "minimumSampleDurationMs": 100, + "rounds": 2, + "orderSeed": 1371602926, + "engineOrder": [ + [ + "sheetwrite" + ], + [ + "sheetwrite" + ] + ], + "launchAttempts": [ + { + "round": 1, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 2, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + } + ], + "windowTransferScenarioOrder": [ + [ + "window-transfer.scroll.baseline", + "window-transfer.scroll.reuse-decoded-view-upper-bound" + ], + [ + "window-transfer.scroll.reuse-decoded-view-upper-bound", + "window-transfer.scroll.baseline" + ] + ] + }, + "config": { + "engines": [ + "sheetwrite" + ], + "rows": [ + 100000 + ], + "scenarios": [ + "formula-dense.paint", + "text-heavy.long-scroll", + "scroll-fractional.same-window", + "geometry-unresized.1m", + "window-transfer.scroll.baseline", + "window-transfer.scroll.reuse-decoded-view-upper-bound" + ] + }, + "results": [ + { + "runId": "a42aaa37-341b-413f-95fd-b25c911d4a2f", + "round": 1, + "engine": "sheetwrite", + "rows": 100000, + "scenarioId": "formula-dense.paint", + "group": "formulae", + "status": "success", + "operationCount": 764, + "rawSamples": [ + { + "index": 0, + "durationMs": 118.39999999757856, + "operationCount": 196, + "perOperationMs": 0.6040816326407069 + }, + { + "index": 1, + "durationMs": 113.79999999888241, + "operationCount": 284, + "perOperationMs": 0.4007042253481775 + }, + { + "index": 2, + "durationMs": 133.4000000031665, + "operationCount": 284, + "perOperationMs": 0.46971830987030455 + } + ], + "medianMs": 0.46971830987030455, + "p95Ms": 0.5906453003636667, + "madMs": 0.06901408452212704, + "validation": [ + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + }, + { + "checkpoint": "formula-dense.paint resolves first visible formula", + "expected": "3", + "observed": "3", + "passed": true + }, + { + "checkpoint": "formula-dense.paint resolves last visible formula column", + "expected": "6", + "observed": "6", + "passed": true + }, + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + } + ], + "memory": { + "beforeBytes": 18114908, + "afterBytes": 20778717, + "deltaBytes": 2663809 + }, + "resources": { + "compiledFormats": 0, + "numberFormatters": 0, + "dateTimeFormatters": 0, + "formatCacheEntries": 0, + "numberFormatterCacheEntries": 0, + "dateTimeFormatterCacheEntries": 0 + }, + "mergeResources": { + "indexConstructions": 0, + "candidatesExamined": 0 + } + }, + { + "runId": "a42aaa37-341b-413f-95fd-b25c911d4a2f", + "round": 1, + "engine": "sheetwrite", + "rows": 100000, + "scenarioId": "text-heavy.long-scroll", + "group": "view-scrolling", + "status": "success", + "operationCount": 3, + "rawSamples": [ + { + "index": 0, + "durationMs": 4102.5, + "operationCount": 1, + "perOperationMs": 4102.5 + }, + { + "index": 1, + "durationMs": 4484.799999999814, + "operationCount": 1, + "perOperationMs": 4484.799999999814 + }, + { + "index": 2, + "durationMs": 4140.700000000186, + "operationCount": 1, + "perOperationMs": 4140.700000000186 + } + ], + "medianMs": 4140.700000000186, + "p95Ms": 4450.389999999851, + "madMs": 38.200000000186265, + "validation": [ + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + }, + { + "checkpoint": "text-heavy.long-scroll advances through multiple row windows", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "text-heavy.long-scroll retains unique long text", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + } + ], + "memory": { + "beforeBytes": 18665166, + "afterBytes": 53711204, + "deltaBytes": 35046038 + }, + "resources": { + "compiledFormats": 0, + "numberFormatters": 0, + "dateTimeFormatters": 0, + "formatCacheEntries": 0, + "numberFormatterCacheEntries": 0, + "dateTimeFormatterCacheEntries": 0 + }, + "mergeResources": { + "indexConstructions": 0, + "candidatesExamined": 0 + } + }, + { + "runId": "a42aaa37-341b-413f-95fd-b25c911d4a2f", + "round": 1, + "engine": "sheetwrite", + "rows": 100000, + "scenarioId": "scroll-fractional.same-window", + "group": "view-scrolling", + "status": "success", + "operationCount": 456, + "rawSamples": [ + { + "index": 0, + "durationMs": 100.59999999962747, + "operationCount": 146, + "perOperationMs": 0.6890410958878594 + }, + { + "index": 1, + "durationMs": 100.00000000279397, + "operationCount": 159, + "perOperationMs": 0.628930817627635 + }, + { + "index": 2, + "durationMs": 100.3000000026077, + "operationCount": 151, + "perOperationMs": 0.664238410613296 + } + ], + "medianMs": 0.664238410613296, + "p95Ms": 0.6865608273604031, + "madMs": 0.02480268527456342, + "validation": [ + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + }, + { + "checkpoint": "scroll-fractional.same-window uses a fractional device-pixel delta", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "scroll-fractional.same-window keeps the logical row window", + "expected": "0", + "observed": "0", + "passed": true + }, + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + } + ], + "memory": { + "beforeBytes": 53745508, + "afterBytes": 32630778, + "deltaBytes": -21114730 + }, + "resources": { + "compiledFormats": 0, + "numberFormatters": 0, + "dateTimeFormatters": 0, + "formatCacheEntries": 0, + "numberFormatterCacheEntries": 0, + "dateTimeFormatterCacheEntries": 0 + }, + "mergeResources": { + "indexConstructions": 0, + "candidatesExamined": 0 + } + }, + { + "runId": "a42aaa37-341b-413f-95fd-b25c911d4a2f", + "round": 1, + "engine": "sheetwrite", + "rows": 100000, + "scenarioId": "geometry-unresized.1m", + "group": "geometry", + "status": "success", + "operationCount": 2464559, + "rawSamples": [ + { + "index": 0, + "durationMs": 100.00000000651926, + "operationCount": 817443, + "perOperationMs": 0.00012233268864803937 + }, + { + "index": 1, + "durationMs": 100.00000000279397, + "operationCount": 789915, + "perOperationMs": 0.00012659589956235033 + }, + { + "index": 2, + "durationMs": 100.00000000279397, + "operationCount": 857201, + "perOperationMs": 0.00011665875331782623 + } + ], + "medianMs": 0.00012233268864803937, + "p95Ms": 0.00012616957847091923, + "madMs": 0.000004263210914310956, + "validation": [ + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + }, + { + "checkpoint": "geometry-unresized.1m builds exact uniform geometry", + "expected": "{\"count\":1000000,\"backingStoreBytes\":0,\"totalHeight\":28000000,\"middleRow\":500000,\"middleTop\":14000000,\"lastRow\":999999,\"lastTop\":27999972}", + "observed": "{\"count\":1000000,\"backingStoreBytes\":0,\"totalHeight\":28000000,\"middleRow\":500000,\"middleTop\":14000000,\"lastRow\":999999,\"lastTop\":27999972}", + "passed": true + }, + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + } + ], + "memory": { + "beforeBytes": 32894994, + "afterBytes": 36901626, + "deltaBytes": 4006632 + }, + "resources": { + "compiledFormats": 0, + "numberFormatters": 0, + "dateTimeFormatters": 0, + "formatCacheEntries": 0, + "numberFormatterCacheEntries": 0, + "dateTimeFormatterCacheEntries": 0 + }, + "mergeResources": { + "indexConstructions": 0, + "candidatesExamined": 0 + } + }, + { + "runId": "a42aaa37-341b-413f-95fd-b25c911d4a2f", + "round": 1, + "engine": "sheetwrite", + "rows": 100000, + "scenarioId": "window-transfer.scroll.baseline", + "group": "view-scrolling", + "dataValidity": "product-valid", + "status": "success", + "operationCount": 191, + "rawSamples": [ + { + "index": 0, + "durationMs": 100.90000000782311, + "operationCount": 67, + "perOperationMs": 1.5059701493704942, + "windowTransfer": { + "logicalFrames": 67, + "windowReadRequests": 67, + "logicalWindowReads": 67, + "copiedBytes": 229944, + "outputAllocationEvents": 67, + "copiedBytesPerLogicalFrame": 3432, + "outputAllocationEventsPerLogicalFrame": 1, + "copiedBytesPerLogicalRead": 3432, + "outputAllocationEventsPerLogicalRead": 1 + } + }, + { + "index": 1, + "durationMs": 101.19999999832362, + "operationCount": 66, + "perOperationMs": 1.5333333333079335, + "windowTransfer": { + "logicalFrames": 66, + "windowReadRequests": 66, + "logicalWindowReads": 66, + "copiedBytes": 226512, + "outputAllocationEvents": 66, + "copiedBytesPerLogicalFrame": 3432, + "outputAllocationEventsPerLogicalFrame": 1, + "copiedBytesPerLogicalRead": 3432, + "outputAllocationEventsPerLogicalRead": 1 + } + }, + { + "index": 2, + "durationMs": 101.49999999813735, + "operationCount": 58, + "perOperationMs": 1.7499999999678855, + "windowTransfer": { + "logicalFrames": 58, + "windowReadRequests": 58, + "logicalWindowReads": 58, + "copiedBytes": 199056, + "outputAllocationEvents": 58, + "copiedBytesPerLogicalFrame": 3432, + "outputAllocationEventsPerLogicalFrame": 1, + "copiedBytesPerLogicalRead": 3432, + "outputAllocationEventsPerLogicalRead": 1 + } + } + ], + "medianMs": 1.5333333333079335, + "p95Ms": 1.7283333333018902, + "madMs": 0.027363183937439306, + "validation": [ + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + }, + { + "checkpoint": "window-transfer.scroll.baseline completes one coordinator paint", + "expected": "1", + "observed": "1", + "passed": true + }, + { + "checkpoint": "window-transfer.scroll.baseline requests one visible window", + "expected": "1", + "observed": "1", + "passed": true + }, + { + "checkpoint": "window-transfer.scroll.baseline accounts for a fresh decoded window", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + } + ], + "memory": { + "beforeBytes": 36908438, + "afterBytes": 28074620, + "deltaBytes": -8833818 + }, + "resources": { + "compiledFormats": 0, + "numberFormatters": 0, + "dateTimeFormatters": 0, + "formatCacheEntries": 0, + "numberFormatterCacheEntries": 0, + "dateTimeFormatterCacheEntries": 0 + }, + "mergeResources": { + "indexConstructions": 0, + "candidatesExamined": 0 + }, + "windowTransfer": { + "logicalFrames": 191, + "windowReadRequests": 191, + "logicalWindowReads": 191, + "copiedBytes": 655512, + "outputAllocationEvents": 191, + "copiedBytesPerLogicalFrame": 3432, + "outputAllocationEventsPerLogicalFrame": 1, + "copiedBytesPerLogicalRead": 3432, + "outputAllocationEventsPerLogicalRead": 1 + } + }, + { + "runId": "a42aaa37-341b-413f-95fd-b25c911d4a2f", + "round": 1, + "engine": "sheetwrite", + "rows": 100000, + "scenarioId": "window-transfer.scroll.reuse-decoded-view-upper-bound", + "group": "view-scrolling", + "dataValidity": "pixel-data-invalid", + "status": "success", + "operationCount": 454, + "rawSamples": [ + { + "index": 0, + "durationMs": 100.19999999925494, + "operationCount": 154, + "perOperationMs": 0.6506493506445126, + "windowTransfer": { + "logicalFrames": 154, + "windowReadRequests": 154, + "logicalWindowReads": 0, + "copiedBytes": 0, + "outputAllocationEvents": 0, + "copiedBytesPerLogicalFrame": 0, + "outputAllocationEventsPerLogicalFrame": 0, + "copiedBytesPerLogicalRead": null, + "outputAllocationEventsPerLogicalRead": null + } + }, + { + "index": 1, + "durationMs": 100.29999999608845, + "operationCount": 144, + "perOperationMs": 0.6965277777506143, + "windowTransfer": { + "logicalFrames": 144, + "windowReadRequests": 144, + "logicalWindowReads": 0, + "copiedBytes": 0, + "outputAllocationEvents": 0, + "copiedBytesPerLogicalFrame": 0, + "outputAllocationEventsPerLogicalFrame": 0, + "copiedBytesPerLogicalRead": null, + "outputAllocationEventsPerLogicalRead": null + } + }, + { + "index": 2, + "durationMs": 100.60000000428408, + "operationCount": 156, + "perOperationMs": 0.644871794899257, + "windowTransfer": { + "logicalFrames": 156, + "windowReadRequests": 156, + "logicalWindowReads": 0, + "copiedBytes": 0, + "outputAllocationEvents": 0, + "copiedBytesPerLogicalFrame": 0, + "outputAllocationEventsPerLogicalFrame": 0, + "copiedBytesPerLogicalRead": null, + "outputAllocationEventsPerLogicalRead": null + } + } + ], + "medianMs": 0.6506493506445126, + "p95Ms": 0.6919399350400041, + "madMs": 0.005777555745255625, + "validation": [ + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + }, + { + "checkpoint": "window-transfer.scroll.reuse-decoded-view-upper-bound completes one coordinator paint", + "expected": "1", + "observed": "1", + "passed": true + }, + { + "checkpoint": "window-transfer.scroll.reuse-decoded-view-upper-bound requests one visible window", + "expected": "1", + "observed": "1", + "passed": true + }, + { + "checkpoint": "window-transfer.scroll.reuse-decoded-view-upper-bound deliberately reuses pixel-data-invalid decoded data", + "expected": "{\"logicalWindowReads\":0,\"copiedBytes\":0,\"outputAllocationEvents\":0}", + "observed": "{\"logicalWindowReads\":0,\"copiedBytes\":0,\"outputAllocationEvents\":0}", + "passed": true + }, + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + } + ], + "memory": { + "beforeBytes": 28098628, + "afterBytes": 38370252, + "deltaBytes": 10271624 + }, + "resources": { + "compiledFormats": 0, + "numberFormatters": 0, + "dateTimeFormatters": 0, + "formatCacheEntries": 0, + "numberFormatterCacheEntries": 0, + "dateTimeFormatterCacheEntries": 0 + }, + "mergeResources": { + "indexConstructions": 0, + "candidatesExamined": 0 + }, + "windowTransfer": { + "logicalFrames": 454, + "windowReadRequests": 454, + "logicalWindowReads": 0, + "copiedBytes": 0, + "outputAllocationEvents": 0, + "copiedBytesPerLogicalFrame": 0, + "outputAllocationEventsPerLogicalFrame": 0, + "copiedBytesPerLogicalRead": null, + "outputAllocationEventsPerLogicalRead": null + } + }, + { + "runId": "a42aaa37-341b-413f-95fd-b25c911d4a2f", + "round": 2, + "engine": "sheetwrite", + "rows": 100000, + "scenarioId": "formula-dense.paint", + "group": "formulae", + "status": "success", + "operationCount": 845, + "rawSamples": [ + { + "index": 0, + "durationMs": 109.8999999994412, + "operationCount": 284, + "perOperationMs": 0.3869718309839479 + }, + { + "index": 1, + "durationMs": 123.60000000149012, + "operationCount": 284, + "perOperationMs": 0.4352112676108807 + }, + { + "index": 2, + "durationMs": 100.30000000167638, + "operationCount": 277, + "perOperationMs": 0.3620938628219364 + } + ], + "medianMs": 0.3869718309839479, + "p95Ms": 0.4303873239481874, + "madMs": 0.024877968162011488, + "validation": [ + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + }, + { + "checkpoint": "formula-dense.paint resolves first visible formula", + "expected": "3", + "observed": "3", + "passed": true + }, + { + "checkpoint": "formula-dense.paint resolves last visible formula column", + "expected": "6", + "observed": "6", + "passed": true + }, + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + } + ], + "memory": { + "beforeBytes": 18111120, + "afterBytes": 24689909, + "deltaBytes": 6578789 + }, + "resources": { + "compiledFormats": 0, + "numberFormatters": 0, + "dateTimeFormatters": 0, + "formatCacheEntries": 0, + "numberFormatterCacheEntries": 0, + "dateTimeFormatterCacheEntries": 0 + }, + "mergeResources": { + "indexConstructions": 0, + "candidatesExamined": 0 + } + }, + { + "runId": "a42aaa37-341b-413f-95fd-b25c911d4a2f", + "round": 2, + "engine": "sheetwrite", + "rows": 100000, + "scenarioId": "text-heavy.long-scroll", + "group": "view-scrolling", + "status": "success", + "operationCount": 3, + "rawSamples": [ + { + "index": 0, + "durationMs": 3966.7000000001863, + "operationCount": 1, + "perOperationMs": 3966.7000000001863 + }, + { + "index": 1, + "durationMs": 4361.399999999441, + "operationCount": 1, + "perOperationMs": 4361.399999999441 + }, + { + "index": 2, + "durationMs": 4311.299999999814, + "operationCount": 1, + "perOperationMs": 4311.299999999814 + } + ], + "medianMs": 4311.299999999814, + "p95Ms": 4356.389999999478, + "madMs": 50.09999999962747, + "validation": [ + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + }, + { + "checkpoint": "text-heavy.long-scroll advances through multiple row windows", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "text-heavy.long-scroll retains unique long text", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + } + ], + "memory": { + "beforeBytes": 18658674, + "afterBytes": 55829980, + "deltaBytes": 37171306 + }, + "resources": { + "compiledFormats": 0, + "numberFormatters": 0, + "dateTimeFormatters": 0, + "formatCacheEntries": 0, + "numberFormatterCacheEntries": 0, + "dateTimeFormatterCacheEntries": 0 + }, + "mergeResources": { + "indexConstructions": 0, + "candidatesExamined": 0 + } + }, + { + "runId": "a42aaa37-341b-413f-95fd-b25c911d4a2f", + "round": 2, + "engine": "sheetwrite", + "rows": 100000, + "scenarioId": "scroll-fractional.same-window", + "group": "view-scrolling", + "status": "success", + "operationCount": 430, + "rawSamples": [ + { + "index": 0, + "durationMs": 100.19999999459833, + "operationCount": 140, + "perOperationMs": 0.7157142856757024 + }, + { + "index": 1, + "durationMs": 100.69999999646097, + "operationCount": 142, + "perOperationMs": 0.7091549295525421 + }, + { + "index": 2, + "durationMs": 100.1000000005588, + "operationCount": 148, + "perOperationMs": 0.676351351355127 + } + ], + "medianMs": 0.7091549295525421, + "p95Ms": 0.7150583500633864, + "madMs": 0.006559356123160276, + "validation": [ + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + }, + { + "checkpoint": "scroll-fractional.same-window uses a fractional device-pixel delta", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "scroll-fractional.same-window keeps the logical row window", + "expected": "0", + "observed": "0", + "passed": true + }, + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + } + ], + "memory": { + "beforeBytes": 55864332, + "afterBytes": 32389674, + "deltaBytes": -23474658 + }, + "resources": { + "compiledFormats": 0, + "numberFormatters": 0, + "dateTimeFormatters": 0, + "formatCacheEntries": 0, + "numberFormatterCacheEntries": 0, + "dateTimeFormatterCacheEntries": 0 + }, + "mergeResources": { + "indexConstructions": 0, + "candidatesExamined": 0 + } + }, + { + "runId": "a42aaa37-341b-413f-95fd-b25c911d4a2f", + "round": 2, + "engine": "sheetwrite", + "rows": 100000, + "scenarioId": "geometry-unresized.1m", + "group": "geometry", + "status": "success", + "operationCount": 2325951, + "rawSamples": [ + { + "index": 0, + "durationMs": 100.00000000651926, + "operationCount": 805297, + "perOperationMs": 0.00012417778783047653 + }, + { + "index": 1, + "durationMs": 100.09999998565763, + "operationCount": 888185, + "perOperationMs": 0.00011270174567872418 + }, + { + "index": 2, + "durationMs": 100.00000001490116, + "operationCount": 632469, + "perOperationMs": 0.00015811051611209587 + } + ], + "medianMs": 0.00012417778783047653, + "p95Ms": 0.00015471724328393392, + "madMs": 0.000011476042151752354, + "validation": [ + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + }, + { + "checkpoint": "geometry-unresized.1m builds exact uniform geometry", + "expected": "{\"count\":1000000,\"backingStoreBytes\":0,\"totalHeight\":28000000,\"middleRow\":500000,\"middleTop\":14000000,\"lastRow\":999999,\"lastTop\":27999972}", + "observed": "{\"count\":1000000,\"backingStoreBytes\":0,\"totalHeight\":28000000,\"middleRow\":500000,\"middleTop\":14000000,\"lastRow\":999999,\"lastTop\":27999972}", + "passed": true + }, + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + } + ], + "memory": { + "beforeBytes": 32399738, + "afterBytes": 57998650, + "deltaBytes": 25598912 + }, + "resources": { + "compiledFormats": 0, + "numberFormatters": 0, + "dateTimeFormatters": 0, + "formatCacheEntries": 0, + "numberFormatterCacheEntries": 0, + "dateTimeFormatterCacheEntries": 0 + }, + "mergeResources": { + "indexConstructions": 0, + "candidatesExamined": 0 + } + }, + { + "runId": "a42aaa37-341b-413f-95fd-b25c911d4a2f", + "round": 2, + "engine": "sheetwrite", + "rows": 100000, + "scenarioId": "window-transfer.scroll.reuse-decoded-view-upper-bound", + "group": "view-scrolling", + "dataValidity": "pixel-data-invalid", + "status": "success", + "operationCount": 413, + "rawSamples": [ + { + "index": 0, + "durationMs": 100.40000000689179, + "operationCount": 140, + "perOperationMs": 0.7171428571920841, + "windowTransfer": { + "logicalFrames": 140, + "windowReadRequests": 140, + "logicalWindowReads": 0, + "copiedBytes": 0, + "outputAllocationEvents": 0, + "copiedBytesPerLogicalFrame": 0, + "outputAllocationEventsPerLogicalFrame": 0, + "copiedBytesPerLogicalRead": null, + "outputAllocationEventsPerLogicalRead": null + } + }, + { + "index": 1, + "durationMs": 100.0000000083819, + "operationCount": 141, + "perOperationMs": 0.7092198582154745, + "windowTransfer": { + "logicalFrames": 141, + "windowReadRequests": 141, + "logicalWindowReads": 0, + "copiedBytes": 0, + "outputAllocationEvents": 0, + "copiedBytesPerLogicalFrame": 0, + "outputAllocationEventsPerLogicalFrame": 0, + "copiedBytesPerLogicalRead": null, + "outputAllocationEventsPerLogicalRead": null + } + }, + { + "index": 2, + "durationMs": 100.3000000026077, + "operationCount": 132, + "perOperationMs": 0.7598484848682402, + "windowTransfer": { + "logicalFrames": 132, + "windowReadRequests": 132, + "logicalWindowReads": 0, + "copiedBytes": 0, + "outputAllocationEvents": 0, + "copiedBytesPerLogicalFrame": 0, + "outputAllocationEventsPerLogicalFrame": 0, + "copiedBytesPerLogicalRead": null, + "outputAllocationEventsPerLogicalRead": null + } + } + ], + "medianMs": 0.7171428571920841, + "p95Ms": 0.7555779221006246, + "madMs": 0.007922998976609641, + "validation": [ + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + }, + { + "checkpoint": "window-transfer.scroll.reuse-decoded-view-upper-bound completes one coordinator paint", + "expected": "1", + "observed": "1", + "passed": true + }, + { + "checkpoint": "window-transfer.scroll.reuse-decoded-view-upper-bound requests one visible window", + "expected": "1", + "observed": "1", + "passed": true + }, + { + "checkpoint": "window-transfer.scroll.reuse-decoded-view-upper-bound deliberately reuses pixel-data-invalid decoded data", + "expected": "{\"logicalWindowReads\":0,\"copiedBytes\":0,\"outputAllocationEvents\":0}", + "observed": "{\"logicalWindowReads\":0,\"copiedBytes\":0,\"outputAllocationEvents\":0}", + "passed": true + }, + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + } + ], + "memory": { + "beforeBytes": 58005274, + "afterBytes": 34190418, + "deltaBytes": -23814856 + }, + "resources": { + "compiledFormats": 0, + "numberFormatters": 0, + "dateTimeFormatters": 0, + "formatCacheEntries": 0, + "numberFormatterCacheEntries": 0, + "dateTimeFormatterCacheEntries": 0 + }, + "mergeResources": { + "indexConstructions": 0, + "candidatesExamined": 0 + }, + "windowTransfer": { + "logicalFrames": 413, + "windowReadRequests": 413, + "logicalWindowReads": 0, + "copiedBytes": 0, + "outputAllocationEvents": 0, + "copiedBytesPerLogicalFrame": 0, + "outputAllocationEventsPerLogicalFrame": 0, + "copiedBytesPerLogicalRead": null, + "outputAllocationEventsPerLogicalRead": null + } + }, + { + "runId": "a42aaa37-341b-413f-95fd-b25c911d4a2f", + "round": 2, + "engine": "sheetwrite", + "rows": 100000, + "scenarioId": "window-transfer.scroll.baseline", + "group": "view-scrolling", + "dataValidity": "product-valid", + "status": "success", + "operationCount": 194, + "rawSamples": [ + { + "index": 0, + "durationMs": 100.69999999832362, + "operationCount": 65, + "perOperationMs": 1.5492307692049787, + "windowTransfer": { + "logicalFrames": 65, + "windowReadRequests": 65, + "logicalWindowReads": 65, + "copiedBytes": 223080, + "outputAllocationEvents": 65, + "copiedBytesPerLogicalFrame": 3432, + "outputAllocationEventsPerLogicalFrame": 1, + "copiedBytesPerLogicalRead": 3432, + "outputAllocationEventsPerLogicalRead": 1 + } + }, + { + "index": 1, + "durationMs": 100.69999999646097, + "operationCount": 64, + "perOperationMs": 1.5734374999447027, + "windowTransfer": { + "logicalFrames": 64, + "windowReadRequests": 64, + "logicalWindowReads": 64, + "copiedBytes": 219648, + "outputAllocationEvents": 64, + "copiedBytesPerLogicalFrame": 3432, + "outputAllocationEventsPerLogicalFrame": 1, + "copiedBytesPerLogicalRead": 3432, + "outputAllocationEventsPerLogicalRead": 1 + } + }, + { + "index": 2, + "durationMs": 100.8000000026077, + "operationCount": 65, + "perOperationMs": 1.5507692308093493, + "windowTransfer": { + "logicalFrames": 65, + "windowReadRequests": 65, + "logicalWindowReads": 65, + "copiedBytes": 223080, + "outputAllocationEvents": 65, + "copiedBytesPerLogicalFrame": 3432, + "outputAllocationEventsPerLogicalFrame": 1, + "copiedBytesPerLogicalRead": 3432, + "outputAllocationEventsPerLogicalRead": 1 + } + } + ], + "medianMs": 1.5507692308093493, + "p95Ms": 1.5711706730311674, + "madMs": 0.0015384616043705446, + "validation": [ + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + }, + { + "checkpoint": "window-transfer.scroll.baseline completes one coordinator paint", + "expected": "1", + "observed": "1", + "passed": true + }, + { + "checkpoint": "window-transfer.scroll.baseline requests one visible window", + "expected": "1", + "observed": "1", + "passed": true + }, + { + "checkpoint": "window-transfer.scroll.baseline accounts for a fresh decoded window", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "grid remains mounted and accessibility-labelled", + "expected": "true", + "observed": "true", + "passed": true + }, + { + "checkpoint": "canonical row count", + "expected": "100000", + "observed": "100000", + "passed": true + }, + { + "checkpoint": "canonical sentinel checksum", + "expected": "fnv1a32:e2d3498b", + "observed": "fnv1a32:e2d3498b", + "passed": true + } + ], + "memory": { + "beforeBytes": 34212894, + "afterBytes": 28497072, + "deltaBytes": -5715822 + }, + "resources": { + "compiledFormats": 0, + "numberFormatters": 0, + "dateTimeFormatters": 0, + "formatCacheEntries": 0, + "numberFormatterCacheEntries": 0, + "dateTimeFormatterCacheEntries": 0 + }, + "mergeResources": { + "indexConstructions": 0, + "candidatesExamined": 0 + }, + "windowTransfer": { + "logicalFrames": 194, + "windowReadRequests": 194, + "logicalWindowReads": 194, + "copiedBytes": 665808, + "outputAllocationEvents": 194, + "copiedBytesPerLogicalFrame": 3432, + "outputAllocationEventsPerLogicalFrame": 1, + "copiedBytesPerLogicalRead": 3432, + "outputAllocationEventsPerLogicalRead": 1 + } + } + ], + "completeness": { + "expectedKeys": [ + "round=1;engine=sheetwrite;rows=100000;scenario=formula-dense.paint", + "round=1;engine=sheetwrite;rows=100000;scenario=geometry-unresized.1m", + "round=1;engine=sheetwrite;rows=100000;scenario=scroll-fractional.same-window", + "round=1;engine=sheetwrite;rows=100000;scenario=text-heavy.long-scroll", + "round=1;engine=sheetwrite;rows=100000;scenario=window-transfer.scroll.baseline", + "round=1;engine=sheetwrite;rows=100000;scenario=window-transfer.scroll.reuse-decoded-view-upper-bound", + "round=2;engine=sheetwrite;rows=100000;scenario=formula-dense.paint", + "round=2;engine=sheetwrite;rows=100000;scenario=geometry-unresized.1m", + "round=2;engine=sheetwrite;rows=100000;scenario=scroll-fractional.same-window", + "round=2;engine=sheetwrite;rows=100000;scenario=text-heavy.long-scroll", + "round=2;engine=sheetwrite;rows=100000;scenario=window-transfer.scroll.baseline", + "round=2;engine=sheetwrite;rows=100000;scenario=window-transfer.scroll.reuse-decoded-view-upper-bound" + ], + "observedKeys": [ + "round=1;engine=sheetwrite;rows=100000;scenario=formula-dense.paint", + "round=1;engine=sheetwrite;rows=100000;scenario=geometry-unresized.1m", + "round=1;engine=sheetwrite;rows=100000;scenario=scroll-fractional.same-window", + "round=1;engine=sheetwrite;rows=100000;scenario=text-heavy.long-scroll", + "round=1;engine=sheetwrite;rows=100000;scenario=window-transfer.scroll.baseline", + "round=1;engine=sheetwrite;rows=100000;scenario=window-transfer.scroll.reuse-decoded-view-upper-bound", + "round=2;engine=sheetwrite;rows=100000;scenario=formula-dense.paint", + "round=2;engine=sheetwrite;rows=100000;scenario=geometry-unresized.1m", + "round=2;engine=sheetwrite;rows=100000;scenario=scroll-fractional.same-window", + "round=2;engine=sheetwrite;rows=100000;scenario=text-heavy.long-scroll", + "round=2;engine=sheetwrite;rows=100000;scenario=window-transfer.scroll.baseline", + "round=2;engine=sheetwrite;rows=100000;scenario=window-transfer.scroll.reuse-decoded-view-upper-bound" + ], + "missingKeys": [], + "duplicateKeys": [], + "unexpectedKeys": [], + "failedKeys": [], + "complete": true, + "successful": true + }, + "reproductionCommands": [ + "bun run --filter '@sheetwrite/bench' bench:render:diagnostic" + ] +} diff --git a/bench/results/render-diagnostics.md b/bench/results/render-diagnostics.md new file mode 100644 index 00000000..395a4e2f --- /dev/null +++ b/bench/results/render-diagnostics.md @@ -0,0 +1,57 @@ +# Auditable render benchmark + +Protocol version: **1** +Run ID: `a42aaa37-341b-413f-95fd-b25c911d4a2f` +Matrix: **complete and successful** + +## Environment + +| Field | Value | +|:--|:--| +| Commit | `66a0df7c6288a89dfb2c8d2226a2fe0b88b3d25e` (clean) | +| Timestamp | 2026-08-09T14:10:47.440Z | +| Runtime | Bun 1.3.14; Node 24.3.0 | +| Browser | 149.0.7827.55 | +| OS / arch | linux 7.1.3-2-cachyos / x64 | +| CPU | 12th Gen Intel(R) Core(TM) i9-12900H | +| Engines | Sheetwrite 0.3.1; Handsontable 18.0.0 | +| Dataset | seed 1592639710; 100,000 rows = `fnv1a32:178eac66` | +| Viewport | 640 × 480 | +| Sampling | 1 excluded warmup aggregate(s), 3 measured aggregate(s), minimum 100 ms each | +| Counterbalance | seed 1371602926; round 1: sheetwrite; round 2: sheetwrite | +| Browser launches | 2 attempt(s); 0 failed attempt(s), all recorded in raw JSON | + +Every cell below is linked to the raw JSON. Timings are per logical operation and use every measured sample; p95 is linearly interpolated and MAD is the median absolute deviation. Setup, cleanup, and declared warmups are excluded. + +## Results + +| round | rows | scenario / raw identity | Sheetwrite | Handsontable | +|---:|---:|:--|:--|:--| +| 1 | 100,000 | [`r1-100000-formula-dense.paint`](./render-results.json) | median 0.46972 ms; p95 0.59065; MAD 0.06901; 3 samples / 764 ops | +| 1 | 100,000 | [`r1-100000-text-heavy.long-scroll`](./render-results.json) | median 4140.7 ms; p95 4450.4; MAD 38.200; 3 samples / 3 ops | +| 1 | 100,000 | [`r1-100000-scroll-fractional.same-window`](./render-results.json) | median 0.66424 ms; p95 0.68656; MAD 0.02480; 3 samples / 456 ops | +| 1 | 100,000 | [`r1-100000-geometry-unresized.1m`](./render-results.json) | median 0.00012 ms; p95 0.00013; MAD 0.00000; 3 samples / 2464559 ops | +| 1 | 100,000 | [`r1-100000-window-transfer.scroll.baseline`](./render-results.json) | median 1.533 ms; p95 1.728; MAD 0.02736; 3 samples / 191 ops; validity product-valid; copied/frame 3432.000 B; allocations/frame 1.000; copied/read 3432.000 B; allocations/read 1.000 | +| 1 | 100,000 | [`r1-100000-window-transfer.scroll.reuse-decoded-view-upper-bound`](./render-results.json) | median 0.65065 ms; p95 0.69194; MAD 0.00578; 3 samples / 454 ops; validity pixel-data-invalid; copied/frame 0.000 B; allocations/frame 0.000; copied/read n/a; allocations/read n/a | +| 2 | 100,000 | [`r2-100000-formula-dense.paint`](./render-results.json) | median 0.38697 ms; p95 0.43039; MAD 0.02488; 3 samples / 845 ops | +| 2 | 100,000 | [`r2-100000-text-heavy.long-scroll`](./render-results.json) | median 4311.3 ms; p95 4356.4; MAD 50.100; 3 samples / 3 ops | +| 2 | 100,000 | [`r2-100000-scroll-fractional.same-window`](./render-results.json) | median 0.70915 ms; p95 0.71506; MAD 0.00656; 3 samples / 430 ops | +| 2 | 100,000 | [`r2-100000-geometry-unresized.1m`](./render-results.json) | median 0.00012 ms; p95 0.00015; MAD 0.00001; 3 samples / 2325951 ops | +| 2 | 100,000 | [`r2-100000-window-transfer.scroll.baseline`](./render-results.json) | median 1.551 ms; p95 1.571; MAD 0.00154; 3 samples / 194 ops; validity product-valid; copied/frame 3432.000 B; allocations/frame 1.000; copied/read 3432.000 B; allocations/read 1.000 | +| 2 | 100,000 | [`r2-100000-window-transfer.scroll.reuse-decoded-view-upper-bound`](./render-results.json) | median 0.71714 ms; p95 0.75558; MAD 0.00792; 3 samples / 413 ops; validity pixel-data-invalid; copied/frame 0.000 B; allocations/frame 0.000; copied/read n/a; allocations/read n/a | + +## Visible-window transfer diagnostic + +> The reuse upper bound deliberately paints a prior decoded view. Its pixels/data are invalid and it is not a product-valid rendering result. + +Counterbalanced scenario order: round 1: window-transfer.scroll.baseline → window-transfer.scroll.reuse-decoded-view-upper-bound; round 2: window-transfer.scroll.reuse-decoded-view-upper-bound → window-transfer.scroll.baseline + +| rows | baseline repetition medians | upper-bound repetition medians | estimated transfer cost | cross-variant spread | maximum within-variant spread | resolution | +|---:|:--|:--|---:|---:|---:|:--| +| 100,000 | 1.533, 1.551 ms | 0.65065, 0.71714 ms | 0.85816 ms | 0.85816 ms | 0.06649 ms | resolved | + +## Reproduce + +- `bun run --filter '@sheetwrite/bench' bench:render:diagnostic` + +The JSON artifact is authoritative. This Markdown file is generated from it and must not be edited by hand. diff --git a/bench/results/wasm-build-matrix-opt-level-2.json b/bench/results/wasm-build-matrix-opt-level-2.json new file mode 100644 index 00000000..22e8cb04 --- /dev/null +++ b/bench/results/wasm-build-matrix-opt-level-2.json @@ -0,0 +1,16607 @@ +{ + "schemaVersion": 1, + "plan": 97, + "variant": 2, + "artifact": { + "rustOptLevel": 2, + "rawBytes": 672200, + "brotliQuality11Bytes": 207269, + "wasmOpt": "-O3", + "sha256": "30cea03279ef597f216942d07e663f44a2cce1164bc27df82ff34529706ca12d" + }, + "conditions": { + "cpu": "12th Gen Intel(R) Core(TM) i9-12900H", + "os": "linux 7.1.3-2-cachyos", + "arch": "x64", + "bun": "1.3.14", + "node": "24.3.0", + "chromium": "149.0.7827.55", + "power": "AC0 online; battery charging", + "cpuPolicy": "intel_pstate active; scaling governor powersave", + "concurrency": 1, + "otherWork": "No other deliberate workload; desktop session and system services remained active." + }, + "interleaveOrder": [ + "3-r1", + "2-r1", + "s-r1", + "2-r2", + "s-r2", + "3-r2", + "s-r3", + "3-r3", + "2-r3" + ], + "data": [ + { + "repetition": 1, + "captureSha256": "45640d641716481d020088450e20bd88319edf5e7a82b113d5d194bbf0f9b458", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:24:38.927Z", + "sheetwriteRows": [ + 1000, + 10000, + 100000, + 500000, + 1000000 + ], + "handsontableRows": [ + 1000, + 10000 + ] + }, + "sheetwrite": { + "1000": { + "ingest": [ + 1.3191570000000183, + 1.874734999999987, + 1.3076679999999783, + 7.393244999999979, + 1.3691519999999855, + 1.1175039999999967, + 1.1020800000000008 + ], + "windowRead": [ + 0.008765062500000198, + 0.008453218749998825, + 0.00852768750000088, + 0.008596531249999373, + 0.008769499999999653, + 0.008616312499999168, + 0.0101720937500005, + 0.008618218749999684, + 0.00848371874999998, + 0.009093656250000137, + 0.008840156249998898, + 0.008833656249999322, + 0.01414925000000089, + 0.010746250000000401, + 0.009804062500000654, + 0.009056406250000038, + 0.008883750000000745, + 0.010212156250000604, + 0.009454468750000444, + 0.00933546874999891, + 0.009208718750000955, + 0.01016109374999985, + 0.009518156250001297, + 0.009584906249999747, + 0.009592125000001062, + 0.009723749999999143, + 0.010212687500001039, + 0.009572218749999806, + 0.009617500000000945, + 0.009232093749998782, + 0.009501718749998389, + 0.010269281250000262, + 0.009353906250000321, + 0.009225562500001061, + 0.009660656250000343, + 0.009746218750001034, + 0.008939468750000401, + 0.009595406249999883, + 0.010619343749999288, + 0.009206156250000319, + 0.009072812499999472, + 0.009510406249999548, + 0.008982312500000589, + 0.00909746875000117, + 0.01133456250000009, + 0.00902449999999888, + 0.011343531249998762, + 0.01999918749999985, + 0.01922093750000009, + 0.018495343749998838, + 0.017413312500000444, + 0.01809303125000028, + 0.021606843749999882, + 0.010571656249998895, + 0.008609718749999828, + 0.008442187500000031, + 0.008944249999998988, + 0.008222031249999873, + 0.010601593749999694, + 0.010147031249999827, + 0.008380812499998669, + 0.008560437499999907, + 0.00849365624999976, + 0.008499531250000913, + 0.009012062500000084, + 0.009039406250000326, + 0.008947312500000137, + 0.010557593750000649, + 0.00869253124999858, + 0.008585218749999513, + 0.00824425000000062, + 0.008824093750000372, + 0.013043500000000208, + 0.01337256250000074, + 0.013762562500000186, + 0.012369624999999829, + 0.009038468750000916, + 0.008404218750001746, + 0.008311468749999662, + 0.008856531250000188, + 0.008423718750000475, + 0.008482843750000413, + 0.011513968750000103, + 0.01089621875000013, + 0.00892937499999924, + 0.009857031250000148, + 0.009024281249999433, + 0.009907499999998848, + 0.008846750000000014, + 0.008502749999999892, + 0.008591250000000272, + 0.01123409374999973, + 0.012784437500000578, + 0.00913934375000025, + 0.008883687499999127, + 0.008835187499999009, + 0.008863718749999805, + 0.009384750000000608, + 0.009946875000000688, + 0.008431406250000606, + 0.010398374999999405, + 0.009317749999999236, + 0.007565125000001061, + 0.0076611562500001895, + 0.0076721249999991414, + 0.007805062500001014, + 0.008136062500000207, + 0.008075937499999242, + 0.008845156250000485, + 0.008044124999999624, + 0.01011587500000033, + 0.008287999999998519, + 0.007958906249999842, + 0.0091483125000007, + 0.008440500000000739, + 0.007990968750000604, + 0.007915843750000207, + 0.0079382812500004, + 0.008164750000000609, + 0.00795253124999995, + 0.007939031250000284, + 0.007852593750000025, + 0.007844499999999144, + 0.007786374999998458, + 0.007724750000001279, + 0.007653749999999349, + 0.007792000000000243, + 0.007884593750000946, + 0.007688562500000273, + 0.00779593750000096, + 0.0077200625000006795, + 0.008077343749999244, + 0.008808406249999123, + 0.009405249999998588, + 0.00773243750000141, + 0.00970212500000045, + 0.007978531250000032, + 0.008021562499999746, + 0.00792521874999963, + 0.042551468750000154, + 0.007235687500001475, + 0.006084625000001509, + 0.0070667499999998995, + 0.006503906249999858, + 0.006102968749999604, + 0.006047593749999081, + 0.0071595312500001285, + 0.006209218750001355, + 0.005958624999999884, + 0.005984406250000518, + 0.006066750000000454, + 0.006055031249999843, + 0.006085937499999972, + 0.005860124999999883, + 0.0060645625000006476, + 0.006094093750000695, + 0.006046406249998526, + 0.006160312500000487, + 0.006976437500000543, + 0.006166281249999628, + 0.005995406249999391, + 0.006174500000000194, + 0.006062593750000289, + 0.006631374999999551, + 0.005833499999999603, + 0.005894500000000136, + 0.006070593749999631, + 0.006218843750000147, + 0.006014906249999896, + 0.005950218749999792, + 0.0060288437500002345, + 0.006105281250000871, + 0.005956218749998854, + 0.006131062499999729, + 0.005940562500001079, + 0.005926531250000977, + 0.006090281249999663, + 0.006132937500000324, + 0.005998468749998764, + 0.007936499999999569, + 0.005980781250000788, + 0.005826625000000973, + 0.006005187499999565, + 0.006196406249999953, + 0.0059605312500004, + 0.006021218749999946, + 0.006348062499998974, + 0.006040437499999385, + 0.006158656249999339, + 0.006103468750000118, + 0.00604096874999982, + 0.006188218749999308, + 0.00598043749999988, + 0.006179062500001109, + 0.006130406249999609, + 0.0058677500000001714, + 0.006527874999999739, + 0.006039562499999818, + 0.006284125000000529, + 0.006143968749999118, + 0.006129500000000121, + 0.006290156249999512, + 0.00608484374999918, + 0.006151749999999012, + 0.006156156250000322, + 0.006841624999999851, + 0.005980625000001183, + 0.00597250000000038, + 0.00762000000000107, + 0.0060605625000000884, + 0.005943406249999228, + 0.006063843750000686, + 0.005946687499999825, + 0.005974750000000029, + 0.005905187499999798, + 0.006845000000000212, + 0.006687375000000273, + 0.006824218750001165, + 0.006073468750001254, + 0.005953062499999717, + 0.006858000000001141, + 0.005741999999999692, + 0.006105343749998937, + 0.00598971874999954, + 0.007775999999999783, + 0.005886406250001031, + 0.006975031249998764, + 0.00597853125000114, + 0.006181249999999139, + 0.005993031250000058, + 0.007703656249999469, + 0.005952937500000033, + 0.006629281250001284, + 0.006068187500000377, + 0.006729187499999512, + 0.005933968749999963, + 0.006133374999999219, + 0.006276031249999647, + 0.0062691562499992415, + 0.0059758437499990436, + 0.006074187499999439, + 0.0075736562500008375, + 0.006059406249999455, + 0.006118406250001485, + 0.006005031249999959, + 0.006012124999999813, + 0.005933000000000632, + 0.007835843749999682, + 0.008445937499999445, + 0.006353437499999615, + 0.005949249999998685, + 0.006032187499998898, + 0.006705343749999315, + 0.006007125000000002, + 0.006047218750000027, + 0.00597115625000022, + 0.005924249999999631, + 0.006395281250000551, + 0.005898124999999865, + 0.005904656250001139, + 0.005919531250000887, + 0.0058925937499996195, + 0.008726374999998399, + 0.005994562499999745, + 0.0059741874999996725, + 0.005875406250000381, + 0.00630809375000041, + 0.006097062500000305, + 0.0059814062499992104, + 0.0059040937499990065, + 0.005911249999998702, + 0.005980906250000473, + 0.007614843749999878, + 0.006009000000000597, + 0.005996937500000854, + 0.005917187499999699, + 0.005855000000000388, + 0.0059675937499985565, + 0.005976656250000545, + 0.005977718749999639, + 0.005935562499999492, + 0.005894937499999031, + 0.005971374999999668, + 0.006933093749999841, + 0.007782031250000543, + 0.008003156250000032, + 0.007797718750000016, + 0.008060625000000599, + 0.007763062500000473, + 0.00785309375000054, + 0.010353156249999884, + 0.00789709375000136, + 0.008575437499999339, + 0.009197125000000028, + 0.01064362499999838, + 0.006260718750001004, + 0.005993968749999468, + 0.005779343749999555, + 0.0067773124999988, + 0.005695062499999182 + ], + "edit": [ + 6.698413000000016, + 4.796801000000016, + 7.1245609999999715, + 7.054369000000008, + 7.310239000000024, + 9.006371999999999, + 10.17938700000002, + 4.7974700000000325, + 5.5792789999999854, + 4.25542999999999, + 6.061972999999966, + 6.250239000000022, + 7.094479000000035, + 4.768394999999941, + 4.773378999999977 + ], + "sort": [ + 0.14471900000000915, + 0.14406500000006872, + 0.13900000000001, + 0.13859899999999925, + 0.1459740000000238, + 0.12319100000001981, + 0.12036200000000008, + 0.14296200000001136, + 0.12611300000003212, + 0.12440300000002935, + 0.12024800000006053, + 0.1160499999999729, + 0.13206500000001142, + 0.12840700000003835, + 0.12164600000005521 + ], + "filter": [ + 0.03028099999994538, + 0.024119999999925312, + 0.02850300000000061, + 0.02159500000004755, + 0.09450500000002648, + 0.03407300000003488, + 0.024957999999969616, + 0.018560999999976957, + 0.020143000000075517, + 0.032392000000072585, + 0.03237000000001444, + 0.04543300000000272, + 0.04439500000000862, + 0.027975000000083128, + 0.019971000000055028 + ], + "multiFilter": [ + 0.12489300000004278, + 0.11899200000004839, + 0.11655200000006971, + 0.12386400000002595, + 0.12531099999989692, + 0.12450400000000172, + 0.11420999999995729, + 0.11115499999993972, + 0.11210099999993872, + 0.09740799999997307, + 0.10558500000001914, + 0.11623299999996561, + 0.09327699999994365, + 0.09013800000002448, + 0.09532100000001265 + ], + "distinctLow": [ + 0.08373500000004697, + 0.08311200000002827, + 0.09777899999994588, + 0.07583999999997104, + 0.07546300000001338, + 0.07470999999998185, + 0.09037499999999454, + 0.11191100000007737, + 0.2742759999999862, + 0.07825600000001032, + 0.06484999999997854, + 0.06477400000005673, + 0.06519800000000942, + 0.06369999999992615, + 0.06680800000003728 + ], + "distinctHigh": [ + 0.288291000000072, + 0.2671850000000404, + 0.27674000000001797, + 0.28358300000002146, + 0.27325100000007296, + 0.25845800000001873, + 0.2576239999999643, + 0.2933740000000853, + 0.5673879999999372, + 0.5693089999999756, + 0.29821500000002743, + 0.2671339999999418, + 0.26274899999998524, + 0.2628389999999854, + 0.28417899999999463 + ], + "aggregate": [ + 0.004188757812499944, + 0.003976046874999639, + 0.004003195312499486, + 0.00403995312499994, + 0.004000773437500271, + 0.004025500000000015, + 0.003966867187499723, + 0.003939710937500784, + 0.003958921875000243, + 0.0042879999999998475, + 0.0037859921874998648, + 0.003603335937500063, + 0.0037438359374997177, + 0.0036248984374998017, + 0.003745773437500155, + 0.0037489765625000615, + 0.003747960937499961, + 0.0036895937499998865, + 0.004010179687499615, + 0.0036706562499997375, + 0.0038035468749999524, + 0.004021765624999674, + 0.003703875000000245, + 0.0036769140625008134, + 0.0038830468749999625, + 0.003671593750000035, + 0.0037938906250003512, + 0.0038677968750002734, + 0.0037524140625002644, + 0.0038612578124999075, + 0.003425406250000762, + 0.003742585937499321, + 0.004015234375000176, + 0.004044632812500559, + 0.004078523437499371, + 0.00493070312499988, + 0.005378039062500228, + 0.003931390624999587, + 0.003929304687499524, + 0.0038633515624999504, + 0.003979296874999427, + 0.003886445312500264, + 0.003903367187499285, + 0.003966046875000018, + 0.003974281250000544, + 0.003955054687500237, + 0.0039651171874997004, + 0.003907218750000219, + 0.003994726562499551, + 0.003978203125000412, + 0.003965570312499445, + 0.003875453124999595, + 0.0039281093749998774, + 0.003919031250000593, + 0.0039089765625002215, + 0.003980257812499666, + 0.003952937500000253, + 0.0038882265625002077, + 0.003934593750000381, + 0.003858843749999785, + 0.003972242187500363, + 0.004025179687499936, + 0.003941984374999485, + 0.0046649765625002, + 0.004151375000000179, + 0.0037547187499997747, + 0.0038336250000003957, + 0.003856937499999269, + 0.003848234374999926, + 0.0038008906250004415, + 0.0039026562500001916, + 0.003922812499999928, + 0.0038901015624999147, + 0.003811585937500084, + 0.0038750781249996535, + 0.0037995468750002814, + 0.0038338359375007514, + 0.003848804687499374, + 0.003876515625000465, + 0.003823624999999886, + 0.0038593046874995096, + 0.003698609375000217, + 0.0037819531249994043, + 0.0037192656250004674, + 0.0037617812500005954, + 0.0037146640624996508, + 0.0037610078124998836, + 0.0037834609375000383, + 0.0037624374999998267, + 0.003685132812499603, + 0.0037315859374995597, + 0.0037784296875003065, + 0.003778554687499991, + 0.0037686953125000144, + 0.003775429687499887, + 0.004232867187500489, + 0.0043213437500000396, + 0.003804875000000152, + 0.0038394374999999314, + 0.003744398437500074, + 0.003721828125000215, + 0.003969210937500023, + 0.003942914062499803, + 0.0039692578124999045, + 0.004159484375000133, + 0.003928453124999898, + 0.003862054687499672, + 0.0038742421874999877, + 0.0038863984375003824, + 0.003861976562499869, + 0.003847085937500161, + 0.0038054843749995015, + 0.0038972031249997485, + 0.0038290625000003686, + 0.003845242187499487, + 0.0038171796875001718, + 0.0037868203124995503, + 0.0037488671875003376, + 0.0038129531249992965, + 0.003745859374999938, + 0.00379514843749984, + 0.0037862968749999837, + 0.003702187500000065, + 0.003800398437499908, + 0.003916812499999978, + 0.0038222656249997655, + 0.0037186484375002493, + 0.003932679687499885, + 0.005060312500000386, + 0.00382206249999939, + 0.0038848906250006365, + 0.0037017343750003207, + 0.0038096249999997056, + 0.0037320781250000934, + 0.0037692031250005087, + 0.003757320312500312, + 0.0038096015624997648, + 0.003727703125000481, + 0.0038085468750006513, + 0.003839453124999892, + 0.003869429687500592, + 0.003876296874999241, + 0.0038067578125007273, + 0.0038998281250002265, + 0.0038159140624998145, + 0.003886648437499751, + 0.003784984375000633, + 0.0038326171874993875, + 0.0038011484374997906, + 0.003861070312500381, + 0.003822226562499864, + 0.003716937500000128, + 0.003796992187499626, + 0.003721882812500077, + 0.0037526171874997516, + 0.003786507812499451, + 0.003732179687500725, + 0.0038223437500004565, + 0.003735734374999744, + 0.003812546874999434, + 0.004512984375000251, + 0.004673757812500234, + 0.00372628124999963, + 0.003845835937499764, + 0.0037112656250002374, + 0.0038230546874995497, + 0.003750968750000361, + 0.003748453125000495, + 0.003705945312499459, + 0.0037948203124997804, + 0.0038407031250002888, + 0.003879531249999957, + 0.003825015625000816, + 0.0037668281250002877, + 0.0038171484375002507, + 0.0038406718749994795, + 0.0037608281250003373, + 0.003754351562500702, + 0.0038488906250000454, + 0.0038501718750003633, + 0.0037746015625002016, + 0.0038620859375004812, + 0.0038122499999992954, + 0.0038156875000003865, + 0.003726859374999947, + 0.0036884687500000624, + 0.003667171874999653, + 0.0036565546874998134, + 0.0037827734374999977, + 0.0037595859374999208, + 0.0037425468749994195, + 0.0036834609375002714, + 0.003799562500000242, + 0.005025843749999481, + 0.004190164062499946, + 0.00380179687499993, + 0.0056061874999997485, + 0.006133328124999338, + 0.006196812499999815, + 0.004774320312499469 + ] + }, + "10000": { + "ingest": [ + 14.078456000000074, + 14.833113000000026, + 14.058558999999946, + 14.133664000000067, + 14.136023000000023, + 16.071904000000018, + 13.659565000000043 + ], + "windowRead": [ + 0.007235281250000725, + 0.007047031249999947, + 0.007295437500001611, + 0.007181781250000796, + 0.0072885625000012055, + 0.007151281249999641, + 0.007368656250001493, + 0.007631562500002076, + 0.007846250000000055, + 0.007198062500002322, + 0.007298062500002089, + 0.0071535312499975134, + 0.007298187500001774, + 0.007213281249999426, + 0.007145281250000579, + 0.007309750000001003, + 0.007096156250000263, + 0.007488156249998212, + 0.007270250000001255, + 0.0071754062500026805, + 0.0072265312500015, + 0.0072099062500008415, + 0.007228250000000713, + 0.007340468750001605, + 0.007236374999997963, + 0.007427374999998904, + 0.007551718749997605, + 0.007365281249999356, + 0.007310437499999267, + 0.0072193749999982515, + 0.007502937499999973, + 0.007457906249999979, + 0.007275531250002132, + 0.007345562499999403, + 0.0072681249999995146, + 0.007083624999999927, + 0.007214093750000927, + 0.007430937499997015, + 0.007527249999998986, + 0.007424906249998031, + 0.0072335937500014325, + 0.007246906249999796, + 0.007439656249999871, + 0.0073567812499995, + 0.007348343749999486, + 0.007288812500000574, + 0.007561250000001962, + 0.007494843750002644, + 0.00748512499999876, + 0.00938306249999954, + 0.008811343750000589, + 0.008131374999997831, + 0.00865887499999829, + 0.007239031249998362, + 0.007870281249999778, + 0.007282906250001275, + 0.007180874999999531, + 0.007477062500001352, + 0.007409843750000533, + 0.007495999999999725, + 0.007421531249999447, + 0.007305156250001943, + 0.007333468750001515, + 0.00766453125000055, + 0.007476843749998352, + 0.009184375000000244, + 0.007406468749998396, + 0.007929125000000425, + 0.0075259375000023, + 0.007291468750000973, + 0.007702062500001716, + 0.0074382187499999475, + 0.007815156250000399, + 0.007327781249998111, + 0.007297281250000509, + 0.0076188124999987394, + 0.0075259375000023, + 0.007555218749999426, + 0.007350468749997674, + 0.009059187500000121, + 0.013148687499999312, + 0.01316096875000028, + 0.014107843750000626, + 0.013766000000000389, + 0.013717406250002284, + 0.01326109374999973, + 0.013396781250001766, + 0.013494999999998925, + 0.013877062500000648, + 0.013864843749999523, + 0.013525874999999132, + 0.01401590625000182, + 0.012575468750000596, + 0.0080919687500014, + 0.007507406249999349, + 0.007700281250002661, + 0.007617562499998343, + 0.007715499999999764, + 0.007654968749999824, + 0.0075336562500005755, + 0.00750178124999934, + 0.007652374999999267, + 0.007743749999999494, + 0.007747812499999895, + 0.007717468749998346, + 0.007619343750000951, + 0.007992343749997133, + 0.007725437500003096, + 0.007884437499999564, + 0.007598593750000049, + 0.007693375000002334, + 0.048944249999998135, + 0.008314312500001364, + 0.007718187500000084, + 0.007526937499999775, + 0.007636749999999637, + 0.00790453124999857, + 0.007677937499998677, + 0.007548343750002573, + 0.00756903125000008, + 0.007901531250002591, + 0.007538031250000188, + 0.00791843750000254, + 0.007443593750000588, + 0.007349749999999489, + 0.007853281250000066, + 0.007248250000003509, + 0.007339500000000498, + 0.0072602500000016335, + 0.00742084374999763, + 0.00772965624999955, + 0.007445593749999091, + 0.007484687499999865, + 0.0074283749999999316, + 0.007316000000002987, + 0.007564375000001178, + 0.007465812500001334, + 0.0076816874999998674, + 0.007459093750000534, + 0.007634812500000976, + 0.007662781250001416, + 0.007801749999998719, + 0.007979656250000744, + 0.00754028124999806, + 0.007657343750000933, + 0.007615125000000944, + 0.007513156249999042, + 0.007509031249998799, + 0.007529437500000569, + 0.0077484374999983174, + 0.0076656250000013415, + 0.007502999999999815, + 0.007533343749997812, + 0.007550375000000997, + 0.007768562500000797, + 0.0075843125000005784, + 0.008142687500001244, + 0.007608250000000538, + 0.007834593750001062, + 0.007775156250001913, + 0.007608906249998881, + 0.007619437500000714, + 0.007753375000000062, + 0.0075875937499993995, + 0.007494187499997196, + 0.007547031250002334, + 0.007621531250002533, + 0.0074835937499990735, + 0.007643812499999569, + 0.00745524999999958, + 0.007616406250001262, + 0.007699374999997843, + 0.007582562500001444, + 0.007638906250001298, + 0.007730156250001841, + 0.007543312499997512, + 0.008031218750002012, + 0.007697437499999182, + 0.007448218749999569, + 0.007475593750001508, + 0.00750150000000005, + 0.007561875000000384, + 0.007711187499999994, + 0.007697249999999656, + 0.007631937500001129, + 0.0076593124999995155, + 0.007701593749999347, + 0.007532906249998916, + 0.007529250000001042, + 0.0077889374999990935, + 0.0076474374999975225, + 0.007849625000002192, + 0.0074161562499988065, + 0.007432781249999465, + 0.007426124999998507, + 0.007403968749997603, + 0.007380062500001117, + 0.007324906249998264, + 0.007394281250000745, + 0.007550562500000524, + 0.0074062812499988695, + 0.007430656249997725, + 0.007510468749998722, + 0.007494062500001064, + 0.007354718750001155, + 0.007411281250000457, + 0.0073921562499990046, + 0.007485750000000735, + 0.007324843750001975, + 0.007146625000000739, + 0.00736187500000085, + 0.007348249999999723, + 0.007296343749999323, + 0.007160281249998235, + 0.007453031250001629, + 0.007417499999998967, + 0.007509875000000221, + 0.007333374999998199, + 0.007269031250000779, + 0.007310656249998715, + 0.007692875000000043, + 0.00734921875000083, + 0.007461843750000696, + 0.007386312499999548, + 0.007588125000001611, + 0.007635343749999635, + 0.007458437499998638, + 0.00727250000000268, + 0.007449250000000518, + 0.007500750000001943, + 0.007288531249997732, + 0.0074280625000007205, + 0.007427937499997483, + 0.007427187499999377, + 0.007308874999999659, + 0.00741568749999999, + 0.007356999999998948, + 0.007612843749999598, + 0.007273250000000786, + 0.007362781249998562, + 0.007293531249999319, + 0.007550093749998155, + 0.0073977499999990926, + 0.007465031249999754, + 0.007385281250002151, + 0.007565062499999442, + 0.007326249999998424, + 0.007382625000001752, + 0.007511406249999908, + 0.0074148124999986464, + 0.00747346875000332, + 0.0074402500000019245, + 0.007427624999998272, + 0.007536656250000107, + 0.007735562499998849, + 0.007441687500001848, + 0.007371406250001655, + 0.007408468750000452, + 0.0074759687499970084, + 0.007774375000000333, + 0.007259062500001079, + 0.007409593749997612, + 0.007505031250001792, + 0.0072619062500010045, + 0.007370437500000548, + 0.007289968749997655, + 0.0076922187500017, + 0.007446343749997197, + 0.007658281250002119, + 0.007234812499998355, + 0.007491999999999166, + 0.007514000000000465, + 0.007711406249999442, + 0.007429937499999539, + 0.007466781249998888, + 0.007438749999998606, + 0.007398968749999568, + 0.007489531250001846, + 0.007386812499998285, + 0.007408468750000452, + 0.007268468749998647, + 0.00732365625000142, + 0.007419656250000628, + 0.007596843749997362, + 0.007406562500001712, + 0.007390749999999002, + 0.007372562499998736, + 0.0075276562499979605, + 0.007330718750001353, + 0.007561437499997936, + 0.007480125000000726, + 0.007523968750000165, + 0.007224000000000785, + 0.007186125000000487, + 0.0071990312499998765, + 0.00748137499999757, + 0.007090937499999228, + 0.0070480312500009745, + 0.0070637812500002894, + 0.007591812500002959 + ], + "edit": [ + 4.6373459999999795, + 4.619695999999976, + 4.548578999999904, + 5.421043000000054, + 7.945761999999945, + 7.705737999999997, + 5.920460999999932, + 6.313558000000057, + 4.382746999999995, + 4.423486000000025, + 4.297924999999964, + 4.521052999999938, + 5.512602000000015, + 4.207516999999939, + 5.010985000000005 + ], + "sort": [ + 0.2835289999999304, + 0.2639480000000276, + 0.3693900000000667, + 0.27911600000004455, + 0.2700209999999288, + 0.26111600000001545, + 0.26359099999990576, + 0.25715200000001914, + 0.2574180000000297, + 0.265796000000023, + 0.2633779999999888, + 0.256336000000033, + 0.2676010000000133, + 0.2668269999999211, + 0.26899300000002313 + ], + "filter": [ + 0.0548390000000154, + 0.056556000000000495, + 0.05553700000007211, + 0.053964999999948304, + 0.056470999999987725, + 0.059453999999959706, + 0.05424299999992854, + 0.052379999999971005, + 0.054246999999918444, + 0.057297999999946114, + 0.054811999999969885, + 0.05769600000007813, + 0.053390999999919586, + 0.062122000000044864, + 0.06354799999996885 + ], + "multiFilter": [ + 0.5036290000000463, + 0.4831379999999399, + 0.4757670000000189, + 0.47619700000007015, + 0.4781780000000708, + 0.49551099999996495, + 0.4715959999999768, + 0.47425200000009227, + 0.5001819999999952, + 0.5067280000000665, + 0.5080379999999423, + 0.6199940000000197, + 0.5012540000000172, + 0.5036659999999529, + 0.45282800000006773 + ], + "distinctLow": [ + 0.4404190000000199, + 0.47803299999998217, + 0.4406709999999521, + 0.6042129999999588, + 0.7082450000000335, + 0.4489929999999731, + 0.447926999999936, + 0.4516489999999749, + 0.4576729999999998, + 0.4471489999999676, + 0.44477900000003956, + 0.44600900000000365, + 0.43983400000001893, + 0.4683539999999766, + 0.480715000000032 + ], + "distinctHigh": [ + 2.733408999999938, + 2.4720270000000255, + 2.427248000000077, + 2.579385000000002, + 2.334807000000069, + 2.502499999999941, + 2.3166980000000876, + 2.4072629999999435, + 2.337201999999934, + 4.300268000000074, + 2.3365159999999605, + 2.2331950000000234, + 2.1809780000000956, + 2.5447920000000295, + 2.515553999999952 + ], + "aggregate": [ + 0.0192133437500015, + 0.01921200000000134, + 0.01870436718749957, + 0.019787843750000533, + 0.022191164062501656, + 0.017493921875001206, + 0.01694212499999992, + 0.016919140625001106, + 0.0165030625, + 0.018382000000000787, + 0.01774810937500071, + 0.018198367187499898, + 0.01840758593749925, + 0.017885929687500024, + 0.018038039062499678, + 0.017765421874999632, + 0.018120757812498667, + 0.019715539062499232, + 0.0181597890624996, + 0.017549703125000704, + 0.01868340625000009, + 0.019589601562501002, + 0.01755510937499949, + 0.016839570312500385, + 0.018243460937499734, + 0.01744072656249962, + 0.01703824218749972, + 0.020910109375000374, + 0.02224835156249938, + 0.02016023437500003, + 0.020588398437499933, + 0.02084438281250023, + 0.02113018750000073, + 0.02129187500000107, + 0.021696632812499672, + 0.023982695312499303, + 0.01870958593749883, + 0.018418085937499384, + 0.017959781250000972, + 0.01790312500000013, + 0.01877087499999952, + 0.018285992187498934, + 0.01955971093749831, + 0.01793802343749995, + 0.018434523437500516, + 0.01839700000000022, + 0.022822851562498414, + 0.02625243750000017, + 0.021781281250000006, + 0.02196067968749915, + 0.0223658750000002, + 0.02215292187499962, + 0.024004148437500206, + 0.022347359374998987, + 0.025132070312499977, + 0.022451156249999826, + 0.02238517968750031, + 0.02243460156249988, + 0.023950210937499605, + 0.023401031249999704, + 0.022390265624999017, + 0.027154210937499812, + 0.022412265625000316, + 0.022302687499999863, + 0.023601148437501607, + 0.02190220312500024, + 0.02249253906249926, + 0.02257060156249935, + 0.022540882812499774, + 0.020973101562500318, + 0.020017718750001023, + 0.019198093750000922, + 0.019115976562499526, + 0.019045492187499846, + 0.020099640625000248, + 0.02012532031250025, + 0.021590703124999777, + 0.02267640624999956, + 0.022405429687498923, + 0.022492773437500446, + 0.022532281249999286, + 0.023326781249998874, + 0.02109890624999977, + 0.019894093750000508, + 0.018762437500001283, + 0.019206406249999475, + 0.018921742187499646, + 0.018869765625000312, + 0.020100117187499933, + 0.022230859375000023, + 0.021877906249999413, + 0.02209273437500059, + 0.02910228906250012, + 0.03281733593750147, + 0.023174296875000167, + 0.022364968749998937, + 0.02256230468749898, + 0.020868070312499043, + 0.020413046874999452, + 0.01949199218750053, + 0.01855835156250052, + 0.01804746874999985, + 0.018116171875000475, + 0.018121539062500247, + 0.01756611718749923, + 0.01928514843750051, + 0.018837554687499036, + 0.018226546875000693, + 0.017805054687499933, + 0.017000203125000724, + 0.01827601562500014, + 0.01884864843749945, + 0.018456140625000117, + 0.018912781250000066, + 0.018528953125001024, + 0.017505781249999686, + 0.018523828124999753, + 0.018171249999999972, + 0.018860132812498875, + 0.019463218749999456, + 0.019075070312499776, + 0.01889206250000086, + 0.0196655937500001, + 0.01852075781249951, + 0.01891395312500066, + 0.017959585937500577, + 0.01807041406249965, + 0.019083078124999986, + 0.018078250000000295, + 0.017995593749999372, + 0.01725346093749991, + 0.01742872656249972, + 0.018308679687498497, + 0.018774664062499724, + 0.018091781249999883, + 0.018181664062501213, + 0.01828831250000107, + 0.018148023437500882, + 0.018016703124999367, + 0.018124226562500567, + 0.01820352343750109, + 0.018554601562501105, + 0.018541312500000018, + 0.01871200781249982, + 0.01858733593750017, + 0.018852632812500048, + 0.018371359375001006, + 0.018488710937500485, + 0.032038773437498946, + 0.01878243749999875, + 0.017550710937500824, + 0.01862748437499917, + 0.01843519531249882, + 0.018071492187500482, + 0.018008132812500577, + 0.017517617187499113, + 0.019695164062500936, + 0.019800187499999566, + 0.01874718749999893, + 0.019255984375000423, + 0.01890366406250088, + 0.01915502343749864, + 0.01945378125000019, + 0.020189687500000275, + 0.018620320312500382, + 0.01709020312500087, + 0.0177397187499988, + 0.021100070312501273, + 0.0180846640624992, + 0.03575656249999959, + 0.017147257812499817, + 0.018303351562499515, + 0.02940467187499962, + 0.01870702343749997, + 0.017843117187499757, + 0.017602226562500434, + 0.01737743749999865, + 0.017956429687499664, + 0.019292601562499456, + 0.02182891406249965, + 0.029250203125000596, + 0.022097226562499017, + 0.0217903906250001, + 0.02180902343750013, + 0.0217848359375008, + 0.02180367968749941, + 0.02173996875000128, + 0.0222626874999996, + 0.022290765624999764, + 0.02237207031249966, + 0.022191062499999248, + 0.02231630468750012, + 0.022046523437499133, + 0.022038117187500816, + 0.021877109374999648, + 0.02179831249999964, + 0.026014453125000614, + 0.02354684374999927, + 0.02172610937499897, + 0.022072039062500437 + ] + }, + "100000": { + "ingest": [ + 125.07345499999997, + 114.14241700000002, + 118.3152050000001, + 116.85357400000021, + 127.213393, + 121.90127199999961, + 113.51550800000041 + ], + "windowRead": [ + 0.008001437499999042, + 0.008208281250006166, + 0.007979437499997744, + 0.007922437499999546, + 0.00783759374999704, + 0.008272281250000901, + 0.00798290625000675, + 0.007898624999995718, + 0.00831265624999844, + 0.007762406250009235, + 0.0076272812499951215, + 0.008109593749992428, + 0.007854937499999437, + 0.007699218749991132, + 0.00783312500000477, + 0.00783693750000225, + 0.00770890624998799, + 0.007840000000001623, + 0.007797437499988291, + 0.008003093749991308, + 0.00750000000000739, + 0.007945093749995635, + 0.007877656249988263, + 0.007745812499990734, + 0.008191125000010402, + 0.008105999999997948, + 0.008516656250009191, + 0.008225781249990405, + 0.008092562499996347, + 0.00809071874999745, + 0.008368906249998531, + 0.008046250000006694, + 0.008147093749997225, + 0.010834843750004097, + 0.00882315625000274, + 0.008031718749990091, + 0.008021312500005706, + 0.008133000000000834, + 0.011867499999993925, + 0.01324459375000231, + 0.008412937499997497, + 0.008180906250004227, + 0.008143718750005746, + 0.008288968749994297, + 0.008046437499999115, + 0.008433343749999267, + 0.008132000000003359, + 0.009031156250003392, + 0.008323749999988195, + 0.007953812500005597, + 0.008207937500003482, + 0.007988156250007705, + 0.007776718749994416, + 0.008226593749995459, + 0.007922781250002231, + 0.007926906249991816, + 0.008131687499997042, + 0.007992187500008185, + 0.007921875000008072, + 0.00796696874999725, + 0.007811437499995577, + 0.007857031249997704, + 0.00837096875000043, + 0.007968593749993147, + 0.007865437500001349, + 0.007892406249993655, + 0.00824762499999565, + 0.00795106249999833, + 0.007738218750006354, + 0.008178531249996013, + 0.007955875000007495, + 0.007790875000011965, + 0.007992812500006607, + 0.008022500000009813, + 0.008021718750001128, + 0.008045781250004325, + 0.007852812500004802, + 0.008051875000006703, + 0.007803937500000302, + 0.007990593749994446, + 0.007795312499993656, + 0.007869749999997566, + 0.008164843749995043, + 0.007971499999996468, + 0.007872031250002465, + 0.008138625000000843, + 0.008021749999997496, + 0.007991468750006447, + 0.008036156250000204, + 0.007989343749997602, + 0.007823218750004912, + 0.007786093749999168, + 0.007715781249999054, + 0.007765499999990766, + 0.00798221875000138, + 0.0077873124999996435, + 0.007780406250006422, + 0.007927718750011081, + 0.008127281249997509, + 0.01090718750000974, + 0.014918281250004384, + 0.008478749999994761, + 0.008421593750000511, + 0.008102343750010732, + 0.008170750000005, + 0.007917375000005222, + 0.008042468749991372, + 0.00811875000000839, + 0.008229124999999726, + 0.007992343750004238, + 0.007872843750007519, + 0.024344218750002256, + 0.00899800000000539, + 0.008586687499999357, + 0.00857518749999997, + 0.050562562500005015, + 0.008247281249992966, + 0.008290625000000773, + 0.008329500000002099, + 0.008122124999999869, + 0.007865999999992823, + 0.008057125000007659, + 0.00813040625000383, + 0.007786031250006431, + 0.007717249999998899, + 0.007841656249993889, + 0.007996937499996193, + 0.008068718750010362, + 0.007748718749994055, + 0.007794281249999813, + 0.008176062499998693, + 0.008156874999997399, + 0.007774562499989202, + 0.008083343750001859, + 0.008035843750008098, + 0.007869593750001513, + 0.007833312499997191, + 0.008010437500004741, + 0.008271374999992531, + 0.008178937499991434, + 0.008164656250002622, + 0.008021687499990549, + 0.00789565624999966, + 0.008293718749996515, + 0.007961562500000241, + 0.007817562499994324, + 0.008113937499999224, + 0.007941343749990892, + 0.007747968750010159, + 0.00797571875000358, + 0.008121906249996869, + 0.007832812499998454, + 0.008250875000001656, + 0.011229468750002525, + 0.008979312500002834, + 0.008153562499998657, + 0.008438937500002908, + 0.008322812499997667, + 0.010149843749999832, + 0.008483812500003296, + 0.008464562499995054, + 0.008658843749998368, + 0.008772875000005342, + 0.01011849999999015, + 0.008299031250004418, + 0.008347687499991707, + 0.00824362500000575, + 0.008175718749996008, + 0.008506843749998438, + 0.008220343749997028, + 0.008470093750005958, + 0.008114062499998909, + 0.00849200000000394, + 0.008173281249995057, + 0.008159218750009245, + 0.008489812500002358, + 0.00814228125000227, + 0.007932562500002405, + 0.008157031250007662, + 0.008227593749992934, + 0.008039937500001315, + 0.007963906249997876, + 0.011123062500004721, + 0.00946115624999777, + 0.008397999999999683, + 0.008422593749997986, + 0.00810953124999969, + 0.008472093750000909, + 0.008495875000008368, + 0.008137093749994051, + 0.00801471874999038, + 0.008117093750001914, + 0.00824965625000118, + 0.00807881249998843, + 0.008244156250000856, + 0.008266343749994576, + 0.008026874999998768, + 0.008366343749997895, + 0.008297499999997626, + 0.008101218749999362, + 0.008075750000003268, + 0.008278937499994754, + 0.008286156249994292, + 0.008111656249994326, + 0.008490843749996202, + 0.008132343750006044, + 0.008351843750006083, + 0.00801896874999386, + 0.009065593749994605, + 0.008235281249994841, + 0.007930531249996875, + 0.008254406249989188, + 0.010251781250005365, + 0.010741812500000947, + 0.008206656249996058, + 0.008142593749994376, + 0.008227499999989618, + 0.008347218750003549, + 0.008067062500003885, + 0.008130218749997198, + 0.008357156249999775, + 0.008200531250011522, + 0.00835143749999645, + 0.008110687499993219, + 0.008354249999996455, + 0.009154468750011802, + 0.011113968749995706, + 0.011155656250011248, + 0.00839965625000616, + 0.007971187500004362, + 0.008708906250006976, + 0.008876906249994931, + 0.008259874999993144, + 0.008329968750004468, + 0.008369968750002954, + 0.00832768749999957, + 0.008258749999995985, + 0.008492156249999994, + 0.0081638125000012, + 0.00843840624999359, + 0.009696687499996415, + 0.010846499999999537, + 0.008112156249993063, + 0.008772124999993025, + 0.008260093750010356, + 0.00829203124999367, + 0.008159656250001035, + 0.00830615625000064, + 0.008006812499999683, + 0.008310906250002859, + 0.00817321875000232, + 0.008163406250005778, + 0.008067968749998045, + 0.00832206249999956, + 0.00804587499999343, + 0.008143437499995798, + 0.008251031249997709, + 0.008530031250003844, + 0.008033187500004146, + 0.008295062499996675, + 0.008049906250008121, + 0.00800843749999558, + 0.00813221875000636, + 0.007910499999994158, + 0.00804990624999391, + 0.008215281250002704, + 0.008146968750011752, + 0.007880999999997584, + 0.008054125000001022, + 0.007908062500007418, + 0.008103406250000944, + 0.01160281249998718, + 0.011839968750010144, + 0.010093187499990108, + 0.008374187499995855, + 0.008780968750002671, + 0.00824878125000339, + 0.008352124999987609, + 0.008709656250005082, + 0.008676374999993186, + 0.008501718749997167, + 0.00834675000000118, + 0.008374781249997909, + 0.008172249999987002, + 0.008537343749992488, + 0.008004593750001732, + 0.008275499999996327, + 0.007979250000005322, + 0.00837384374999317, + 0.00819250000000693, + 0.008430718749991684, + 0.008394750000007889, + 0.00842721875000052, + 0.008289156250000929, + 0.008311437499997965, + 0.00841599999999687, + 0.008218593749987235, + 0.008389750000006302, + 0.008310125000008384, + 0.009414750000004801 + ], + "edit": [ + 4.699048999999832, + 4.6344169999997575, + 4.579666999999972, + 4.614814999999908, + 5.350065000000086, + 6.5296189999999115, + 6.868946999999935, + 6.7790500000000975, + 6.617182999999841, + 6.424015999999938, + 7.639208999999937, + 4.00320099999999, + 3.7640190000001894, + 3.4046629999998004, + 4.693475000000035 + ], + "sort": [ + 2.2305060000003323, + 2.448965000000044, + 2.2675819999999476, + 2.2944870000001174, + 2.1903650000003836, + 2.2940340000000106, + 2.3800230000001648, + 2.4005230000002484, + 2.2983870000002753, + 2.314100000000053, + 2.3665960000002997, + 2.4115710000000945, + 2.4004409999997733, + 2.319851000000199, + 2.3939800000002833 + ], + "filter": [ + 0.3710909999999785, + 0.49117500000011205, + 0.5321069999999963, + 0.5316469999997935, + 0.443224999999984, + 0.4284299999999348, + 0.5868510000000242, + 0.5367679999999382, + 0.43612800000028074, + 0.41469699999970544, + 0.4164770000002136, + 0.4019170000001395, + 0.4121919999997772, + 0.42277999999987514, + 0.3811540000001514 + ], + "multiFilter": [ + 3.6052819999999883, + 3.532278000000133, + 3.588647999999921, + 6.024691999999959, + 3.3782870000000003, + 5.109129999999823, + 3.9784249999997883, + 3.887499000000389, + 3.910095999999612, + 4.115393999999924, + 4.015715999999884, + 3.476749999999811, + 3.077303000000029, + 3.200384000000213, + 3.255529000000024 + ], + "distinctLow": [ + 3.8840220000001864, + 3.7739910000000236, + 4.030193000000054, + 3.7191350000002785, + 3.524003999999877, + 3.628024000000096, + 3.7556549999999334, + 3.679208000000017, + 3.5891649999998663, + 3.694614999999885, + 3.76600899999994, + 3.66217000000006, + 5.688425000000279, + 5.642663000000084, + 4.638468999999986 + ], + "distinctHigh": [ + 20.547943999999916, + 20.92956099999992, + 21.53856999999971, + 20.644383999999718, + 21.975326000000223, + 20.824601999999686, + 21.199295999999777, + 27.816533000000163, + 23.683786000000055, + 30.75626599999987, + 24.654419000000416, + 17.741515000000163, + 18.26341400000001, + 18.006458999999722, + 18.932941000000028 + ], + "aggregate": [ + 0.17476500000020678, + 0.1707499999997708, + 0.16451000000006388, + 0.16465100000004895, + 0.1846650000002228, + 0.18071299999974144, + 0.1768549999997049, + 0.1787080000003698, + 0.1752520000000004, + 0.17534500000010667, + 0.42119099999990794, + 0.4259999999999309, + 0.41725099999985105, + 0.41294199999993, + 0.4332930000000488, + 0.4118829999997615, + 0.41116599999986647, + 0.4141559999998208, + 0.4069049999998242, + 0.40390900000011243, + 0.4005519999996068, + 0.4003240000001824, + 0.3746009999999842, + 0.16901600000028338, + 0.1647410000000491, + 0.1795630000001438, + 0.19292799999993804, + 0.18879400000014357, + 0.18881499999997686, + 0.19270700000015495, + 0.19013300000005984, + 0.18913500000007843, + 0.19355399999994916, + 0.18998599999986254, + 0.18954299999995783, + 0.191867000000002, + 0.19033300000000963, + 0.1958679999997912, + 0.19041100000004008, + 0.19055399999979272, + 0.19469699999990553, + 0.1926570000000538, + 0.19510600000012346, + 0.19303899999977148, + 0.2021150000000489, + 0.18814000000020314, + 0.18789300000025833, + 0.19811900000013338, + 0.2510419999998703, + 0.19673800000009578, + 0.18816599999991013, + 0.18809600000031423, + 0.19295599999986734, + 0.18942500000002838, + 0.1879229999999552, + 0.1881109999999353, + 0.1884210000002895, + 0.1908370000001014, + 0.1876640000000407, + 0.18755200000032346, + 0.19543399999975009, + 0.18796300000030897, + 0.1875689999997121, + 0.1901269999998476, + 0.18740699999989374, + 0.1874440000001414, + 0.18778100000008635, + 0.1871609999998327, + 0.19031600000016624, + 0.19076999999970212, + 0.18786399999999048, + 0.1873399999999492, + 0.1874630000002071, + 0.19131400000014764, + 0.1874910000001364, + 0.18746299999975236, + 0.18740500000012617, + 0.187532999999803, + 0.18740399999978763, + 0.18995099999983722, + 0.1878630000001067, + 0.18752300000005562, + 0.18714100000033795, + 0.19109800000023824, + 0.20423399999981484, + 0.18641600000000835, + 0.17574100000001636, + 0.17527500000005602, + 0.17559600000004139, + 0.17849399999977322, + 0.17503100000021732, + 0.17500999999992928, + 0.17495800000006057, + 0.1750010000000657, + 0.17519499999980326, + 0.17861599999969258, + 0.17524500000035914, + 0.1752569999998741, + 0.17505400000027294, + 0.17505900000014663, + 0.17517799999995987, + 0.17750000000023647, + 0.17518500000005588, + 0.17506799999955547, + 0.17516699999987395, + 0.17536199999995006, + 0.17671100000006845, + 0.1752329999999347, + 0.17697199999975055, + 0.22082200000022567, + 0.1703429999997752, + 0.43188099999997576, + 0.4310810000001766, + 0.4321740000000318, + 0.43169099999977334, + 0.250829000000067, + 0.21428800000012416, + 0.21126400000002832, + 0.2088380000000143, + 0.20679199999995035, + 0.20667500000035943, + 0.20898299999998926, + 0.2249099999999089, + 0.20186499999999796, + 0.2006189999997332, + 0.2004189999997834, + 0.20085699999981443, + 0.21142200000031153, + 0.19207800000003772, + 0.19196899999997186, + 0.20258199999989301, + 0.19416700000010678, + 0.19088600000031875, + 0.1887050000000272, + 0.1878919999999198, + 0.18360000000029686, + 0.18444499999986874, + 0.18690299999980198, + 0.18788100000028862, + 0.18123400000013135, + 0.1808299999997871, + 0.18343099999992774, + 0.3164790000000721, + 0.2642120000000432, + 0.17576599999983955, + 0.17515099999991435, + 0.1750090000000455, + 0.2997740000000704, + 0.1728929999999309, + 0.16665100000000166, + 0.1657769999997072, + 0.16553400000020702, + 0.1869130000000041, + 0.17670099999986633, + 0.17648099999996703, + 0.17755600000009508, + 0.1792089999999007, + 0.18178100000022823, + 0.18354200000021592, + 0.17994199999975535, + 0.17568900000014764, + 0.17550600000004124, + 0.18750699999964127, + 0.18476899999996022, + 0.2177470000001449, + 0.17038199999979042, + 0.16119499999967957, + 0.16111700000010387, + 0.16815200000019104, + 0.18494400000008682, + 0.16133499999978085, + 0.1809080000002723, + 0.19195100000024468, + 0.18742399999973713, + 0.19188500000018394, + 0.23753400000032343, + 0.23715999999967607, + 0.23596500000030574, + 0.256937999999991, + 0.22776000000021668, + 0.21484099999997852, + 0.32385199999998804, + 0.25226199999997334, + 0.24942000000010012, + 0.34772000000020853, + 0.4355819999996129, + 0.40291400000023714, + 0.3155659999997624, + 0.39371399999981804, + 0.37340999999969426, + 0.6252600000002531, + 0.576825000000099, + 0.5608729999999014, + 0.5512109999999666, + 0.5531150000001617, + 0.5286099999998441, + 0.5404509999998481, + 0.514042000000245, + 0.34547599999996237, + 0.21828700000014578 + ] + }, + "500000": { + "ingest": [ + 578.1319329999997, + 591.3604400000004, + 583.6148010000006 + ], + "windowRead": [ + 0.009723406250003563, + 0.009267749999992247, + 0.009365781250011196, + 0.009691531250012986, + 0.009501812499991047, + 0.009313312500012216, + 0.009692062499993881, + 0.009210187499974154, + 0.009393562500008557, + 0.010379843750001783, + 0.010542218749975518, + 0.010511874999991733, + 0.009439406250010052, + 0.015205437499986374, + 0.00969256250002104, + 0.00977637500000128, + 0.009682625000010603, + 0.009206968749992939, + 0.009325656249984604, + 0.010263968749995911, + 0.00925962499999855, + 0.009276593750001894, + 0.010027218749996791, + 0.008541843750009548, + 0.010109906249994083, + 0.00865274999998178, + 0.008609156250003025, + 0.008220187500000975, + 0.008559531250000418, + 0.008885875000004262, + 0.008439937499986172, + 0.008467906250018586, + 0.018415312499996617, + 0.008872812499987504, + 0.008169812500000262, + 0.0085312812500149, + 0.00822456250000414, + 0.008247406250006861, + 0.00825528125000119, + 0.009752343749994452, + 0.008246218750002754, + 0.008966218750003918, + 0.008168437499989523, + 0.009922000000017306, + 0.009582187500001282, + 0.008079187499987484, + 0.009112187499994207, + 0.008686187499989728, + 0.00852474999999231, + 0.009264875000013717, + 0.00881306249999625, + 0.008860687500003905, + 0.009161781250014656, + 0.009110937499997362, + 0.009091812500003016, + 0.008920156249985212, + 0.008950843750000104, + 0.009108187500004306, + 0.009005687499978876, + 0.00881262500001867, + 0.009390406249991656, + 0.008726249999995161, + 0.009149124999993319, + 0.009223906250014124, + 0.00899328124998533, + 0.008919187500026737, + 0.008719031249995624, + 0.009181156250008371, + 0.008527812499977472, + 0.008774312500008818, + 0.008863468750007542, + 0.008854624999997895, + 0.008630624999995007, + 0.008747562500019512, + 0.01055674999997791, + 0.008763375000000906, + 0.008692812499987213, + 0.00850499999998533, + 0.00897537500000567, + 0.008855812500002003, + 0.009096593750001603, + 0.00882046875000242, + 0.01113384375000237, + 0.009038031249986034, + 0.010046062500009612, + 0.013307593749999569, + 0.009001781249992291, + 0.011406875000005812, + 0.008861281250005959, + 0.008820312499977945, + 0.011104749999987007, + 0.008830687500022805, + 0.008929812500014123, + 0.008786312500006943, + 0.009865406249986108, + 0.01190640625000583, + 0.011085156250004502, + 0.011933124999984557, + 0.01043887500000551, + 0.009653468750002503, + 0.009569374999983893, + 0.009998874999979535, + 0.011804156250008191, + 0.010756843749987866, + 0.009765031250026368, + 0.00981740624999361, + 0.010136531249997915, + 0.009272593749983571, + 0.009390625000008868, + 0.009315874999998641, + 0.009830718749981315, + 0.010125812500007214, + 0.01044156250000583, + 0.0097140312499846, + 0.00916165625000076, + 0.009512468749989011, + 0.009340156250004839, + 0.009104750000005879, + 0.00943268749998083, + 0.009155718749980224, + 0.009771968750015958, + 0.011792437499991593, + 0.009485406249979178, + 0.009070374999993192, + 0.009320187499980648, + 0.009418906250004966, + 0.010048687500017195, + 0.00981790625002077, + 0.009962749999999687, + 0.009657656249999036, + 0.01068499999999517, + 0.011297531249994108, + 0.00934684374999506, + 0.010428218749979123, + 0.01170034374999318, + 0.009141749999997728, + 0.008910281249995933, + 0.00932303124997702, + 0.009337750000014466, + 0.00950578124999879, + 0.008992281249987855, + 0.009628781250000884, + 0.010800531249998357, + 0.009673875000004273, + 0.009604312500016476, + 0.00959681250000699, + 0.00922221875001128, + 0.009698562500005892, + 0.010195656250004959, + 0.010851281250012335, + 0.010838656250001577, + 0.00949771874999783, + 0.009259156250010392, + 0.009395093750015349, + 0.00922781250000071, + 0.009114562500002421, + 0.009017718750016002, + 0.009203812499976038, + 0.009600562499997523, + 0.009417281249994858, + 0.009894937500007472, + 0.011678187499995829, + 0.010522124999994276, + 0.009548249999994596, + 0.009510374999990745, + 0.009299062500019772, + 0.009051937500004215, + 0.009059093749982594, + 0.008992062499999065, + 0.009622406250002769, + 0.009433937500006095, + 0.010488812500000222, + 0.009612125000018068, + 0.010537999999996828, + 0.009613000000001648, + 0.009608437499991851, + 0.011383843749996458, + 0.00995600000001673, + 0.009969281249993855, + 0.009823749999981146, + 0.010089749999991682, + 0.009223375000004808, + 0.00971787500000687, + 0.009652718749975975, + 0.009419499999978598, + 0.010367281250012184, + 0.008869406249999656, + 0.008907031250004138, + 0.010755499999987705, + 0.009038499999974192, + 0.011648843749981097, + 0.009583656250015338, + 0.00951118750001001, + 0.009403843749993257, + 0.0094755312499899, + 0.009469281249977257, + 0.00957237500000474, + 0.009557843750002348, + 0.009592562499989299, + 0.012213437500008695, + 0.010886281250009233, + 0.00959143750000635, + 0.010583562499988375, + 0.010098375000012538, + 0.010418343749989845, + 0.009630968750002467, + 0.010538531249977723, + 0.01065856249999797, + 0.009847718749995238, + 0.009814624999989974, + 0.009760843750001413, + 0.011079499999993914, + 0.00970621875001143, + 0.009862968749985157, + 0.009643562500002645, + 0.010010906249988238, + 0.011938000000014881, + 0.013795937500020727, + 0.009539968750004846, + 0.01172165624998911, + 0.00912221875000796, + 0.009845343750015445, + 0.01592384375001643, + 0.009486906250003813, + 0.010018812499993146, + 0.009614125000013019, + 0.010114593749989353, + 0.00956162500000346, + 0.009925343750012416, + 0.009375156250001737, + 0.009490437499977133, + 0.01016809375002481, + 0.01032831249997912, + 0.00918899999999212, + 0.009689281249990245, + 0.009232249999996611, + 0.00893409374998555, + 0.00903053125000497, + 0.010662187500003029, + 0.013087906250007109, + 0.009668750000003001, + 0.009978093749992922, + 0.010085156249999727, + 0.009520031250019656, + 0.009595593750020726, + 0.0093584999999905, + 0.011216875000002346, + 0.009588281250017872, + 0.010019812500019043, + 0.010597343750021082, + 0.011898656249996975, + 0.009313562499983163, + 0.010280156249990569, + 0.011479718749995982, + 0.009762187499973152, + 0.009927031250015261, + 0.01017165625000871, + 0.01053593750000914, + 0.009530062500004988, + 0.009934531249996326, + 0.009276812499990683, + 0.009493812499982823, + 0.00966093750000141, + 0.009293999999982816, + 0.009305937499988204, + 0.00922981249999566, + 0.009236656250010356, + 0.009276281250009788, + 0.008958156250002958, + 0.009450781249995543, + 0.009518468749973863, + 0.009883031249984242, + 0.010219937500011156, + 0.009654312500003925, + 0.009482531250000648, + 0.009318968749994383, + 0.012593625000022257, + 0.010172031249993552, + 0.009371437499993363, + 0.009318937500012225, + 0.009873406250022754, + 0.009219718750017591, + 0.009204843749984093, + 0.00906659374999208, + 0.008930687499997703, + 0.009847624999991922, + 0.010514093750003894, + 0.009383531249994803, + 0.009442031249989213, + 0.009239406250003412, + 0.009523218749990292, + 0.009273406250002836, + 0.012086343749984962, + 0.009225000000014916, + 0.009320031250013017, + 0.009877218750006023, + 0.009234562500012089, + 0.00917734374999668, + 0.009334625000008145, + 0.009947374999995873 + ], + "edit": [ + 8.683509999999842, + 3.817903000000115, + 3.939908000000287, + 3.5819970000002286, + 3.8261959999999817 + ], + "sort": [ + 12.211306999999579, + 12.301384000000326, + 11.560355999999956, + 13.552950999999666, + 11.935064000000239 + ], + "filter": [ + 1.7879830000001675, + 1.833494000000428, + 1.8800129999999626, + 1.74739099999897, + 1.906875000000582 + ], + "multiFilter": [ + 17.513240000000224, + 21.13375199999973, + 18.466146999999182, + 20.835543999999572, + 20.101658999999927 + ], + "distinctLow": [ + 19.255653000000166, + 20.49938800000018, + 24.80354299999999, + 20.34603000000061, + 23.26542800000061 + ], + "distinctHigh": [ + 126.98794299999827, + 124.27164000000084, + 127.24127600000065, + 116.26557300000059, + 124.27707700000065 + ], + "aggregate": [ + 0.9155980000014097, + 0.9424240000007558, + 0.943742999999813, + 0.9109650000009424, + 0.9348380000010366, + 0.8982349999987491, + 0.8700319999989006, + 0.8940899999997782, + 0.8957399999999325, + 0.9103150000009919, + 0.8890719999999419, + 0.970368000000235, + 0.9938799999999901, + 1.003155999998853, + 1.033212000000276, + 1.0083030000005238, + 1.1757230000002892, + 1.0571920000002137, + 1.171449000001303, + 1.0711080000000948, + 1.1335540000000037, + 1.1459030000005441, + 1.109082999999373, + 1.1232619999991584, + 1.2372620000005554, + 1.0908330000002024, + 1.0912520000001678, + 1.0957939999989321, + 1.1314729999994597, + 1.1205129999998462, + 1.1218410000001313, + 1.1198029999995924, + 1.242102000000159, + 1.1074440000011236, + 1.1044309999997495, + 1.118995000000723, + 1.1252279999989696, + 1.1117489999996906, + 1.0883359999988897, + 1.2280449999998382, + 1.0914999999986321, + 1.1556970000001456, + 1.0960089999989577, + 1.0899559999998019, + 1.0968489999995654, + 1.2621259999996255, + 1.221175000000585, + 1.0747709999996005, + 1.0636690000010276, + 1.0729209999990417, + 1.0732260000004317, + 1.0932100000009086, + 1.5712810000004538, + 1.099926000000778, + 1.0719289999997272, + 1.0617550000006304, + 1.0621960000007675, + 1.0647320000007312, + 1.0626480000009906, + 1.0617529999999533, + 1.183074000000488, + 1.0838679999997112, + 1.0680580000007467, + 1.066475999999966, + 1.0606000000007043, + 1.0642719999996189, + 1.0605690000011236, + 1.0735330000006797, + 1.067152999999962, + 1.0623470000009547, + 1.0656049999997776, + 1.0623100000011618, + 1.0878470000006928, + 1.1761210000004212, + 1.0625039999995352, + 1.0678089999983058, + 1.0640050000001793, + 1.0672650000014983, + 1.297924000000421, + 1.0666110000001936, + 1.0697170000003098, + 1.0805619999991904, + 1.1041310000000522, + 1.0966040000002977, + 1.0918540000002395, + 1.0886219999993045, + 1.0879400000012538, + 1.0861339999992197, + 1.0619170000009035, + 1.2042870000004768, + 1.0605180000002292, + 1.0707060000004276, + 1.0601499999993393, + 1.0752419999989797, + 1.074430000000575, + 1.0672240000003512, + 1.0676600000006147, + 1.1838999999999942, + 1.0656159999998636, + 1.0640469999998459, + 1.0686549999991257, + 1.927718000000823, + 1.347342999999455, + 1.145477000000028, + 1.1188879999990604, + 1.120031000000381, + 1.1286500000005617, + 1.0954060000003665, + 1.0892999999996391, + 1.0987889999996696, + 1.2196170000006532, + 1.1039939999991475, + 1.0989019999997254, + 1.091126000001168, + 1.0905430000002525, + 1.0898329999999987, + 1.090559000000212, + 1.088329000000158, + 1.0894630000002508, + 1.0900949999995646, + 1.0869210000000749, + 1.0639890000002197, + 1.0615900000011607, + 1.061641000000236, + 1.0650750000004336, + 1.0700589999996737, + 1.0712139999995998, + 1.065614999999525, + 1.5494400000006863, + 1.1352329999990616, + 1.095324999998411, + 1.0996250000007421, + 1.1017830000000686, + 1.0924770000001445, + 1.0907619999998133, + 1.0819319999991421, + 1.069047999999384, + 1.089216000000306, + 1.0946490000005724, + 1.2270760000010341, + 1.1055490000017016, + 1.099776999999449, + 1.089259000000311, + 1.0968119999997725, + 1.0935559999998077, + 1.095244999998613, + 1.0934820000002219, + 1.0955089999988559, + 1.0943199999983335, + 1.0882540000002336, + 1.0719669999998587, + 1.0610149999993155, + 1.0627000000004045, + 1.061146000000008, + 1.0699230000009265, + 1.0914749999992637, + 1.0629850000004808, + 1.0602669999989303, + 1.0606560000014724, + 1.062952000000223, + 1.0919389999999112, + 1.0885079999989102, + 1.0919389999999112, + 1.0928120000007766, + 1.0888930000000983, + 1.094336000000112, + 1.2458449999994627, + 1.0941380000003846, + 1.0991119999998773, + 1.0943260000003647, + 1.0893939999987197, + 1.0939089999992575, + 1.0801269999992655, + 1.0706129999998666, + 1.0705529999995633, + 1.0901450000001205, + 1.0901659999999538, + 1.090383999999176, + 1.091458999999304, + 1.0891990000000078, + 1.094344999999521, + 1.0970450000004348, + 1.0946210000001884, + 1.170722000000751, + 1.213514999999461, + 1.0938100000003033, + 1.09299700000156, + 1.0914630000006582, + 1.0916070000002946, + 1.1479330000001937, + 1.157100000000355, + 1.4301930000001448, + 1.1201600000003964, + 1.119104999999763, + 1.1251780000002327, + 1.1244230000011157, + 1.1263899999994464, + 1.3859209999991435, + 1.1299159999998665, + 1.1045309999990423 + ] + }, + "1000000": { + "ingest": [ + 1234.1247089999997, + 1177.4710700000014, + 1289.1100559999995 + ], + "windowRead": [ + 0.010823343749962078, + 0.011115031249914864, + 0.010560437499975706, + 0.010852968749986758, + 0.010493093750028493, + 0.010362562500063177, + 0.010905781250016844, + 0.010519781250081905, + 0.010570656250024513, + 0.010633031249994929, + 0.010200437499975124, + 0.01007859374999498, + 0.010222062500020002, + 0.00999212500005342, + 0.011054968750045191, + 0.011226874999920256, + 0.011177937500065127, + 0.010911343749967273, + 0.0116904374999649, + 0.011083531250051237, + 0.011198062499943262, + 0.010871843750010157, + 0.010837437500072156, + 0.011941843749923464, + 0.010747406249947744, + 0.01061412499996095, + 0.01068412500001159, + 0.013307531250006832, + 0.012333124999940992, + 0.01089128124999661, + 0.010775781250004002, + 0.010721656249984335, + 0.010552406249985324, + 0.010688374999972439, + 0.010338781249970452, + 0.01039490624998507, + 0.009901000000013482, + 0.01036903125009303, + 0.01053321874996982, + 0.013687468750049447, + 0.015460625000059736, + 0.015008999999963635, + 0.010655281250024018, + 0.01420946874998208, + 0.013837406249990636, + 0.012640374999932646, + 0.01174174999994193, + 0.01188603125001464, + 0.011520406249928783, + 0.011609031250031876, + 0.011393500000053791, + 0.011287218750112515, + 0.017256656249969637, + 0.01134575000003224, + 0.011363687499965636, + 0.01181715625000379, + 0.010906187500040687, + 0.011031781249926098, + 0.011343687499902444, + 0.011249812500068401, + 0.01071256249997532, + 0.010884468749964071, + 0.010702999999921303, + 0.010582750000025953, + 0.010828906250026193, + 0.010823968749946289, + 0.010367500000029395, + 0.010757843750070606, + 0.01137537500005692, + 0.010416718749979736, + 0.013423187500052336, + 0.011644812499980617, + 0.01044609375003347, + 0.010493656249991545, + 0.010113531249999141, + 0.010379249999914464, + 0.010338531249999505, + 0.0100947187499969, + 0.011403343749975647, + 0.01100990625002396, + 0.011225406249991465, + 0.01382012500005203, + 0.011189343749947511, + 0.010945718750008382, + 0.011387281249994885, + 0.012147093750058957, + 0.011233125000103428, + 0.01114203125007407, + 0.017430750000016815, + 0.011821624999925007, + 0.010810781250029322, + 0.010847218749972853, + 0.010794093750064349, + 0.010662312500016924, + 0.010824062499978027, + 0.01044824999996763, + 0.010790562500005763, + 0.010800093749935513, + 0.010169437499939704, + 0.01012934374989527, + 0.010341343750042142, + 0.0100955312499309, + 0.010221687500006738, + 0.010102468750005755, + 0.010152999999945678, + 0.010196312499942906, + 0.010213968750008462, + 0.010296281249907224, + 0.011206000000015592, + 0.010072374999936073, + 0.011067218749985841, + 0.011120874999960506, + 0.011095468749999782, + 0.010759093749925341, + 0.01070437500004573, + 0.010639562499932254, + 0.010663531249974767, + 0.010381343749941152, + 0.010785374999954911, + 0.010537187499949141, + 0.011155187500094144, + 0.011829781249957705, + 0.010529937499995867, + 0.01040150000005724, + 0.010557249999919804, + 0.010302718750040185, + 0.01134375000003729, + 0.010346781250063941, + 0.011217531249940293, + 0.011122093750032036, + 0.010396437500048705, + 0.010207781250073822, + 0.013654375000101027, + 0.011109062499940592, + 0.010806343750004999, + 0.010984125000049971, + 0.01105246874999466, + 0.012452374999952553, + 0.010877906250016167, + 0.010422656250057116, + 0.010588062500005435, + 0.010457125000016276, + 0.01140528124994944, + 0.012015843749964006, + 0.011401374999991276, + 0.011334749999946325, + 0.011615968749993044, + 0.011153874999990876, + 0.011218156249924505, + 0.011441249999961656, + 0.011301500000058695, + 0.011464343749935324, + 0.011064218749993415, + 0.010684562499932326, + 0.010805906249970576, + 0.011237499999992906, + 0.010692531250015236, + 0.010599593750043823, + 0.011008468749992062, + 0.010427687500055072, + 0.010668593749983302, + 0.010455999999976484, + 0.010359343749996697, + 0.010453312499976164, + 0.010007968750073815, + 0.010312812500046675, + 0.012321281250024185, + 0.010126468749945161, + 0.009854343750021144, + 0.011097374999962994, + 0.010144499999910295, + 0.009765000000015789, + 0.010252906250002525, + 0.009684312499985026, + 0.011623468750030952, + 0.011507531250003922, + 0.011836093750048349, + 0.012118781250023858, + 0.01487571874997684, + 0.012205843750052736, + 0.012218093749993386, + 0.011609781249944717, + 0.011435312499997963, + 0.011028906250089676, + 0.011090312500073196, + 0.011005687499960004, + 0.02108506249999209, + 0.019962406249987907, + 0.011328812499982632, + 0.010397156249950967, + 0.010712343750014952, + 0.01004612500003077, + 0.009960843750036474, + 0.009864499999935106, + 0.01021284374996867, + 0.009451656249893858, + 0.010017500000003565, + 0.009448874999975487, + 0.009606218750036533, + 0.009730062500011627, + 0.00943868749993726, + 0.009536187499975313, + 0.009588562500084663, + 0.01059178125001381, + 0.010113312500038774, + 0.009716999999909604, + 0.011866406250078398, + 0.010732937500051776, + 0.018379656249976506, + 0.022352999999952772, + 0.02144334374997925, + 0.022154624999984662, + 0.01056418749999466, + 0.010309562499969616, + 0.011224468750015149, + 0.010753218749982807, + 0.011532312500094122, + 0.011691593750015272, + 0.013038062499958869, + 0.012913093749943982, + 0.010918937500036918, + 0.011246656249909392, + 0.015836312500027816, + 0.01139221875007479, + 0.011814781249995576, + 0.011478156249950189, + 0.011317625000060616, + 0.010957187500025611, + 0.010524062499939646, + 0.010582468750044427, + 0.01055337499997222, + 0.010090906249956788, + 0.014636531250062035, + 0.011690906250009903, + 0.01039812500005155, + 0.010758531249962289, + 0.010141874999931133, + 0.01025846875006664, + 0.01237496875000943, + 0.011390437500040207, + 0.011454500000013468, + 0.011301843749947693, + 0.011189843750003092, + 0.011817312500056687, + 0.010908468750017164, + 0.01011356250000972, + 0.010334031249954023, + 0.010510093749985572, + 0.010145531250032036, + 0.011370312499934698, + 0.00976815625006111, + 0.010320968749965687, + 0.011671281249959975, + 0.009574468749974585, + 0.009521187500013184, + 0.00944662500000959, + 0.009805124999957116, + 0.009858781250045467, + 0.010326406249987485, + 0.010278187500034619, + 0.009953156250048778, + 0.011699406249931599, + 0.015244437499973174, + 0.014075781249971442, + 0.012903812499985179, + 0.017030718749992957, + 0.022272281250025117, + 0.015674031250000553, + 0.014205218750021231, + 0.012833062500021697, + 0.011325218750016575, + 0.011182187499912288, + 0.012107593749988155, + 0.011644843749991196, + 0.010963124999989304, + 0.01073800000006031, + 0.010551718749979955, + 0.010575406250040942, + 0.01079149999998208, + 0.010242562500025088, + 0.01048515625006985, + 0.010871187500015367, + 0.010157968750036162, + 0.010205156249980973, + 0.010247343750052096, + 0.010152343749950887, + 0.010239656249950713, + 0.011085718749995976, + 0.009864499999935106, + 0.00952549999999519, + 0.010900874999947519, + 0.009317500000065593, + 0.009399281250011882, + 0.010489156249946063, + 0.018671593750013926, + 0.009522374999960448, + 0.009284374999992906, + 0.010058562500034895, + 0.010406874999944193, + 0.010020281249921936 + ], + "edit": [ + 6.066113999997469, + 3.6885739999997895, + 3.745704000000842, + 5.905864000000292, + 3.6882450000011886 + ], + "sort": [ + 29.185819999998785, + 24.926359000000957, + 32.29790700000012, + 28.2149419999987, + 27.95491800000309 + ], + "filter": [ + 4.403859999998531, + 3.6479470000012952, + 3.288921000003029, + 3.346265999996831, + 3.5756639999999607 + ], + "multiFilter": [ + 39.60871699999916, + 34.10896700000012, + 36.08614000000307, + 46.86836599999879, + 36.27071500000238 + ], + "distinctLow": [ + 44.65272499999992, + 37.42791399999987, + 43.026169000000664, + 44.73983999999837, + 41.700958000001265 + ], + "distinctHigh": [ + 248.4412070000035, + 261.8431789999995, + 239.58936299999914, + 268.52262899999914, + 257.94850900000165 + ], + "aggregate": [ + 1.9192059999986668, + 1.913949000001594, + 1.9276850000023842, + 1.9804019999974116, + 1.9306969999997818, + 1.9193190000005416, + 1.9783710000010615, + 1.8814070000007632, + 1.894270000000688, + 1.9034610000016983, + 1.881984999999986, + 1.8480060000001686, + 1.962905000000319, + 1.8647210000017367, + 2.4200890000029176, + 1.84413300000233, + 1.9536899999984598, + 1.876497000001109, + 1.8857669999997597, + 1.8830339999985881, + 1.8976980000006733, + 1.9304579999989073, + 1.8796589999983553, + 1.9846730000026582, + 1.8810450000019046, + 2.830171000001428, + 1.905030000001716, + 1.8333559999991849, + 1.7086199999976088, + 1.6841260000001057, + 1.9556080000002112, + 1.7482270000000426, + 2.0816279999999097, + 2.0570200000001932, + 1.9846709999983432, + 2.014429000002565, + 2.031974999998056, + 2.0647339999995893, + 2.101406000001589, + 2.2351889999990817, + 2.1820150000021385, + 2.177571000000171, + 2.352420000002894, + 2.1865509999988717, + 2.3466069999994943, + 2.1088529999979073, + 1.9963409999982105, + 1.933924000000843, + 1.8100049999993644, + 1.7936029999982566, + 1.776108000001841, + 1.7551669999993464, + 1.7572929999987537, + 1.7347540000009758, + 1.80122300000221, + 1.806324000001041, + 1.7865119999987655, + 1.7970769999992626, + 1.8142099999968195, + 1.7920449999983248, + 1.8034760000009555, + 1.8691690000014205, + 1.8538410000001022, + 1.8490319999982603, + 1.9059629999974277, + 1.880392999999458, + 1.889948000000004, + 1.9037810000008903, + 1.9017300000014075, + 1.89599200000157, + 1.8749060000009194, + 1.9039529999972729, + 1.8909369999964838, + 1.850323999999091, + 1.8898210000006657, + 1.882886999999755, + 1.8958170000005339, + 1.8884699999980512, + 2.177373999998963, + 1.9357659999986936, + 1.851647999999841, + 2.478062999998656, + 1.9259510000010778, + 2.1453250000013213, + 2.0321939999994356, + 1.8853340000023309, + 1.8182210000013583, + 1.829831999999442, + 2.1559720000004745, + 2.313586000000214, + 1.8995150000009744, + 1.7817349999968428, + 2.3742910000000848, + 1.9927480000005744, + 1.8753780000006373, + 1.8109579999982088, + 2.171481000001222, + 2.248228000000381, + 2.156092000001081, + 2.1811370000032184, + 2.2008180000011635, + 2.2032409999992524, + 2.24071300000287, + 2.2430419999982405, + 2.2466940000012983, + 2.305270999997447, + 2.3028059999996913, + 2.379590000000462, + 2.3816230000011274, + 2.370523999998113, + 2.3838230000001204, + 2.380866999999853, + 2.3637020000023767, + 2.358786999997392, + 2.2728320000023814, + 2.1858489999976882, + 2.9901909999971394, + 1.9601990000010119, + 1.8709369999996852, + 1.7966530000012426, + 1.7666129999997793, + 1.7165490000006685, + 1.7074370000009367, + 1.873793000002479, + 1.7315589999998338, + 1.8189759999986563, + 1.636214000001928, + 2.116132999999536, + 1.743970999999874, + 1.7831960000003164, + 1.8587030000016966, + 1.8046870000034687, + 1.8144130000000587, + 1.8051910000031057, + 1.9037220000027446, + 3.244942000001174, + 1.9711410000018077, + 1.8848170000019309, + 1.888702000000194, + 1.894523000002664, + 1.8648769999999786, + 1.9091750000006869, + 1.8765930000008666, + 1.8697579999970912, + 1.8586560000003374, + 1.864980000002106, + 1.8795649999992747, + 1.876576999999088, + 1.8475240000007034, + 1.8312159999986761, + 2.086475000000064, + 1.9061080000028596, + 1.9839449999999488, + 1.8644069999972999, + 1.8979749999998603, + 1.8808330000028946, + 1.875810999998066, + 1.9512859999995271, + 1.9101450000016484, + 1.9421599999986938, + 1.8808000000026368, + 1.8437679999988177, + 1.8363339999996242, + 1.8786380000019562, + 1.8322189999998955, + 1.9075699999993958, + 1.8357389999982843, + 1.8973079999996116, + 1.8499809999993886, + 1.8424319999976433, + 1.8489209999970626, + 1.8369039999997767, + 1.855332000002818, + 1.8411299999970652, + 1.90668899999946, + 1.8344370000013441, + 2.1010170000008657, + 2.1108260000000882, + 2.04504900000029, + 1.7918179999978747, + 1.7175370000004477, + 1.74319000000105, + 1.7240569999994477, + 1.790870000000723, + 2.0316789999997127, + 2.137436000000889, + 1.8940499999989697, + 1.8891120000007504, + 1.8857570000000123, + 2.390660000000935, + 3.773368999998638, + 1.981315999997605, + 1.9144410000008065, + 2.7303930000016408, + 1.9659829999982321, + 1.9235240000016347, + 1.801895999997214, + 1.7540900000021793, + 1.7594329999992624, + 1.6778599999997823 + ] + } + } + }, + { + "repetition": 2, + "captureSha256": "81da76f5f102db3c25d695aecb8070a8c7341623c69aacda82ceeacf2e26440a", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:35:14.596Z", + "sheetwriteRows": [ + 1000, + 10000, + 100000, + 500000, + 1000000 + ], + "handsontableRows": [ + 1000, + 10000 + ] + }, + "sheetwrite": { + "1000": { + "ingest": [ + 1.6526340000000346, + 1.6089069999999879, + 1.4477590000000191, + 1.680498, + 2.2837490000000003, + 5.020383999999979, + 1.463688999999988 + ], + "windowRead": [ + 0.009352249999999174, + 0.009306218749999928, + 0.010847593750000328, + 0.012963218750000394, + 0.009892062499998744, + 0.010025406249999591, + 0.009536093749998642, + 0.009441093750000462, + 0.009702499999999503, + 0.009531687499999109, + 0.009556874999999465, + 0.00933059375000056, + 0.009932437499999835, + 0.00937578125000016, + 0.009390031249999709, + 0.009377999999999886, + 0.009065531250000092, + 0.009010406249998937, + 0.009493437499999757, + 0.009202343749999287, + 0.009256718749998782, + 0.016242343749999222, + 0.00925578125000115, + 0.009117250000000965, + 0.009460656249999033, + 0.00913396874999961, + 0.009071343749999627, + 0.009157593750000359, + 0.009532781250001676, + 0.00924168749999943, + 0.009233437499998942, + 0.009537625000000105, + 0.009365374999999787, + 0.009525968749999336, + 0.009359437500000567, + 0.009324156250000826, + 0.009046093749999429, + 0.009915031249999373, + 0.009426812500000992, + 0.010794687500000677, + 0.009166718749998637, + 0.009642749999999367, + 0.0089468125000014, + 0.009165312500000411, + 0.010398343749999484, + 0.008956562499999876, + 0.009174937499999203, + 0.009325156250000077, + 0.009785593749999322, + 0.009237437499999501, + 0.00926337499999974, + 0.010897093749999698, + 0.009980718750000506, + 0.017471406249999433, + 0.01762731250000016, + 0.009153343750000431, + 0.013556312499998668, + 0.014117468749999418, + 0.018850625000000676, + 0.009649343749998707, + 0.009517874999998455, + 0.009306687500000521, + 0.009948093749999387, + 0.008699656250000132, + 0.008963031249999531, + 0.009308468749999577, + 0.008712437499999837, + 0.008774343749999858, + 0.008645062499999412, + 0.008730968750001011, + 0.008718062499999846, + 0.00926803125000042, + 0.008731437499999828, + 0.008853062500000064, + 0.009449749999999923, + 0.009241249999998757, + 0.00914431250000014, + 0.009794093749999178, + 0.00958509375000105, + 0.009665187499999561, + 0.00957503124999981, + 0.009394624999998769, + 0.009391843750000461, + 0.009972749999999309, + 0.01032409375000043, + 0.010185375000000718, + 0.010273093750001294, + 0.010457249999999974, + 0.010362687499998913, + 0.010419781250000426, + 0.010596312500000593, + 0.016576468750001183, + 0.010439843749999511, + 0.013191624999999263, + 0.010466312500000186, + 0.010971812499999345, + 0.011298718749999992, + 0.012975406249999821, + 0.011672031250000714, + 0.011191124999999857, + 0.012006906249999005, + 0.013145374999998793, + 0.010735312499999594, + 0.011489781249998998, + 0.009206437500001385, + 0.009574218750000085, + 0.009263781249998715, + 0.009261187499999934, + 0.009805812499999789, + 0.009187156250000328, + 0.009239562500001242, + 0.009046406250000416, + 0.008515968750000269, + 0.008957625000000746, + 0.008551406249999616, + 0.008627249999999975, + 0.008690343750000551, + 0.012201687500001057, + 0.014089843749999886, + 0.01443859375000045, + 0.008876500000001286, + 0.008519562500000077, + 0.008461343749999628, + 0.008219437499999316, + 0.008205468749999056, + 0.0081477187499992, + 0.008122718750000146, + 0.008081968750000001, + 0.008190781250000612, + 0.008290343749999707, + 0.008472187499998896, + 0.008437968750000024, + 0.008990343749999852, + 0.008404999999999774, + 0.0081776249999983, + 0.00841553124999983, + 0.008679468749999586, + 0.008799374999998832, + 0.008722781250000367, + 0.008687531250000546, + 0.05410243749999921, + 0.006976281249999161, + 0.007020374999999746, + 0.007209593749999854, + 0.008943156249999973, + 0.010733531250000539, + 0.006805937499999359, + 0.00696275000000135, + 0.006586968749999755, + 0.006541843749999998, + 0.00672281249999962, + 0.006761749999999012, + 0.011056656250000074, + 0.007492750000000825, + 0.012024343749999389, + 0.00854062500000019, + 0.007758781249998847, + 0.007466374999999914, + 0.008471781249999921, + 0.008468468750001179, + 0.007979562499999204, + 0.00787771875000054, + 0.008237781250000964, + 0.008206968749998822, + 0.009475500000000636, + 0.007288374999999903, + 0.0073281249999990195, + 0.007401156249999374, + 0.007372750000000039, + 0.007184281249999813, + 0.007374281249999726, + 0.007314125000000615, + 0.006938906249999377, + 0.006906624999999167, + 0.0069075312500004316, + 0.007166500000000298, + 0.007450968749999731, + 0.006650343750001397, + 0.0065128437500003855, + 0.0064141250000009364, + 0.006512656250000859, + 0.006272093750000707, + 0.006216999999999473, + 0.006260156249998872, + 0.006475874999999576, + 0.006224312500000551, + 0.006211406249999385, + 0.006661531249999797, + 0.00641718750000031, + 0.006356499999998988, + 0.0062264375000005145, + 0.00599040624999958, + 0.006102937499999683, + 0.0060778750000007875, + 0.006171625000000347, + 0.007432156249999267, + 0.006874031249999746, + 0.00582143749999986, + 0.006095625000000382, + 0.0060651562499991485, + 0.005776062499998957, + 0.006067812500001324, + 0.006025406250000032, + 0.00587996874999952, + 0.006153249999998778, + 0.006023531250001213, + 0.0060475624999991595, + 0.005562156250000783, + 0.005948812500001566, + 0.007184499999999261, + 0.005876062500000501, + 0.005804187499999003, + 0.0057899374999994535, + 0.006108156249998942, + 0.005992093750000649, + 0.006064656250000411, + 0.006097499999999201, + 0.006073750000000544, + 0.005925468750000107, + 0.005920187500001006, + 0.006079999999998975, + 0.0059113124999985445, + 0.005709531249999955, + 0.005729249999999908, + 0.005831531250001021, + 0.005735843749999248, + 0.005460812499999079, + 0.005921312499999942, + 0.005680531249998566, + 0.005846812499999743, + 0.005758750000000035, + 0.00552818750000128, + 0.0053941250000004715, + 0.005404156250000014, + 0.005435000000000301, + 0.005534343749999948, + 0.005914062499998707, + 0.005349999999999966, + 0.005259187500000095, + 0.0053875312499993555, + 0.005343812500001377, + 0.005430999999999742, + 0.005475000000000563, + 0.005478625000000292, + 0.005384968750000496, + 0.0053787812499983545, + 0.005433843749999667, + 0.005726562500001364, + 0.005694125000001549, + 0.005321781250000157, + 0.005384749999999272, + 0.0053238437499985025, + 0.006137343749999857, + 0.00632237499999988, + 0.005690218750000753, + 0.005809156250000669, + 0.006403843750000249, + 0.0065128437500003855, + 0.006168125000000302, + 0.006015562500000016, + 0.005450343750000641, + 0.005407218750001164, + 0.005284656249999742, + 0.005322156250000987, + 0.006481156250000453, + 0.005815312499999337, + 0.0057440624999998136, + 0.0056690624999991, + 0.0056772812500014425, + 0.005808187499999562, + 0.010576656250000482, + 0.005881937499999879, + 0.006825687499999233, + 0.0054939374999989354, + 0.005532562500000893, + 0.0056578750000007005, + 0.005646593749998985, + 0.005624875000000529, + 0.005557968750000697, + 0.006850406250000773, + 0.011948562500000648, + 0.009732156249999235, + 0.00967309374999914, + 0.009513531249998763, + 0.009531031249998989, + 0.009406999999999499, + 0.00981621875000016, + 0.009612500000001134, + 0.00946553124999916, + 0.009703718749999979, + 0.009503249999999852, + 0.009438968749998722, + 0.010886937500000471, + 0.005665343749999607, + 0.005301187500000637, + 0.005222656249999957, + 0.00530884374999907, + 0.005543874999998977, + 0.0056757812499999005, + 0.008526906250001076 + ], + "edit": [ + 6.193809999999985, + 5.118756000000019, + 6.68992099999997, + 7.1442859999999655, + 8.391736000000037, + 7.175314999999955, + 7.085240999999996, + 5.223031999999989, + 4.485709999999983, + 4.173363999999992, + 3.9428229999999758, + 3.7437960000000317, + 7.739781999999991, + 8.593038999999976, + 7.484379999999987 + ], + "sort": [ + 0.16108100000008108, + 0.15485400000000027, + 0.14567799999997533, + 0.14394199999992452, + 0.14565400000003592, + 0.14686300000005303, + 0.1362459999999146, + 0.1378540000000612, + 0.1252070000000458, + 0.12102100000004157, + 0.12011499999994157, + 0.122361000000069, + 0.14323899999999412, + 0.14018099999998412, + 0.1374519999999393 + ], + "filter": [ + 0.031653000000005704, + 0.026275999999938904, + 0.04168400000003203, + 0.022186000000033346, + 0.02354200000002038, + 0.023215999999933956, + 0.019924000000060005, + 0.028846999999927903, + 0.019945000000006985, + 0.01985899999999674, + 0.040796000000000276, + 0.04695400000002792, + 0.04220900000007077, + 0.030678999999963708, + 0.021985999999969863 + ], + "multiFilter": [ + 0.12466800000004241, + 0.11086999999997715, + 0.10708099999999376, + 0.13501799999994546, + 0.12105900000005931, + 0.11970299999995859, + 0.11533599999995658, + 0.10762699999997949, + 0.12457400000005237, + 0.10288900000000467, + 0.1042889999999943, + 0.11559199999999237, + 0.11212199999999939, + 0.09987499999999727, + 0.09862399999997251 + ], + "distinctLow": [ + 0.10933799999997973, + 0.0874100000000908, + 0.0998779999999897, + 0.09506499999997686, + 0.07976700000006076, + 0.07963799999993171, + 0.07990400000005593, + 0.11456300000008923, + 0.12281100000006973, + 0.0699170000000322, + 0.0682369999999537, + 0.07181100000002516, + 0.06772499999999582, + 0.07140800000001946, + 0.06492500000001655 + ], + "distinctHigh": [ + 0.30673699999999826, + 0.30772799999999734, + 0.290356000000088, + 0.27962000000002263, + 0.287776000000008, + 0.28470500000003085, + 0.3827009999999973, + 0.36014799999998104, + 0.31747699999993984, + 0.2911189999999806, + 0.3047159999999849, + 0.291992999999934, + 0.5875780000000077, + 0.5107199999999921, + 0.5102319999999736 + ], + "aggregate": [ + 0.0042120859374996655, + 0.003927804687500647, + 0.003895398437499864, + 0.003884343750000241, + 0.003794054687499937, + 0.0038527890624999728, + 0.0038906562500002906, + 0.004394429687500256, + 0.00390758593750018, + 0.004775125000000102, + 0.004147992187499838, + 0.003939414062500646, + 0.003923710937500324, + 0.0038749609374999494, + 0.0038379531250001264, + 0.0038763046875001095, + 0.0038935078125001965, + 0.003956023437499567, + 0.0040328124999993165, + 0.0039589609375001444, + 0.003955960937499725, + 0.0038907421875000736, + 0.003892406250000313, + 0.003861914062500027, + 0.003933523437500419, + 0.003880015624999622, + 0.003991039062499979, + 0.004027507812500275, + 0.004028265625000138, + 0.00406557812500008, + 0.004394835937500119, + 0.004796492187499446, + 0.004306570312500035, + 0.004112234374999524, + 0.004208375000000153, + 0.004139398437500219, + 0.004120015625000306, + 0.004113273437499565, + 0.004003984375000158, + 0.004028367187499882, + 0.00406787499999961, + 0.0041165859375000835, + 0.004155625000000107, + 0.00429774218750012, + 0.004232281250000192, + 0.004255742187499578, + 0.004180132812500403, + 0.004271718749999209, + 0.004143195312499515, + 0.004214562500000518, + 0.004193070312500602, + 0.004187867187500416, + 0.004032843750000126, + 0.004026406250000392, + 0.004083898437500011, + 0.004119585937500503, + 0.004149539062500374, + 0.004019742187500341, + 0.0041565624999995165, + 0.004109070312500407, + 0.004631320312499909, + 0.004739015624999787, + 0.00420257812499969, + 0.004495476562500045, + 0.004180164062499436, + 0.004158031250000249, + 0.004125765625, + 0.004137812499999782, + 0.00407553124999982, + 0.00407660156250067, + 0.004007382812499571, + 0.004045023437500461, + 0.00407023437499987, + 0.004123476562499562, + 0.00411010156249958, + 0.004126257812499645, + 0.004094984374999555, + 0.00415241406250022, + 0.004080351562500084, + 0.0043157656250008, + 0.00417271875000047, + 0.00412207812499954, + 0.004132984375000426, + 0.004048656249999283, + 0.004102320312500574, + 0.004264367187500007, + 0.004104437500000557, + 0.004059421874999636, + 0.004039179687500116, + 0.00401635156250002, + 0.004288257812500085, + 0.004631148437499455, + 0.004179781250000403, + 0.0040734765625005664, + 0.004089265624999783, + 0.004086500000000548, + 0.004137289062500216, + 0.004115062500000377, + 0.004056976562499592, + 0.004090460937500318, + 0.004004117187499823, + 0.004089710937499547, + 0.004082171874999929, + 0.004100171875000669, + 0.0040575390624999486, + 0.004149679687500019, + 0.004067742187499945, + 0.004152796875000142, + 0.004116398437500557, + 0.004109953124999954, + 0.0040673281250001025, + 0.0041502109374995655, + 0.004034609375000109, + 0.0041633671875001, + 0.004067367187500004, + 0.0041282499999999445, + 0.0041318593749997135, + 0.004091359374999826, + 0.004130687500000008, + 0.004095984375000583, + 0.004072601562500111, + 0.004705429687500207, + 0.004444695312500357, + 0.004044632812499671, + 0.004120843749999992, + 0.004062156249999838, + 0.0040996328125002535, + 0.0040964765624993404, + 0.0041263203125003756, + 0.004095085937499299, + 0.0042733671875003765, + 0.004212406249999745, + 0.004217296874999832, + 0.004213804687499767, + 0.004123953125000135, + 0.004156796874999813, + 0.004128304687499806, + 0.004101031249999387, + 0.004065851562500278, + 0.004090812500000318, + 0.004044773437499316, + 0.004094351562500265, + 0.004066351562499904, + 0.004090476562500278, + 0.004061499999999718, + 0.004047101562499655, + 0.004055265625000359, + 0.0040950468750002855, + 0.003990023437499879, + 0.004083640624999774, + 0.003975000000000506, + 0.004716093749999928, + 0.004803460937500503, + 0.004022414062499813, + 0.004118921874999515, + 0.004067085937500714, + 0.003988234374999955, + 0.00398741406250025, + 0.003945523437499432, + 0.003956999999999766, + 0.003986968749999598, + 0.003960499999999811, + 0.0039969765625000875, + 0.0039137343749997555, + 0.003974999999999618, + 0.003944289062499884, + 0.003958953125000164, + 0.003949703124999537, + 0.003998406250000031, + 0.003957304687499885, + 0.003996429687499692, + 0.0039403046875001735, + 0.004016429687499823, + 0.0039438593750000805, + 0.0040275781250000975, + 0.004000828125000133, + 0.003962914062499934, + 0.0039777890624996814, + 0.004004914062499587, + 0.003953765624999939, + 0.003984992187500147, + 0.003951695312499837, + 0.004204664062499752, + 0.004212351562499883, + 0.00396314843750023, + 0.0038570546874998612, + 0.003936460937500108, + 0.0040006953125004685, + 0.003855539062500135, + 0.003916210937500608, + 0.003930109374999269, + 0.004005734375000181, + 0.004011632812499499, + 0.0039944296875003005, + 0.003982367187499669, + 0.003997679687500089, + 0.0039783749999999785, + 0.004360835937499807, + 0.004195601562500428, + 0.004013070312500311 + ] + }, + "10000": { + "ingest": [ + 14.404916000000071, + 13.195001000000047, + 11.440871000000016, + 11.74161300000003, + 11.60146199999997, + 14.420892999999978, + 11.54345699999999 + ], + "windowRead": [ + 0.005632062500001922, + 0.00565250000000006, + 0.005758562499998732, + 0.00561590625000008, + 0.005584781250000503, + 0.005473156250001665, + 0.005445250000001067, + 0.005899031249999354, + 0.006015781249999463, + 0.005603281249999981, + 0.007115687500000689, + 0.005514281250000863, + 0.005515343750001733, + 0.005427468749999775, + 0.005566187500001263, + 0.005734999999997825, + 0.005665781249998503, + 0.005693125000000521, + 0.006816531250002811, + 0.006239624999999194, + 0.005568843750001662, + 0.005668499999998744, + 0.005942187500000529, + 0.006725656250001322, + 0.0060253750000001105, + 0.006044906250000537, + 0.007331968749998197, + 0.007239312500001205, + 0.007013906250001867, + 0.006976968750002754, + 0.007182374999999297, + 0.00707968749999921, + 0.006815624999997993, + 0.006816875000001943, + 0.006669968749999811, + 0.00658384375000054, + 0.006606718749999629, + 0.006979937499998812, + 0.00635281249999764, + 0.006511406249998686, + 0.006616031250000987, + 0.006788531249998897, + 0.006892187500000091, + 0.0067154374999987, + 0.0066942499999989025, + 0.0064959375000022135, + 0.0069064999999994825, + 0.00664409375000119, + 0.006674499999999028, + 0.00782946874999979, + 0.007474718750000164, + 0.007285156249999147, + 0.007220656250002122, + 0.00723140624999985, + 0.0073015937499967265, + 0.007909687499999762, + 0.006663437499998537, + 0.006731125000001725, + 0.006678968750001957, + 0.006660718749998296, + 0.006775093750000849, + 0.007704781249998405, + 0.00905434374999814, + 0.007415281250001016, + 0.0069739687499996705, + 0.007080968749999528, + 0.006886406250000476, + 0.0069315312500002335, + 0.006818312500001866, + 0.006641500000000633, + 0.0065721562499980735, + 0.006606906249999156, + 0.007279687499998744, + 0.007028468750000627, + 0.007047187499999552, + 0.007092499999998836, + 0.007000281250000739, + 0.006935906249999846, + 0.006567437499999329, + 0.006732781250001096, + 0.006750750000001915, + 0.00695431249999956, + 0.00708315625000111, + 0.006960937500000597, + 0.006672125000001472, + 0.006739749999997713, + 0.0072704375000007815, + 0.007239937499999627, + 0.007012062499999416, + 0.007043249999998835, + 0.007108093750002098, + 0.006984718749997398, + 0.006883750000000077, + 0.006964250000002892, + 0.006871625000002268, + 0.007157437499998309, + 0.006757343749999478, + 0.006899468749999471, + 0.0068587812499991685, + 0.007141031250000651, + 0.0074470937499988565, + 0.007444687500001379, + 0.007338718749998918, + 0.007244874999997819, + 0.007221062500001096, + 0.00710524999999862, + 0.007188718750001044, + 0.006848062500001362, + 0.00690996874999783, + 0.006797093750002148, + 0.006756468749998135, + 0.08570906249999766, + 0.008195374999999672, + 0.006840312500003165, + 0.00692796874999857, + 0.007188374999998359, + 0.007131000000001109, + 0.007035093750001664, + 0.006965656249999341, + 0.006913031250000756, + 0.006669968749999811, + 0.0068051562499995555, + 0.006681093750000144, + 0.006792218750000245, + 0.006457624999999467, + 0.006204187499999847, + 0.0063804375000025, + 0.0062142187499993895, + 0.006393468749998021, + 0.006296687500000786, + 0.006229468749999967, + 0.006134218750002418, + 0.006098656249999834, + 0.00611462500000215, + 0.005948687500001881, + 0.0059944375000000605, + 0.005980843749998854, + 0.005946906250002826, + 0.0059266875000005825, + 0.0061026875000003145, + 0.006327156249998467, + 0.006232687499998946, + 0.006081468750000596, + 0.005871843750000494, + 0.0058993124999986435, + 0.005669093750000798, + 0.0056265312499981235, + 0.005536343749998451, + 0.005396406250000041, + 0.005465624999999363, + 0.00586340625000048, + 0.005712124999998736, + 0.005756406250000623, + 0.005840374999998232, + 0.005958843750001108, + 0.005671218749998985, + 0.005492406249999249, + 0.00637753124999918, + 0.005415437499998177, + 0.005360937500000773, + 0.005537656250002243, + 0.0092378437499967, + 0.005942000000001002, + 0.00598446875000036, + 0.006758343750000506, + 0.005760781250000235, + 0.00537378125000032, + 0.005565406249999683, + 0.006142343750003221, + 0.005354718750002263, + 0.005539312499998061, + 0.006004749999998893, + 0.005312937500001169, + 0.005385937500001603, + 0.005200781250000119, + 0.0052373437500001785, + 0.00649181250000197, + 0.005757062499998966, + 0.0054042187500016325, + 0.006232125000000366, + 0.005166375000001722, + 0.005344843749998773, + 0.005787937499999174, + 0.0055568125000000634, + 0.0055896874999987745, + 0.0055588750000019616, + 0.005385218749999865, + 0.005543937500000595, + 0.005737843749997751, + 0.005432906250000258, + 0.0054374687500029495, + 0.005885593750001306, + 0.005239499999998287, + 0.005564437499998576, + 0.005618906249999611, + 0.005613937499997945, + 0.007635343749999635, + 0.005830531250001769, + 0.005881031250002167, + 0.0058302187499990055, + 0.005774843750000258, + 0.0057699999999982765, + 0.00586043750000087, + 0.006291187499996909, + 0.005776343750000024, + 0.005651562500002427, + 0.006419375000000116, + 0.005732687500000111, + 0.00578993750000123, + 0.0057154375000010305, + 0.0057115000000003135, + 0.005616124999999528, + 0.005672218750000013, + 0.00651881249999775, + 0.005815937499999535, + 0.005719281249998431, + 0.0055805312500005755, + 0.005668187499999533, + 0.005745937499998632, + 0.006979000000001179, + 0.006579625000000533, + 0.006169281249999159, + 0.006056718749999135, + 0.006138437499998872, + 0.006847093750000255, + 0.00603665625000005, + 0.00628896875000251, + 0.0060283437499997206, + 0.0058690937500003315, + 0.006116625000000653, + 0.005940750000000605, + 0.005934656249998227, + 0.005812999999999846, + 0.005884187500001303, + 0.005712968750000158, + 0.006330625000000367, + 0.005506937499998088, + 0.006122406250000267, + 0.0066005625000009616, + 0.005803187499999751, + 0.005979531249998615, + 0.005961812500000718, + 0.0067590937499986126, + 0.005607687499999514, + 0.005598625000001078, + 0.0064152499999998724, + 0.007734593750001295, + 0.008009906249998977, + 0.006012406250000879, + 0.005916000000002697, + 0.005899593750001486, + 0.0056727187500023035, + 0.005660187499998415, + 0.0055956249999979946, + 0.005786062500000355, + 0.005905750000000154, + 0.005538250000000744, + 0.005587125000001691, + 0.00550565624999777, + 0.005547093749999732, + 0.005648562499999343, + 0.006036718749999892, + 0.005867656250000408, + 0.005903124999999676, + 0.005943874999999821, + 0.00589137500000092, + 0.00818587500000234, + 0.005747124999999187, + 0.005772000000000332, + 0.005647062499999578, + 0.005622281250001748, + 0.00605015624999794, + 0.005668406249998981, + 0.00575181249999801, + 0.005607874999999041, + 0.005641531250002885, + 0.005695468750001709, + 0.005755031250000542, + 0.005708874999999836, + 0.005613812499998261, + 0.005577437500001281, + 0.005715062500001977, + 0.01036153124999828, + 0.007556999999998482, + 0.005997968750001803, + 0.005683593749999716, + 0.005457937500001009, + 0.005280843750000486, + 0.005351843749998864, + 0.005606249999999591, + 0.0055594062499970676, + 0.005449375000001311, + 0.005431750000003177, + 0.005171718750002441, + 0.00515743750000297, + 0.005362843750003066, + 0.0052525000000009925, + 0.005443468749998459, + 0.0055038437499987936, + 0.005556093750001878 + ], + "edit": [ + 5.647527999999966, + 4.743033999999966, + 4.511997999999949, + 4.652135000000044, + 4.541689000000019, + 7.352696000000037, + 4.412239, + 4.425204000000008, + 4.376837000000023, + 4.9011820000000625, + 4.395271999999977, + 4.5546339999999645, + 6.61281299999996, + 4.412894999999935, + 4.427591000000007 + ], + "sort": [ + 0.2936969999999519, + 0.2918539999999439, + 0.3347999999999729, + 0.28712399999994886, + 0.2843879999999217, + 0.27684499999998025, + 0.28383000000007996, + 0.27902499999993324, + 0.27099599999996826, + 0.28205400000001646, + 0.27775999999994383, + 0.2721350000000484, + 0.2925880000000234, + 0.28039000000001124, + 0.3097339999999349 + ], + "filter": [ + 0.06059200000004239, + 0.05704400000001897, + 0.056860000000028776, + 0.05600400000002992, + 0.05687500000010459, + 0.06245600000011109, + 0.05901200000005247, + 0.05513399999995272, + 0.061092000000030566, + 0.05892699999992601, + 0.06292699999994511, + 0.093291000000022, + 0.10030699999992976, + 0.10366800000008425, + 0.10144999999999982 + ], + "multiFilter": [ + 0.511620999999991, + 0.514688000000092, + 0.5310279999999921, + 0.5933840000000146, + 0.5180609999999888, + 0.45905599999991864, + 0.5169710000000123, + 0.460301999999956, + 0.4750259999999571, + 0.4633089999999811, + 0.4624900000000025, + 0.44945099999995364, + 0.4476789999999937, + 0.4519040000000132, + 0.38794899999993504 + ], + "distinctLow": [ + 0.35834299999999075, + 0.3819620000000441, + 0.3781189999999697, + 0.38720200000000204, + 0.39595199999996566, + 0.37376400000005106, + 0.36542599999995673, + 0.36451399999998557, + 0.36646699999994325, + 0.3680289999999786, + 0.35488199999997505, + 0.34765199999992547, + 0.3464480000000094, + 0.3626570000000129, + 0.35277400000006764 + ], + "distinctHigh": [ + 2.025788999999918, + 2.7809069999999565, + 1.9705249999999523, + 2.6807919999999967, + 2.722497999999973, + 2.473942999999963, + 2.508880999999974, + 2.4938600000000406, + 2.519098999999983, + 2.771641000000045, + 2.4343079999999873, + 2.4948229999999967, + 2.50362999999993, + 2.806024999999977, + 2.6265750000000025 + ], + "aggregate": [ + 0.02621707812499885, + 0.023031820312500173, + 0.023025171875000083, + 0.022971921874999524, + 0.023400210937500887, + 0.022944835937501296, + 0.022947343749999405, + 0.02273900781250049, + 0.02227757812499931, + 0.0224107109374998, + 0.022360374999999877, + 0.022322117187499657, + 0.022966609374998725, + 0.02364342187500057, + 0.024136593750000657, + 0.023421968750000133, + 0.0230253984375004, + 0.02299870312499941, + 0.023046054687501538, + 0.02295142968749886, + 0.02308485156249951, + 0.02470503906249988, + 0.02264628125000101, + 0.022361804687500708, + 0.022299585937501476, + 0.022410648437499958, + 0.02236310937500008, + 0.02260195312499924, + 0.022362273437499525, + 0.022934476562500805, + 0.022660976562500323, + 0.022350539062498953, + 0.022916242187500657, + 0.0246739140625003, + 0.023174046875000798, + 0.028150132812498896, + 0.02345910937500051, + 0.02302036718749889, + 0.024018421875000584, + 0.022839718750001126, + 0.022877320312501226, + 0.022631078125000315, + 0.026232609374998717, + 0.02314610156249941, + 0.022982664062499936, + 0.023027257812499258, + 0.02303542187500085, + 0.023052492187499496, + 0.023412328124999604, + 0.024094234374999246, + 0.02307567187500048, + 0.023005593749999775, + 0.022976429687501465, + 0.024088187500000302, + 0.022845914062498807, + 0.023600484374998842, + 0.02301540624999987, + 0.02395806250000021, + 0.023613296875000245, + 0.024602250000000936, + 0.024196203125001148, + 0.02369301562500148, + 0.02368421874999882, + 0.02360412500000031, + 0.023736468750000128, + 0.024023429687499487, + 0.024995414062500387, + 0.023006703125000527, + 0.020848835937499643, + 0.019236007812500233, + 0.018788695312499826, + 0.01741685937500037, + 0.017274976562498878, + 0.017164226562499607, + 0.017435289062499137, + 0.017799171874999686, + 0.018479992187501182, + 0.018646289062498766, + 0.019095999999999336, + 0.01962503906250035, + 0.018287414062498897, + 0.01764364843750066, + 0.01801255468750007, + 0.019828140625000046, + 0.02091993750000043, + 0.020724164062499995, + 0.01849483593750101, + 0.017663593750000928, + 0.01702168749999977, + 0.017267367187500327, + 0.016817351562501415, + 0.018158031250001372, + 0.0185157578124997, + 0.017976148437499617, + 0.018100195312500844, + 0.01829221875000009, + 0.018799624999999764, + 0.022043695312500944, + 0.020660914062499813, + 0.019170234375000206, + 0.017946234374999648, + 0.017130406250000618, + 0.017860867187499352, + 0.016926773437500486, + 0.019231109374999278, + 0.0182709140624997, + 0.01870546875000123, + 0.019660359374999103, + 0.018575093749999994, + 0.017986820312501095, + 0.01813618749999968, + 0.020161124999999558, + 0.020944382812499995, + 0.02109482812499941, + 0.021663226562500526, + 0.021704406250000474, + 0.02221258593750086, + 0.02241874218750084, + 0.022349890624999702, + 0.02313742968749999, + 0.024273859374998707, + 0.023175460937499892, + 0.022923835937501025, + 0.02316568749999881, + 0.022992132812499122, + 0.025572671875000452, + 0.023071382812499763, + 0.02299113281249987, + 0.02525950781249975, + 0.02268339843749878, + 0.022811476562500488, + 0.023262054687499756, + 0.03343360156249986, + 0.023182187499999785, + 0.023078843749999578, + 0.022925640624999133, + 0.02365766406249925, + 0.022382679687499518, + 0.02229794531250029, + 0.022306820312500975, + 0.021769171874998605, + 0.021820734374999873, + 0.022255859374999076, + 0.0233227421874993, + 0.022349515624998872, + 0.02235582031249983, + 0.022373828124999662, + 0.022926210937500358, + 0.023494093749999223, + 0.022378226562500103, + 0.021685781249999536, + 0.020143812500000635, + 0.018930992187499385, + 0.017932304687500178, + 0.017056460937499907, + 0.017113085937500827, + 0.02004517968750008, + 0.018670328125001134, + 0.018109367187499004, + 0.0171952265624995, + 0.016833640625000257, + 0.01715298437499868, + 0.01804983593750009, + 0.01767660937500004, + 0.01862545312499897, + 0.018771734374999127, + 0.017352374999999753, + 0.016720171875000744, + 0.03272624218750053, + 0.018054992187501284, + 0.018712304687500847, + 0.01815117968750002, + 0.01830665625000094, + 0.01829853125000014, + 0.01836700781249867, + 0.01902263281249894, + 0.019272437500001516, + 0.018789921874999393, + 0.01841136718750036, + 0.01870964062499958, + 0.017500367187500032, + 0.017404945312499365, + 0.017993390624999606, + 0.01889642968750138, + 0.019308085937499442, + 0.018914828125000227, + 0.019433109375000868, + 0.01947234374999951, + 0.019247468750000607, + 0.018928289062499104, + 0.018921515625001106, + 0.018982882812499824, + 0.01908128125000097, + 0.01881831249999877, + 0.01886340625000038, + 0.01896952343750158, + 0.018879851562500605, + 0.019235031250000034, + 0.01919392187499902, + 0.019139234375000314 + ] + }, + "100000": { + "ingest": [ + 136.9717639999999, + 126.37608999999975, + 132.57092299999977, + 145.05077900000015, + 124.03437899999972, + 111.53873200000044, + 120.85097600000017 + ], + "windowRead": [ + 0.008175281250004218, + 0.008166562500008467, + 0.007644031250009675, + 0.007630999999989285, + 0.007530750000000808, + 0.007983874999993645, + 0.008089312500004553, + 0.007914562499991007, + 0.010046250000002033, + 0.008279812500006756, + 0.008097781250000935, + 0.00837115624999285, + 0.00850028124999369, + 0.008406937499998435, + 0.008219437500002869, + 0.00818443750000597, + 0.00802299999999434, + 0.00773806249999609, + 0.0076245312500020646, + 0.007501125000004549, + 0.007727249999987862, + 0.007491406250011323, + 0.007461093749995484, + 0.007368968750000704, + 0.0077233125000049085, + 0.00714396875000034, + 0.00754168750000872, + 0.007476281250006878, + 0.0071465000000046075, + 0.007289812499990944, + 0.007551843750007947, + 0.007481749999996623, + 0.00748315624998952, + 0.007455718749994844, + 0.007135093749994326, + 0.0071003125000004275, + 0.006938468749993376, + 0.007399031250002963, + 0.007402718749986548, + 0.009293624999997974, + 0.007451875000000996, + 0.007171624999998016, + 0.006947468750013286, + 0.007102093750006588, + 0.007729749999995761, + 0.007094562500000734, + 0.007287624999989362, + 0.007230281249988479, + 0.007206062500003441, + 0.0071313437500037935, + 0.00755893749999359, + 0.007574812499996142, + 0.0071144062500110294, + 0.00732309375000284, + 0.007904281249992096, + 0.007147843750004768, + 0.007301562500003911, + 0.007369906250005442, + 0.007152906249999091, + 0.007109281249995547, + 0.007036437500005377, + 0.007122249999994779, + 0.0074358749999987594, + 0.00699646875000326, + 0.007109437500005811, + 0.00703053124999542, + 0.007026187500002834, + 0.007310281249999662, + 0.007011187499998073, + 0.007292031249988895, + 0.007423812500007898, + 0.007478468749994249, + 0.007410281250002981, + 0.007347187500002406, + 0.007255250000000046, + 0.007400187499996491, + 0.007426812500000324, + 0.0071031562499968, + 0.007634812500000976, + 0.008247531250006546, + 0.007980093749992534, + 0.007770093750011142, + 0.008523031250007307, + 0.00850928124999939, + 0.008107000000009634, + 0.008509124999989126, + 0.00904375000000357, + 0.012042968750009209, + 0.008413250000003814, + 0.008874812499996665, + 0.008714874999995459, + 0.008012906250002061, + 0.008076843749989848, + 0.007830031249994818, + 0.00860231250000254, + 0.010947375000000648, + 0.007922750000005863, + 0.007674687499999777, + 0.0078039062500039336, + 0.007622687500003167, + 0.010977781250005592, + 0.00769681250000076, + 0.007631156249999549, + 0.0075760312500108284, + 0.007501187499997286, + 0.007411062499997456, + 0.007275375000006079, + 0.007251468749998935, + 0.007208343750008339, + 0.007135281250000958, + 0.007425031250008374, + 0.0331718125000009, + 0.008264156249992993, + 0.007836656250006513, + 0.045373062499990624, + 0.00774859374999437, + 0.007761500000000865, + 0.0077490624999967395, + 0.007947093750004797, + 0.007783093750006742, + 0.007739749999998935, + 0.007427968749993852, + 0.007786843749997274, + 0.007561125000009383, + 0.0077491562500000555, + 0.007221375000000307, + 0.0074632500000006985, + 0.007584718749996, + 0.007713156250005682, + 0.006968343750003214, + 0.007430781249993856, + 0.007111374999993814, + 0.006985406249995663, + 0.007041843750002386, + 0.007249312499993721, + 0.0071035312500100645, + 0.00728409375000183, + 0.007654343750004955, + 0.007651249999995002, + 0.007770937499998354, + 0.007737968750006985, + 0.008092250000004242, + 0.007583750000009104, + 0.007947125000001165, + 0.007463937499991857, + 0.0076584062500018035, + 0.007481468750000886, + 0.007586625000001845, + 0.0074397187500068185, + 0.0074613749999912216, + 0.0074060937499922375, + 0.00778043750000279, + 0.0077788437500032614, + 0.007995499999992717, + 0.008032624999998461, + 0.008266624999990313, + 0.008162937500003409, + 0.007982374999997432, + 0.008073499999994738, + 0.008425968749989465, + 0.007991437499995868, + 0.00800774999999021, + 0.00789456249999887, + 0.007887062500003594, + 0.007679312500002311, + 0.007766281249999452, + 0.00787840625000058, + 0.019410312499999804, + 0.014440187499999979, + 0.008749125000008462, + 0.008306687499995746, + 0.008927437499991697, + 0.008620312499999727, + 0.008139406250009529, + 0.008093593750004402, + 0.007776750000004995, + 0.0073964687499881165, + 0.007671343750004667, + 0.0076237187499970105, + 0.007500187499999811, + 0.007379093749989352, + 0.007122187500002042, + 0.0072948437500031105, + 0.007214437499996507, + 0.007529000000005226, + 0.00733137499999259, + 0.0072196874999974625, + 0.007242562500010763, + 0.007145906250002554, + 0.006954937500012193, + 0.006495499999999765, + 0.006876562499996908, + 0.006690718749993607, + 0.006667031250003674, + 0.007107312499996965, + 0.006919968749997452, + 0.006652374999987387, + 0.006641500000000633, + 0.0073792812500101945, + 0.006716749999995386, + 0.006628218750009296, + 0.006703281249997417, + 0.006784874999993917, + 0.006356656250005699, + 0.007419249999998101, + 0.007246781250003664, + 0.006527499999990027, + 0.006728812500000458, + 0.006836031250003316, + 0.0065061250000013615, + 0.006459562499998128, + 0.006738843750000001, + 0.006737812500006157, + 0.006559937500000501, + 0.006858156250004299, + 0.006556750000001443, + 0.006889687500006403, + 0.00660840625000958, + 0.006483437499994693, + 0.006244687500000623, + 0.006319218749993638, + 0.0069161249999893926, + 0.008934593749998498, + 0.007811500000002525, + 0.006807562500000586, + 0.00675300000000334, + 0.006650437499999384, + 0.006709281249996479, + 0.006744343750000326, + 0.006611125000006268, + 0.007468906249997076, + 0.006239218749996667, + 0.006151406249998104, + 0.006267000000008238, + 0.006644625000006954, + 0.0065631875000065065, + 0.006535343750002198, + 0.006258593750004593, + 0.006311218749999625, + 0.006598187500003405, + 0.006481093749997058, + 0.006309874999999465, + 0.006395843750013341, + 0.00661040625000453, + 0.006593187500001818, + 0.006841906250002694, + 0.006978156249999756, + 0.007804468749995408, + 0.006415062499996793, + 0.006891937499986511, + 0.006506000000001677, + 0.006380937499997685, + 0.006425375000006284, + 0.006829343749998884, + 0.006631968749999828, + 0.006355031249995591, + 0.006516968750005958, + 0.0064070000000100435, + 0.006699593749999622, + 0.006705718750012579, + 0.007102031249999641, + 0.006630281249996983, + 0.006349718750001898, + 0.006677249999995638, + 0.00740471875000992, + 0.006454656249999857, + 0.006315999999998212, + 0.006317187500002319, + 0.006484906250008748, + 0.006654218750000496, + 0.0064381874999952515, + 0.01210437500000694, + 0.007345281250010771, + 0.007387718749995997, + 0.007264249999991534, + 0.008035281250002413, + 0.008820312500006366, + 0.007679656249990785, + 0.007889281250001545, + 0.00794812499999864, + 0.007807749999997782, + 0.0077190312500050595, + 0.007915124999996692, + 0.007469281249996129, + 0.0067430000000001655, + 0.007017593749992557, + 0.006654093750000811, + 0.006805562499991424, + 0.007341343749999396, + 0.006985093750003557, + 0.00693750000000648, + 0.00705631249999783, + 0.007461437499998169, + 0.00701821875000519, + 0.007103781249995222, + 0.006934187499993527, + 0.0069289687500031505, + 0.01296209375000501, + 0.00729709374999743, + 0.008189281249997293 + ], + "edit": [ + 7.347005000000081, + 5.5419380000003, + 4.545470000000023, + 4.430695000000014, + 4.8031230000001415, + 6.6070370000002185, + 8.58655200000021, + 7.08549499999981, + 6.732490000000325, + 6.493099000000257, + 7.837879000000157, + 3.838995000000068, + 3.6904739999999947, + 3.6033659999998235, + 3.529833999999937 + ], + "sort": [ + 2.3318199999998797, + 1.968880000000354, + 2.0718000000001666, + 2.423682000000099, + 2.7376790000002984, + 2.8666259999999966, + 2.483071999999993, + 2.0913510000000315, + 2.1183999999998377, + 2.1153150000000096, + 2.027027000000089, + 2.0330149999999776, + 1.9602469999999812, + 2.038789000000179, + 2.079827000000023 + ], + "filter": [ + 0.3316829999998845, + 0.32625000000007276, + 0.34146599999985483, + 0.32165100000020175, + 0.32139299999971627, + 0.3304880000000594, + 0.3245190000002367, + 0.33857999999963795, + 0.3391969999997855, + 0.3432980000002317, + 0.3688959999999497, + 0.36312599999973827, + 0.35259499999983746, + 0.3545939999999064, + 0.3825400000000627 + ], + "multiFilter": [ + 5.0243389999996, + 3.9406989999997677, + 3.325250000000324, + 3.455577999999605, + 3.441538000000037, + 4.655490999999984, + 5.561733000000004, + 3.550491999999849, + 3.549326999999721, + 3.527929999999742, + 3.4480509999998503, + 3.464262000000417, + 3.6090680000002067, + 3.357793000000129, + 3.281564000000344 + ], + "distinctLow": [ + 4.1037750000000415, + 3.9103049999998802, + 3.8726299999998446, + 4.194746000000123, + 4.269706000000042, + 4.093394000000444, + 3.9067330000002585, + 3.7080610000002707, + 4.1233360000001085, + 4.42772100000002, + 4.581372999999985, + 4.588100999999824, + 4.9316289999997025, + 4.727753000000121, + 4.648748000000069 + ], + "distinctHigh": [ + 26.571297999999842, + 26.230383999999958, + 22.966161999999713, + 20.900023999999576, + 25.10918300000003, + 24.090284000000338, + 24.73607800000036, + 28.92634599999974, + 22.102903999999853, + 21.747073999999884, + 20.873667999999725, + 21.006945000000087, + 22.312975999999708, + 21.71900800000003, + 21.426698000000215 + ], + "aggregate": [ + 0.23474799999985407, + 0.3314430000000357, + 0.2713600000001861, + 0.23467600000003586, + 0.22414299999991272, + 0.22396799999978612, + 0.22535699999980352, + 0.23068999999986772, + 0.22421399999984715, + 0.22400000000016007, + 0.22400700000025608, + 0.22383600000011938, + 0.22953199999983553, + 0.2240220000003319, + 0.22370900000032634, + 0.22418999999990774, + 0.22793799999999464, + 0.22444300000006479, + 0.2239119999999275, + 0.22404899999992267, + 0.22905200000013792, + 0.22397999999975582, + 0.22382999999990716, + 0.22398199999997814, + 0.22418000000016036, + 0.2270579999999427, + 0.22397399999999834, + 0.22447599999986778, + 0.22396400000025096, + 0.23012599999992744, + 0.22414900000012494, + 0.22525599999971746, + 0.22939599999972415, + 0.2239519999998265, + 0.22980099999995218, + 0.22417399999994814, + 0.2280559999999241, + 0.22392300000001342, + 0.22718900000018039, + 0.22376900000017486, + 0.22466499999973166, + 0.22397099999989223, + 0.22396300000036717, + 0.2260839999999007, + 0.22459800000024188, + 0.22475699999995413, + 0.2236019999995733, + 0.22688800000014453, + 0.22381799999993746, + 0.22406000000000859, + 0.22379499999988184, + 0.22844000000031883, + 0.2239289999997709, + 0.22374600000011924, + 0.22346999999990658, + 0.2237159999999676, + 0.22809800000004543, + 0.22385499999973035, + 0.22382999999990716, + 0.2240060000003723, + 0.22325000000000728, + 0.21799400000008973, + 0.2180950000001758, + 0.21778900000026624, + 0.21744500000022526, + 0.22036499999967418, + 0.21777300000030664, + 0.21763499999997293, + 0.21767599999975573, + 0.22057799999993222, + 0.22164699999984805, + 0.2350179999998545, + 0.2578480000001946, + 0.26595799999995506, + 0.23367400000006455, + 0.22340799999983574, + 0.2180049999997209, + 0.21844499999997424, + 0.22083299999985684, + 0.21803700000009485, + 0.2221309999999903, + 0.2180900000003021, + 0.21765499999992244, + 0.2207170000001497, + 0.21900899999991452, + 0.22342200000002777, + 0.21787799999992785, + 0.22234900000012203, + 0.21778100000028644, + 0.221712000000025, + 0.2237849999996797, + 0.2238800000000083, + 0.22628200000008292, + 0.22410900000022593, + 0.22385299999996278, + 0.22434199999997873, + 0.22756000000026688, + 0.22380799999973533, + 0.22403899999972055, + 0.22397899999987203, + 0.2282909999998992, + 0.2262749999999869, + 0.22420800000008967, + 0.2241030000000137, + 0.2293790000003355, + 0.22637299999996685, + 0.22386900000037713, + 0.2240310000001955, + 0.22381999999970503, + 0.2271910000004027, + 0.2299089999996795, + 0.22651900000028036, + 0.22425999999995838, + 0.22405499999968015, + 0.22711699999990742, + 0.22519800000009127, + 0.22460000000000946, + 0.2238560000000689, + 0.22760999999991327, + 0.22732200000018565, + 0.22404299999971045, + 0.22416599999996834, + 0.2237089999998716, + 0.22957099999985076, + 0.2179380000002311, + 0.21794099999988248, + 0.21791999999959444, + 0.2213259999998627, + 0.21780300000000352, + 0.21766500000012456, + 0.2286619999999857, + 0.21813399999973626, + 0.22117299999990792, + 0.21809200000006967, + 0.21781499999997322, + 0.21811699999989287, + 0.2276859999997214, + 0.22386899999992238, + 0.22415399999999863, + 0.22396499999968, + 0.22383200000012948, + 0.2268100000001141, + 0.24158299999999144, + 0.23806800000011208, + 0.2826169999998456, + 0.32010799999989104, + 0.22822500000029322, + 0.22410200000012992, + 0.22396400000025096, + 0.22910300000012285, + 0.22399999999970532, + 0.2238830000001144, + 0.22399099999984173, + 0.22851499999978842, + 0.2240620000002309, + 0.2240540000002511, + 0.22377199999982622, + 0.22396600000001854, + 0.22791199999983291, + 0.22424000000000888, + 0.22431600000027174, + 0.2237359999999171, + 0.22695199999998295, + 0.223852000000079, + 0.22393099999999322, + 0.22398299999986193, + 0.2241329999997106, + 0.22716100000025108, + 0.22387700000035693, + 0.224713999999949, + 0.22922299999981988, + 0.2284349999999904, + 0.22413000000005923, + 0.22389800000019022, + 0.22480300000006537, + 0.23372599999993326, + 0.22392600000011953, + 0.22477000000026237, + 0.2238110000002962, + 0.2242870000000039, + 0.22813900000028298, + 0.22967000000016924, + 0.2241149999999834, + 0.22394299999996292, + 0.23715100000026723, + 0.2322039999999106, + 0.22425999999995838, + 0.22470900000007532, + 0.22378600000001825, + 0.23658900000009453, + 0.2238839999999982, + 0.22589500000003682, + 0.22411000000010972, + 0.23506900000029418, + 0.23390299999982744, + 0.2240190000002258, + 0.22372299999960887, + 0.22731699999985722, + 0.22379599999976563, + 0.2240780000001905 + ] + }, + "500000": { + "ingest": [ + 639.5513219999993, + 591.624667, + 579.6753930000004 + ], + "windowRead": [ + 0.011720062500018003, + 0.011232187499985002, + 0.011580156250005302, + 0.011602812500001392, + 0.012021031249986436, + 0.011673343750004506, + 0.011518937499999993, + 0.011444218750000346, + 0.011699875000005022, + 0.011134468749986581, + 0.011533874999997806, + 0.011373593749993915, + 0.011220624999992879, + 0.011160000000018044, + 0.011553812500011418, + 0.01144121875000792, + 0.011803156249982294, + 0.011274937500019178, + 0.011620499999992262, + 0.011347187500007294, + 0.011499968750001699, + 0.01146293749999927, + 0.011275562500003389, + 0.017481156249999685, + 0.011005968749998374, + 0.010959062500006667, + 0.011004281249995529, + 0.010913218750005171, + 0.010998281250010677, + 0.010858687499990083, + 0.010985374999989972, + 0.011374656249984127, + 0.011353156250009988, + 0.011448781250010143, + 0.011554312500010155, + 0.011464437499995483, + 0.01111409374999539, + 0.011660843750007643, + 0.0131701562499984, + 0.01823209374998669, + 0.012044656249997843, + 0.011368437499982065, + 0.011448656249996247, + 0.011266718749993743, + 0.011173156250009697, + 0.011812281250001888, + 0.01250181249997695, + 0.012240531250000686, + 0.011785000000003265, + 0.011509718750005504, + 0.011618406250022417, + 0.011630374999981541, + 0.011447906249998141, + 0.01140468750000423, + 0.011000249999995049, + 0.010985250000004498, + 0.010596687500026292, + 0.012045656249995318, + 0.015774843749994716, + 0.01873421874998371, + 0.01834462499999745, + 0.018415124999989985, + 0.01946290624999847, + 0.0208880625000063, + 0.011208468749998701, + 0.011539812500018343, + 0.01607899999999063, + 0.010240062499974556, + 0.014310875000006718, + 0.016270718750007518, + 0.01628884375000439, + 0.016216093749989113, + 0.01715668750000532, + 0.015204343749985583, + 0.015985624999984793, + 0.014774343749991203, + 0.014939781249978523, + 0.01444018750001419, + 0.017717624999988857, + 0.016033374999977923, + 0.016792687499986414, + 0.009535999999997102, + 0.009749343750002026, + 0.009187156249993222, + 0.00901703124998221, + 0.01361606250000591, + 0.00906259375000218, + 0.008854281250023632, + 0.008853906250010368, + 0.009121124999978747, + 0.008715468750011723, + 0.00896393749999902, + 0.009319281249986489, + 0.008477031250009759, + 0.01308409375002384, + 0.01604446875001031, + 0.01608953125000312, + 0.01597384375000388, + 0.015654874999995627, + 0.016810656249987233, + 0.01668156249999697, + 0.017569531249989723, + 0.01841618750000862, + 0.02119653125001264, + 0.02131715625000652, + 0.011325687500004733, + 0.01139168750000863, + 0.010933937499999047, + 0.010882062500002121, + 0.009995187500010161, + 0.009970531250019121, + 0.009785531250003032, + 0.010274468749997823, + 0.009832999999986214, + 0.009746874999990496, + 0.009653468750002503, + 0.009455937499978972, + 0.017285312499979, + 0.013367281249998086, + 0.013741750000008324, + 0.014555593750003482, + 0.010144218749985612, + 0.009425187499999765, + 0.009381187499997168, + 0.009685781249999081, + 0.00950581250000937, + 0.010215937499992833, + 0.009980718750000506, + 0.009824218749997726, + 0.009751749999992398, + 0.009403718750007783, + 0.009252093749978485, + 0.009654781249992084, + 0.009760656250023203, + 0.009517687499993599, + 0.019115031250009906, + 0.014361531249988957, + 0.014812562499997739, + 0.015253468749989452, + 0.017156718749987476, + 0.016925812500005577, + 0.012475500000022066, + 0.01012412500000437, + 0.010443093750012622, + 0.010545531249988471, + 0.009997031250009059, + 0.010523406250001699, + 0.010052906250024307, + 0.010957312499982663, + 0.011303906250020646, + 0.011377124999995658, + 0.009759406249997937, + 0.0094235312500075, + 0.009598343750013782, + 0.009411124999985532, + 0.00922443749999502, + 0.00930109374999688, + 0.01193418750000319, + 0.009130906249993131, + 0.009072093750006616, + 0.014545999999995729, + 0.010402593750001188, + 0.009996000000001004, + 0.009737187500007849, + 0.009388562499992759, + 0.009723906250002301, + 0.009114906250005106, + 0.009132906250016504, + 0.0100785624999844, + 0.01344612500000153, + 0.013182437500006472, + 0.019161437500002876, + 0.01691387500000019, + 0.013569343749992413, + 0.01467221875000746, + 0.014604375000004666, + 0.015507874999997284, + 0.05015556250000941, + 0.016095187499985286, + 0.014660906250014705, + 0.012670093750017486, + 0.012263281250000091, + 0.012083562500009748, + 0.011906343749984671, + 0.012266937499987307, + 0.011883656250006425, + 0.011757906250011274, + 0.011862749999977495, + 0.011636718749997499, + 0.011924031249975542, + 0.012862093750015902, + 0.012437874999989162, + 0.012284406249989388, + 0.011910781249980573, + 0.011750687500011736, + 0.011452593750021833, + 0.01179475000000707, + 0.01216353124999614, + 0.011692562500002168, + 0.01172681250000096, + 0.021115781250017562, + 0.016704937499980588, + 0.016412218750019747, + 0.01625090624997938, + 0.016003999999981033, + 0.016636656250000215, + 0.01716003125000043, + 0.023151062500005537, + 0.020553187500013337, + 0.02462231249998581, + 0.020862000000022363, + 0.020541687499985528, + 0.017854468750016395, + 0.018318968749980513, + 0.016784343750003927, + 0.013780249999996386, + 0.012722562499988044, + 0.011632874999975229, + 0.01230184374998089, + 0.01256618749999916, + 0.012256812500027081, + 0.014373093750009502, + 0.023222562499995547, + 0.011362374999976055, + 0.011311343749980551, + 0.01087762500003464, + 0.011218906250007876, + 0.011057906250016458, + 0.010898031250007989, + 0.010694593749974501, + 0.01112018750001198, + 0.0102019062500176, + 0.010253750000003947, + 0.009698531250023734, + 0.009405093749990101, + 0.010659343749978234, + 0.00938856250002118, + 0.009351312499973119, + 0.01479643750002424, + 0.010964500000000044, + 0.010556250000036016, + 0.010548218749988791, + 0.010175562500023716, + 0.010383687500052474, + 0.011064968750019943, + 0.01147906249997277, + 0.010804875000019365, + 0.009780687499983287, + 0.00953318750003973, + 0.009746937499983233, + 0.010797874999980195, + 0.009698281249995944, + 0.00982165624998288, + 0.009964187499974742, + 0.009985749999998461, + 0.010283781249995627, + 0.010141437500010397, + 0.010124750000045424, + 0.010016187499957141, + 0.010557937500038861, + 0.00950665624998237, + 0.009929843750001055, + 0.009918593750001037, + 0.00995687500000031, + 0.009194843749980919, + 0.014112031250022028, + 0.008931156250014283, + 0.008874812500039297, + 0.009467062499993517, + 0.009837312499996642, + 0.00909234374995549, + 0.009070500000007087, + 0.009510125000019798, + 0.009455500000001393, + 0.009456875000012133, + 0.01029849999997623, + 0.009754593750017193, + 0.009306156249976993, + 0.00930737499999168, + 0.00872093750001568, + 0.00884268750002093, + 0.008635437500004173, + 0.00871756250000999, + 0.008500437500003954, + 0.01037431250000509, + 0.008586750000006305, + 0.0090787187500041, + 0.008807187499996871, + 0.009757968750022883, + 0.008998000000019601, + 0.00905918749998591, + 0.008571374999974068, + 0.00880428124997934, + 0.008674812499975815, + 0.013321906250041593, + 0.009069874999966032, + 0.00885678125001732, + 0.008694781250028427, + 0.008830124999974487, + 0.008882062499992571 + ], + "edit": [ + 4.176833999999872, + 3.551712000000407, + 3.743771999999808, + 3.9430170000014186, + 3.7888499999990017 + ], + "sort": [ + 11.996328999999605, + 11.32650300000023, + 15.178616000001057, + 12.078230000000985, + 12.381623999999647 + ], + "filter": [ + 1.7472799999995914, + 1.6848279999994702, + 1.6925480000008974, + 1.7936239999999088, + 1.7608370000016293 + ], + "multiFilter": [ + 17.739172999999937, + 23.531198999999106, + 22.64347099999941, + 23.5984669999998, + 20.056321000000025 + ], + "distinctLow": [ + 20.8200680000009, + 21.47629700000107, + 18.10827700000118, + 17.73762600000009, + 19.850178000000597 + ], + "distinctHigh": [ + 126.6482300000007, + 110.98061299999972, + 133.72855699999855, + 126.53358300000036, + 126.7292469999993 + ], + "aggregate": [ + 0.8701340000006894, + 0.8349610000004759, + 0.8323990000008052, + 0.8256629999996221, + 0.8389659999993455, + 0.8752559999993537, + 0.825369000000137, + 0.8629500000006374, + 0.9602689999992435, + 0.8678060000002006, + 0.8635299999987183, + 0.8441710000006424, + 0.8435559999998077, + 0.8678979999986041, + 0.892308000000412, + 0.895991999999751, + 0.87724100000014, + 0.8746850000006816, + 0.8783030000013241, + 0.8793499999992491, + 0.8883789999999863, + 0.8955070000010892, + 0.9320069999994303, + 0.9687979999998788, + 0.9939910000011878, + 0.9603549999992538, + 0.9399960000009742, + 0.9476230000000214, + 0.9299629999986792, + 0.9437649999999849, + 0.9414170000000013, + 0.9153690000002825, + 0.9191589999991265, + 0.9209019999998418, + 0.922787999999855, + 0.9208749999997963, + 0.9326520000013261, + 0.9445080000004964, + 0.9297829999995884, + 0.9395160000003671, + 0.9383680000009917, + 0.9608809999990626, + 0.9506980000005569, + 0.9420030000001134, + 0.9604159999998956, + 0.9231090000012045, + 0.9176919999990787, + 0.9814879999994446, + 0.9397179999996297, + 0.9394019999999728, + 0.9393060000002151, + 0.9392189999998664, + 0.9426920000005339, + 0.9439719999991212, + 0.938533999998981, + 0.9390750000002299, + 0.9381949999988137, + 0.9330119999995077, + 0.9532240000007732, + 0.9237720000000991, + 0.9491170000001148, + 0.940059000000474, + 0.9895909999995638, + 0.997972999999547, + 0.9400119999991148, + 0.9513040000001638, + 0.9448510000001988, + 0.9379599999992934, + 0.9394679999986693, + 0.9270010000000184, + 0.9184879999993427, + 0.9253040000003239, + 0.9241060000003927, + 0.9157889999987674, + 0.9180840000008175, + 0.9262629999993806, + 0.9324859999996988, + 0.9427139999988867, + 0.9193500000001222, + 0.9518380000008619, + 0.9410060000009253, + 0.9744179999997868, + 0.9386599999997998, + 0.9721760000011272, + 0.9383670000006532, + 0.9434239999991405, + 0.9379900000003545, + 0.938626999999542, + 0.9377430000004097, + 0.946313000000373, + 0.9370840000010503, + 0.9604330000001937, + 0.9381240000002435, + 0.9401340000003984, + 1.0736289999986184, + 1.2380040000007284, + 0.9919429999990825, + 0.9472709999990911, + 0.9629449999993085, + 0.9410799999986921, + 0.9468649999998888, + 0.9419090000010328, + 0.9397509999998874, + 0.9404360000007728, + 0.9386999999987893, + 0.9179080000012618, + 0.9146900000014284, + 0.944444000000658, + 0.9577919999992446, + 0.9185929999985092, + 0.9331849999998667, + 0.9625859999996464, + 0.942166000000725, + 0.9486199999992095, + 0.9625960000012128, + 0.9553459999988263, + 0.9495040000001609, + 0.9573049999999057, + 0.9656820000000153, + 0.9622110000000248, + 0.9628799999991315, + 0.93870699999934, + 0.9379680000001827, + 0.938401999999769, + 0.939118000000235, + 0.9355689999993047, + 0.9376639999991312, + 0.9395379999987199, + 0.9394379999994271, + 0.9480619999994815, + 0.9384659999996074, + 0.9450039999992441, + 0.96604600000137, + 0.9495150000002468, + 0.9410860000007233, + 0.9391620000005787, + 0.9387619999997696, + 0.9407709999995859, + 0.9411820000004809, + 0.9372780000012426, + 0.9375579999996262, + 0.9406239999989339, + 0.935287000000244, + 0.9401450000004843, + 0.9650490000003629, + 0.9391099999993457, + 0.941649000000325, + 0.9213740000013786, + 0.916574999999284, + 0.9462249999996857, + 0.9513020000013057, + 0.9439099999999598, + 0.9535599999999249, + 0.9466620000002877, + 0.9598519999999553, + 0.9188429999994696, + 0.9212660000011965, + 0.9298570000009931, + 0.9256420000001526, + 0.914041999998517, + 0.9183389999998326, + 0.9317970000010973, + 0.9206560000002355, + 0.9725640000015119, + 0.9788580000004004, + 0.9555309999996098, + 0.9394370000009076, + 0.9460440000002563, + 0.9416330000003654, + 0.9659929999997985, + 0.9490379999988363, + 0.9695080000001326, + 0.9635969999999361, + 0.9603850000003149, + 0.9676949999993667, + 0.9513559999995778, + 0.9384549999995215, + 0.9389439999995375, + 0.935830000000351, + 0.9387859999987995, + 0.9811129999998229, + 0.9592389999997977, + 0.9474540000010165, + 0.9507709999998042, + 0.9549970000007306, + 0.9470389999987674, + 0.9397239999998419, + 0.9277180000008229, + 0.9175530000011349, + 0.9166100000002189, + 0.9295810000003257, + 0.9168190000000322, + 0.917686999999205, + 0.9160069999998086, + 0.934638000000632, + 0.9388200000012148, + 0.9159989999989193, + 0.9382710000008956, + 0.9420819999995729, + 0.9820839999993041 + ] + }, + "1000000": { + "ingest": [ + 1226.4468190000007, + 1210.153425999999, + 1188.949262 + ], + "windowRead": [ + 0.010579249999977947, + 0.010613812499968844, + 0.010738624999930835, + 0.010898312499989515, + 0.010295281250023436, + 0.010582968750100008, + 0.010144499999910295, + 0.010187468749904838, + 0.01058034375000716, + 0.010477343750039836, + 0.010035312500008331, + 0.01066206249993229, + 0.010322562499936794, + 0.013851468750090135, + 0.022052031250041182, + 0.022616062500105727, + 0.03301893749994633, + 0.02816909375007981, + 0.026201531250080734, + 0.020269281249966298, + 0.02028721875001338, + 0.014362312499997643, + 0.01492571874996429, + 0.014109406249986023, + 0.014574062499946194, + 0.013368624999998246, + 0.01363953124996442, + 0.013536093750076361, + 0.0132328749999715, + 0.013290343749986278, + 0.01317834374992799, + 0.013129499999990912, + 0.012735468749951906, + 0.012881093749911088, + 0.012639031249932486, + 0.01248634374996982, + 0.012220562499919652, + 0.012496343750058259, + 0.012253562500063708, + 0.012318531250002707, + 0.012211312500085114, + 0.012149968750009066, + 0.011910937499919783, + 0.011852687499981585, + 0.012206812499925945, + 0.011994031249969339, + 0.012795156250035689, + 0.012717999999949825, + 0.012648124999941501, + 0.013472593749952466, + 0.012524625000082779, + 0.012765531250011009, + 0.012551468749961714, + 0.01217940624997027, + 0.012857343749942629, + 0.012333031250022941, + 0.012302968749963838, + 0.012344718750000538, + 0.012382125000044653, + 0.012454281250029453, + 0.012070468750039254, + 0.012389187499934451, + 0.01213699999993878, + 0.011935562500070773, + 0.015663500000073327, + 0.01747040624991314, + 0.017467249999981505, + 0.017910812499962958, + 0.018021437500010506, + 0.018042968750023647, + 0.017864312500023516, + 0.01434034374995008, + 0.01213743750008689, + 0.013439093749980202, + 0.012452656250047767, + 0.012384624999981497, + 0.012549312500027554, + 0.011897937500066291, + 0.013750156250011969, + 0.013362874999984342, + 0.013819874999967396, + 0.013461187499956395, + 0.01370768749995932, + 0.013548187499964115, + 0.014276406250019136, + 0.013371218750080516, + 0.013240406250019987, + 0.013340968750071625, + 0.023925406249986736, + 0.01279965625008117, + 0.012702500000045802, + 0.012862312500033113, + 0.014031124999974054, + 0.01281153124989487, + 0.012942187500016189, + 0.013097093749934174, + 0.01266840624998622, + 0.012582843750010397, + 0.01239109375001135, + 0.014021781249994092, + 0.01209634375004498, + 0.01230818750002527, + 0.012011187499979314, + 0.012020562500083543, + 0.012176156250006898, + 0.01200743749996036, + 0.015368906250046166, + 0.01187856249998731, + 0.012033124999902611, + 0.012195906249985455, + 0.013154843749930478, + 0.013013499999942724, + 0.013112968749965148, + 0.013182562499991946, + 0.012941249999926185, + 0.012882031250001091, + 0.012885218749943306, + 0.012352968749951287, + 0.01309240625005259, + 0.013097687500021493, + 0.012631000000055792, + 0.019266499999957887, + 0.012725656250040629, + 0.012583843750007873, + 0.012635312500037799, + 0.012440031249980166, + 0.012644718750038919, + 0.01222778125008972, + 0.012586875000010878, + 0.013186718749921056, + 0.01268403124993256, + 0.01241078124996875, + 0.011863281249929969, + 0.012334031250020416, + 0.01209381249998387, + 0.012307250000048953, + 0.012027156250042026, + 0.011822062500073116, + 0.012095343750047505, + 0.011954031249956643, + 0.011753562499961845, + 0.01167159374995208, + 0.012785281249989566, + 0.013037406249964079, + 0.012758125000004839, + 0.012822437499949046, + 0.012572093750009117, + 0.01287134375002097, + 0.01822081249997609, + 0.018003874999976688, + 0.024268562499969448, + 0.01819459374996768, + 0.017983031249968917, + 0.027491781249977976, + 0.022795625000071595, + 0.022717781249980362, + 0.021449906249927153, + 0.021449687500080472, + 0.023764312500020424, + 0.012477875000058702, + 0.018834343749972504, + 0.011836593749990243, + 0.012496906250021311, + 0.011483750000024884, + 0.011247093749943815, + 0.012573250000059488, + 0.011099531250010841, + 0.011852156250029111, + 0.015518093749960826, + 0.013029468750005435, + 0.011071249999986321, + 0.01052293750001354, + 0.01142881249995753, + 0.011748843749955995, + 0.011528656249993219, + 0.012164750000010827, + 0.0110866250000754, + 0.010781718749967695, + 0.010690093749985863, + 0.010611781249963315, + 0.011255562499968619, + 0.011224312499962252, + 0.011143812499994965, + 0.010605281250036569, + 0.011138187500023378, + 0.011086374999990767, + 0.010896999999999935, + 0.010243687499951193, + 0.009552062500006286, + 0.01732375000005959, + 0.009899375000031796, + 0.00998940625004252, + 0.011149437499966552, + 0.012349093750003703, + 0.01177878124997278, + 0.010760624999988977, + 0.010516312500044478, + 0.010192625000058797, + 0.010756187499964653, + 0.009855656250010725, + 0.009990531250082313, + 0.011232968749936845, + 0.010124843749963475, + 0.010973437499956162, + 0.018023656249965825, + 0.01712353125003574, + 0.01740687500000604, + 0.01744312499999978, + 0.017578968750058266, + 0.01579700000002049, + 0.01043612499995561, + 0.010312937499975305, + 0.011023718750038825, + 0.011151781249964188, + 0.01158518750003168, + 0.010090125000033368, + 0.011388906250090258, + 0.009934093749961903, + 0.010075468749960237, + 0.009675718750031592, + 0.010043343749998712, + 0.009704343750058797, + 0.009795156249992942, + 0.017642343750026157, + 0.010379812499991203, + 0.010755468749948704, + 0.0123007812500191, + 0.01373787500006074, + 0.013898249999897416, + 0.011253312500002721, + 0.010648531250012638, + 0.010088593749969732, + 0.010235093749997759, + 0.010002531250052016, + 0.009959031249991313, + 0.010176968749988191, + 0.010496343749991865, + 0.010880312500034961, + 0.011590124999997897, + 0.011373062499956177, + 0.011559625000018059, + 0.011484562499958884, + 0.011009124999986852, + 0.011157374999925196, + 0.011257875000069362, + 0.012401031249964944, + 0.010607312500042099, + 0.011795750000032967, + 0.015055531249913656, + 0.011351500000046144, + 0.010791718749942447, + 0.010553500000014537, + 0.010667468750057196, + 0.013868125000044529, + 0.010746468749971427, + 0.010330374999966807, + 0.011143187500010754, + 0.011185687500073982, + 0.011162812499946995, + 0.012001062500075932, + 0.010057531250026841, + 0.010233437500005493, + 0.011180218750041604, + 0.010779281249938322, + 0.009385312500057807, + 0.010699406250068932, + 0.009378250000054322, + 0.009743281249939173, + 0.009669843749975371, + 0.013005937499997344, + 0.011989656249966174, + 0.01172896874993512, + 0.014056156249921514, + 0.014275312499989923, + 0.013317875000097956, + 0.013693499999931191, + 0.0134669374999703, + 0.013558968750089662, + 0.018637406249922606, + 0.022404656249932486, + 0.013596031250017404, + 0.013398937500028296, + 0.012798812500022905, + 0.01302318749992537, + 0.012436687499985055, + 0.012550531249985397, + 0.012746468749924134, + 0.011924874999976964, + 0.01180303124999682, + 0.011611656250011038, + 0.011814562499921522, + 0.01261571874999845, + 0.012014656250016742, + 0.01099859374994594, + 0.021206062500027656, + 0.011550093749974621, + 0.011316312499957348, + 0.010654468750090018, + 0.010951718749993233, + 0.011528374999898006 + ], + "edit": [ + 3.8136520000007295, + 3.8112550000005285, + 3.7000110000008135, + 4.63832199999888, + 4.688003999999637 + ], + "sort": [ + 24.911049000002095, + 26.785563999997976, + 24.076529999998456, + 31.975092999997287, + 25.263193000002502 + ], + "filter": [ + 2.9901170000011916, + 3.2440419999984442, + 3.4864290000004985, + 3.6388130000013916, + 4.80871400000251 + ], + "multiFilter": [ + 35.19802400000117, + 39.73620200000005, + 43.57800800000041, + 43.267079000001104, + 45.24278200000117 + ], + "distinctLow": [ + 39.81992999999784, + 45.757114, + 40.26951300000292, + 38.762407999998686, + 40.42042399999991 + ], + "distinctHigh": [ + 269.3866479999997, + 255.698042, + 289.4191750000027, + 292.95352999999886, + 261.79621100000077 + ], + "aggregate": [ + 2.1836379999986093, + 3.180681999998342, + 2.2094749999996566, + 2.321481999999378, + 2.304291000000376, + 2.251043000000209, + 2.2612609999996494, + 2.2774030000000494, + 2.2152710000009392, + 2.1934739999996964, + 2.189963999997417, + 2.189254000000801, + 2.200143999998545, + 2.1862199999995937, + 2.184493000000657, + 2.182966000000306, + 2.1803580000014335, + 2.19571200000064, + 2.1892560000014782, + 2.195090999997774, + 2.185216000001674, + 2.1907910000008997, + 2.191505999999208, + 2.180239999997866, + 2.1955109999980778, + 2.193267000002379, + 2.2354990000021644, + 2.199641999999585, + 2.2314790000018547, + 2.182918000002246, + 2.1871329999994487, + 2.1833049999986542, + 2.186601999997947, + 2.248598000001948, + 2.2629780000024766, + 2.2502480000002834, + 2.2121289999995497, + 2.1845549999998184, + 2.195904000000155, + 2.197845000002417, + 2.1871920000012324, + 2.241283999999723, + 2.242115000000922, + 2.2278089999999793, + 2.2339670000001206, + 2.242779000000155, + 2.220956000001024, + 2.2355160000006435, + 2.1868889999968815, + 2.1836760000005597, + 2.1815870000027644, + 2.178435999998328, + 2.16454800000065, + 2.153331999998045, + 2.194890000002488, + 2.1912479999991774, + 2.1916330000021844, + 2.18818100000135, + 2.188068999999814, + 2.147109999998065, + 2.175185000000056, + 2.184371999999712, + 2.1802109999989625, + 2.184701000001951, + 2.1868479999975534, + 2.170694000000367, + 2.131506999998237, + 2.130600999997114, + 2.1271620000006806, + 2.1277740000004997, + 2.1328520000024582, + 2.1339909999987867, + 2.1796959999992396, + 2.2346900000011374, + 2.247769999998127, + 2.228078000000096, + 2.189355999998952, + 2.1942200000012235, + 2.19409099999757, + 2.184096999997564, + 2.2348650000021735, + 2.2110279999978957, + 2.1835020000035, + 2.182984999999462, + 2.1806759999999485, + 2.150254000000132, + 2.1535279999989143, + 2.1857319999980973, + 2.1849919999986014, + 2.1372080000001006, + 2.1858309999988705, + 2.1819529999993392, + 2.1881050000010873, + 2.182624000000942, + 2.197129000000132, + 2.3083800000022165, + 2.193461999999272, + 2.197968000000401, + 2.190711999999621, + 2.1990790000018023, + 2.181283000001713, + 2.1884939999981725, + 2.1715320000002976, + 2.128940999999031, + 2.134525000001304, + 2.1230930000019725, + 2.124195000000327, + 2.2181339999988268, + 2.1796159999976226, + 2.180836999999883, + 2.178822999998374, + 2.1614319999971485, + 2.1612499999973807, + 2.338796000000002, + 2.2752849999997125, + 2.2671819999995932, + 2.2451029999974708, + 2.2538800000002084, + 2.2486150000004272, + 2.251965999999811, + 2.398959999998624, + 2.2551280000006955, + 2.249637000000803, + 2.2504939999998896, + 2.2490510000025097, + 2.249260000000504, + 2.2876500000020314, + 2.3620950000004086, + 2.252741000000242, + 2.642823000001954, + 2.775483000001259, + 2.2629420000012033, + 2.2281220000004396, + 2.1883100000013656, + 2.2669590000004973, + 2.164753999997629, + 2.122524999998859, + 2.1422249999995984, + 2.148957999997947, + 2.138333999999304, + 2.181208999998489, + 2.145179000002827, + 2.1207979999999225, + 2.1870619999972405, + 2.260269000002154, + 2.140860999999859, + 2.2157419999966805, + 2.1815649999989546, + 2.182236999997258, + 2.195833000001585, + 2.3003740000021935, + 2.3814649999985704, + 2.245409999999538, + 2.245002999999997, + 2.248833999998169, + 2.2475439999980154, + 2.690988999998808, + 2.9434299999993527, + 2.516548999999941, + 2.8708130000013625, + 2.26224799999909, + 2.20794499999829, + 2.1821339999987686, + 2.1849720000027446, + 2.182757999999012, + 2.1881439999997383, + 2.192927999996755, + 2.1466220000002068, + 2.1225569999987783, + 2.1321380000008503, + 2.1263590000016848, + 2.199533999999403, + 2.1864630000018224, + 2.208686999998463, + 2.191143000000011, + 2.18806499999846, + 2.191361000001052, + 2.197345000000496, + 2.1968789999991714, + 2.1881439999997383, + 2.2152050000004238, + 2.1869409999999334, + 2.1889550000014424, + 2.1846169999989797, + 2.1883269999998447, + 2.199274000002333, + 2.184545000000071, + 2.1824630000010075, + 2.211280000003171, + 2.181260999997903, + 2.178128999999899, + 2.1848289999979897, + 2.2117199999993318, + 2.1960650000000896, + 2.1900190000014845, + 2.1928029999980936, + 2.192399999999907, + 2.189937999999529, + 2.187657999998919, + 2.1892710000029183 + ] + } + } + }, + { + "repetition": 3, + "captureSha256": "09816742759e45a519edf30353521bfec732b3f786e78dbd92d8c3e6ec678753", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T13:01:16.539Z", + "sheetwriteRows": [ + 1000, + 10000, + 100000, + 500000, + 1000000 + ], + "handsontableRows": [ + 1000, + 10000 + ] + }, + "sheetwrite": { + "1000": { + "ingest": [ + 1.5859030000000303, + 1.602704000000017, + 1.9817659999999933, + 2.1015519999999697, + 2.743491000000006, + 5.604216000000008, + 1.521408000000008 + ], + "windowRead": [ + 0.012434125000000407, + 0.012510437499999583, + 0.012476781249999291, + 0.012411937500001358, + 0.01269868750000036, + 0.012314874999999503, + 0.012210249999998979, + 0.012489718750000378, + 0.01198546874999984, + 0.0120281250000005, + 0.012194968750000257, + 0.01834068749999851, + 0.01220040625000074, + 0.011911187499999087, + 0.012069718750000291, + 0.011934687500000152, + 0.011882562500000304, + 0.012175468749999752, + 0.011908468750000623, + 0.012303968750000394, + 0.012083500000001024, + 0.01268103125000053, + 0.012166187500000092, + 0.012041531250000403, + 0.012072343750000769, + 0.012211906250000126, + 0.012073249999998481, + 0.01239962500000047, + 0.012273281249999712, + 0.012102187500000028, + 0.012608000000000175, + 0.012416437500000654, + 0.012322968750000385, + 0.01227696875000106, + 0.012131218749999562, + 0.012547531250000077, + 0.01194687499999958, + 0.012864999999999682, + 0.0124451562499992, + 0.012435218749999422, + 0.012250843749999518, + 0.01199825000000132, + 0.012538781250000852, + 0.012304968750001422, + 0.015595593749999637, + 0.020099906249999577, + 0.012549187500001224, + 0.012001312500000694, + 0.012340218749999465, + 0.012479624999999217, + 0.012088500000000835, + 0.013305718749998974, + 0.021051312499999142, + 0.013769156250001302, + 0.011866124999999172, + 0.011838593749999404, + 0.012181375000000827, + 0.011488562500000299, + 0.011783749999999316, + 0.011493375000000583, + 0.011395343750001174, + 0.012019999999999698, + 0.011907124999998686, + 0.011670531249999172, + 0.011568343750001375, + 0.01149843749999846, + 0.011511281249999783, + 0.011637093750000105, + 0.011639124999998529, + 0.012039749999999572, + 0.011873624999999777, + 0.012372187500000464, + 0.011952874999998642, + 0.01209821874999939, + 0.012080781250000783, + 0.011912656249998932, + 0.011845906250000482, + 0.011779156250000256, + 0.018401562500001134, + 0.011983687500000784, + 0.012190937499999777, + 0.012485250000001002, + 0.012332437499999571, + 0.012042031249999141, + 0.01212984374999948, + 0.012216062500000291, + 0.012194062500000769, + 0.012357187500001032, + 0.01200887500000114, + 0.012471624999999875, + 0.01545940625000064, + 0.012599999999999056, + 0.012474250000000353, + 0.012004312500000225, + 0.012736500000000817, + 0.011995656250000764, + 0.0121237812499988, + 0.012551500000000715, + 0.015174562500000377, + 0.012428406250000634, + 0.01209993750000038, + 0.012387437500001042, + 0.014632374999999698, + 0.012043249999999617, + 0.019135312499999557, + 0.015474218750000546, + 0.013238812500000918, + 0.01254865625000079, + 0.012320031250000696, + 0.01181384374999972, + 0.011822343749999575, + 0.014118656249999972, + 0.01214474999999915, + 0.01256984374999881, + 0.011728875000001082, + 0.012578687500001351, + 0.011531812499999461, + 0.012253062499999245, + 0.011026906250000579, + 0.01186884375000119, + 0.010267999999999944, + 0.010459812499998833, + 0.010253312499999723, + 0.010020000000000806, + 0.010558031249999544, + 0.010420124999999558, + 0.01035090624999846, + 0.014001249999999743, + 0.010092531250000647, + 0.010379562500000716, + 0.012293406250000416, + 0.01208503125000071, + 0.011605312500000409, + 0.010459218750000332, + 0.010515531250000265, + 0.011030781249999677, + 0.01120546874999917, + 0.010456843749999223, + 0.015283406250000908, + 0.018992875000000353, + 0.07056056250000076, + 0.013894781250000321, + 0.01980496874999993, + 0.01465868749999899, + 0.014489937499998717, + 0.014382843749999097, + 0.014086437499999604, + 0.013841968750000433, + 0.013756531250001203, + 0.013943218750000597, + 0.014133750000000944, + 0.014214875000000404, + 0.013911625000000427, + 0.01748665625000001, + 0.01472834375000076, + 0.015680812500001196, + 0.007073843749999753, + 0.006583437499999789, + 0.006486812500000383, + 0.0065825312499985245, + 0.006355156250000604, + 0.006687249999998812, + 0.00665837500000066, + 0.0076422187500000405, + 0.009604093749999265, + 0.010375437499998696, + 0.010632843750000731, + 0.010708406250000024, + 0.010545156250000076, + 0.010802374999999032, + 0.010014687500000008, + 0.010286906250000172, + 0.01073959375000122, + 0.010579124999999578, + 0.010584249999999074, + 0.010295624999999475, + 0.010598562499998465, + 0.010355093750000322, + 0.010628906250000014, + 0.00865399999999994, + 0.006154749999998543, + 0.006104718750000515, + 0.006165281250000376, + 0.006171187499999675, + 0.006048781249999635, + 0.005953718749999837, + 0.00576846874999859, + 0.005896999999999153, + 0.005932749999999487, + 0.005729531250000974, + 0.0058629999999997295, + 0.005857000000000667, + 0.005961656249999336, + 0.0060923437499997846, + 0.006349843749999806, + 0.00612650000000059, + 0.0070448750000000615, + 0.00629709374999976, + 0.006366999999999123, + 0.006234781250000765, + 0.006201781250000593, + 0.006148906250000863, + 0.0060729062499991215, + 0.005852531250001292, + 0.006273218749999643, + 0.006121093750000028, + 0.006227312500000082, + 0.005691593749999058, + 0.005793968749999934, + 0.006102343749999406, + 0.006026593750000586, + 0.0060417500000014, + 0.006094874999998723, + 0.0061416562499996274, + 0.006259843749999661, + 0.006292281249999476, + 0.00601971875000018, + 0.006113250000000292, + 0.006192562500000776, + 0.006158312500000207, + 0.006055187499999448, + 0.006943781249999503, + 0.005966281250000094, + 0.005902624999999162, + 0.00599806249999979, + 0.005858781249999723, + 0.005984093749999531, + 0.00605571875000166, + 0.006113125000000608, + 0.006167562499999946, + 0.005712468749999644, + 0.0056403749999986985, + 0.005728406250000262, + 0.005660749999998771, + 0.005783968750000312, + 0.006219406249998727, + 0.0060227187499997115, + 0.006046031249999473, + 0.006674281250001357, + 0.005711749999999682, + 0.006117343749998838, + 0.006150781250001458, + 0.006039812500000963, + 0.006010312500000836, + 0.005775312500000851, + 0.005927156249999399, + 0.0058830312499988935, + 0.0060205937499997475, + 0.005790406250000046, + 0.005628906249999233, + 0.005754843750001015, + 0.005377843749998945, + 0.0054293437500003705, + 0.005672656250000685, + 0.0059776562499997965, + 0.0060342187499990985, + 0.006817062499999693, + 0.0052776249999997304, + 0.005618124999999807, + 0.00560124999999978, + 0.005577000000000609, + 0.005723718750001439, + 0.005537031250000268, + 0.005458624999999273, + 0.00547559375000084, + 0.005710187500000075, + 0.005758812499999877, + 0.005755312499999832, + 0.005672437499999461, + 0.005672156250000171, + 0.005594562499998901, + 0.005656093749999869, + 0.009329093749999018, + 0.007295906250000428, + 0.00716656250000014, + 0.007642531250001028, + 0.007533156249998285, + 0.007274187500000195, + 0.006957031249999801, + 0.007049374999999358, + 0.007159281249998983, + 0.007031125000001026, + 0.0070640937499995005, + 0.006958750000000791, + 0.006690343749999883, + 0.00670518749999971, + 0.006576843749998673, + 0.00620024999999913, + 0.006258687499999027, + 0.00605228124999968, + 0.006380781249999856, + 0.006582562500000222, + 0.006470374999999251, + 0.006415937499999913, + 0.006121249999999634, + 0.006070531249999789, + 0.005857812500000392, + 0.005779906249999911, + 0.0057669375000006795, + 0.005730062499999633 + ], + "edit": [ + 6.62638800000002, + 5.098883999999998, + 7.056994999999972, + 7.281939999999963, + 7.516467000000034, + 6.600462999999991, + 6.992693999999972, + 4.513017999999988, + 5.019762000000014, + 5.409510000000012, + 4.800914999999975, + 4.286086999999952, + 5.637697000000003, + 3.8590849999999364, + 4.172692999999981 + ], + "sort": [ + 0.1294390000000476, + 0.11968000000001666, + 0.11138399999992998, + 0.1133909999999787, + 0.10686900000007427, + 0.1223730000000387, + 0.13153999999997268, + 0.11899000000005344, + 0.11233400000003257, + 0.10568000000000666, + 0.10604499999999462, + 0.10829100000000835, + 0.12566799999990508, + 0.13014200000009168, + 0.1194510000000264 + ], + "filter": [ + 0.027539000000047054, + 0.0364439999999604, + 0.031547000000045955, + 0.018650000000093314, + 0.020659000000023298, + 0.02026499999999487, + 0.01901799999996001, + 0.017926999999986037, + 0.021198000000026695, + 0.017469000000005508, + 0.029692999999952008, + 0.030227999999965505, + 0.03589800000008836, + 0.03977399999996578, + 0.022475999999983287 + ], + "multiFilter": [ + 0.12615299999993113, + 0.1174750000000131, + 0.10741800000005242, + 0.11052800000004481, + 0.113638999999921, + 0.13028000000008433, + 0.1144289999999728, + 0.10405300000002171, + 0.09649799999999686, + 0.13987399999996342, + 0.13238200000000688, + 0.10891099999992093, + 0.10307299999999486, + 0.1007680000000164, + 0.08821199999999862 + ], + "distinctLow": [ + 0.08273500000007061, + 0.08155299999998533, + 0.0786759999999731, + 0.08511899999996331, + 0.07575599999995575, + 0.0767830000000913, + 0.07529299999998784, + 0.11233800000002248, + 0.16150900000002366, + 0.0842089999999871, + 0.062198999999964144, + 0.05974100000003091, + 0.059663000000000466, + 0.06096199999990404, + 0.08744799999999486 + ], + "distinctHigh": [ + 0.304328000000055, + 0.26750700000002325, + 0.2742849999999635, + 0.29288899999994555, + 0.2693689999999833, + 0.25005399999997735, + 0.2681029999999964, + 0.2419080000000804, + 0.2659689999999273, + 0.2686710000000403, + 0.27727100000004157, + 0.2568180000000666, + 0.2495930000000044, + 0.24905300000000352, + 0.26750700000002325 + ], + "aggregate": [ + 0.003593218749999849, + 0.0033531484375002307, + 0.0033541874999993837, + 0.0031547578125001863, + 0.0032065156250000726, + 0.0032385468750000257, + 0.0031619843749997045, + 0.003346976562499826, + 0.0032032890625002253, + 0.003620624999999933, + 0.0032041718749997727, + 0.003239093749999533, + 0.0031549609374996734, + 0.0031977343750000387, + 0.0032050390624993597, + 0.0031708515625004097, + 0.0031783203125002046, + 0.0032226640624992697, + 0.0032173437500002677, + 0.0030423437500006756, + 0.0029916875000006726, + 0.003057882812500523, + 0.0029940703124999857, + 0.0031340390625000936, + 0.003006382812499986, + 0.0030382343750003926, + 0.0029900390625003936, + 0.003168984374999795, + 0.003175812499999431, + 0.003090968750000478, + 0.003188281250000813, + 0.0031921874999998323, + 0.0033048671874995605, + 0.003180593749999794, + 0.003180031250000326, + 0.003091085937499294, + 0.003024398437500686, + 0.0030119140625002316, + 0.0030436015625001644, + 0.0035212500000003644, + 0.0031784453125007772, + 0.0033406718749997566, + 0.0037582031249998593, + 0.003404265624999958, + 0.003017382812499747, + 0.002916570312500255, + 0.004397781250000676, + 0.002915929687499208, + 0.007543124999999762, + 0.006596562499999514, + 0.00358098437500054, + 0.003786078125000536, + 0.003666953125000205, + 0.003562164062500095, + 0.003517804687500181, + 0.0036966093749999374, + 0.003803757812500308, + 0.0037951874999997415, + 0.0038220312500003573, + 0.0037854062499995678, + 0.003834695312500358, + 0.004092382812499906, + 0.0047236406249995255, + 0.004095960937499754, + 0.003830921875000115, + 0.0038197968750006694, + 0.004275109375000419, + 0.0040613749999991455, + 0.004004562500000475, + 0.00409886718750041, + 0.004112085937499899, + 0.004072539062499381, + 0.004302343750000048, + 0.00532521875000036, + 0.004376437500000385, + 0.004160203125000095, + 0.004223789062500316, + 0.004196468750000015, + 0.004193179687499438, + 0.004151156249999843, + 0.004241632812499674, + 0.004242085937500306, + 0.004198781249999506, + 0.00421091406249996, + 0.004220546875000508, + 0.0042624062499996285, + 0.004170203125000604, + 0.0041767812499999835, + 0.004120312499999557, + 0.004084351562500643, + 0.004033789062499515, + 0.00414171093749971, + 0.004042226562500417, + 0.00410283593750016, + 0.004079585937499353, + 0.0040838593750001095, + 0.004138632812500376, + 0.004117984374999217, + 0.0040672734374993524, + 0.004069773437500146, + 0.004067218750000379, + 0.004045765625000364, + 0.0040380937500001934, + 0.00471614843749979, + 0.004323796875000063, + 0.0042017031250001224, + 0.00398775781250027, + 0.003948757812500148, + 0.003984382812500797, + 0.004435859375000462, + 0.004075499999999899, + 0.0038989687499997316, + 0.004068789062499967, + 0.004094437500000048, + 0.004107851562499931, + 0.004118554687499554, + 0.00406389843749988, + 0.004049046875000073, + 0.004119898437499714, + 0.004128960937499926, + 0.004044624999999691, + 0.004089000000000453, + 0.0040527265624996645, + 0.004091265625000062, + 0.004131406249999969, + 0.004100249999999583, + 0.004054453125000634, + 0.004109570312500033, + 0.004194617187500249, + 0.004106007812500145, + 0.0041203906250002476, + 0.004053453124999606, + 0.003993515624999944, + 0.004100343750000235, + 0.004485226562500166, + 0.004543726562499906, + 0.004874570312500381, + 0.007162984375000292, + 0.006323398437499961, + 0.005543234374999706, + 0.003938007812499755, + 0.003831374999999859, + 0.0038950546874998437, + 0.003993960937499708, + 0.003871117187499884, + 0.0038983749999994544, + 0.004144843749999794, + 0.004273007812500396, + 0.0039321093750004366, + 0.003908101562499766, + 0.0038724218750001427, + 0.0037768906249997514, + 0.0038505625000002652, + 0.00371133593750006, + 0.0038308437500003123, + 0.003698953124999349, + 0.004055187499999668, + 0.00370003906250016, + 0.003747281249999901, + 0.0036739296875003546, + 0.0037643124999995337, + 0.0037095078125002345, + 0.0037883593750001054, + 0.0036941015625000517, + 0.004077976562499863, + 0.004015773437500592, + 0.004003531249999526, + 0.0038210312500002175, + 0.003782007812499266, + 0.003640851562499492, + 0.003638585937499883, + 0.003895195312500377, + 0.00367571093749941, + 0.003983695312499869, + 0.003858585937500436, + 0.004751203125000103, + 0.005665398437499469, + 0.004891828124999442, + 0.004055789062499926, + 0.004086671875000114, + 0.004186796874999565, + 0.004094320312499455, + 0.004041343749999982, + 0.004112695312499248, + 0.0041226562499998565, + 0.004142164062499454, + 0.004402882812500231, + 0.00498692968750003, + 0.004127617187499766, + 0.0041554921875004425, + 0.004151249999999607, + 0.004183546874999777, + 0.004380656250000392, + 0.004257687499999996, + 0.005008984375000303, + 0.006317804687499873, + 0.004264437499999829, + 0.0039020078125000524, + 0.003962078125000268, + 0.0037550781250006438 + ] + }, + "10000": { + "ingest": [ + 10.609651000000099, + 11.297751999999946, + 11.112328999999932, + 12.814086999999972, + 14.206125000000043, + 16.211595999999986, + 16.228282000000036 + ], + "windowRead": [ + 0.0061967187499973875, + 0.007053656250000984, + 0.006893312500000803, + 0.006239781250002352, + 0.006369031250002877, + 0.006184718749999263, + 0.011474812500001264, + 0.007111343750000998, + 0.007050499999998294, + 0.006159124999999932, + 0.006411531250002156, + 0.006179968750000597, + 0.0062267187499998045, + 0.0064866875000006985, + 0.006015874999999227, + 0.006118000000000734, + 0.006056562500003082, + 0.006109062500001983, + 0.006077312500000431, + 0.006074250000001058, + 0.006227218750002095, + 0.005950218750001568, + 0.0058947187499995835, + 0.00597478124999995, + 0.006581593749999115, + 0.006667625000002175, + 0.006492156249997549, + 0.006421781250001146, + 0.006491718749998654, + 0.006434656249997062, + 0.0065363437499996735, + 0.006099187500002046, + 0.005941468750002343, + 0.00603446875000202, + 0.0059566875000029995, + 0.0061294687500002, + 0.0059813125000012235, + 0.006318406249999242, + 0.0062704687499994805, + 0.005953593750000152, + 0.006273187499999722, + 0.005991156250001239, + 0.0060305624999976715, + 0.005893843750001793, + 0.005855781250001968, + 0.005762624999999133, + 0.005844531249998397, + 0.00583246875000043, + 0.005746968749999581, + 0.006152281250003, + 0.006586874999999992, + 0.00692818750000157, + 0.0060859062500000505, + 0.006019906249999707, + 0.006029593750000117, + 0.005734031250000271, + 0.006197531249998889, + 0.0060698437500015245, + 0.00608349999999902, + 0.00620187499999858, + 0.006353812499998668, + 0.006420312499997749, + 0.006365968749999951, + 0.006199124999998418, + 0.00637753124999918, + 0.006478562499999896, + 0.006299375000001106, + 0.00610043749999889, + 0.006361718750000023, + 0.006373624999998384, + 0.006418062499999877, + 0.00657981250000006, + 0.006529781250002031, + 0.006319843750002718, + 0.005912031250002059, + 0.006497124999999215, + 0.006203468750001662, + 0.00609528125000125, + 0.006023656250000897, + 0.006075312499998375, + 0.006043656249996587, + 0.006088437500000765, + 0.005719531250001353, + 0.005974124999998054, + 0.005955656249998498, + 0.0059384999999991805, + 0.007027187500000309, + 0.006052249999999759, + 0.005981750000000119, + 0.005936062500001782, + 0.006005687500000079, + 0.006362124999998997, + 0.006005656250000158, + 0.006099718749997152, + 0.005977999999998929, + 0.006357468750000095, + 0.0069779375000003085, + 0.00578400000000201, + 0.005701968749999509, + 0.005768718750001511, + 0.005877406250000661, + 0.007647031250002101, + 0.006946937500000416, + 0.006865593749999732, + 0.006237156249998321, + 0.005953375000000705, + 0.007113812499998318, + 0.006654750000002707, + 0.006315218750000184, + 0.006082843750000677, + 0.0070982812499984504, + 0.05085037499999956, + 0.011810718749998728, + 0.012859468750001213, + 0.012081124999998138, + 0.012059250000000077, + 0.01149712499999822, + 0.010977812499998407, + 0.013541937500001211, + 0.006575749999999658, + 0.006255593749997956, + 0.0066412499999977115, + 0.006540843750002523, + 0.006210437499998278, + 0.00917296875000062, + 0.006602812500002386, + 0.008308781250001118, + 0.006946875000000574, + 0.006586062500002043, + 0.0068802500000018085, + 0.0067284374999978525, + 0.007037187499999931, + 0.006519468749999646, + 0.0067840937499994425, + 0.006669281250001546, + 0.006761937500002091, + 0.006234218749998632, + 0.0062246874999978274, + 0.006454906249999226, + 0.006777500000001879, + 0.0068064687499997945, + 0.009320781250000465, + 0.007169218750000539, + 0.007298499999997432, + 0.007538031250000188, + 0.007323687500001341, + 0.008466468749997347, + 0.008704749999999706, + 0.009017124999999737, + 0.008687937500003073, + 0.009549718750001546, + 0.009054718750000745, + 0.008808937500003111, + 0.008866656249999494, + 0.0073351874999971756, + 0.007726218750001124, + 0.00766884375000032, + 0.007017656249999504, + 0.007243343749998132, + 0.007601968749998633, + 0.0076435625000002005, + 0.007918156249999697, + 0.0076722812500023, + 0.007997500000001878, + 0.0072822499999993795, + 0.007555499999998716, + 0.007670781250002534, + 0.00905999999999807, + 0.012729062500000055, + 0.012414374999998756, + 0.01336306249999808, + 0.013032000000002597, + 0.013110937499998698, + 0.013138593749999927, + 0.014885500000001883, + 0.010634968750000695, + 0.008688437500001811, + 0.009003531249998531, + 0.009697468750001548, + 0.00923374999999993, + 0.009240375000000967, + 0.010508437500000412, + 0.010390937499998643, + 0.008830937499997304, + 0.010243531250001325, + 0.008172937499999477, + 0.008149406249998492, + 0.008183999999999969, + 0.008646062500002216, + 0.00753434374999884, + 0.00766834374999803, + 0.0076722812500023, + 0.007794875000001866, + 0.007342718749999477, + 0.007290125000000813, + 0.007209281249998867, + 0.00724193749999813, + 0.0070934062500001005, + 0.0071035937499992485, + 0.00720450000000028, + 0.007160718750000683, + 0.007035937499999534, + 0.0068858437500018965, + 0.006967312499998712, + 0.007075406249999361, + 0.0071805312499968466, + 0.006696500000000327, + 0.006698312499999304, + 0.007090843749999465, + 0.0069229687500005355, + 0.007172187500000149, + 0.00880659374999837, + 0.006567531250002645, + 0.0066459062500001664, + 0.007170531250000778, + 0.006726750000002113, + 0.006598468750002695, + 0.006663968750000748, + 0.006545562500001267, + 0.006341750000000701, + 0.006263031250000495, + 0.0064000937499990584, + 0.007480312500000252, + 0.006426624999999575, + 0.006161968749999858, + 0.006322437499999722, + 0.006010875000001192, + 0.00588303125000067, + 0.006160249999997092, + 0.006518468750002171, + 0.009458125000001871, + 0.006204374999999374, + 0.006844250000000329, + 0.00808315624999878, + 0.00692987499999731, + 0.006981750000001341, + 0.0060940312499973, + 0.006814937499999729, + 0.005755000000000621, + 0.00584912500000101, + 0.007720937500000247, + 0.006180374999999572, + 0.006361500000000575, + 0.005877843749999556, + 0.0056765937499996255, + 0.00571599999999961, + 0.005664593749997948, + 0.006562124999998531, + 0.0062586875000008035, + 0.0067422812499984275, + 0.006245968750000941, + 0.006507968750000259, + 0.006421656250001462, + 0.005667562500001111, + 0.0069564375000013, + 0.006427156249998234, + 0.0064077187500011235, + 0.006774781250001638, + 0.007042406250000965, + 0.006648218750001433, + 0.006545874999996926, + 0.006501218749999538, + 0.010746687499999297, + 0.011261531249999734, + 0.010843125000000953, + 0.009501812499998152, + 0.007197156250001058, + 0.006408656250002309, + 0.006655312500001287, + 0.006286281249998638, + 0.006340718749999752, + 0.006398749999998898, + 0.006021312499999709, + 0.005909625000001029, + 0.005995937499999826, + 0.006067687499999863, + 0.006351562500000796, + 0.006044843750000695, + 0.005701687500000219, + 0.005835093750000908, + 0.005633062499999397, + 0.0059280000000008215, + 0.005721281250000487, + 0.006103062499999368, + 0.005876718749998844, + 0.005641656249999016, + 0.0056110624999980985, + 0.005653999999999826, + 0.0056294687499978124, + 0.006118562499999314, + 0.008140343750000056, + 0.005687312500000985, + 0.005707281250000307, + 0.005609250000002675, + 0.0057417812500020204, + 0.005741906249998152, + 0.005576406250000332, + 0.005843312500001474, + 0.005844187500002818, + 0.006337031249998404 + ], + "edit": [ + 4.054267999999979, + 4.0784799999998995, + 4.078710000000001, + 4.079646000000025, + 3.910052999999948, + 7.404336999999941, + 3.6619089999999233, + 4.421016000000009, + 4.183360999999991, + 4.233270999999945, + 5.1399189999999635, + 4.186794999999961, + 6.511528999999996, + 3.8725930000000517, + 4.8407419999999775 + ], + "sort": [ + 0.23757999999997992, + 0.24267700000007153, + 0.28309299999989435, + 0.22786600000006274, + 0.22662400000001526, + 0.23422900000002755, + 0.23073500000009517, + 0.22522000000003572, + 0.22619400000007772, + 0.23836100000005445, + 0.2278559999999743, + 0.23378900000000158, + 0.24826200000006793, + 0.2417440000000397, + 0.25101500000005217 + ], + "filter": [ + 0.04965400000003228, + 0.04770599999994829, + 0.048670000000015534, + 0.04828100000008817, + 0.04546800000002804, + 0.051515999999992346, + 0.051497999999924104, + 0.046341999999981454, + 0.05183899999997266, + 0.049817999999959284, + 0.054639999999949396, + 0.048381999999946856, + 0.05161099999997987, + 0.05649300000004587, + 0.058204999999929896 + ], + "multiFilter": [ + 0.43234400000005735, + 0.4369090000000142, + 0.4635129999999208, + 0.4618440000000419, + 0.5264560000000529, + 0.5611199999999599, + 0.5361120000000028, + 0.5095079999999825, + 0.48657300000002124, + 0.46660799999995106, + 0.46410600000001523, + 0.48039200000005167, + 0.5081539999999904, + 0.5941490000000158, + 0.39723400000002584 + ], + "distinctLow": [ + 0.3970130000000154, + 0.416780000000017, + 0.38942099999997026, + 0.4061450000000377, + 0.4162100000000919, + 0.44527400000004036, + 0.4240740000000187, + 0.404863999999975, + 0.44942300000002433, + 0.4112390000000232, + 0.4239700000000539, + 0.40275899999994635, + 0.39540199999999004, + 0.39522599999997965, + 0.40222399999993286 + ], + "distinctHigh": [ + 2.2183959999999843, + 2.154247000000055, + 2.170806000000084, + 2.2671510000000126, + 2.35200999999995, + 2.5268009999999776, + 2.6916330000000244, + 2.389891999999918, + 2.5606010000000197, + 2.7632340000000113, + 2.3810760000000073, + 2.3378990000001068, + 2.3599349999999504, + 2.4954440000000204, + 3.8080020000001014 + ], + "aggregate": [ + 0.03981076562499908, + 0.045594984375000536, + 0.04937262500000017, + 0.048759492187500086, + 0.048947390625000864, + 0.050131132812499146, + 0.04775045312500126, + 0.049240265624998614, + 0.048024085937500516, + 0.049661210937500755, + 0.023526460937500104, + 0.023063859375000106, + 0.02249943749999872, + 0.02245168750000026, + 0.022417226562499337, + 0.02249453125000045, + 0.022954703125000364, + 0.02289039062500109, + 0.02278481249999942, + 0.023025257812498978, + 0.022589468749998787, + 0.023092296874999363, + 0.022812296874999305, + 0.022828968749999845, + 0.023154890624999425, + 0.023038210937500025, + 0.02304967968749949, + 0.023014273437500066, + 0.022468828124999618, + 0.022519328125000015, + 0.02314327343750122, + 0.02302550000000103, + 0.022571570312500455, + 0.0224958046874999, + 0.022370929687500762, + 0.023577765625001135, + 0.022483578125001458, + 0.02265064843750153, + 0.022375632812499546, + 0.022411585937499368, + 0.02349807812499982, + 0.02250347656250007, + 0.024447390624999343, + 0.023688460937499656, + 0.02899312499999951, + 0.032405453125001316, + 0.022080640625000925, + 0.021752015624999288, + 0.018334687499999447, + 0.019021125000000083, + 0.019684781249999617, + 0.02099317187500027, + 0.021540062499999735, + 0.02171189843750021, + 0.02375811718749965, + 0.02352364062499923, + 0.023876953124998934, + 0.023728593749998694, + 0.023725484375001216, + 0.02380929687499922, + 0.02373185937499933, + 0.023607695312501065, + 0.023270367187500085, + 0.02302373437500016, + 0.022778726562499685, + 0.022386164062499603, + 0.022497023437498598, + 0.022314835937500277, + 0.022427289062500577, + 0.022424601562500257, + 0.022406585937499557, + 0.02232253906250037, + 0.02212395312499993, + 0.02180564843749977, + 0.02213581249999841, + 0.021870773437500546, + 0.022110546875000026, + 0.022762101562499026, + 0.028776890625000107, + 0.029431734374998797, + 0.04311502343749929, + 0.020428304687500898, + 0.019748507812499483, + 0.027053578125000755, + 0.02255735937499992, + 0.022420125000000013, + 0.02430625781249951, + 0.022284445312500623, + 0.021341257812499848, + 0.020675148437499402, + 0.020756828125000126, + 0.019600906249999994, + 0.01878360156250025, + 0.019165117187499803, + 0.0186484999999994, + 0.018957601562499704, + 0.020439531250000087, + 0.01926925000000068, + 0.018040703125000945, + 0.018264804687500913, + 0.018240812500000203, + 0.018256210937499517, + 0.018314851562500678, + 0.01806520312500126, + 0.018091304687500198, + 0.01811065625000019, + 0.017597578125000624, + 0.017572031250001174, + 0.018590460937501163, + 0.018620398437500185, + 0.019233656249999953, + 0.018874070312499214, + 0.018385507812499924, + 0.01857071875000038, + 0.018060687500000228, + 0.019693703125000184, + 0.018631070312499887, + 0.019238773437500356, + 0.018931492187501675, + 0.018800937500000003, + 0.018713664062500968, + 0.018536507812498826, + 0.018810789062500888, + 0.019088664062500982, + 0.019078359374999465, + 0.01938883593749985, + 0.019307593749999796, + 0.018965648437500704, + 0.019042476562500354, + 0.019224890625000768, + 0.019785921875000057, + 0.018952617187499854, + 0.01905529687500085, + 0.018968843749998854, + 0.01928514062499964, + 0.019359546875000078, + 0.019574109375000148, + 0.019475578125000226, + 0.019253109375000577, + 0.01901211718750062, + 0.019501734374999913, + 0.019252062500001443, + 0.01921123437499972, + 0.020766796874999827, + 0.018785843750000808, + 0.01808178125000026, + 0.018003984374999504, + 0.020366671875001074, + 0.02162499218749936, + 0.021514453125000443, + 0.022631328124999683, + 0.022766718750000692, + 0.024773781249999516, + 0.023621289062500495, + 0.02375786718750028, + 0.026417257812498818, + 0.023737726562499617, + 0.023838406249998556, + 0.0277794218749996, + 0.023314835937499723, + 0.022007984374999623, + 0.02276537500000053, + 0.03662350781250012, + 0.02221180468749928, + 0.02140887500000055, + 0.023396164062500446, + 0.021105585937499782, + 0.019945843749999526, + 0.01915043750000045, + 0.018800351562498818, + 0.01880947656250065, + 0.018818687499999598, + 0.023738414062501434, + 0.02663027343749924, + 0.018244718750001, + 0.018087593749999797, + 0.01927914843749967, + 0.018968664062500196, + 0.01944304687499887, + 0.01881039062499923, + 0.019055382812499744, + 0.01844203906250108, + 0.0194650390624993, + 0.01990713281250045, + 0.0192807421874992, + 0.019428757812500308, + 0.01951790624999994, + 0.019527749999999955, + 0.018934156250001166, + 0.018919023437499405, + 0.01938181249999893, + 0.01901607812500039, + 0.01936030468750083, + 0.02019539843749918, + 0.019203593750001247, + 0.0188667187500009, + 0.019964242187500147, + 0.019207382812499674, + 0.018956867187499782, + 0.019418968750001042 + ] + }, + "100000": { + "ingest": [ + 122.63283299999989, + 144.14249700000005, + 116.014588, + 119.36656399999993, + 118.03296, + 131.30000500000006, + 126.05008500000031 + ], + "windowRead": [ + 0.006723937499998556, + 0.00659337500000845, + 0.006765749999999571, + 0.006706781250002791, + 0.007360500000004322, + 0.006792625000002772, + 0.0064410312499916245, + 0.00664559374999385, + 0.007238156249997019, + 0.006574718750002262, + 0.00650884374999805, + 0.007533281250005075, + 0.007292312499998843, + 0.006812843750012121, + 0.007072374999992803, + 0.0070295312499979445, + 0.006791656250001665, + 0.006976156249990595, + 0.006921062499998243, + 0.006682281250007804, + 0.006535906249993673, + 0.006902468749999002, + 0.00684959374999039, + 0.0065720937499946785, + 0.006810406249996959, + 0.006646406249998904, + 0.007293718750005951, + 0.008194937500007882, + 0.006805499999998688, + 0.007822062499997173, + 0.006712843750008801, + 0.00670165625000152, + 0.006415906249998216, + 0.006547374999996691, + 0.0067896249999961356, + 0.006759406249997824, + 0.006557593750002866, + 0.007793718750008338, + 0.006937156250003795, + 0.008751968749990624, + 0.007230875000004744, + 0.006979843750002601, + 0.006846562499987385, + 0.00728990624999426, + 0.007143687500004603, + 0.006995156249999468, + 0.0071342812500034825, + 0.007059374999997203, + 0.007011437499997442, + 0.007174812499997074, + 0.007251906250004936, + 0.006767968749997522, + 0.006603625000010993, + 0.0070249687499881475, + 0.006980437500004655, + 0.006641812499992739, + 0.006984968749989662, + 0.00712940625000158, + 0.007719875000006482, + 0.006878843750001806, + 0.007228374999996845, + 0.006753937500008078, + 0.007050687499997821, + 0.007181937500007507, + 0.007305625000000759, + 0.006916187500010551, + 0.007122531250004727, + 0.006898062499999469, + 0.00649874999999156, + 0.006726281250010402, + 0.006493531250001183, + 0.007619781249999846, + 0.007764843750010186, + 0.0071312500000004775, + 0.006960906250000676, + 0.007327406249999058, + 0.007862812500007976, + 0.007175031250000075, + 0.006876781249999908, + 0.006823968749998244, + 0.007879125000002318, + 0.006854937499994662, + 0.0073068749999976035, + 0.007141156250000336, + 0.007029250000002207, + 0.007170343750004804, + 0.006864562499998783, + 0.006549749999990695, + 0.012754749999999149, + 0.007732125000003975, + 0.011309062500004075, + 0.011319781249994776, + 0.011184656249994873, + 0.011148218749994498, + 0.010924843750004243, + 0.011106562500003747, + 0.011209999999991282, + 0.01076615624999988, + 0.01047809375000952, + 0.010396843750001494, + 0.014602156250006715, + 0.007693718749990808, + 0.006946531250008547, + 0.007071624999994697, + 0.0066884375000029195, + 0.006396250000008763, + 0.006533218750007563, + 0.007024781250009937, + 0.007229999999992742, + 0.006564125000011245, + 0.006420156249987485, + 0.006506437500007678, + 0.006557781249995287, + 0.006447062500001266, + 0.006785562499999287, + 0.006529406249995873, + 0.0063134687500081554, + 0.006774531250002269, + 0.006254999999995903, + 0.006197343750002915, + 0.006213093750005783, + 0.006886906250002767, + 0.006475062500001627, + 0.006091093750001164, + 0.0061287500000020145, + 0.006258593750004593, + 0.005745812500009606, + 0.0068761874999978545, + 0.005935906250002176, + 0.005989968750000685, + 0.0063341562500056625, + 0.006054687499997158, + 0.0064423749999917845, + 0.006253124999986426, + 0.00623243750000313, + 0.0060565312499960555, + 0.006095156249998013, + 0.006092343750012219, + 0.006059875000005377, + 0.005981218749994355, + 0.006838187499994319, + 0.006728249999994773, + 0.0070342499999895836, + 0.0064674375000066675, + 0.006014343750010198, + 0.0077160000000020545, + 0.008463812500011159, + 0.008416968749997977, + 0.008405781250004907, + 0.008375406249996331, + 0.008611656249996713, + 0.008325406249994671, + 0.008151999999995496, + 0.00819587499999841, + 0.008592531250002367, + 0.00808625000000518, + 0.008929468749997227, + 0.009230343749990766, + 0.008389156250004248, + 0.008631062500001008, + 0.008453343749991404, + 0.009207968749990414, + 0.008205781249998267, + 0.008226875000005407, + 0.007952781249997543, + 0.008550562500005299, + 0.008018999999990228, + 0.008020312500008231, + 0.008073937500000739, + 0.014724343749989544, + 0.01195862499999123, + 0.009700812500000211, + 0.008283875000003604, + 0.00831806250000966, + 0.008306937499995115, + 0.008279625000000124, + 0.008347812500005602, + 0.008143687500009378, + 0.00832118750000177, + 0.008504406249997487, + 0.00809431250000614, + 0.008052687499997546, + 0.008327656250003201, + 0.008166875000000573, + 0.008210062499998116, + 0.008525843750007311, + 0.007962187499998663, + 0.008262250000001359, + 0.008132375000002412, + 0.008338500000007798, + 0.00833596875000353, + 0.012513874999996233, + 0.008187250000005974, + 0.00835346875000198, + 0.008437281249996431, + 0.008562343750000423, + 0.008327281250004148, + 0.009251062499998852, + 0.009232906249991402, + 0.009281781250010113, + 0.009548312500001543, + 0.009421656249998023, + 0.009385031250005227, + 0.00961587499999439, + 0.009343843749988423, + 0.00962146874999803, + 0.009877687500008392, + 0.009070812499999192, + 0.009023718750000853, + 0.008872843750012294, + 0.009051312500005793, + 0.00953650000001005, + 0.00918028124999637, + 0.008996687500001599, + 0.009978437500009818, + 0.00978131249999592, + 0.009476718749994006, + 0.009849093750005977, + 0.009735187499998688, + 0.009254874999996332, + 0.009434249999998201, + 0.014570812499997032, + 0.014540749999994773, + 0.014493687500007013, + 0.015231374999999048, + 0.012148437499988063, + 0.010386968749998005, + 0.012388531250010715, + 0.011445124999994505, + 0.012295125000008511, + 0.011353031249996093, + 0.010725562499999342, + 0.01079331250001303, + 0.015282312499991235, + 0.010349562499996523, + 0.010334781250008973, + 0.010343062499998723, + 0.009982874999991509, + 0.010071343749999073, + 0.009984968749989775, + 0.010034843750005962, + 0.010108281249998186, + 0.009783218750001765, + 0.010051312500010567, + 0.009784812500001294, + 0.010197937499995646, + 0.010228968749999012, + 0.010027093749997107, + 0.009900531250011113, + 0.009922687500008465, + 0.00997300000000223, + 0.010079062499997349, + 0.00984587499999634, + 0.010116218749999462, + 0.009952843749999829, + 0.00966878124999937, + 0.009753718750005191, + 0.009650749999991604, + 0.009758156250001093, + 0.010008499999997866, + 0.009995937500008267, + 0.009568593750003629, + 0.009979906249995452, + 0.009957062500006941, + 0.00950737499999832, + 0.010013312499992821, + 0.009680625000001442, + 0.009703718750003532, + 0.009598562500002572, + 0.00986381250000079, + 0.009710437500004332, + 0.009818999999993139, + 0.009842687499997282, + 0.009866437499994163, + 0.009656843750008193, + 0.009917937500006246, + 0.009843437499995389, + 0.01013012499998922, + 0.009688437500003033, + 0.009872187499993856, + 0.009649562499987496, + 0.009571437500000002, + 0.009894031249999102, + 0.010089531250002892, + 0.010143062499992084, + 0.010106687499998657, + 0.009958906250005839, + 0.009712656250002283, + 0.010141968750005503, + 0.00978537500000698, + 0.009684718749994659, + 0.009709843750002278, + 0.009645406250001543, + 0.009582750000006968, + 0.009726093750003884, + 0.00979365624999673, + 0.009615218749999599, + 0.009628468749994568, + 0.010288718749990267, + 0.009627718749996461 + ], + "edit": [ + 4.7582900000002155, + 6.022096000000147, + 4.530197999999928, + 5.422699000000193, + 6.766411000000062, + 6.524310000000241, + 6.2847499999998035, + 6.544953000000078, + 6.6664209999999, + 6.58692099999962, + 8.291418999999678, + 12.043341999999939, + 7.444374000000153, + 4.979393000000073, + 3.294632999999976 + ], + "sort": [ + 2.5726009999998496, + 2.592461000000185, + 2.039322000000084, + 2.078805000000102, + 2.4013569999997344, + 2.0294239999998354, + 2.04783899999984, + 2.1036380000000463, + 2.0511350000001585, + 2.0272809999996753, + 2.1260770000003504, + 2.156177000000298, + 2.073656000000028, + 2.520915999999943, + 2.1831640000000334 + ], + "filter": [ + 0.3492540000002009, + 0.3232069999999112, + 0.3236170000000129, + 0.37469499999997424, + 0.3214450000000397, + 0.3458869999999479, + 0.3151780000002873, + 0.3158760000001166, + 0.3496520000003329, + 0.314104000000043, + 0.32251300000007177, + 0.3344240000001264, + 0.31300699999974313, + 0.31296000000020285, + 0.3577919999997903 + ], + "multiFilter": [ + 3.7656769999998687, + 3.7728339999998752, + 3.4726840000002994, + 5.741950000000088, + 3.6662759999999253, + 3.2146969999998873, + 3.713916999999583, + 3.4936970000003384, + 3.51400300000023, + 3.5370920000000297, + 3.221209999999701, + 3.1646419999997306, + 3.323711000000003, + 3.2869330000003174, + 3.7430739999999787 + ], + "distinctLow": [ + 5.261323999999604, + 4.6138019999998505, + 5.489090999999917, + 4.738931000000321, + 4.719340000000102, + 3.565418000000136, + 3.6819390000000567, + 3.653153000000202, + 3.871885999999904, + 3.7344599999996717, + 3.8576319999997395, + 3.8537289999999302, + 3.8488350000002356, + 3.722272999999859, + 3.8316500000000815 + ], + "distinctHigh": [ + 22.37435800000003, + 23.707350000000133, + 24.652400999999827, + 25.15094599999975, + 25.56904300000042, + 24.662510999999995, + 24.69015100000024, + 25.643775000000005, + 26.017700000000332, + 20.960311000000274, + 23.519158999999945, + 27.632830000000013, + 29.536141999999927, + 26.204295999999886, + 25.457162000000153 + ], + "aggregate": [ + 0.22850599999992482, + 0.22415099999989252, + 0.22402000000010958, + 0.22392500000023574, + 0.22395000000005894, + 0.226462999999967, + 0.2241119999998773, + 0.2239409999997406, + 0.22405699999990247, + 0.22250100000019302, + 0.21800699999994322, + 0.2180089999997108, + 0.218166999999994, + 0.21791899999971065, + 0.219923000000108, + 0.2198380000004363, + 0.21788799999967523, + 0.218007999999827, + 0.22021399999994173, + 0.21812499999987267, + 0.21791600000005928, + 0.21792999999979656, + 0.21779800000012983, + 0.2213669999996455, + 0.2185170000002472, + 0.2181390000000647, + 0.21813700000029712, + 0.21824699999979202, + 0.22240999999985434, + 0.2183709999999337, + 0.22190200000022742, + 0.2130090000000564, + 0.21561800000017683, + 0.21227399999997942, + 0.2120679999998174, + 0.21242799999981798, + 0.212395000000015, + 0.21598200000016732, + 0.21221200000036333, + 0.21208699999988312, + 0.2121980000001713, + 0.21232199999985824, + 0.21516299999984767, + 0.2133969999999863, + 0.21226599999999962, + 0.2124069999999847, + 0.2149930000000495, + 0.21229700000003504, + 0.2158039999999346, + 0.21226999999998952, + 0.21236700000008568, + 0.21453999999994267, + 0.21230100000002494, + 0.21213600000010047, + 0.21212199999990844, + 0.21207800000001953, + 0.2135560000001533, + 0.2108789999997498, + 0.20675800000026356, + 0.20683999999982916, + 0.20935499999995955, + 0.2070850000000064, + 0.2064820000000509, + 0.20658199999979843, + 0.20673400000032416, + 0.21095400000012887, + 0.20701099999996586, + 0.20677100000011706, + 0.2068320000003041, + 0.20700500000020838, + 0.2090939999998227, + 0.20675299999993513, + 0.20680399999992005, + 0.21276600000010149, + 0.20757999999977983, + 0.20894499999985783, + 0.20689199999969787, + 0.2070570000000771, + 0.21072499999991123, + 0.20682499999975335, + 0.20932499999980791, + 0.20671000000038475, + 0.2067179999999098, + 0.2070810000000165, + 0.34421900000006644, + 0.2071379999997589, + 0.20776100000011866, + 0.20721800000001167, + 0.20705499999985477, + 0.20897999999988315, + 0.2093179999997119, + 0.21235299999989365, + 0.2122060000001511, + 0.21510100000023158, + 0.21968500000002678, + 0.21214300000019648, + 0.21216800000001967, + 0.2123540000002322, + 0.2164349999998194, + 0.21289200000001074, + 0.20694100000036997, + 0.20679500000005646, + 0.20681699999977354, + 0.2104100000001381, + 0.2069219999998495, + 0.21043700000018362, + 0.21220000000039363, + 0.21439700000019002, + 0.213025000000016, + 0.212554000000182, + 0.21235399999977744, + 0.21225100000037855, + 0.2163470000000416, + 0.21237799999971685, + 0.21236300000009578, + 0.21563199999991411, + 0.21817400000009002, + 0.2205189999999675, + 0.2181350000000748, + 0.2181559999999081, + 0.2155769999999393, + 0.21554900000000998, + 0.21330600000010236, + 0.21225000000004002, + 0.2122110000000248, + 0.21212199999990844, + 0.21520700000019133, + 0.21211600000015096, + 0.2120799999997871, + 0.2120350000000144, + 0.21212399999967602, + 0.21424999999999272, + 0.21216099999992366, + 0.21449699999993754, + 0.2121910000000753, + 0.21178499999996347, + 0.2145340000001852, + 0.2126709999997729, + 0.2117980000002717, + 0.2118279999999686, + 0.21447500000022046, + 0.21214199999985794, + 0.21218900000030771, + 0.21213399999987814, + 0.21239999999988868, + 0.22019799999998213, + 0.21799799999962488, + 0.21784100000013495, + 0.2225479999997333, + 0.2208930000001601, + 0.2179270000001452, + 0.21782600000005914, + 0.21783900000036738, + 0.22283000000015818, + 0.21956500000032975, + 0.21213100000022678, + 0.21235900000010588, + 0.21224099999972168, + 0.21219799999971656, + 0.21526399999993373, + 0.22008099999993647, + 0.21785399999998845, + 0.22258000000010725, + 0.21980400000029476, + 0.2178790000002664, + 0.21789999999964493, + 0.21786199999996825, + 0.2177480000000287, + 0.22000900000011825, + 0.21806299999980183, + 0.21834499999977197, + 0.2180369999996401, + 0.2199350000000777, + 0.21800600000005943, + 0.21781499999997322, + 0.21793299999990268, + 0.21785300000010466, + 0.22044099999993705, + 0.21807099999978163, + 0.2177670000000944, + 0.21787799999992785, + 0.2185060000001613, + 0.22657899999967412, + 0.2128709999997227, + 0.21238800000037372, + 0.2122549999999137, + 0.2159500000002481, + 0.21296600000005128, + 0.21212399999967602, + 0.21728100000018458, + 0.21801899999991292, + 0.2210269999995944, + 0.2184109999998327, + 0.2180039999998371, + 0.21792099999993297, + 0.22054400000024543, + 0.21786900000006426, + 0.21796099999983198, + 0.21785799999997835, + 0.2187629999998535 + ] + }, + "500000": { + "ingest": [ + 596.8143259999997, + 604.064147, + 638.8253370000002 + ], + "windowRead": [ + 0.010254906250025897, + 0.010177156250023245, + 0.01021603124999615, + 0.010163093750009011, + 0.010542156250011203, + 0.010554656250008065, + 0.01001199999998903, + 0.00994046874998844, + 0.009704718749986796, + 0.009544968749992222, + 0.009877187499995443, + 0.010642687499995418, + 0.010400687499981132, + 0.011001406249988577, + 0.011628687500007118, + 0.01038862499999027, + 0.010909687500003429, + 0.010139406250004868, + 0.011155968749989142, + 0.010749218749992906, + 0.009980749999982663, + 0.009787750000015194, + 0.016426187500002243, + 0.010001406250012224, + 0.009807968750010332, + 0.009705843749998166, + 0.009325625000002447, + 0.009729343749995678, + 0.009578687500010119, + 0.010745718750001743, + 0.010516781250004215, + 0.010248031250000622, + 0.009648968750013864, + 0.011576281250000875, + 0.0096194374999925, + 0.009719343750020926, + 0.00941812499999628, + 0.01032318750000627, + 0.00989787499997874, + 0.013065812500002494, + 0.010452812500005848, + 0.010378375000016149, + 0.010994687499987776, + 0.010778593749989795, + 0.010961468749997039, + 0.010282937500022626, + 0.010756874999998445, + 0.010375749999980144, + 0.010735499999981357, + 0.010630406249987345, + 0.010013656249981295, + 0.010956406249988504, + 0.009988750000019309, + 0.009750031250007396, + 0.011519031250003309, + 0.009913000000011607, + 0.009579593750004278, + 0.009710343749986805, + 0.009729781250001679, + 0.009593999999992775, + 0.009487562499998603, + 0.009686000000016293, + 0.01292262499998742, + 0.009879187499990394, + 0.017762468749992877, + 0.016632749999985208, + 0.016090812500010543, + 0.01722884374999012, + 0.01556737499998917, + 0.01585009375000368, + 0.015771093749975762, + 0.01835806249999905, + 0.01616912500000467, + 0.015877500000016198, + 0.016769124999996166, + 0.0161715624999772, + 0.01573015625001517, + 0.015734218749997808, + 0.022241156250004224, + 0.017023156249990734, + 0.02043537500000525, + 0.01007318749998376, + 0.010040312499995707, + 0.010244031250010721, + 0.009915937500011296, + 0.014635406249993821, + 0.010055218749982942, + 0.009913718749999134, + 0.009912593749987764, + 0.009941437500003758, + 0.009936062500003118, + 0.010006687500009548, + 0.009980000000012978, + 0.00970509375000006, + 0.01000706249999439, + 0.010060343749984213, + 0.009967375000002221, + 0.010076124999983449, + 0.010617406249991745, + 0.009746031249989073, + 0.010049656250004091, + 0.009767968749997635, + 0.009756624999994301, + 0.01008687499998473, + 0.009714843749975444, + 0.009611468749994856, + 0.009523312499993608, + 0.009447656250017644, + 0.009611093750010014, + 0.009606093749994216, + 0.01047318750002546, + 0.009975593749999234, + 0.010067687499997646, + 0.010112812500011614, + 0.010368499999998448, + 0.0113246249999861, + 0.011164281250017893, + 0.011116531249996342, + 0.010825406250006608, + 0.011122499999999036, + 0.010547093750005843, + 0.010082374999996091, + 0.009959812499999998, + 0.01066324999999324, + 0.014949218749990223, + 0.010807187500006421, + 0.011519937499997468, + 0.01166700000001697, + 0.012024937500001442, + 0.0128186249999942, + 0.011428781250003794, + 0.01112037499999019, + 0.011072156250008902, + 0.011068875000006528, + 0.010521250000010696, + 0.010404187500000717, + 0.010454656250004746, + 0.016714500000006183, + 0.01027921874998583, + 0.010203000000018392, + 0.010005437499984282, + 0.009794124999984888, + 0.01045434375001264, + 0.010930187500008515, + 0.010165499999999383, + 0.010280062499987253, + 0.009516687499996124, + 0.00991584375000798, + 0.009799343750017897, + 0.009881718749994661, + 0.009930562500017004, + 0.01059918750001998, + 0.009459750000019085, + 0.009465343749980093, + 0.010566624999967189, + 0.009531250000009095, + 0.009629968750004991, + 0.00937984375002543, + 0.010172718750027343, + 0.024802468750010576, + 0.01694474999999329, + 0.016076875000010205, + 0.015829124999982014, + 0.016869968749972486, + 0.016267562499990618, + 0.017998562499997206, + 0.014566656249996868, + 0.010998406249996151, + 0.01059581250001429, + 0.010467437500039978, + 0.010592812500021864, + 0.010808531250006581, + 0.010906187499983844, + 0.011613562500031094, + 0.013686500000005708, + 0.013004812500014395, + 0.010427749999962543, + 0.010213875000033568, + 0.010212406250047934, + 0.01007046874997286, + 0.010153437500036944, + 0.011404749999996966, + 0.009685593749964028, + 0.009697406249983942, + 0.009642156249981326, + 0.009626125000011143, + 0.00943490624996457, + 0.009445562499990956, + 0.00941050000000132, + 0.009591468749988508, + 0.010330062499974701, + 0.01086837499997273, + 0.012386968749979133, + 0.010920062499963024, + 0.010614874999987478, + 0.010259999999959746, + 0.010599124999998821, + 0.01005096874996525, + 0.01628293749996601, + 0.01069171874996755, + 0.009771812499991483, + 0.009509781250017113, + 0.010395031250027387, + 0.010078312500013453, + 0.009150281249958425, + 0.009529531250052514, + 0.010821031249975022, + 0.009521124999992026, + 0.010513000000003103, + 0.009552249999956075, + 0.009413156249991061, + 0.01026237499996796, + 0.010328906249981173, + 0.00947731249999606, + 0.009882749999974294, + 0.010142156249969503, + 0.009560812500012617, + 0.009255218750013228, + 0.009733687500045107, + 0.009383062500035066, + 0.009365249999973457, + 0.009332843750030406, + 0.01598256249997121, + 0.009718249999991713, + 0.009755218750001404, + 0.015712531250017037, + 0.00953693750000184, + 0.00985262500000772, + 0.009330562499997086, + 0.009348156250041484, + 0.00967462500000238, + 0.009441312500030108, + 0.00961090624997496, + 0.009613343750004333, + 0.010317031250053788, + 0.009492906249988664, + 0.009155125000006592, + 0.00926590624999335, + 0.009669812500021635, + 0.01121590625001545, + 0.009367593749971093, + 0.00943475000002536, + 0.00928003125000032, + 0.010495218750008917, + 0.009420062499998494, + 0.009220125000013013, + 0.009259906250008498, + 0.01028553125001963, + 0.010060218750027161, + 0.009549375000005966, + 0.009262718749994292, + 0.00930628125001931, + 0.009159812500001863, + 0.009150437500011321, + 0.016552749999959815, + 0.00948174999996354, + 0.009353406249999807, + 0.009420062499998494, + 0.010045093749965872, + 0.010200906250020125, + 0.009135093749989665, + 0.009335031249975145, + 0.010595937499999764, + 0.009669281250012318, + 0.009844718750002812, + 0.010528625000006286, + 0.009820031250001193, + 0.010262062500032698, + 0.009959468749968892, + 0.010105437499987602, + 0.011063968749965625, + 0.010595312499958709, + 0.010561781250032709, + 0.010705531249982414, + 0.010691156250004497, + 0.010371000000020558, + 0.010363968750027652, + 0.011989312500020333, + 0.012909156250032083, + 0.015324093749995882, + 0.01489756250003893, + 0.010507062499982567, + 0.00987859374998834, + 0.009716968750012711, + 0.01674728124999092, + 0.009827250000000731, + 0.0110291249999932, + 0.010341218749999825, + 0.010647718750021795, + 0.010045968749977874, + 0.010748687499983589, + 0.009841375000007702, + 0.009917718749989035, + 0.010659406249999392, + 0.010075781250009186, + 0.011390937499982101, + 0.010023437500024102, + 0.01004246874998671, + 0.010731968750008036, + 0.009678093750039807 + ], + "edit": [ + 4.1367410000002565, + 3.700161000000662, + 3.714936000000307, + 4.066974999999729, + 5.834796000001006 + ], + "sort": [ + 13.063043000000107, + 11.8791680000013, + 12.530233999999837, + 13.18191300000035, + 12.777713999999833 + ], + "filter": [ + 1.6869449999994686, + 2.002647999999681, + 1.7809949999991659, + 1.8108679999986634, + 1.6655209999989893 + ], + "multiFilter": [ + 22.269169999999576, + 18.02400099999977, + 17.681007000001046, + 18.614294000000882, + 17.978076999999757 + ], + "distinctLow": [ + 21.759240999999747, + 20.943121000000247, + 19.929652999999234, + 19.656737999999677, + 19.53606200000104 + ], + "distinctHigh": [ + 125.40440200000012, + 136.0811759999997, + 136.94521499999973, + 131.8294189999997, + 139.9215239999994 + ], + "aggregate": [ + 1.0886480000008305, + 1.1411420000004, + 1.1678909999991447, + 1.2233759999999165, + 1.1769530000001396, + 1.1972050000003946, + 1.2431809999998222, + 1.226399000001038, + 1.3656730000002426, + 1.2380929999999353, + 1.1857010000003356, + 1.151546999999482, + 1.143484999998691, + 1.2220369999995455, + 1.1168990000005579, + 1.1744959999996354, + 1.1034870000003139, + 1.0801609999998618, + 1.0354559999996127, + 1.0336609999994835, + 0.9840970000004745, + 0.9633039999989705, + 0.9588399999993271, + 0.9890469999991183, + 0.9782909999994445, + 0.9410430000007182, + 0.9521759999988717, + 0.930845999999292, + 0.9224869999998191, + 0.9141909999998461, + 0.9160639999990963, + 0.9316499999986263, + 0.9937390000013693, + 0.925096000000849, + 0.9195830000007845, + 0.9308920000003127, + 0.9865719999997964, + 0.9327009999997244, + 0.9195789999994304, + 0.9267319999999017, + 0.92212599999948, + 0.9242150000009133, + 0.9219040000007226, + 0.9281649999993533, + 0.9144999999989523, + 0.9232000000010885, + 0.9224099999992177, + 0.9170140000005631, + 1.0912360000002082, + 1.0768320000006497, + 0.9486420000012004, + 0.9410819999993691, + 0.9439999999995052, + 0.9371569999984786, + 0.9292740000000776, + 0.9292199999999866, + 0.933604000001651, + 0.9172120000002906, + 0.916508000000249, + 0.9159120000003895, + 0.9198909999995522, + 0.9372659999989992, + 0.956398000000263, + 0.9986939999998867, + 1.0159439999988535, + 1.0336409999999887, + 1.1708589999998367, + 1.1141290000014124, + 1.0722380000006524, + 1.056178999999247, + 1.0576099999998405, + 1.0752270000011777, + 1.0728070000004664, + 1.0997409999999945, + 1.1018459999995684, + 1.159986000000572, + 1.112328000001071, + 1.1334700000006706, + 1.1373199999998178, + 1.118902000000162, + 1.1167029999996885, + 1.1080330000004324, + 1.1080739999997604, + 1.123621999999159, + 1.1211519999997108, + 1.1273590000000695, + 1.1632620000000315, + 1.3739170000008016, + 1.1354780000001483, + 1.1269220000012865, + 1.120296999999482, + 1.1205830000017158, + 1.0905000000002474, + 1.0893250000008265, + 1.0954839999994874, + 1.2033209999990504, + 1.388401000000158, + 1.1874160000006668, + 1.1219320000000153, + 1.0904160000009142, + 1.093778000000384, + 1.124257999999827, + 1.09342099999958, + 1.0939500000004045, + 1.1125089999986812, + 1.153283999999985, + 1.1519790000002104, + 1.1305449999999837, + 1.2139569999999367, + 1.1606210000009014, + 1.1390279999995983, + 1.128432999999859, + 1.1329979999991338, + 1.1530450000009296, + 1.1723089999995864, + 1.153641000000789, + 1.1533300000010058, + 1.1557389999998122, + 1.1591699999989942, + 1.1609759999992093, + 1.157282000000123, + 1.1562990000002173, + 1.1763390000014624, + 1.174724000000424, + 1.2004919999999402, + 1.1335820000003878, + 1.095550000000003, + 1.0837129999999888, + 1.0512130000006437, + 1.0239970000002359, + 1.0084790000000794, + 1.013278000000355, + 0.9992720000009285, + 0.9845779999996012, + 1.142039999998815, + 1.025922000000719, + 0.928249999999025, + 0.9504269999997632, + 1.0391640000016196, + 0.9302210000005289, + 0.9661250000008295, + 0.8858729999992647, + 0.9375680000011926, + 0.9551439999995637, + 0.8954290000001492, + 0.8830440000001545, + 0.8918940000003204, + 0.8847029999997176, + 0.8816580000002432, + 0.8815620000004856, + 0.8821960000004765, + 0.8828909999992902, + 0.87582200000179, + 1.02548299999944, + 0.9206040000008215, + 0.9267359999994369, + 0.927069000001211, + 0.9136799999996583, + 0.911683999998786, + 0.9453369999991992, + 0.9025670000009995, + 0.8971430000001419, + 0.8960069999993721, + 1.9139269999996031, + 1.8392780000012863, + 0.9481900000009773, + 0.9213220000001456, + 0.9813609999982873, + 0.9876949999998033, + 0.9422030000005179, + 1.0091659999998228, + 0.9005600000000413, + 0.8837679999996908, + 0.8856920000016544, + 0.8895599999996193, + 1.0033129999992525, + 0.8944400000000314, + 0.9987330000003567, + 1.082501000000775, + 0.8847489999989193, + 0.8926289999999426, + 0.9208189999990282, + 1.4930260000000999, + 1.7163869999985764, + 0.938825999999608, + 0.9085160000013275, + 0.9183379999994941, + 0.8996879999995144, + 0.8986750000003667, + 0.8963919999987411, + 0.8967479999992065, + 0.893420000000333, + 0.8988549999994575, + 0.8958350000011706, + 0.9369769999993878, + 0.931150999998863, + 1.0689690000017436, + 0.9171500000011292, + 0.9166639999984909, + 0.9254430000000866 + ] + }, + "1000000": { + "ingest": [ + 1257.1233060000013, + 1355.3273499999996, + 1168.9513430000006 + ], + "windowRead": [ + 0.011804562500060456, + 0.011684156249998523, + 0.011447999999973035, + 0.011666187499940861, + 0.013347843750011634, + 0.015945093750019623, + 0.01602834375000839, + 0.016362531249910717, + 0.01307421875003456, + 0.012791500000048472, + 0.0126917812500551, + 0.012279281250016538, + 0.012062249999985397, + 0.011708562499961772, + 0.014326593749956373, + 0.012843125000017608, + 0.013500156249961037, + 0.012233749999950305, + 0.012895468750002692, + 0.012059718749924286, + 0.01188531249999869, + 0.013630625000018881, + 0.011646718750057516, + 0.011428093750055268, + 0.011440500000048814, + 0.011153968750022614, + 0.011441156249929918, + 0.011726312500059066, + 0.013011093750037617, + 0.011666593749964704, + 0.01112734374999036, + 0.011481906249969143, + 0.010972843750096217, + 0.011185156250007822, + 0.01091818750001039, + 0.011022718749927662, + 0.0143335937499387, + 0.011687468749983054, + 0.011379718749935819, + 0.01609115624989954, + 0.01872531250000975, + 0.016048749999981737, + 0.013738999999986845, + 0.011484843750054097, + 0.01163109374999749, + 0.011345124999934342, + 0.014166093749963693, + 0.013344250000045577, + 0.012770749999958753, + 0.012962093750047643, + 0.012606562500081964, + 0.012476031250002961, + 0.012098656250032036, + 0.011752937499977634, + 0.01212612500000887, + 0.012121343749981861, + 0.011830031249928652, + 0.011786093749947213, + 0.012790562499958469, + 0.012191343750032502, + 0.011739312500026244, + 0.012443406249985856, + 0.01177946874997815, + 0.011547000000064145, + 0.012531000000080894, + 0.011819437499980268, + 0.01181031250007436, + 0.014316875000076834, + 0.014024718750079046, + 0.012187687500045286, + 0.0121321562500043, + 0.011937406250012828, + 0.011722937500053376, + 0.011844031250006992, + 0.012053156249976382, + 0.0169096875000605, + 0.017174218750028558, + 0.016596406249959728, + 0.01820937499996944, + 0.01422212500006026, + 0.01445156249997126, + 0.013505562499972257, + 0.013914250000084394, + 0.013502249999987725, + 0.013413312500006214, + 0.013552468750049229, + 0.012932281249959487, + 0.013052562499979103, + 0.020034374999909232, + 0.013295187500034444, + 0.013572218750027787, + 0.013381875000050059, + 0.013425093750015549, + 0.013233718749916079, + 0.013533468749983513, + 0.012688906249991305, + 0.012721843750000517, + 0.012784218749970933, + 0.012451406249965657, + 0.012321156249981868, + 0.012334843749954416, + 0.012485781250006767, + 0.012160031250004977, + 0.012124562500048341, + 0.014356031250031265, + 0.013284531249951215, + 0.01246746874994642, + 0.012145250000003216, + 0.012281531249982436, + 0.01228662500000155, + 0.014031468749976739, + 0.014338781249989552, + 0.01437034375010171, + 0.014541968749995249, + 0.014505062500006716, + 0.013830593749958098, + 0.013838000000077955, + 0.013871999999992113, + 0.014067156250007429, + 0.013097062500037282, + 0.014954843750047075, + 0.01364078125004653, + 0.014068281250047221, + 0.0132415000000492, + 0.014138218749963016, + 0.01318765625001106, + 0.014101031249992957, + 0.012872375000029024, + 0.012797593750065062, + 0.013281187500069791, + 0.012507749999940643, + 0.01276212499999474, + 0.012066968749991247, + 0.013953468750059983, + 0.012667374999978165, + 0.012661468750025051, + 0.012157249999972919, + 0.012120624999965912, + 0.011947593750051055, + 0.012231812499976513, + 0.012032593749950138, + 0.012394781250009146, + 0.01719956250008181, + 0.01447846874998504, + 0.014394062499945903, + 0.014563656250061285, + 0.0134822812500488, + 0.013510312500102373, + 0.01666637499999979, + 0.013139062499931242, + 0.013378312499980893, + 0.013421156250046806, + 0.013152343749993634, + 0.01280993750003745, + 0.013020593750070475, + 0.013232656250011132, + 0.012675312500050495, + 0.012768656250045751, + 0.01276262500005032, + 0.012649156250063243, + 0.01292650000004869, + 0.012519249999968451, + 0.012450968750044922, + 0.012534374999972897, + 0.012323968750024505, + 0.012691531249970467, + 0.012158187500062922, + 0.012884156249924672, + 0.011971218749977197, + 0.01231418750001012, + 0.011938687499991829, + 0.012047937500028638, + 0.01202903124999466, + 0.011996999999951186, + 0.013282656249998581, + 0.013355968750033753, + 0.013820062500030872, + 0.01649496875006662, + 0.012880281249977088, + 0.01356521875004546, + 0.016210718750016895, + 0.013232437500050764, + 0.01331515624997337, + 0.014140218750071654, + 0.013869874999954845, + 0.013069437500007552, + 0.013287156249930376, + 0.013112562500054992, + 0.013056187500069427, + 0.012412062499947751, + 0.012683687500043561, + 0.012534625000057531, + 0.012327312500019616, + 0.012629250000031789, + 0.012561062499912623, + 0.012127625000061926, + 0.012768875000006119, + 0.012050312499923166, + 0.012299343749987202, + 0.011969843750080145, + 0.012069812500044463, + 0.012118093750018488, + 0.012078406249997897, + 0.01219421874998261, + 0.01181315625001389, + 0.011735843750102504, + 0.016667906250063425, + 0.013320468749952852, + 0.013732812499938518, + 0.012891937499944106, + 0.013238093749919244, + 0.01310465624999324, + 0.013275843749966043, + 0.012828593749986794, + 0.01287403125002129, + 0.013189593749984851, + 0.012904812500096341, + 0.012666468750012427, + 0.012871406250042128, + 0.012462343750030414, + 0.012860156249985266, + 0.012325624999903084, + 0.01290837500005182, + 0.012336187499954576, + 0.01229953124993699, + 0.012807093749984233, + 0.013040999999930136, + 0.012776499999972657, + 0.012606593750092543, + 0.012599937499999214, + 0.012996125000086067, + 0.01240387500001816, + 0.01336846874994535, + 0.012866906249996646, + 0.01240528125003948, + 0.01629603125002177, + 0.012517218750076609, + 0.013029718749976382, + 0.013551000000006752, + 0.013465124999925138, + 0.01346546875004151, + 0.013196718750009495, + 0.013558218750063133, + 0.013171625000040876, + 0.013223906249891115, + 0.01290109374997428, + 0.012974687500104665, + 0.013685031250020074, + 0.012587781249976615, + 0.013147375000016837, + 0.012577343750081127, + 0.012922750000029737, + 0.01312890625001728, + 0.014530000000036125, + 0.015865218750036547, + 0.012602375000028587, + 0.012741312499997548, + 0.012784531249963038, + 0.012765250000029482, + 0.012815218750006352, + 0.01199465624995355, + 0.012507437500062224, + 0.012493750000089676, + 0.012748593749961401, + 0.015484031249911823, + 0.012482343749979918, + 0.012427281249983935, + 0.012541406249965803, + 0.012331562499980464, + 0.012129062500093823, + 0.013541656249913103, + 0.013322312500008593, + 0.013187781250053376, + 0.013355906250012595, + 0.012922062500024367, + 0.014560906250039807, + 0.013318124999955216, + 0.013061781250030435, + 0.01356318750003993, + 0.012753968750075728, + 0.013025812500018219, + 0.01301568750000115, + 0.012843125000017608, + 0.012827031250026266, + 0.012544406250071916, + 0.013042374999940876, + 0.01263874999995096, + 0.012668937499938693, + 0.012324499999976979, + 0.012299750000011045, + 0.012496343749944572, + 0.012369499999977052, + 0.01555834374994447, + 0.012891218750041844, + 0.027056937499992273, + 0.012386593749965868, + 0.013126124999985223, + 0.012633937499913372, + 0.012489593750046879, + 0.011909906250025415 + ], + "edit": [ + 3.89635300000009, + 3.684396000000561, + 3.807386000000406, + 3.8393939999987197, + 3.660756000001129 + ], + "sort": [ + 27.464762999999948, + 26.463843999998062, + 26.347148000000743, + 24.836660000000848, + 31.78472299999703 + ], + "filter": [ + 3.391769000001659, + 3.1931249999979627, + 3.555717999999615, + 3.7193499999993946, + 3.5200740000000224 + ], + "multiFilter": [ + 37.1073690000012, + 44.49552499999845, + 40.495120999999926, + 35.54239899999811, + 38.19160499999998 + ], + "distinctLow": [ + 45.974184000002424, + 44.83517500000016, + 51.13292700000238, + 46.175858999999036, + 37.7948699999979 + ], + "distinctHigh": [ + 258.91781600000104, + 274.45081500000015, + 275.62035000000105, + 272.99806799999715, + 274.85202899999786 + ], + "aggregate": [ + 2.1922969999977795, + 2.19338400000197, + 2.8622620000023744, + 3.541504000000714, + 2.2471089999999094, + 2.3913920000013604, + 2.2838009999977658, + 2.2646590000003926, + 2.2434859999993932, + 2.3961400000007416, + 2.3437879999983124, + 2.2824060000020836, + 2.379140000000916, + 2.249597999998514, + 2.6167870000026596, + 4.259216999998898, + 2.150519999999233, + 2.0974439999990864, + 2.1005440000008093, + 1.9888490000012098, + 2.044281000002229, + 1.989328999999998, + 1.8998969999993278, + 1.9604629999994359, + 2.268319999999221, + 3.0009049999971467, + 2.684540999998717, + 2.266457999998238, + 1.9700530000009167, + 1.8784150000028603, + 1.806179000002885, + 1.7128219999976864, + 1.7334399999999732, + 1.9140200000001641, + 1.7386379999989003, + 1.6494430000020657, + 1.8304380000008678, + 1.8169889999990119, + 1.6863440000015544, + 1.6157529999982216, + 1.654939000000013, + 1.6499249999978929, + 1.660265000002255, + 1.7896079999991343, + 1.815803000001324, + 1.8677370000004885, + 1.8474939999978233, + 1.8001570000014908, + 1.79871600000115, + 1.7934480000003532, + 1.794861000002129, + 1.9886250000017753, + 1.8897539999998116, + 1.7931740000021819, + 1.800731999999698, + 1.8520649999991292, + 1.8221340000018245, + 1.9506789999977627, + 1.7681830000001355, + 1.7538349999995262, + 1.7719819999983883, + 1.7451719999990019, + 1.7523679999976594, + 1.796106999998301, + 1.763290999999299, + 1.6880290000008245, + 1.9990260000013222, + 1.9399699999994482, + 1.8067659999978787, + 2.190956999998889, + 3.150879000000714, + 3.8378519999969285, + 1.8945780000030936, + 1.793439999997645, + 1.7746569999981148, + 1.7346880000004603, + 1.7233140000025742, + 1.7890769999976328, + 1.7802969999975176, + 1.7473879999997735, + 3.0264569999999367, + 1.6335379999982251, + 1.6179789999987406, + 1.6237870000004477, + 1.7089209999976447, + 1.9615389999999024, + 1.7499209999987215, + 2.1860349999988102, + 2.4667759999974805, + 1.7789119999979448, + 1.8185109999976703, + 1.8421759999982896, + 1.8397320000003674, + 1.8711030000013125, + 1.8009799999999814, + 2.0785280000018247, + 1.8896009999989474, + 1.8887200000026496, + 1.8871059999983117, + 1.9951789999977336, + 1.9302280000010796, + 1.9029940000000352, + 1.8831500000014785, + 2.0058720000015455, + 2.069206000000122, + 1.8994519999978365, + 1.9302029999998922, + 1.9058609999992768, + 2.1318780000001425, + 1.9440819999981613, + 1.8350289999980305, + 1.8643169999995735, + 2.1287450000018, + 1.863868000000366, + 1.9540699999997742, + 1.8660759999984293, + 1.8681710000018938, + 1.8347649999996065, + 1.8606739999995625, + 1.9262720000006084, + 1.8950680000016291, + 1.8502899999984947, + 1.8548339999979362, + 1.8697529999990365, + 1.828347999999096, + 3.013440000002447, + 1.7775169999986247, + 1.7022780000006605, + 1.7491740000004938, + 1.842740000000049, + 1.7233280000000377, + 1.7252810000027239, + 1.7098799999985204, + 1.837863999997353, + 1.7658030000020517, + 1.6369340000019292, + 2.1449890000003506, + 1.7477729999991425, + 1.8348919999989448, + 2.3146529999976337, + 2.3542170000000624, + 2.1637580000024172, + 2.0508520000003045, + 3.5813670000025013, + 2.1769789999998466, + 2.095805000000837, + 2.082384000001184, + 2.0686659999992116, + 2.064875000000029, + 2.129734999998618, + 2.0651399999987916, + 2.0205320000022766, + 2.2163460000010673, + 2.1032799999993586, + 2.575475000001461, + 2.3297869999987597, + 2.0978250000007392, + 3.5989820000031614, + 3.071949000001041, + 1.7113859999990382, + 1.6378449999974691, + 1.658501999998407, + 1.7125570000025618, + 2.7542450000000827, + 1.9058729999997013, + 1.6722520000002987, + 1.6893960000015795, + 1.8026209999989078, + 2.0898310000011406, + 2.653182999998535, + 4.966551999998046, + 1.998369000000821, + 1.968685000003461, + 1.93318200000067, + 1.8273770000014338, + 1.8063750000001164, + 1.9783470000002126, + 1.8320590000002994, + 1.8101470000001427, + 1.9352819999985513, + 2.1511979999995674, + 2.180022000000463, + 2.2252240000016172, + 2.9051389999985986, + 2.221066999998584, + 2.184496999998373, + 2.1815590000005614, + 2.1823829999993904, + 2.2287909999977273, + 3.189577000001009, + 2.15367999999944, + 2.10107699999935, + 1.9908210000030522, + 1.8729690000000119, + 1.7889439999999013, + 1.7477239999971061, + 1.9852329999994254, + 1.7235670000009122, + 1.6767209999998158, + 1.6557360000006156 + ] + } + } + } + ], + "formula": [ + { + "repetition": 1, + "captureSha256": "78374027adabade4b4e63b74661652876b8438ba1ae2729c01a50a9418ddd660", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:24:42.585Z" + }, + "source": { + "protocol": "formula-benchmark-v2", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "files": { + "bench/package.json": "203206a590058cdc8c6a2c9f6741ff4c1407080734cc967fd7b97754dae7e8c1", + "bench/src/formula-bench.ts": "814dda4c759a694f671987b344dd57900d08a3a2896fe8733468aab78f984272", + "bench/src/formula-dataset.ts": "2e7d91f025d2447abb33efa7fa7d8b90a0e8787a9b9c54fe1064b82520ac079d", + "bench/src/gate-protocol.ts": "b681b1d0639c7018ab1af84bf38e7f48cd4a4544659bfbd337ca9e7512bab61b", + "bench/src/protocol-meta.ts": "229884d4d408527d6bb9a0983c92dbffe47b0f2b64ca32316494f22056da7aa6", + "bench/src/stats.ts": "4659c44455c7beb012ce355e9c5863c7e2d7273faf377b43337ba7e4de4c000f", + "bun.lock": "55ea174bc73aca5c016c4e85b7ac718e8605e54fd45b2ef4a736f0ee9480ee0b", + "packages/wasm/pkg/sheetwrite_wasm.js": "560c5416f6175a4a69d566fba895c9375dda064b3ef00c99e8a3410b5925d76f", + "packages/wasm/pkg/sheetwrite_wasm_bg.wasm": "30cea03279ef597f216942d07e663f44a2cce1164bc27df82ff34529706ca12d" + }, + "digest": "e7fbae3db930bb8fe27bcd417fe498d6f19315297813249129f9c2d3857a17e1" + }, + "workloads": [ + { + "id": "independent-parse-load", + "size": 1000, + "samplesMs": [ + 1.5795770000000005, + 1.4661670000000058, + 3.3645470000000017, + 1.3690129999999954, + 1.0240739999999988 + ], + "allocationSamples": [ + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-first-recompute", + "size": 1000, + "samplesMs": [ + 1.1445690000000042, + 0.8564379999999971, + 0.794226000000009, + 0.9696319999999901, + 1.6457460000000026 + ], + "allocationSamples": [ + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-parse-load", + "size": 10000, + "samplesMs": [ + 9.824538000000004, + 8.858689999999996, + 9.380361999999991, + 8.142860999999982, + 7.824022000000014 + ], + "allocationSamples": [ + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-first-recompute", + "size": 10000, + "samplesMs": [ + 7.463593000000003, + 6.559544999999957, + 6.9523229999999785, + 7.576901000000021, + 7.043545999999992 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-parse-load", + "size": 100000, + "samplesMs": [ + 80.91988700000002, + 70.225324, + 64.00601299999994, + 65.31900600000017, + 69.0817340000001 + ], + "allocationSamples": [ + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "independent-first-recompute", + "size": 100000, + "samplesMs": [ + 130.11559100000022, + 119.26526599999988, + 126.04657300000008, + 124.79964999999993, + 129.25106899999992 + ], + "allocationSamples": [ + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "linear-chain", + "size": 8, + "samplesMs": [ + 0.03056700000024648, + 0.014771999999993568, + 0.013117999999849417, + 0.012552000000141561, + 0.013703999999961525 + ], + "allocationSamples": [ + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 8 + }, + { + "id": "linear-chain", + "size": 16, + "samplesMs": [ + 0.024777999999969325, + 0.022575999999844498, + 0.023185000000012224, + 0.0236880000002202, + 0.022203999999874213 + ], + "allocationSamples": [ + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 16 + }, + { + "id": "linear-chain", + "size": 32, + "samplesMs": [ + 0.04476100000010774, + 0.04145800000014788, + 0.038699000000178785, + 0.03688899999997375, + 0.03888299999971423 + ], + "allocationSamples": [ + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 32 + }, + { + "id": "linear-chain", + "size": 64, + "samplesMs": [ + 0.07277700000031473, + 0.08186799999975847, + 0.07419600000002902, + 0.07066399999985151, + 0.07308899999998175 + ], + "allocationSamples": [ + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 64 + }, + { + "id": "wide-fan-out-edit", + "size": 1000, + "samplesMs": [ + 0.3997669999998834, + 0.350296999999955, + 0.36361299999998664, + 0.34268299999985175, + 0.3668440000001283 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "wide-fan-out-edit", + "size": 100000, + "samplesMs": [ + 66.43981799999983, + 72.05515399999967, + 74.0331899999992, + 69.16450999999961, + 65.87972399999944 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "diamond-edit", + "size": 32, + "samplesMs": [ + 0.11433200000010402, + 0.10049700000035955, + 0.10051500000008673, + 0.11639300000024377, + 0.19386900000063179 + ], + "allocationSamples": [ + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 21474836477 + }, + { + "id": "shared-range-edit", + "size": 1000, + "samplesMs": [ + 0.6633230000006733, + 0.5991500000000087, + 0.546053000000029, + 0.79678100000001, + 0.5264310000002297 + ], + "allocationSamples": [ + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 101 + }, + { + "id": "distinct-range-edit", + "size": 1000, + "samplesMs": [ + 0.021875000000363798, + 0.01523899999938294, + 0.013428999999632651, + 0.014482000000498374, + 0.01538299999992887 + ], + "allocationSamples": [ + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "11:10" + }, + { + "id": "cross-sheet-range-edit", + "size": 1000, + "samplesMs": [ + 0.6663260000004811, + 0.8848299999999654, + 1.2904310000003534, + 0.7265710000001491, + 1.2116869999999835 + ], + "allocationSamples": [ + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100 + }, + { + "id": "scalar-edit-affects-0", + "size": 1000, + "samplesMs": [ + 0.002555000000029395, + 0.005583000000115135, + 0.004312000000027183, + 0.003470999999990454, + 0.003931000000193308 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1001 + }, + { + "id": "scalar-edit-affects-1", + "size": 1, + "samplesMs": [ + 0.005607999999483582, + 0.006510000000162108, + 0.009544999999889114, + 0.0026499999994484824, + 0.009962000000086846 + ], + "allocationSamples": [ + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 11 + }, + { + "id": "scalar-edit-affects-1000", + "size": 1000, + "samplesMs": [ + 0.37644000000000233, + 0.37047100000017963, + 0.590183999999681, + 0.40117499999996653, + 0.3720839999996315 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "scalar-edit-affects-100000", + "size": 100000, + "samplesMs": [ + 63.58100699999977, + 63.6485219999995, + 70.08261800000037, + 66.80405799999971, + 78.74108499999966 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "topology-remove-add", + "size": 10000, + "samplesMs": [ + 10.27083599999969, + 11.329364999999598, + 11.538214999999582, + 12.900190999999722, + 10.312480000000505 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "2:10000" + }, + { + "id": "cycles", + "size": 1000, + "samplesMs": [ + 1.696284999999989, + 1.5977979999997842, + 1.5789199999999255, + 1.5245640000002822, + 1.5714230000003226 + ], + "allocationSamples": [ + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#CYCLE!" + }, + { + "id": "removed-sheet-ref", + "size": 1000, + "samplesMs": [ + 0.44712300000082905, + 0.4453209999992396, + 0.44855400000051304, + 0.44229100000029575, + 0.4373959999993531 + ], + "allocationSamples": [ + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#REF!" + }, + { + "id": "error-propagation", + "size": 1000, + "samplesMs": [ + 0.8372190000000046, + 0.8256400000000212, + 0.824507000000267, + 0.7982350000002043, + 0.8198629999997138 + ], + "allocationSamples": [ + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#DIV/0!" + }, + { + "id": "criteria-range-edit", + "size": 100000, + "samplesMs": [ + 8.666056999999455, + 6.01224000000002, + 6.31159899999966, + 6.347642000000633, + 6.310285000000476 + ], + "allocationSamples": [ + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 50001 + }, + { + "id": "lookup-range-edit", + "size": 100000, + "samplesMs": [ + 6.566501000000244, + 6.806094000000485, + 6.46828000000005, + 5.201143999999658, + 5.239841999999953 + ], + "allocationSamples": [ + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 199998 + }, + { + "id": "spill-filter-resize", + "size": 100000, + "samplesMs": [ + 40.27655700000014, + 33.45545099999981, + 34.88969900000029, + 33.04499299999952, + 33.33113200000025 + ], + "allocationSamples": [ + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + } + ], + "output": "99999:0" + }, + { + "id": "sumproduct-vector-edit", + "size": 100000, + "samplesMs": [ + 5.372911999999815, + 5.427117999999609, + 5.2291809999996985, + 5.25644100000045, + 5.5896160000002055 + ], + "allocationSamples": [ + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100004 + }, + { + "id": "sumproduct-matrix-edit", + "size": 100000, + "samplesMs": [ + 6.84002000000055, + 5.513097000000016, + 5.315206999999646, + 5.363234000000375, + 5.326597999999649 + ], + "allocationSamples": [ + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 200004 + }, + { + "id": "criteria-multi-range-edit", + "size": 100000, + "samplesMs": [ + 13.578040000000328, + 13.429904000000533, + 13.638914999999542, + 13.363572000000204, + 13.3171540000003 + ], + "allocationSamples": [ + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + } + ], + "output": 74999 + }, + { + "id": "unicode-text-date-edit", + "size": 1000, + "samplesMs": [ + 1.3479279999992286, + 1.1746189999994385, + 1.2906500000008236, + 1.2922660000003816, + 1.2493579999991198 + ], + "allocationSamples": [ + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 173864 + }, + { + "id": "percentile-covariance", + "size": 100000, + "samplesMs": [ + 9.319494999999733, + 9.152303000000757, + 8.004186000000118, + 9.245378999999957, + 8.458199999999124 + ], + "allocationSamples": [ + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1666756666.6 + }, + { + "id": "let-reuse-edit", + "size": 100000, + "samplesMs": [ + 4.565703000000212, + 3.7447830000000977, + 5.2574910000003, + 4.1295200000004115, + 4.676975000000311 + ], + "allocationSamples": [ + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 300003 + }, + { + "id": "iterative-finance", + "size": 1000, + "samplesMs": [ + 4.180155000000013, + 4.711735000000772, + 3.6574390000005224, + 3.7471719999994093, + 3.5038619999995717 + ], + "allocationSamples": [ + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 0.16807260450028427 + }, + { + "id": "incremental-dependency-closure-edit", + "size": 100000, + "samplesMs": [ + 0.030395000001590233, + 0.01863200000116194, + 0.021752999999080203, + 0.01779499999975087, + 0.021165000000110012 + ], + "allocationSamples": [ + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "12:100001" + }, + { + "id": "spill-sequence-admission", + "size": 100000, + "samplesMs": [ + 15.30885599999965, + 15.22599799999989, + 14.587776999998823, + 13.347792000000481, + 15.892853000001196 + ], + "allocationSamples": [ + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + } + ], + "output": "1:100000:0" + } + ] + }, + { + "repetition": 2, + "captureSha256": "c713b763fc6d0ccd6f359a985cbe1191b7293cf128cd4a17c8df40f4ca430153", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:35:24.258Z" + }, + "source": { + "protocol": "formula-benchmark-v2", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "files": { + "bench/package.json": "203206a590058cdc8c6a2c9f6741ff4c1407080734cc967fd7b97754dae7e8c1", + "bench/src/formula-bench.ts": "814dda4c759a694f671987b344dd57900d08a3a2896fe8733468aab78f984272", + "bench/src/formula-dataset.ts": "2e7d91f025d2447abb33efa7fa7d8b90a0e8787a9b9c54fe1064b82520ac079d", + "bench/src/gate-protocol.ts": "b681b1d0639c7018ab1af84bf38e7f48cd4a4544659bfbd337ca9e7512bab61b", + "bench/src/protocol-meta.ts": "229884d4d408527d6bb9a0983c92dbffe47b0f2b64ca32316494f22056da7aa6", + "bench/src/stats.ts": "4659c44455c7beb012ce355e9c5863c7e2d7273faf377b43337ba7e4de4c000f", + "bun.lock": "55ea174bc73aca5c016c4e85b7ac718e8605e54fd45b2ef4a736f0ee9480ee0b", + "packages/wasm/pkg/sheetwrite_wasm.js": "560c5416f6175a4a69d566fba895c9375dda064b3ef00c99e8a3410b5925d76f", + "packages/wasm/pkg/sheetwrite_wasm_bg.wasm": "30cea03279ef597f216942d07e663f44a2cce1164bc27df82ff34529706ca12d" + }, + "digest": "e7fbae3db930bb8fe27bcd417fe498d6f19315297813249129f9c2d3857a17e1" + }, + "workloads": [ + { + "id": "independent-parse-load", + "size": 1000, + "samplesMs": [ + 3.0205699999999993, + 1.9052310000000006, + 2.4847880000000018, + 1.3348569999999995, + 0.728043999999997 + ], + "allocationSamples": [ + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-first-recompute", + "size": 1000, + "samplesMs": [ + 1.4851110000000034, + 1.4317729999999926, + 1.4102630000000005, + 0.6850339999999875, + 0.6998090000000019 + ], + "allocationSamples": [ + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-parse-load", + "size": 10000, + "samplesMs": [ + 7.406389000000004, + 7.935664000000003, + 7.938579000000004, + 8.730450999999988, + 6.657006000000024 + ], + "allocationSamples": [ + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-first-recompute", + "size": 10000, + "samplesMs": [ + 7.116251000000034, + 9.216615999999988, + 6.34259000000003, + 6.520899000000043, + 6.31346400000001 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-parse-load", + "size": 100000, + "samplesMs": [ + 64.39670899999999, + 63.731037000000015, + 70.91935199999989, + 75.03357499999993, + 79.30352100000005 + ], + "allocationSamples": [ + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "independent-first-recompute", + "size": 100000, + "samplesMs": [ + 128.05100200000015, + 130.9869689999996, + 130.0408849999999, + 121.7379490000003, + 129.8614279999997 + ], + "allocationSamples": [ + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "linear-chain", + "size": 8, + "samplesMs": [ + 0.03772399999979825, + 0.01850800000011077, + 0.016565999999784253, + 0.01519800000005489, + 0.01608299999998053 + ], + "allocationSamples": [ + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 8 + }, + { + "id": "linear-chain", + "size": 16, + "samplesMs": [ + 0.030196000000159984, + 0.026413999999931548, + 0.025262999999995372, + 0.027264000000286615, + 0.03308100000003833 + ], + "allocationSamples": [ + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 16 + }, + { + "id": "linear-chain", + "size": 32, + "samplesMs": [ + 0.055455000000165455, + 0.047352000000046246, + 0.04525499999999738, + 0.04264899999998306, + 0.052686999999878026 + ], + "allocationSamples": [ + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 32 + }, + { + "id": "linear-chain", + "size": 64, + "samplesMs": [ + 0.07949600000029022, + 0.08158500000035929, + 0.07480500000019674, + 0.07760000000007494, + 0.07614700000021912 + ], + "allocationSamples": [ + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 64 + }, + { + "id": "wide-fan-out-edit", + "size": 1000, + "samplesMs": [ + 0.4162429999996675, + 0.417084000000159, + 0.4061549999996714, + 0.5646890000002713, + 0.3612860000002911 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "wide-fan-out-edit", + "size": 100000, + "samplesMs": [ + 68.55190700000003, + 66.85871999999927, + 72.00526600000012, + 67.64061999999922, + 62.06122099999993 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "diamond-edit", + "size": 32, + "samplesMs": [ + 0.16659400000025926, + 0.14913200000046345, + 0.1416349999999511, + 0.09354100000018661, + 0.09208000000035099 + ], + "allocationSamples": [ + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 21474836477 + }, + { + "id": "shared-range-edit", + "size": 1000, + "samplesMs": [ + 0.5858840000000782, + 0.5550309999998717, + 0.5408999999999651, + 0.5522879999998622, + 0.5400720000006913 + ], + "allocationSamples": [ + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 101 + }, + { + "id": "distinct-range-edit", + "size": 1000, + "samplesMs": [ + 0.020491000000220083, + 0.013460000000122818, + 0.012542000000394182, + 0.012276999999812688, + 0.01125199999933102 + ], + "allocationSamples": [ + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "11:10" + }, + { + "id": "cross-sheet-range-edit", + "size": 1000, + "samplesMs": [ + 0.6503280000006271, + 0.5828900000005888, + 0.6051969999998619, + 0.9161130000002231, + 0.9838820000004489 + ], + "allocationSamples": [ + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100 + }, + { + "id": "scalar-edit-affects-0", + "size": 1000, + "samplesMs": [ + 0.0042709999997896375, + 0.004369999999653373, + 0.003456000000369386, + 0.0026709999992817757, + 0.0025669999995443504 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1001 + }, + { + "id": "scalar-edit-affects-1", + "size": 1, + "samplesMs": [ + 0.0034720000003289897, + 0.004979000000275846, + 0.002983999999742082, + 0.002719000000070082, + 0.003764000000046508 + ], + "allocationSamples": [ + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 11 + }, + { + "id": "scalar-edit-affects-1000", + "size": 1000, + "samplesMs": [ + 0.3712150000001202, + 0.351741999999831, + 0.3406559999993988, + 0.3510740000001533, + 0.3455119999998715 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "scalar-edit-affects-100000", + "size": 100000, + "samplesMs": [ + 68.4489709999998, + 67.47665799999959, + 69.33688600000005, + 74.99966099999983, + 69.92681800000082 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "topology-remove-add", + "size": 10000, + "samplesMs": [ + 9.060583000000406, + 10.028438000000278, + 8.730736000000434, + 9.220924999999625, + 9.223678000000291 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "2:10000" + }, + { + "id": "cycles", + "size": 1000, + "samplesMs": [ + 1.5533500000001368, + 1.6941730000007738, + 1.5848539999997229, + 1.5812340000002223, + 1.5575199999993856 + ], + "allocationSamples": [ + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#CYCLE!" + }, + { + "id": "removed-sheet-ref", + "size": 1000, + "samplesMs": [ + 0.5057619999997769, + 0.8088390000002619, + 0.8017270000000281, + 0.7756250000002183, + 0.7525879999993776 + ], + "allocationSamples": [ + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#REF!" + }, + { + "id": "error-propagation", + "size": 1000, + "samplesMs": [ + 1.3802670000004582, + 0.818637000000308, + 0.9803709999996499, + 0.7998479999996562, + 0.828560999999354 + ], + "allocationSamples": [ + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#DIV/0!" + }, + { + "id": "criteria-range-edit", + "size": 100000, + "samplesMs": [ + 4.776482000000215, + 5.875050000000556, + 6.132204999999885, + 6.345397999999477, + 6.441412000000128 + ], + "allocationSamples": [ + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 50001 + }, + { + "id": "lookup-range-edit", + "size": 100000, + "samplesMs": [ + 7.243404999999257, + 7.128174999999828, + 6.797666999999819, + 6.87246899999991, + 7.085621000000174 + ], + "allocationSamples": [ + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 199998 + }, + { + "id": "spill-filter-resize", + "size": 100000, + "samplesMs": [ + 39.59876299999996, + 37.47485599999982, + 35.61579299999994, + 33.633114999999634, + 34.46503500000017 + ], + "allocationSamples": [ + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + } + ], + "output": "99999:0" + }, + { + "id": "sumproduct-vector-edit", + "size": 100000, + "samplesMs": [ + 5.200834000000214, + 5.05902099999912, + 5.347002999999859, + 6.5113320000000385, + 4.8953559999999925 + ], + "allocationSamples": [ + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100004 + }, + { + "id": "sumproduct-matrix-edit", + "size": 100000, + "samplesMs": [ + 5.636066999999457, + 6.022940999999264, + 5.683441999999559, + 5.636100000001534, + 5.446767999999793 + ], + "allocationSamples": [ + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 200004 + }, + { + "id": "criteria-multi-range-edit", + "size": 100000, + "samplesMs": [ + 14.265792999998666, + 12.957711000000927, + 16.69690499999888, + 14.64071199999853, + 20.073475999999573 + ], + "allocationSamples": [ + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + } + ], + "output": 74999 + }, + { + "id": "unicode-text-date-edit", + "size": 1000, + "samplesMs": [ + 2.987506999999823, + 2.7110969999994268, + 1.4333330000008573, + 1.2520690000001196, + 1.2254609999999957 + ], + "allocationSamples": [ + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 173864 + }, + { + "id": "percentile-covariance", + "size": 100000, + "samplesMs": [ + 12.020941999999195, + 11.085785000001124, + 11.402680000001055, + 11.63137800000004, + 8.076156999999512 + ], + "allocationSamples": [ + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1666756666.6 + }, + { + "id": "let-reuse-edit", + "size": 100000, + "samplesMs": [ + 3.7082030000001396, + 4.354053999999451, + 7.015419000001202, + 3.8085440000013477, + 3.851623999998992 + ], + "allocationSamples": [ + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 300003 + }, + { + "id": "iterative-finance", + "size": 1000, + "samplesMs": [ + 3.3816189999997732, + 5.401555000000371, + 3.556570999999167, + 3.638559000000896, + 3.7154969999992318 + ], + "allocationSamples": [ + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 0.16807260450028427 + }, + { + "id": "incremental-dependency-closure-edit", + "size": 100000, + "samplesMs": [ + 0.030260999999882188, + 0.016605999999228516, + 0.017641999998886604, + 0.020709000000351807, + 0.02143699999942328 + ], + "allocationSamples": [ + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "12:100001" + }, + { + "id": "spill-sequence-admission", + "size": 100000, + "samplesMs": [ + 14.183533999999781, + 11.691041000000041, + 13.699583999999959, + 15.500098000000435, + 18.47310800000014 + ], + "allocationSamples": [ + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + } + ], + "output": "1:100000:0" + } + ] + }, + { + "repetition": 3, + "captureSha256": "fedb0a2b01dd65f8cd297530a6d3a54b40d17fd5617fad7267621ae851b3e27e", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T13:01:28.192Z" + }, + "source": { + "protocol": "formula-benchmark-v2", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "files": { + "bench/package.json": "203206a590058cdc8c6a2c9f6741ff4c1407080734cc967fd7b97754dae7e8c1", + "bench/src/formula-bench.ts": "814dda4c759a694f671987b344dd57900d08a3a2896fe8733468aab78f984272", + "bench/src/formula-dataset.ts": "2e7d91f025d2447abb33efa7fa7d8b90a0e8787a9b9c54fe1064b82520ac079d", + "bench/src/gate-protocol.ts": "b681b1d0639c7018ab1af84bf38e7f48cd4a4544659bfbd337ca9e7512bab61b", + "bench/src/protocol-meta.ts": "229884d4d408527d6bb9a0983c92dbffe47b0f2b64ca32316494f22056da7aa6", + "bench/src/stats.ts": "4659c44455c7beb012ce355e9c5863c7e2d7273faf377b43337ba7e4de4c000f", + "bun.lock": "55ea174bc73aca5c016c4e85b7ac718e8605e54fd45b2ef4a736f0ee9480ee0b", + "packages/wasm/pkg/sheetwrite_wasm.js": "560c5416f6175a4a69d566fba895c9375dda064b3ef00c99e8a3410b5925d76f", + "packages/wasm/pkg/sheetwrite_wasm_bg.wasm": "30cea03279ef597f216942d07e663f44a2cce1164bc27df82ff34529706ca12d" + }, + "digest": "e7fbae3db930bb8fe27bcd417fe498d6f19315297813249129f9c2d3857a17e1" + }, + "workloads": [ + { + "id": "independent-parse-load", + "size": 1000, + "samplesMs": [ + 1.3434289999999933, + 1.7020410000000012, + 3.368095000000004, + 1.3167159999999996, + 1.1672619999999938 + ], + "allocationSamples": [ + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-first-recompute", + "size": 1000, + "samplesMs": [ + 0.8225179999999881, + 0.7913329999999945, + 0.9388900000000007, + 0.7616639999999961, + 0.7956530000000015 + ], + "allocationSamples": [ + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-parse-load", + "size": 10000, + "samplesMs": [ + 8.929238999999981, + 8.962317000000013, + 11.364390999999983, + 8.127924000000007, + 6.4406999999999925 + ], + "allocationSamples": [ + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-first-recompute", + "size": 10000, + "samplesMs": [ + 9.632232999999985, + 6.250352000000021, + 6.452897000000007, + 7.349217999999951, + 7.0569470000000365 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-parse-load", + "size": 100000, + "samplesMs": [ + 70.04690100000005, + 77.77657299999998, + 76.38425600000005, + 78.88037299999996, + 73.55316700000003 + ], + "allocationSamples": [ + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "independent-first-recompute", + "size": 100000, + "samplesMs": [ + 134.09473799999978, + 132.2008639999999, + 120.06235100000004, + 124.97321099999999, + 129.52654800000028 + ], + "allocationSamples": [ + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "linear-chain", + "size": 8, + "samplesMs": [ + 0.03512200000022858, + 0.023474000000078377, + 0.024641000000428903, + 0.024086000000352215, + 0.022559999999884894 + ], + "allocationSamples": [ + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 8 + }, + { + "id": "linear-chain", + "size": 16, + "samplesMs": [ + 0.040838999999778025, + 0.034988999999768566, + 0.03574799999978495, + 0.034548999999969965, + 0.03516300000001138 + ], + "allocationSamples": [ + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 16 + }, + { + "id": "linear-chain", + "size": 32, + "samplesMs": [ + 0.0667329999996582, + 0.06039700000019366, + 0.06137899999976071, + 0.058109000000058586, + 0.06616399999984424 + ], + "allocationSamples": [ + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 32 + }, + { + "id": "linear-chain", + "size": 64, + "samplesMs": [ + 0.1083730000000287, + 0.08390999999983251, + 0.071418999999878, + 0.11555600000019695, + 0.12118700000019089 + ], + "allocationSamples": [ + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 64 + }, + { + "id": "wide-fan-out-edit", + "size": 1000, + "samplesMs": [ + 0.6305889999998726, + 0.4616160000000491, + 0.4554929999999331, + 0.43802999999979875, + 0.6469349999997576 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "wide-fan-out-edit", + "size": 100000, + "samplesMs": [ + 67.8440499999997, + 68.56318100000044, + 65.12410799999998, + 71.43372399999953, + 64.25678599999992 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "diamond-edit", + "size": 32, + "samplesMs": [ + 0.0909750000000713, + 0.09507300000041141, + 0.08739000000059605, + 0.09176500000012311, + 0.0904209999998784 + ], + "allocationSamples": [ + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 21474836477 + }, + { + "id": "shared-range-edit", + "size": 1000, + "samplesMs": [ + 0.5845840000001772, + 0.5494509999998627, + 0.5677839999998469, + 0.667197999999189, + 0.5373700000000099 + ], + "allocationSamples": [ + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 101 + }, + { + "id": "distinct-range-edit", + "size": 1000, + "samplesMs": [ + 0.027417999999670428, + 0.02102500000000873, + 0.014261000000260537, + 0.02067099999931088, + 0.014877999999953317 + ], + "allocationSamples": [ + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "11:10" + }, + { + "id": "cross-sheet-range-edit", + "size": 1000, + "samplesMs": [ + 0.5842849999999089, + 0.5973690000000715, + 0.6101339999995616, + 0.5918309999997291, + 0.5692879999996876 + ], + "allocationSamples": [ + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100 + }, + { + "id": "scalar-edit-affects-0", + "size": 1000, + "samplesMs": [ + 0.0023499999997511622, + 0.0030859999997119303, + 0.002629000000524684, + 0.0038640000002487795, + 0.0026330000000598375 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1001 + }, + { + "id": "scalar-edit-affects-1", + "size": 1, + "samplesMs": [ + 0.0034290000003238674, + 0.0028529999999591382, + 0.0029169999997975538, + 0.0031650000000809086, + 0.003545999999914784 + ], + "allocationSamples": [ + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 11 + }, + { + "id": "scalar-edit-affects-1000", + "size": 1000, + "samplesMs": [ + 0.3897739999993064, + 0.3462500000005093, + 0.35456499999963853, + 0.3458519999994678, + 0.34940800000003946 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "scalar-edit-affects-100000", + "size": 100000, + "samplesMs": [ + 66.33443899999929, + 69.70844099999977, + 64.88297200000034, + 64.82152099999985, + 70.82767899999999 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "topology-remove-add", + "size": 10000, + "samplesMs": [ + 11.231098000000202, + 9.388973000000078, + 10.849177000000054, + 11.17707799999971, + 11.164444000000003 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "2:10000" + }, + { + "id": "cycles", + "size": 1000, + "samplesMs": [ + 1.9080430000003616, + 1.698210999999901, + 1.6078410000000076, + 1.7224480000004405, + 1.835613000000194 + ], + "allocationSamples": [ + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#CYCLE!" + }, + { + "id": "removed-sheet-ref", + "size": 1000, + "samplesMs": [ + 0.971773000000212, + 0.47774200000003475, + 0.45491300000048795, + 0.4658640000006926, + 0.4465700000000652 + ], + "allocationSamples": [ + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#REF!" + }, + { + "id": "error-propagation", + "size": 1000, + "samplesMs": [ + 0.7942610000000059, + 1.2762189999994007, + 0.9425019999998767, + 0.8292229999997289, + 0.7841900000003079 + ], + "allocationSamples": [ + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#DIV/0!" + }, + { + "id": "criteria-range-edit", + "size": 100000, + "samplesMs": [ + 5.718300999999883, + 5.061709999999948, + 5.108065000000352, + 5.284603000000061, + 4.9053350000003775 + ], + "allocationSamples": [ + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 50001 + }, + { + "id": "lookup-range-edit", + "size": 100000, + "samplesMs": [ + 5.489748999999392, + 7.176370000000134, + 5.5643959999997605, + 5.569134999999733, + 5.469269999999597 + ], + "allocationSamples": [ + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 199998 + }, + { + "id": "spill-filter-resize", + "size": 100000, + "samplesMs": [ + 38.764196000000084, + 32.20295100000021, + 39.01300999999967, + 36.89545300000009, + 33.66366199999993 + ], + "allocationSamples": [ + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + } + ], + "output": "99999:0" + }, + { + "id": "sumproduct-vector-edit", + "size": 100000, + "samplesMs": [ + 5.15735499999937, + 5.288422999999966, + 5.251807999999983, + 5.4094029999996565, + 5.538862000000336 + ], + "allocationSamples": [ + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100004 + }, + { + "id": "sumproduct-matrix-edit", + "size": 100000, + "samplesMs": [ + 5.447940000000017, + 5.618956999999682, + 6.785704999999325, + 6.077336000000287, + 6.798404999999548 + ], + "allocationSamples": [ + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 200004 + }, + { + "id": "criteria-multi-range-edit", + "size": 100000, + "samplesMs": [ + 12.858253000000332, + 15.049965000000157, + 12.75521099999969, + 13.841073999999935, + 16.644890999999916 + ], + "allocationSamples": [ + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + } + ], + "output": 74999 + }, + { + "id": "unicode-text-date-edit", + "size": 1000, + "samplesMs": [ + 1.3795420000005834, + 1.5602440000002389, + 1.3073800000001938, + 1.4363690000009228, + 1.5141810000004625 + ], + "allocationSamples": [ + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 173864 + }, + { + "id": "percentile-covariance", + "size": 100000, + "samplesMs": [ + 8.912494000000152, + 8.292828000001464, + 8.485498000000007, + 8.516884000000573, + 9.975350000000617 + ], + "allocationSamples": [ + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1666756666.6 + }, + { + "id": "let-reuse-edit", + "size": 100000, + "samplesMs": [ + 4.518981999999596, + 4.685413999999582, + 4.8299820000011096, + 6.170055000000502, + 4.256279999999606 + ], + "allocationSamples": [ + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 300003 + }, + { + "id": "iterative-finance", + "size": 1000, + "samplesMs": [ + 4.294464999999036, + 4.225423999998384, + 7.584890000000087, + 4.494286999999531, + 3.6295909999989817 + ], + "allocationSamples": [ + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 0.16807260450028427 + }, + { + "id": "incremental-dependency-closure-edit", + "size": 100000, + "samplesMs": [ + 0.038650000000416185, + 0.01973099999850092, + 0.0188430000016524, + 0.023541000000477652, + 0.02075199999853794 + ], + "allocationSamples": [ + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "12:100001" + }, + { + "id": "spill-sequence-admission", + "size": 100000, + "samplesMs": [ + 15.26835100000062, + 12.751597000000402, + 12.113826999999219, + 12.267813000000388, + 12.305056999999579 + ], + "allocationSamples": [ + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + } + ], + "output": "1:100000:0" + } + ] + } + ], + "render": [ + { + "pass": 1, + "captureSha256": "dce76dabd7d2dfc1e4b21c847b448050b2255f02e1fefd5df79be8a78d473dbe", + "gate": "pass: complete matched comparison found no statistically detected regression", + "metadata": { + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:04:12.871Z", + "bunVersion": "1.3.14", + "nodeVersion": "24.3.0", + "browserVersion": "149.0.7827.55", + "os": "linux 7.1.3-2-cachyos", + "arch": "x64", + "cpu": "12th Gen Intel(R) Core(TM) i9-12900H", + "engineVersions": { + "sheetwrite": "0.3.1", + "handsontable": "18.0.0" + }, + "datasetSeed": 1592639710, + "datasetHashes": { + "100000": "fnv1a32:178eac66" + }, + "viewport": { + "width": 640, + "height": 480 + }, + "measuredSamples": 3, + "warmupSamples": 1, + "minimumSampleDurationMs": 100, + "rounds": 10, + "orderSeed": 1371602926, + "engineOrder": [ + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ] + ], + "launchAttempts": [ + { + "round": 1, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 1, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 2, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 2, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 3, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 3, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 4, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 4, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 5, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 5, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 6, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 6, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 7, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 7, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 8, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 8, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 9, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 9, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 10, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 10, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + } + ] + }, + "results": [ + { + "round": 1, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.2493827160430588, + 1.1847058823496541, + 1.1904761904789622 + ] + }, + { + "round": 1, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.094565217393329, + 1.082795698926734, + 1.1976190476173845 + ] + }, + { + "round": 1, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.484651162792647, + 0.3872586872561702, + 0.42058823530331346 + ] + }, + { + "round": 1, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3522388059708443, + 0.253317535544803, + 0.25252525252642843 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.4985074626770686, + 0.44140969162051963, + 0.44185022026247095 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.559217877101996, + 0.5340425531810863, + 0.5451086956473654 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4399122807111493, + 0.4721698113189975, + 0.5510989010927605 + ] + }, + { + "round": 1, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.9268518518527142, + 0.7613636363918582, + 0.741481481483896 + ] + }, + { + "round": 1, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.5692307692236054, + 2.5048780487736733, + 2.7432432432432434 + ] + }, + { + "round": 1, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.506060606087417, + 2.421428571399745, + 2.4463414634214486 + ] + }, + { + "round": 1, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5664835164814697, + 0.5434782608758921, + 0.5392473118282074 + ] + }, + { + "round": 1, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6172839506273445, + 0.5672043010740171, + 0.6293750000069849 + ] + }, + { + "round": 1, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.8630252100777727, + 0.7275362318783216, + 0.8411764705870614 + ] + }, + { + "round": 1, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.2871584699456097, + 0.26620046620035764, + 0.23466042154501313 + ] + }, + { + "round": 2, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.269620253159252, + 1.106593406603129, + 1.204819277114044 + ] + }, + { + "round": 2, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.080645161292826, + 1.1790697674380701, + 1.3594594594795961 + ] + }, + { + "round": 2, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4563636363610964, + 0.4157676348516803, + 0.40199999999906866 + ] + }, + { + "round": 2, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.34051446945307673, + 0.2979166666634791, + 0.26551724138758603 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5716666666622687, + 0.5153846153726753, + 0.5253886010406124 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.539247311830711, + 0.4716981132097437, + 0.568888888884491 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4282051282118942, + 0.4488789237714101, + 0.4493273542692776 + ] + }, + { + "round": 2, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7611940298298958, + 0.9609523809470591, + 0.7414814814907947 + ] + }, + { + "round": 2, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.4285714285714284, + 2.6342105263059863, + 2.902857142839847 + ] + }, + { + "round": 2, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.6894736841970466, + 2.4682926829540874, + 2.712820512833647 + ] + }, + { + "round": 2, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6103658536605242, + 0.6519480519534947, + 0.6256250000005821 + ] + }, + { + "round": 2, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6048192771148857, + 0.5572222222186004, + 0.6229813664700397 + ] + }, + { + "round": 2, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6341772151954731, + 0.6917241379265384, + 0.6903448275788205 + ] + }, + { + "round": 2, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.29880597014953175, + 0.31446540880503143, + 0.2717171717168189 + ] + }, + { + "round": 3, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3767123287639338, + 1.2231707317050455, + 1.3051948051857338 + ] + }, + { + "round": 3, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.0956521739084881, + 1.3413333333345752, + 1.2395061728268586 + ] + }, + { + "round": 3, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.44229074890442227, + 0.4188284518881058, + 0.42142857143072365 + ] + }, + { + "round": 3, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3292763157882483, + 0.3787878787878788, + 0.26738609112486494 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.499502487559409, + 0.4254237288121781, + 0.5065656565647159 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.6416666666702486, + 0.5853801169664169, + 0.5261780104687662 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.437117903929521, + 0.4424778761072249, + 0.4444444444444444 + ] + }, + { + "round": 3, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8138211382121393, + 0.9638888889005304, + 0.8436974789712484 + ] + }, + { + "round": 3, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.400000000023283, + 2.264444444432027, + 3.5 + ] + }, + { + "round": 3, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.736842105257031, + 2.5769230769409868, + 2.3159090908910995 + ] + }, + { + "round": 3, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6229813664526858, + 0.6335403726708074, + 0.5731428571324796 + ] + }, + { + "round": 3, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6054216867554035, + 0.6314465408799174, + 0.5486338797796395 + ] + }, + { + "round": 3, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7485074626764894, + 0.6568627450980392, + 0.7648854961935146 + ] + }, + { + "round": 3, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.27548209366391185, + 0.35939597315389366, + 0.30864197530864196 + ] + }, + { + "round": 4, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.2493827160488078, + 1.1870588235337944, + 1.2974358974233604 + ] + }, + { + "round": 4, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.2195121951247907, + 1.160919540229885, + 1.0391752577372395 + ] + }, + { + "round": 4, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4448888888903376, + 0.4232067510638905, + 0.4237288135642549 + ] + }, + { + "round": 4, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3562277580057917, + 0.33444816053745313, + 0.25037037036841575 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5147959183478652, + 0.4352173913128512, + 0.48829268292501204 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.568750000003175, + 0.5148717948653473, + 0.5213541666635138 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.39880478086851656, + 0.4413793103363975, + 0.43947368420623734 + ] + }, + { + "round": 4, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7613636363583448, + 0.7874999999876309, + 0.7335766423544609 + ] + }, + { + "round": 4, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.605128205136563, + 2.668421052623001, + 3.0457142856903374 + ] + }, + { + "round": 4, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.0500000000098035, + 2.4487804878026065, + 2.4380952381041077 + ] + }, + { + "round": 4, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5853801169650553, + 0.6341772151925259, + 0.6236024844758097 + ] + }, + { + "round": 4, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6229813664555781, + 0.6159509202448274, + 0.612195121949232 + ] + }, + { + "round": 4, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6910344827566938, + 0.7374999999986304, + 0.8016000000014901 + ] + }, + { + "round": 4, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3134796238251813, + 0.331306990881459, + 0.33444816053511706 + ] + }, + { + "round": 5, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.2072289156480636, + 1.2084337349487357, + 1.299999999995162 + ] + }, + { + "round": 5, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.251249999992433, + 1.006000000028871, + 1.143181818188168 + ] + }, + { + "round": 5, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.44843049328085116, + 0.44185022026144527, + 0.4444444444475488 + ] + }, + { + "round": 5, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.29014492753582694, + 0.32960526315084854, + 0.31517857143314487 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5164948453641852, + 0.4784688995226451, + 0.5261780104651091 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5268421052685498, + 0.5825581395440886, + 0.6223602484570389 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.5335106382944047, + 0.48829268292274053, + 0.40362903227252256 + ] + }, + { + "round": 5, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8491525423724867, + 0.8606837606833627, + 0.8237704918013702 + ] + }, + { + "round": 5, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.973529411767445, + 2.86285714284916, + 2.8222222222183415 + ] + }, + { + "round": 5, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.6710526315728202, + 3.3187500000203727, + 2.6025641025641026 + ] + }, + { + "round": 5, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.7477611940277656, + 0.6159509202462559, + 0.6172839506215956 + ] + }, + { + "round": 5, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6823129251592976, + 0.632704402516309, + 0.6649681528671318 + ] + }, + { + "round": 5, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7091549295869748, + 0.7541353383479654, + 0.7828124999850843 + ] + }, + { + "round": 5, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.373134328358209, + 0.30120481927710846, + 0.30830769230826544 + ] + }, + { + "round": 6, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.4985074626956023, + 1.1609195402593233, + 1.229268292677816 + ] + }, + { + "round": 6, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.2625000000058209, + 1.2734177215201663, + 1.1674418604667407 + ] + }, + { + "round": 6, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4493273542577927, + 0.4300429184607314, + 0.47311320754848774 + ] + }, + { + "round": 6, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.29829545455074613, + 0.300299401203321, + 0.29528023598160713 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.535828877011324, + 0.4631336405508495, + 0.45753424657938246 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5440217391334717, + 0.5486772486794661, + 0.5500000000030703 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4175000000085371, + 0.47169811321084193, + 0.41275720164149143 + ] + }, + { + "round": 6, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8104838709714973, + 0.8162601626046547, + 0.7389705882301582 + ] + }, + { + "round": 6, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.421428571427463, + 2.4853658536505865, + 2.7447368420881073 + ] + }, + { + "round": 6, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.754054054032659, + 2.552500000031432, + 2.5300000000162983 + ] + }, + { + "round": 6, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5687499999939146, + 0.6699999999891346, + 0.635443037978515 + ] + }, + { + "round": 6, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6159509202533978, + 0.6598684210605968, + 0.6382165605151895 + ] + }, + { + "round": 6, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6849315068588835, + 0.7215827338166347, + 0.7000000000022795 + ] + }, + { + "round": 6, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.283569405099414, + 0.3067484662576687, + 0.3404761904757153 + ] + }, + { + "round": 7, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3567567567523517, + 1.0526315789498193, + 1.3025974025798648 + ] + }, + { + "round": 7, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.2083333333388768, + 1.0437500000116415, + 1.105494505487853 + ] + }, + { + "round": 7, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.45384615385900695, + 0.43419913419933576, + 0.3972222222161243 + ] + }, + { + "round": 7, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.2955882352954872, + 0.280112044824449, + 0.32605863192288587 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.4399122807060434, + 0.4149377593360996, + 0.42254098360598485 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5693181818258547, + 0.5273684210609645, + 0.5207253885962108 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4584474885755444, + 0.4488789237599252, + 0.4594594594678498 + ] + }, + { + "round": 7, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.807142857136944, + 0.6883561643931301, + 0.7746153846186085 + ] + }, + { + "round": 7, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.505000000022119, + 2.6499999999803934, + 2.908571428592716 + ] + }, + { + "round": 7, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.935135135137652, + 2.6552631579229216, + 2.5199999999895226 + ] + }, + { + "round": 7, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.7092198581609822, + 0.785156249998181, + 0.5958333333269582 + ] + }, + { + "round": 7, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.5687500000084665, + 0.5546961325910251, + 0.6109756097558137 + ] + }, + { + "round": 7, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7449275362237856, + 0.8154471544700304, + 0.6499999999885097 + ] + }, + { + "round": 7, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.2851851851847872, + 0.2958579881656805, + 0.355769230769977 + ] + }, + { + "round": 8, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.1988095238145131, + 1.225609756097561, + 1.1811764705844003 + ] + }, + { + "round": 8, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.140909090902741, + 1.1109890109772416, + 1.1277777777777778 + ] + }, + { + "round": 8, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.46009174312588785, + 0.44977578475983654, + 0.4424778761134063 + ] + }, + { + "round": 8, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.5176470588228446, + 0.30170454545507464, + 0.22168141593373653 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.526842105257521, + 0.49653465346096654, + 0.4950495049551056 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5752873563143457, + 0.6713375796187242, + 0.5719999999965408 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4835748792320022, + 0.47042253520776967, + 0.4591743119227606 + ] + }, + { + "round": 8, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.93644859811735, + 0.8756521739146632, + 0.7960317460284199 + ] + }, + { + "round": 8, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.549999999994179, + 2.678947368428405, + 2.983333333324279 + ] + }, + { + "round": 8, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.880555555554262, + 2.3904761904684295, + 2.3022727272790773 + ] + }, + { + "round": 8, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6465838509293632, + 0.6172839506230329, + 0.6694267515914669 + ] + }, + { + "round": 8, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6869565217310319, + 0.683673469389339, + 0.5994011976067423 + ] + }, + { + "round": 8, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7367647058837226, + 0.7127659574418547, + 0.7382352941220982 + ] + }, + { + "round": 8, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.30241691842928436, + 0.40160642570281124, + 0.2932551319648094 + ] + }, + { + "round": 9, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.4211267605620685, + 1.166279069765276, + 1.2683544303791574 + ] + }, + { + "round": 9, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.3342105263329453, + 1.2822784810103005, + 1.2035714285725372 + ] + }, + { + "round": 9, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4575342465804456, + 0.44687499999937635, + 0.43652173912193143 + ] + }, + { + "round": 9, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3235795454575881, + 0.26282722512881773, + 0.3439862542942525 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.4677570093462296, + 0.45270270269745877, + 0.4374468085098457 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5831395348812843, + 0.5358288770050986, + 0.6360759493641414 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.45753424658150876, + 0.4297872340405717, + 0.4831730769230769 + ] + }, + { + "round": 9, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7759689922523938, + 0.7389705882284462, + 0.7679389312913115 + ] + }, + { + "round": 9, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.5820512820620283, + 2.4047619047508175, + 2.9388888889031173 + ] + }, + { + "round": 9, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.857142857142857, + 2.824999999953434, + 2.6947368421089393 + ] + }, + { + "round": 9, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5853801169568857, + 0.6229813664613627, + 0.6464516129044275 + ] + }, + { + "round": 9, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.5541436464000925, + 0.6236024844700251, + 0.6153374233074554 + ] + }, + { + "round": 9, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7171428571338765, + 0.8903508771950248, + 0.7453237410028392 + ] + }, + { + "round": 9, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3115264797507788, + 0.326900584794777, + 0.302416918428581 + ] + }, + { + "round": 10, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.4112676056200297, + 1.0827956989292375, + 1.3400000000093133 + ] + }, + { + "round": 10, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1499999999862418, + 1.113333333345751, + 1.1292134831486835 + ] + }, + { + "round": 10, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4840579710153926, + 0.43739130433912027, + 0.43521739129361736 + ] + }, + { + "round": 10, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3242718446540155, + 0.35246478873436193, + 0.23356643356361137 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5132653061157967, + 0.5475409836012137, + 0.5014999999932479 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5780346820822707, + 0.6024096385598272, + 0.6127906976765845 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.459633027517382, + 0.4448888888841288, + 0.45429864253351526 + ] + }, + { + "round": 10, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7518796992533722, + 0.7444444444478938, + 0.82177419353637 + ] + }, + { + "round": 10, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.6256410256505776, + 2.355813953473211, + 2.797222222220929 + ] + }, + { + "round": 10, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.970000000006985, + 2.7026315789277615, + 2.502500000008149 + ] + }, + { + "round": 10, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5693181818179173, + 0.6060606060620172, + 0.6401273885409638 + ] + }, + { + "round": 10, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6121951219506516, + 0.6134146341440699, + 0.6274999999935972 + ] + }, + { + "round": 10, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.8289256198139292, + 0.8581196581089121, + 0.8314049586688346 + ] + }, + { + "round": 10, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.2958579881656805, + 0.40068027210979384, + 0.24028776978350264 + ] + } + ] + }, + { + "pass": 2, + "captureSha256": "5a8dd97c1089e7b3fcdbed44d23ffe2a1fb4576936a24e485225a4bfd2d1005c", + "gate": "pass: complete matched comparison found no statistically detected regression", + "metadata": { + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T13:15:46.079Z", + "bunVersion": "1.3.14", + "nodeVersion": "24.3.0", + "browserVersion": "149.0.7827.55", + "os": "linux 7.1.3-2-cachyos", + "arch": "x64", + "cpu": "12th Gen Intel(R) Core(TM) i9-12900H", + "engineVersions": { + "sheetwrite": "0.3.1", + "handsontable": "18.0.0" + }, + "datasetSeed": 1592639710, + "datasetHashes": { + "100000": "fnv1a32:178eac66" + }, + "viewport": { + "width": 640, + "height": 480 + }, + "measuredSamples": 3, + "warmupSamples": 1, + "minimumSampleDurationMs": 100, + "rounds": 10, + "orderSeed": 1371602926, + "engineOrder": [ + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ] + ], + "launchAttempts": [ + { + "round": 1, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 1, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 2, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 2, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 3, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 3, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 4, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 4, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 5, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 5, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 6, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 6, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 7, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 7, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 8, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 8, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 9, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 9, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 10, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 10, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + } + ] + }, + "results": [ + { + "round": 1, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3466666666294138, + 1.2600000000093132, + 1.4925373135023374 + ] + }, + { + "round": 1, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.124719101129874, + 1.221951219503109, + 1.0659574468402153 + ] + }, + { + "round": 1, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.418828451873493, + 0.4210084033777796, + 0.4652777777734661 + ] + }, + { + "round": 1, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.2889204545380463, + 0.2859999999350735, + 0.28225352111941493 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5731428571524365, + 0.4995024875825762, + 0.46175115210892553 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.6216049382210146, + 0.6401273885113039, + 0.5195876288314148 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4906862745171084, + 0.44533333335899644, + 0.3864864864706648 + ] + }, + { + "round": 1, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7593984962476039, + 0.7537313432696817, + 0.7723076923177219 + ] + }, + { + "round": 1, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.355813953505699, + 2.3181818180971523, + 3.0696969697195473 + ] + }, + { + "round": 1, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.9361111111680254, + 2.8914285714605024, + 2.5641025641264443 + ] + }, + { + "round": 1, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.691724138000402, + 0.627499999984866, + 0.6268750000104774 + ] + }, + { + "round": 1, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.5577777778057175, + 0.6562091503048839, + 0.7092198581626334 + ] + }, + { + "round": 1, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.8201550387077091, + 0.6724832215090126, + 0.6763513513110779 + ] + }, + { + "round": 1, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3075362318829782, + 0.2747252747278333, + 0.35693950177538225 + ] + }, + { + "round": 2, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3767123287671232, + 1.2060240963922746, + 1.199999999964521 + ] + }, + { + "round": 2, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.3263157895692672, + 1.1964285714174843, + 1.237037037016341 + ] + }, + { + "round": 2, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.439473684199089, + 0.4371179039163035, + 0.4655813953167824 + ] + }, + { + "round": 2, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.2988059701759424, + 0.3475694444722548, + 0.2791666666330356 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5970238095615059, + 0.5081218274281866, + 0.4533936651339291 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.661490683195106, + 0.5764367815813628, + 0.5629213483051889 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.49950248747600695, + 0.4165975103402101, + 0.565730337111091 + ] + }, + { + "round": 2, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.796062992152384, + 0.8219512195091664, + 0.7444444444375458 + ] + }, + { + "round": 2, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.6421052631922066, + 2.571794871790096, + 3.075757575701132 + ] + }, + { + "round": 2, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.8971428572333284, + 3.475862068959094, + 2.537499999976717 + ] + }, + { + "round": 2, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6128048780147077, + 0.6348101265810996, + 0.5775862068804944 + ] + }, + { + "round": 2, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6429487178878238, + 0.6335365853567676, + 0.5566666667142676 + ] + }, + { + "round": 2, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6869863014004819, + 0.8196721311704424, + 0.6756756757008465 + ] + }, + { + "round": 2, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.2932551319648094, + 0.33295454545507464, + 0.27728531855852484 + ] + }, + { + "round": 3, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.4882352940929944, + 1.286075949374162, + 1.3808219178949726 + ] + }, + { + "round": 3, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.0712765957169392, + 1.1454545454735952, + 1.1054945054904117 + ] + }, + { + "round": 3, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.429059829037541, + 0.40485829962153547, + 0.41024590160346547 + ] + }, + { + "round": 3, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3058103975791496, + 0.40983606561193947, + 0.26411609498336713 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5629213483522783, + 0.5335106382721123, + 0.413168724266038 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.6066666666869864, + 0.561797752850846, + 0.5256544502393503 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.42457627121090763, + 0.5009569377509173, + 0.406504065052008 + ] + }, + { + "round": 3, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.817073170769566, + 0.6823129251497944, + 0.783593749962165 + ] + }, + { + "round": 3, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.4512195121724067, + 2.756756756681244, + 2.71081081090646 + ] + }, + { + "round": 3, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.8833333332764193, + 2.3395348837339256, + 2.4560975609347224 + ] + }, + { + "round": 3, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.7099290780313577, + 0.6348101265810996, + 0.5934911242702744 + ] + }, + { + "round": 3, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.5698863636511802, + 0.664900662247955, + 0.5899999999222072 + ] + }, + { + "round": 3, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7470149253912047, + 0.6693333333233992, + 0.6635761589231278 + ] + }, + { + "round": 3, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.2662234042543284, + 0.36394557822812473, + 0.26550116550203384 + ] + }, + { + "round": 4, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.4521739130191829, + 1.1620689655022545, + 1.2871794871962032 + ] + }, + { + "round": 4, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.067021276534317, + 1.1374999999534339, + 1.1674418605127654 + ] + }, + { + "round": 4, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.41966527198133485, + 0.39723320152581093, + 0.41065573767514624 + ] + }, + { + "round": 4, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.28169014086081107, + 0.2659574468208952, + 0.2585051546242933 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.538172043013757, + 0.4732718893974882, + 0.5190954773859987 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.4906862745034125, + 0.5208333333866904, + 0.5510869564933946 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.42320675105799604, + 0.46728971965228006, + 0.42777777777220577 + ] + }, + { + "round": 4, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7598484848400183, + 0.762878787851977, + 0.8221311475394568 + ] + }, + { + "round": 4, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.5325000000419093, + 2.3904761903963627, + 2.9558823529137848 + ] + }, + { + "round": 4, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.3176470587358757, + 2.3697674418258114, + 2.4380952379710616 + ] + }, + { + "round": 4, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6274999999965075, + 0.691724137923327, + 0.5486338797427429 + ] + }, + { + "round": 4, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.668666666659216, + 0.6423076923148563, + 0.6535947712600912 + ] + }, + { + "round": 4, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7171428571056042, + 0.7157142857222685, + 0.7968253967913962 + ] + }, + { + "round": 4, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.27181571815667677, + 0.4107638888882421, + 0.2840909090909091 + ] + }, + { + "round": 5, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.2550000000745059, + 1.2120481927778168, + 1.2858974357995276 + ] + }, + { + "round": 5, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.230487804905307, + 1.2625000000582076, + 1.195238095231443 + ] + }, + { + "round": 5, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.49310344827402697, + 0.4822115384830305, + 0.4854368932084045 + ] + }, + { + "round": 5, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.29602272727061063, + 0.2600000000014514, + 0.29177377893946166 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5469945355323576, + 0.532978723375523, + 0.429184549392197 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.525130890070885, + 0.6335443037892161, + 0.5440217391031025 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.5101522842450493, + 0.4509009008866374, + 0.40485829961022385 + ] + }, + { + "round": 5, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7828124999723514, + 0.783593749969441, + 0.750746268598335 + ] + }, + { + "round": 5, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.502500000060536, + 2.385714285674372, + 2.7027027027530446 + ] + }, + { + "round": 5, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.8054054052996875, + 2.2444444444651404, + 2.2577777777488035 + ] + }, + { + "round": 5, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5469945355120008, + 0.5917647058911183, + 0.5502732240294661 + ] + }, + { + "round": 5, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.7171428571189088, + 0.6777027027329078, + 0.7006849315055735 + ] + }, + { + "round": 5, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.8398437500727596, + 0.8663793102725698, + 0.7120567376111099 + ] + }, + { + "round": 5, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.346712802765588, + 0.3599388379210589, + 0.2655172413783222 + ] + }, + { + "round": 6, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3426666666691502, + 1.299999999995162, + 1.5384615385761629 + ] + }, + { + "round": 6, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1397727272494442, + 1.0956521739110188, + 1.192857142848273 + ] + }, + { + "round": 6, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4584474885819233, + 0.4140495867314479, + 0.41446280990119194 + ] + }, + { + "round": 6, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.35441696110046583, + 0.3015060240896531, + 0.26135770235619177 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5681318681287978, + 0.4758293838747799, + 0.4686915887841763 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5218750000300739, + 0.5540983606272382, + 0.6048192770938468 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4841346153631233, + 0.5588888889023413, + 0.4960396039428761 + ] + }, + { + "round": 6, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8780701754843456, + 0.993069306956512, + 0.7707692307849916 + ] + }, + { + "round": 6, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.493103448269439, + 2.532499999925494, + 2.6552631578555235 + ] + }, + { + "round": 6, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.982352941187427, + 3.0878787878900766, + 2.5641025641025643 + ] + }, + { + "round": 6, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6551948052335095, + 0.6542483659984629, + 0.6042168674519263 + ] + }, + { + "round": 6, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6401273885053719, + 0.8000000000819564, + 0.6700000000062089 + ] + }, + { + "round": 6, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7715384615155366, + 0.7437037037409566, + 0.8096774193503323 + ] + }, + { + "round": 6, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3393220338970423, + 0.28328611898017, + 0.30120481927710846 + ] + }, + { + "round": 7, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3220779220392178, + 1.1337078651936536, + 1.3540540540439856 + ] + }, + { + "round": 7, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1686046511736201, + 1.18352941177128, + 1.0817204300834928 + ] + }, + { + "round": 7, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.41234567905910346, + 0.4263829787479753, + 0.4753554502184287 + ] + }, + { + "round": 7, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.29615384613896706, + 0.318789808936773, + 0.2893063583831179 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5213541666404732, + 0.4559090909251774, + 0.4497757847441753 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.6140243902847897, + 0.6179012345770994, + 0.5928994082685934 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4672897196305202, + 0.3956521738894843, + 0.4219409282818311 + ] + }, + { + "round": 7, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.9109090908261185, + 0.8297520660956906, + 0.876068376036536 + ] + }, + { + "round": 7, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.4333333333377682, + 2.5974358974311214, + 2.811111111038675 + ] + }, + { + "round": 7, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.8222222222894846, + 2.1913043477612995, + 2.3860465115542677 + ] + }, + { + "round": 7, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.560335195514077, + 0.5672316383833518, + 0.5668539325392732 + ] + }, + { + "round": 7, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6248447204887959, + 0.6078787878550815, + 0.5752873563143457 + ] + }, + { + "round": 7, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6693333333482345, + 0.7968253968505278, + 0.8564102563959284 + ] + }, + { + "round": 7, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3346625766859738, + 0.27100271002710025, + 0.307514450865437 + ] + }, + { + "round": 8, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.254320987638224, + 1.1397727272176945, + 1.2395061728785988 + ] + }, + { + "round": 8, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1643678160791082, + 1.1776470588191468, + 1.3116883116520264 + ] + }, + { + "round": 8, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.43842794763648224, + 0.43755458513738416, + 0.4375545851089158 + ] + }, + { + "round": 8, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.2935483870984129, + 0.3984063745094129, + 0.24330900243535603 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5360406091588025, + 0.4655813953167824, + 0.4424778761103156 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5273684211124323, + 0.5510989011132291, + 0.6268749999871943 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4638888888811279, + 0.4457777777521147, + 0.4509009009243937 + ] + }, + { + "round": 8, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.705594405564447, + 0.7404411764925017, + 0.8713043478277066 + ] + }, + { + "round": 8, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.1874999999126885, + 2.2909090908413585, + 2.1659574468045477 + ] + }, + { + "round": 8, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.8628571428358556, + 2.955555555617644, + 2.636585365776427 + ] + }, + { + "round": 8, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.7063380282332885, + 0.638853503225051, + 0.5532258064486086 + ] + }, + { + "round": 8, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6699999999565383, + 0.619753086404806, + 0.5546961325730161 + ] + }, + { + "round": 8, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7541353383654714, + 0.8031999999508261, + 0.7321167883130103 + ] + }, + { + "round": 8, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3087209302330996, + 0.2835694050980948, + 0.29723756906231713 + ] + }, + { + "round": 9, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.2407407406947495, + 1.1988095238560899, + 1.1540229885314388 + ] + }, + { + "round": 9, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.0763440860074855, + 1.1211111111152503, + 1.0795698924570956 + ] + }, + { + "round": 9, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4232067510540664, + 0.38648648648504813, + 0.4036290322152537 + ] + }, + { + "round": 9, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.33036303629932723, + 0.3311258278238211, + 0.3018666666770975 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5405405405506089, + 0.4554545454299924, + 0.4533936651802845 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5117346938861039, + 0.4502242152357783, + 0.5324742268271667 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.3992031872294754, + 0.3864864864814523, + 0.4431718061206296 + ] + }, + { + "round": 9, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7414814815132155, + 0.7232394366079128, + 0.7723076922675738 + ] + }, + { + "round": 9, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.7861111112870276, + 2.2555555555348596, + 2.630769230783559 + ] + }, + { + "round": 9, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.599999999937912, + 2.2282608694842327, + 2.27111111111525 + ] + }, + { + "round": 9, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.7374999999917824, + 0.560335195514077, + 0.4999999999908244 + ] + }, + { + "round": 9, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.5994011976137132, + 0.6048192771162882, + 0.601197604814957 + ] + }, + { + "round": 9, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6809523809181691, + 0.6375796177845662, + 0.6972222222636143 + ] + }, + { + "round": 9, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.30104438642249015, + 0.260259740257805, + 0.3157728706612854 + ] + }, + { + "round": 10, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.5000000000278007, + 1.2923076923291843, + 1.470588235389989 + ] + }, + { + "round": 10, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1842696628941412, + 1.2637500000186264, + 1.2500000000582077 + ] + }, + { + "round": 10, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4626728111002508, + 0.4766666666427184, + 0.45045045045045046 + ] + }, + { + "round": 10, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3367647058933097, + 0.25214105790776553, + 0.30053050398816716 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.6348101266046774, + 0.6763513513488343, + 0.4273504273663474 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5572222222160134, + 0.5571428571665098, + 0.5469945355069116 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.446666666633553, + 0.4538461538705958, + 0.40979591836126483 + ] + }, + { + "round": 10, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8229508196675509, + 0.8366666666775321, + 0.8902654868047849 + ] + }, + { + "round": 10, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.7162162161910453, + 2.612820512853945, + 2.6384615384472103 + ] + }, + { + "round": 10, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.139473684181116, + 2.947058823589674, + 2.994285714333611 + ] + }, + { + "round": 10, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6416666667060688, + 0.619135802467986, + 0.6090909090683315 + ] + }, + { + "round": 10, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6329113924404299, + 0.7034965034808729, + 0.7820312499607098 + ] + }, + { + "round": 10, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7338028169027202, + 0.7113475177225703, + 0.7294964028870781 + ] + }, + { + "round": 10, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3265060240975076, + 0.23809523809745553, + 0.38542372881419074 + ] + } + ] + } + ] +} diff --git a/bench/results/wasm-build-matrix-opt-level-3.json b/bench/results/wasm-build-matrix-opt-level-3.json new file mode 100644 index 00000000..203f1d0a --- /dev/null +++ b/bench/results/wasm-build-matrix-opt-level-3.json @@ -0,0 +1,16607 @@ +{ + "schemaVersion": 1, + "plan": 97, + "variant": 3, + "artifact": { + "rustOptLevel": 3, + "rawBytes": 693661, + "brotliQuality11Bytes": 211666, + "wasmOpt": "-O3", + "sha256": "d0a73eb34ef002a017900528e0c63c0d5597f13f0d8f58da0c0b91730160eec2" + }, + "conditions": { + "cpu": "12th Gen Intel(R) Core(TM) i9-12900H", + "os": "linux 7.1.3-2-cachyos", + "arch": "x64", + "bun": "1.3.14", + "node": "24.3.0", + "chromium": "149.0.7827.55", + "power": "AC0 online; battery charging", + "cpuPolicy": "intel_pstate active; scaling governor powersave", + "concurrency": 1, + "otherWork": "No other deliberate workload; desktop session and system services remained active." + }, + "interleaveOrder": [ + "3-r1", + "2-r1", + "s-r1", + "2-r2", + "s-r2", + "3-r2", + "s-r3", + "3-r3", + "2-r3" + ], + "data": [ + { + "repetition": 1, + "captureSha256": "a07f21bc33f14f5777e0e4a839b709cf4ef9923cb6abb4d1a1e2b7c0ee008d99", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:17:52.243Z", + "sheetwriteRows": [ + 1000, + 10000, + 100000, + 500000, + 1000000 + ], + "handsontableRows": [ + 1000, + 10000 + ] + }, + "sheetwrite": { + "1000": { + "ingest": [ + 1.3223130000000083, + 1.200019999999995, + 1.1626289999999813, + 1.6645530000000122, + 7.679266999999982, + 1.6376960000000054, + 1.1237740000000258 + ], + "windowRead": [ + 0.008411500000001126, + 0.008253812499999569, + 0.008229187499999568, + 0.008732718750000146, + 0.008644781250000122, + 0.00822759375000004, + 0.008420281249998496, + 0.009886124999999524, + 0.008460312499998679, + 0.00970684375000097, + 0.010088937500000839, + 0.008870906249999422, + 0.00886587499999969, + 0.009459312499998873, + 0.00936759375000129, + 0.008520843750000395, + 0.008548343750000242, + 0.009197593750000621, + 0.008524281249998822, + 0.008634312499999908, + 0.00917756249999968, + 0.009372875000000391, + 0.008732812499999909, + 0.009377312499999846, + 0.010399781249999407, + 0.009959812499999998, + 0.010092031250000133, + 0.010253062500000354, + 0.01018962499999887, + 0.010020468749999623, + 0.009561906249999197, + 0.008973156250000613, + 0.010435031250001003, + 0.009199499999999361, + 0.008793062500000559, + 0.009625749999999655, + 0.00877181250000092, + 0.009554874999999186, + 0.009415125000000302, + 0.008825531250000296, + 0.00955137499999914, + 0.008832531250000386, + 0.009134093749999295, + 0.017995343750000004, + 0.0158552187500014, + 0.014362156249999813, + 0.014348500000000541, + 0.014388375000001119, + 0.01396593750000008, + 0.013979875000000419, + 0.013904656250000258, + 0.015045500000001155, + 0.02155456250000043, + 0.021012625000000895, + 0.014575906250000159, + 0.014901343749999185, + 0.014554750000000283, + 0.014703374999999852, + 0.014441125000001165, + 0.014173406249998521, + 0.013722343750000476, + 0.013876031249999699, + 0.014084937499999839, + 0.01363262499999962, + 0.014893562499999291, + 0.014171531249999703, + 0.014205000000000467, + 0.014319750000000298, + 0.0139360625000009, + 0.013809750000000065, + 0.013652093750000205, + 0.013879062500000927, + 0.01374006250000015, + 0.01263274999999986, + 0.008308218749998986, + 0.00790128124999967, + 0.008200125000000114, + 0.007735500000000783, + 0.007925437499999077, + 0.007877312500001565, + 0.00827387500000043, + 0.009852468749999233, + 0.00831046875000041, + 0.008753906249999943, + 0.008597656250000085, + 0.008435406249999389, + 0.008739312499999485, + 0.00869021874999909, + 0.008851062499999784, + 0.00750246874999938, + 0.007668125000000359, + 0.00751550000000023, + 0.00721015625000021, + 0.007238531249999625, + 0.007384343750000966, + 0.008142625000001402, + 0.00685787499999968, + 0.008239718749999625, + 0.006870687499999306, + 0.006828437500001172, + 0.006857031250000034, + 0.006867593750000012, + 0.0067590937499986126, + 0.00712606250000114, + 0.012668500000000193, + 0.007619000000000042, + 0.007065281250000055, + 0.00727162499999956, + 0.007487343750000264, + 0.007142124999999666, + 0.006882093750000706, + 0.006947906249999747, + 0.006913843750000481, + 0.006878031250000305, + 0.006795625000000527, + 0.006951656249999161, + 0.0068387187500000834, + 0.006738000000000355, + 0.006999187499999948, + 0.007395468749999523, + 0.0070848750000003236, + 0.007289562500000457, + 0.007502249999999933, + 0.0068978125000001, + 0.006862124999999608, + 0.0069318125000013, + 0.00669696875000092, + 0.0069450312499999, + 0.007894937500001475, + 0.007019375000000494, + 0.007086656249999379, + 0.006823718750000651, + 0.00785081250000097, + 0.006881718749999877, + 0.007258343749999341, + 0.009620718749999924, + 0.009733093750000421, + 0.009539031250000107, + 0.009437499999998877, + 0.00970546875000089, + 0.048975249999999804, + 0.006754781250000619, + 0.008880093750001095, + 0.0065381875000003475, + 0.0069083437500001565, + 0.006706312500000422, + 0.006017281249999229, + 0.006118093750000497, + 0.006206031250000521, + 0.0063353124999991905, + 0.006241343750000183, + 0.0057381250000005934, + 0.00588303125000067, + 0.006255468750000048, + 0.006998343750000302, + 0.008232062499999415, + 0.006958687499999172, + 0.007552437500001119, + 0.007644874999998663, + 0.0068539062500008185, + 0.007138749999999305, + 0.007081062499999291, + 0.0063344375000014, + 0.007011093750000086, + 0.006174593750001733, + 0.005920125000001164, + 0.00602431249999924, + 0.005855187499999914, + 0.005579468750001482, + 0.005534062499998882, + 0.005569812499999216, + 0.005646031250000405, + 0.005637624999998536, + 0.0056811874999986856, + 0.0067740624999999, + 0.005940093750000486, + 0.0058728437499997455, + 0.005973749999999001, + 0.006037781249998986, + 0.006126562499998656, + 0.005825375000000577, + 0.005776687499999156, + 0.00575403125000129, + 0.005760656250000551, + 0.0054701562500003575, + 0.005521562499998467, + 0.007383374999999859, + 0.005907812500000276, + 0.006734093749999559, + 0.005864156250000363, + 0.006150875000001221, + 0.00600131249999869, + 0.0060077500000002, + 0.0062189999999997525, + 0.00613350000000068, + 0.0069117812500003595, + 0.006699375000000174, + 0.005953062499999717, + 0.008640249999999128, + 0.006072312500000621, + 0.005864937500000167, + 0.006223906250001576, + 0.00651565625000039, + 0.006955281250000667, + 0.0070206562499990355, + 0.0070045937500005095, + 0.0073696562500007445, + 0.007036562499999732, + 0.007038843750001078, + 0.006859406250001143, + 0.0069107812499993315, + 0.00726837500000066, + 0.006781843749999794, + 0.006423093749999609, + 0.006321281249999089, + 0.006297031249999918, + 0.006454124999999422, + 0.006529718750000413, + 0.0066008437500002515, + 0.006525281250000958, + 0.008669187500000675, + 0.00825865625000155, + 0.006685312500000151, + 0.006548374999999496, + 0.006836218750001066, + 0.007024656249999595, + 0.007321687500001062, + 0.007428125000000563, + 0.007242624999999947, + 0.007447624999999292, + 0.0073477812500009065, + 0.0068667187500004445, + 0.006927531250001451, + 0.006924249999999077, + 0.008521562500000357, + 0.0074288750000004455, + 0.006856000000000861, + 0.007426062499998665, + 0.007154531250000318, + 0.006729468750000578, + 0.006671906250000248, + 0.006954968749999679, + 0.006446343749999528, + 0.00682368750000073, + 0.006788843749999884, + 0.006775999999998561, + 0.0067795000000003824, + 0.006665062499999763, + 0.006714968749999883, + 0.006551687500000014, + 0.006685531249999599, + 0.00639056250000003, + 0.006471562500001582, + 0.006046500000000066, + 0.005827906249999515, + 0.0059821250000009485, + 0.005849250000000694, + 0.005999093750000739, + 0.0061808437500001645, + 0.006096499999999949, + 0.006185000000000329, + 0.006094374999999985, + 0.00630799999999887, + 0.006079218749999171, + 0.006183343749999182, + 0.006173468750001021, + 0.006972312499998523, + 0.006053249999999011, + 0.005753437499999237, + 0.005944156250000887, + 0.006116468749999271, + 0.0061530625000010275, + 0.006947843749999905, + 0.010325406250000668, + 0.009874406250000689, + 0.010006687500000666, + 0.00912543750000161, + 0.006087468750001435, + 0.006046562499999908, + 0.006684843749999558, + 0.008117999999999626, + 0.007148374999999874, + 0.007554343749999859, + 0.005764499999999728, + 0.006854374999999635, + 0.00588534375000016, + 0.005884437499998896, + 0.006446218749999844, + 0.0058358124999990935, + 0.006613812499999483, + 0.005951968750000702, + 0.005722875000000016, + 0.0058478124999989944, + 0.006573031249999417, + 0.005697937500000805, + 0.005791687500000364, + 0.006078718749998657, + 0.005503687500000964, + 0.006213624999999112, + 0.005356812499998753 + ], + "edit": [ + 6.231186999999977, + 4.430335000000014, + 5.724335999999994, + 6.770155999999986, + 7.089150000000018, + 7.054434999999955, + 6.736234999999965, + 4.313536999999997, + 4.363584000000003, + 5.453564999999969, + 4.396714000000031, + 9.151778999999976, + 5.119252999999958, + 3.7201279999999883, + 3.704817999999989 + ], + "sort": [ + 0.10033499999997275, + 0.1068080000000009, + 0.09486099999998032, + 0.09177000000005364, + 0.08075699999994868, + 0.11610400000000709, + 0.08255300000001853, + 0.07957400000003645, + 0.08021700000000465, + 0.07195800000005192, + 0.07219899999995505, + 0.07741800000002286, + 0.10561500000000024, + 0.1029439999999795, + 0.08384999999998399 + ], + "filter": [ + 0.01999399999999696, + 0.017207000000041717, + 0.01984999999996262, + 0.03784400000000687, + 0.018625999999983378, + 0.017415000000028158, + 0.03415799999999081, + 0.015624000000002525, + 0.014721000000008644, + 0.015259000000014566, + 0.018653000000028896, + 0.024854000000004817, + 0.038843999999983225, + 0.036457999999981894, + 0.017210999999974774 + ], + "multiFilter": [ + 0.12568499999997584, + 0.08354100000002518, + 0.08575300000001107, + 0.08776499999999032, + 0.0888699999999858, + 0.0863209999999981, + 0.0922050000000354, + 0.08751499999999623, + 0.07652799999999615, + 0.08834000000001652, + 0.07512200000002167, + 0.09260999999997921, + 0.08451500000001033, + 0.06707399999999097, + 0.06766300000003866 + ], + "distinctLow": [ + 0.07712299999997185, + 0.06074899999998706, + 0.06059699999997292, + 0.06531200000000581, + 0.06936200000001236, + 0.059197999999980766, + 0.059356999999977234, + 0.07792699999998831, + 0.05990199999996548, + 0.07702599999998938, + 0.05907400000000962, + 0.06393500000001495, + 0.04964799999999059, + 0.04859399999998004, + 0.05051299999996672 + ], + "distinctHigh": [ + 0.24324400000000423, + 0.2288560000000075, + 0.2191609999999855, + 0.2020610000000147, + 0.20405899999997246, + 0.19681699999995317, + 0.20551399999999376, + 0.21082100000000992, + 0.22966700000000628, + 0.24779000000000906, + 0.24725599999999304, + 0.23648399999996172, + 0.24230399999999008, + 0.23543800000004467, + 0.260688000000016 + ], + "aggregate": [ + 0.002962023437499184, + 0.003020679687499417, + 0.0031103125000004894, + 0.0032389062500000065, + 0.003678335937499888, + 0.0036784531250004804, + 0.0036677968749998513, + 0.003608820312500427, + 0.0035725859374995395, + 0.0037235781250002375, + 0.0033624374999998707, + 0.003417710937500651, + 0.0033502812500003643, + 0.004404578125000391, + 0.003588046874999584, + 0.0035990781250001547, + 0.0034317187499999235, + 0.0036789609375000865, + 0.00521176562499992, + 0.005536359375000188, + 0.003191281250000344, + 0.003505632812499826, + 0.003176593750000123, + 0.0033350546874997278, + 0.0031426796874995944, + 0.003015734374999468, + 0.00310864843750025, + 0.0032368124999999637, + 0.0031739296874997436, + 0.0030234140624996186, + 0.0029986249999991443, + 0.0030241640624995014, + 0.0030381796874996425, + 0.002867789062499959, + 0.0028262656249999907, + 0.0030839374999995783, + 0.003114984374999352, + 0.0030203359375002847, + 0.0031123828125005915, + 0.003018046875000735, + 0.0029610078124999717, + 0.003066554687499945, + 0.002947226562500127, + 0.0029548515624995275, + 0.002989851562499979, + 0.00315682031249942, + 0.003036679687499877, + 0.003000953125000372, + 0.002985578124999222, + 0.0032321875000000944, + 0.003392515625000314, + 0.0034163593749996224, + 0.0033368046874997503, + 0.003336148437500519, + 0.003202390624999829, + 0.0031338124999997774, + 0.003381968749999409, + 0.003167617187499694, + 0.003316656249999994, + 0.003207359375000607, + 0.003195726562500667, + 0.0033732578125000856, + 0.003265882812499399, + 0.0032539453125002282, + 0.003216015625000068, + 0.003364406249999341, + 0.0030471250000001504, + 0.0028767265625004868, + 0.0029664218750005134, + 0.002939289062499739, + 0.002894867187499983, + 0.0029556250000002393, + 0.0030692890625001468, + 0.003032874999999713, + 0.0029580624999994143, + 0.0028480468750000654, + 0.003015875000000001, + 0.0029823750000002036, + 0.0029221562499994747, + 0.0031509062500001406, + 0.0030136406250003134, + 0.0029871640624996587, + 0.002975562500000528, + 0.003017718749999787, + 0.0030547031250005574, + 0.0029691718749997875, + 0.002964203124999898, + 0.0029718281250001866, + 0.0030954140624999127, + 0.003046804687500071, + 0.0029688437499997278, + 0.003151109375000516, + 0.0030648281249998632, + 0.0031547656250001666, + 0.003039593749999625, + 0.003064601562499547, + 0.003202468749999632, + 0.003078023437500299, + 0.0030296484374998656, + 0.003242210937500545, + 0.003176406249999708, + 0.00317516406250018, + 0.003134164062499778, + 0.0030854531250001926, + 0.003236148437500752, + 0.0031517734374997275, + 0.003177492187499631, + 0.0031867578125002183, + 0.003112437499999565, + 0.003230445312500052, + 0.003099812500000354, + 0.003991632812499368, + 0.0031713515625000355, + 0.002968656249999313, + 0.003510164062499932, + 0.005366085937500209, + 0.0051361953125006465, + 0.0038872656249999693, + 0.00280358593749952, + 0.002796929687500338, + 0.0028103203124993925, + 0.0026579531250003896, + 0.002881015625000316, + 0.00280426562499958, + 0.002812734375000403, + 0.0026994609374995093, + 0.0026864296875004356, + 0.0027846953124992524, + 0.0031060859375005023, + 0.0029303671875000603, + 0.002930468749999804, + 0.002925968749999619, + 0.0028867031250001673, + 0.002930210937500455, + 0.002877859375000291, + 0.002966695312499823, + 0.0030103828124996568, + 0.002822523437500557, + 0.0028739531250003836, + 0.0028947265625003382, + 0.0029635078125007652, + 0.00316219531250006, + 0.003026249999999564, + 0.0029818124999998474, + 0.003229468749999853, + 0.003019757812499968, + 0.0031245546875000585, + 0.0030365624999992846, + 0.0029060000000002972, + 0.0029994921875005076, + 0.003174773437500278, + 0.0032078515625002524, + 0.0030934687500003832, + 0.003041570312499964, + 0.003088148437499605, + 0.003030445312500518, + 0.0031078828124995184, + 0.0031333125000001516, + 0.0029587890625002444, + 0.003021765625000228, + 0.0030828984375004254, + 0.0029885781250005294, + 0.0043787968749997574, + 0.003246890625000276, + 0.003197375000000058, + 0.003149296874999763, + 0.0031603046874995044, + 0.00300085156249974, + 0.002912820312499953, + 0.0029602812500000297, + 0.002948062499999793, + 0.002908179687500123, + 0.0028330312499997845, + 0.002861882812499772, + 0.00292599218749956, + 0.0028290937499999558, + 0.0028281093749997765, + 0.0028472421874994325, + 0.0027212500000004525, + 0.002746210937500493, + 0.0035760781250004925, + 0.002686632812499923, + 0.003256734375000292, + 0.002900007812500327, + 0.0028414843749997587, + 0.0030050078124999047, + 0.0028691406250000995, + 0.0028975859375002244, + 0.004813046875000282, + 0.002676226562500439, + 0.002640898437499928, + 0.0026278046875001237, + 0.00263167187500013, + 0.002624539062499487, + 0.002626773437500063, + 0.002672585937500749, + 0.002584398437500468, + 0.0026518750000006364, + 0.002698468750000238, + 0.002642242187500088 + ] + }, + "10000": { + "ingest": [ + 10.416586999999936, + 10.632495000000063, + 10.810408000000052, + 10.922878999999966, + 11.101773000000094, + 13.303536999999892, + 12.28017699999998 + ], + "windowRead": [ + 0.0071385937499997, + 0.007036500000001666, + 0.007057343750002332, + 0.007007937499999173, + 0.006975218750000067, + 0.006911968749999886, + 0.008876843749998642, + 0.007434343749999073, + 0.007045156250001128, + 0.007157093749999177, + 0.006890874999999852, + 0.006982656250002606, + 0.006950906250001054, + 0.006982031250000631, + 0.006672093750001551, + 0.006890124999998193, + 0.0067591562500020075, + 0.006921593750000454, + 0.006737781249999131, + 0.006719156249999969, + 0.007000406250000424, + 0.006385375000000693, + 0.0066218124999970485, + 0.006788031250000159, + 0.006797031249998753, + 0.006778406249999591, + 0.006775437499999981, + 0.006841906249999141, + 0.006786406250000709, + 0.006884187499998973, + 0.007133124999999296, + 0.007101875000000035, + 0.00698037500000126, + 0.007091718750000808, + 0.006969749999999664, + 0.007019593750001718, + 0.0066840624999997544, + 0.0065560937499995475, + 0.006664000000000669, + 0.007008937500000201, + 0.0070804999999971585, + 0.006568437500000357, + 0.006797750000000491, + 0.0065619999999988465, + 0.006728937500000143, + 0.007121531250000146, + 0.007040968750001042, + 0.006954000000000349, + 0.006977124999998807, + 0.008293718750000068, + 0.007116625000001875, + 0.007214562499999744, + 0.007096812499998606, + 0.007157281249998704, + 0.007296156249999797, + 0.0073865624999989166, + 0.006953500000001611, + 0.007032343750001502, + 0.007323749999997631, + 0.006974187500002671, + 0.007083624999999927, + 0.0068045625000010546, + 0.006619062500000439, + 0.0066202812500009145, + 0.006545874999996926, + 0.006920812499998874, + 0.006491406249999443, + 0.007063906249999974, + 0.006874093749999588, + 0.0068524062499975, + 0.006884249999998815, + 0.006879656249999755, + 0.006818656250000998, + 0.007024656249999595, + 0.006963812500000444, + 0.007005250000002405, + 0.006874781250001405, + 0.0071785937499981856, + 0.009902437499999195, + 0.007552187499999974, + 0.007392562500001532, + 0.007076812499999363, + 0.007081281249998739, + 0.007098687499997425, + 0.00732987499999993, + 0.007314906249998643, + 0.00731340625000243, + 0.007355249999999813, + 0.007246562500000664, + 0.007072968750001962, + 0.007253562500000754, + 0.007368562499998177, + 0.007244468749998845, + 0.007289000000000101, + 0.006972375000000142, + 0.006939937500000326, + 0.0070083437500017, + 0.0068009062499996276, + 0.007009749999998149, + 0.007013687500002419, + 0.007006687499998776, + 0.007065156250000371, + 0.0071704375000010145, + 0.006977656250001019, + 0.007157750000001073, + 0.006766250000001861, + 0.006986187500000796, + 0.0072916562500005, + 0.007111093750001629, + 0.007122156249998568, + 0.007124843749998888, + 0.00722250000000102, + 0.05493799999999993, + 0.007834468750001378, + 0.007619093750001582, + 0.007574656250000089, + 0.007362062500000377, + 0.007625437500003329, + 0.007395406250001457, + 0.00729540625000169, + 0.007237874999997729, + 0.007337031250003179, + 0.007371562499997708, + 0.007173343750000782, + 0.007182499999998981, + 0.007970312499999466, + 0.007170968749999673, + 0.007300781250002331, + 0.00704471874999868, + 0.007095687500001446, + 0.007602249999997923, + 0.006880968749999994, + 0.006956187500001931, + 0.006914562500000443, + 0.007001156250002083, + 0.006849687500000812, + 0.006927093750000779, + 0.008541250000000389, + 0.0067340312499979404, + 0.0070430312499993875, + 0.006848062499997809, + 0.007057500000001937, + 0.006732781249997544, + 0.0069714062500025875, + 0.006815500000001862, + 0.006649500000001751, + 0.006953781249997348, + 0.007062000000001234, + 0.011198374999999317, + 0.006557468749999629, + 0.006564968749998457, + 0.006847437499999387, + 0.00698496875000032, + 0.007047499999998763, + 0.007032187500001896, + 0.006575062500001394, + 0.00824081249999864, + 0.009239499999999623, + 0.006827125000000933, + 0.0065755312500002105, + 0.006965843749998868, + 0.0069319375000027605, + 0.007149468750000665, + 0.006911812500000281, + 0.007297437499996562, + 0.006572750000000127, + 0.00652521874999934, + 0.006561187500000898, + 0.007039531250001119, + 0.007027812499998731, + 0.006538218750002045, + 0.006536781249998569, + 0.0065696250000009115, + 0.006634093750001568, + 0.007049406249997503, + 0.006947875000001602, + 0.006838687500000162, + 0.006951093749997028, + 0.006889843750002456, + 0.0065945624999983465, + 0.006635156249998886, + 0.006571687499999257, + 0.0065316874999972185, + 0.006671125000000444, + 0.0066254999999983966, + 0.006757656250002242, + 0.006928687500000308, + 0.006990406250000802, + 0.006734312500000783, + 0.006618656249997912, + 0.006515531249998929, + 0.006638843750000234, + 0.006651749999999623, + 0.006601843749997727, + 0.006467218750000114, + 0.006587124999999361, + 0.006539749999998179, + 0.006948218750000734, + 0.006800312499997574, + 0.006788593750002292, + 0.006842781250000485, + 0.006771562499999106, + 0.007046125000002235, + 0.007073249999997699, + 0.0070138437500020245, + 0.007093031250001047, + 0.007163843749999899, + 0.006932625000001025, + 0.0069091249999999604, + 0.0068515624999996305, + 0.006521156250002491, + 0.007118437499997299, + 0.006937562499999217, + 0.0069147499999999695, + 0.006931125000001259, + 0.006633687499999041, + 0.0066225312499987865, + 0.006500781250000642, + 0.006543937500001817, + 0.006477031250000209, + 0.0070209687499982465, + 0.0070048749999997995, + 0.006937000000000637, + 0.006998062499999236, + 0.0071572187499988615, + 0.007127906250001814, + 0.007034468749999689, + 0.007140906250000967, + 0.007137499999998909, + 0.007424781249998347, + 0.00945196874999965, + 0.006924656249999828, + 0.006812718749998226, + 0.006999374999999475, + 0.006720718749999577, + 0.006729781250001565, + 0.006753281249999077, + 0.007259687499999501, + 0.0072621249999968995, + 0.007251124999999803, + 0.007237312500002702, + 0.007142968749999312, + 0.006966562500000606, + 0.006723749999999029, + 0.006708062499999556, + 0.006671312499999971, + 0.006845593750000489, + 0.007244562500002161, + 0.0071454062500002635, + 0.007402875000000364, + 0.006986937500002455, + 0.007302343749998386, + 0.007233562500001511, + 0.007285124999999226, + 0.006703156250001285, + 0.007051906250001849, + 0.007124749999999125, + 0.007073812499999832, + 0.007056718750000357, + 0.006805906250001215, + 0.007078499999998655, + 0.007204718749999728, + 0.007026124999999439, + 0.007145218750000737, + 0.0069170937500011576, + 0.0067245937500004516, + 0.006867562499998314, + 0.006853124999999238, + 0.006832093749999046, + 0.007163624999996898, + 0.007130343749999213, + 0.007205500000001308, + 0.007136281249998433, + 0.007020687499998957, + 0.007196593749998925, + 0.0070900624999978845, + 0.007107999999998782, + 0.007096812500002159, + 0.006828406249997698, + 0.0066588437500030295, + 0.006722375000002501, + 0.006665874999999488, + 0.007140937500000888, + 0.007206624999998468, + 0.006971062499999903, + 0.0066946562500014295, + 0.006848500000000257, + 0.0067340624999978616, + 0.006705562500002316, + 0.006791656250001665, + 0.007042562500000571, + 0.007308843749999738, + 0.007175218749999601, + 0.007202750000001146, + 0.007129749999997159, + 0.007306812500001314, + 0.007307062500000683, + 0.00719531250000216, + 0.007267562500000935, + 0.007361031249999428 + ], + "edit": [ + 4.4322610000000395, + 4.29368599999998, + 4.364638000000014, + 6.682180000000017, + 4.148645999999985, + 6.617465000000038, + 4.250114999999937, + 4.5512619999999515, + 4.284809999999993, + 4.371462999999949, + 4.347099999999955, + 4.305976999999984, + 5.733085000000074, + 4.192354000000023, + 4.453809999999976 + ], + "sort": [ + 0.27336300000001756, + 0.30757199999993645, + 0.28436100000010356, + 0.2676800000000412, + 0.26487299999996594, + 0.26545899999996436, + 0.26845800000000963, + 0.2569669999999178, + 0.2550410000000056, + 0.268359999999916, + 0.27060100000005605, + 0.2575520000000324, + 0.26954299999999876, + 0.272811000000047, + 0.2763879999999972 + ], + "filter": [ + 0.059976000000006024, + 0.05600699999990866, + 0.05495999999993728, + 0.05589999999995143, + 0.052920999999969354, + 0.06576499999994212, + 0.060033999999973275, + 0.0532940000000508, + 0.054776999999944564, + 0.05458299999997962, + 0.056301000000075874, + 0.05289300000004005, + 0.052906000000007225, + 0.06379800000001978, + 0.05787399999996978 + ], + "multiFilter": [ + 0.4810939999999846, + 0.4681110000000217, + 0.4662399999999707, + 0.46018899999990026, + 0.46626000000003387, + 0.474790999999982, + 0.47519599999998263, + 0.7176570000000311, + 0.48403700000005756, + 0.490882000000056, + 0.6597130000000107, + 0.8519459999999981, + 1.000831000000062, + 0.4437480000000278, + 0.4185929999999871 + ], + "distinctLow": [ + 0.38803500000005897, + 0.39612799999997605, + 0.36652300000002924, + 0.36370399999998426, + 0.37337000000002263, + 0.35328500000002805, + 0.35333799999989424, + 0.37146900000004734, + 0.3672960000000103, + 0.38068699999996625, + 0.3519169999999576, + 0.3528049999999894, + 0.4949770000000626, + 0.36752500000000055, + 0.3735430000000406 + ], + "distinctHigh": [ + 2.173539000000005, + 2.044928000000027, + 1.9038550000000214, + 2.0499230000000352, + 1.8196060000000216, + 1.963749000000007, + 1.8151239999999689, + 1.9445540000000392, + 2.10617000000002, + 3.026875000000018, + 2.1138409999999794, + 2.025794000000019, + 2.332587000000103, + 2.177985000000035, + 2.169889000000012 + ], + "aggregate": [ + 0.017651226562500177, + 0.017953382812499363, + 0.01822739843749943, + 0.017455539062500414, + 0.01758372656250007, + 0.01751931250000016, + 0.01789478906249986, + 0.017881914062500393, + 0.018094249999999867, + 0.018035007812500226, + 0.017913453124999812, + 0.018072570312499536, + 0.018082148437500223, + 0.01839870312500036, + 0.01829061718749969, + 0.02233121093749979, + 0.01887498437500046, + 0.018425023437499632, + 0.01794175000000031, + 0.017894000000000077, + 0.018462687499999575, + 0.01819948437499974, + 0.01795520312499921, + 0.01794654687499886, + 0.017888679687500186, + 0.0181176093750004, + 0.017955695312499742, + 0.018645593749999634, + 0.018296164062499898, + 0.018344609374999266, + 0.01827791406249979, + 0.018306914062499402, + 0.018455578125001537, + 0.018434515624999648, + 0.01849506249999955, + 0.024272851562500364, + 0.0284626718749994, + 0.01842266406250026, + 0.01850517968750154, + 0.018913289062499672, + 0.018848679687501146, + 0.01888037500000017, + 0.01878226562500096, + 0.01881289843750089, + 0.022648742187499238, + 0.01856975000000105, + 0.016967539062500592, + 0.01801721874999984, + 0.01651200781249962, + 0.017313390624998704, + 0.01761310937500049, + 0.01822973437499975, + 0.018035578124999674, + 0.018073640625001275, + 0.018174742187500925, + 0.01817513281249994, + 0.01870309375000012, + 0.018456531250000907, + 0.018529921875000355, + 0.026193125000000705, + 0.0218937421874994, + 0.018427695312499992, + 0.01852840625000063, + 0.0183281015624992, + 0.018342929687500842, + 0.018536679687500168, + 0.018566242187500137, + 0.018399054687499472, + 0.021554734374999995, + 0.0184338359374987, + 0.017486523437501234, + 0.016720851562499917, + 0.018397890624999746, + 0.019092976562500752, + 0.017902710937500288, + 0.0182025078125001, + 0.01968583593749962, + 0.019063703124999165, + 0.019498468750001052, + 0.02063321093750048, + 0.02030797656250094, + 0.020354656250001213, + 0.020100851562499855, + 0.020338656249998976, + 0.021300242187498597, + 0.02114286718750158, + 0.018768671874999754, + 0.018040210937499523, + 0.01817353906250041, + 0.016749382812500713, + 0.0164725312500007, + 0.01648253125000032, + 0.01732205468750081, + 0.017214773437499886, + 0.02043660937500036, + 0.020497054687499627, + 0.01743349218750012, + 0.016979906249998677, + 0.016626710937499567, + 0.016985890624999556, + 0.017934648437501366, + 0.019118804687501267, + 0.01790208593750009, + 0.022783648437499693, + 0.017551750000000865, + 0.017961085937500343, + 0.01670280468750107, + 0.01680814062500069, + 0.01757780468749992, + 0.01930306250000058, + 0.019038460937499835, + 0.018045906250000243, + 0.017940859375000784, + 0.018137421875000115, + 0.02242342187500057, + 0.0428713046875, + 0.027308593749999943, + 0.017753554687500284, + 0.016920117187499528, + 0.016966335937500077, + 0.020314703124999056, + 0.043282882812500034, + 0.03464992187499938, + 0.017098781250000528, + 0.018275062499998995, + 0.02195206250000048, + 0.018790718750000934, + 0.017143281250000086, + 0.018294437499999816, + 0.01859926562499936, + 0.01760929687499946, + 0.018910281249999272, + 0.017621890624999637, + 0.017033421875000343, + 0.02081252343750073, + 0.03365489062499982, + 0.0386907343750007, + 0.018685585937500804, + 0.017940429687499204, + 0.017857265624998675, + 0.021126398437500526, + 0.02054209375000049, + 0.019631937499999808, + 0.017766437499998844, + 0.01667330468749917, + 0.016528765624999053, + 0.017036296874998413, + 0.017545765624999987, + 0.017331867187499128, + 0.017077921874999902, + 0.01812667187500061, + 0.017757140624999224, + 0.017775570312499767, + 0.017541640624999744, + 0.0214949687499999, + 0.018377734374999122, + 0.016882835937499507, + 0.01700207812500132, + 0.016851757812499812, + 0.01981397656249939, + 0.01697872656249899, + 0.0169716484374991, + 0.016931820312498402, + 0.017574031249999678, + 0.01714071874999945, + 0.01701231250000035, + 0.01768024999999973, + 0.019344781250000054, + 0.018200656250000335, + 0.0172348593749998, + 0.017331523437499996, + 0.017771640624999918, + 0.01725057812500097, + 0.019176171874999426, + 0.018589374999999464, + 0.033742500000000675, + 0.017958523437499707, + 0.017363132812500126, + 0.017164062499999133, + 0.01767831250000107, + 0.01965133593749968, + 0.019940640625000228, + 0.02005682031250089, + 0.028520421875001034, + 0.0196091093750006, + 0.019554726562500235, + 0.019770296875000426, + 0.01831318750000044, + 0.01839812500000093, + 0.018405835937500115, + 0.018164765625000356, + 0.017893093750000588, + 0.018074562499998947, + 0.017949312500000758, + 0.018660335937500605, + 0.018447789062500775, + 0.019654125000000633, + 0.02753399218750019, + 0.018314960937500402, + 0.02353095312500031 + ] + }, + "100000": { + "ingest": [ + 110.23505099999988, + 123.75133600000004, + 117.2089890000002, + 112.12191700000017, + 116.34033799999997, + 124.55706200000031, + 113.913677 + ], + "windowRead": [ + 0.005993718750005428, + 0.0067961249999939355, + 0.00584478124999066, + 0.006593656250004187, + 0.0061100312500030896, + 0.006890312499990614, + 0.006306749999993144, + 0.006029781250006749, + 0.006076656250002088, + 0.005866874999995275, + 0.00584771875000456, + 0.007178906250004502, + 0.006076187499999719, + 0.006000624999998649, + 0.005924249999992526, + 0.005925937499995371, + 0.006319374999989691, + 0.005855093750000151, + 0.008891843749992745, + 0.006422937500005332, + 0.006062437499991802, + 0.007138124999997331, + 0.0068155624999945985, + 0.006564968749998457, + 0.00688568749998808, + 0.006610718749996636, + 0.006567625000002408, + 0.006519843749998699, + 0.006144562499997619, + 0.0061541562500053715, + 0.006326968750002493, + 0.005685687500005088, + 0.005701906249996114, + 0.0058730625000009695, + 0.005994624999999587, + 0.005984156250008255, + 0.005856031249990679, + 0.006073281249996398, + 0.00586006250000537, + 0.009203499999998144, + 0.00672743750000393, + 0.005947468750008511, + 0.005970968750006023, + 0.006160718750010119, + 0.00939593750000256, + 0.0061976562499950205, + 0.008044406249993585, + 0.006280062499996575, + 0.006196656249997545, + 0.006427218750005181, + 0.006310593749986992, + 0.006262281250002388, + 0.006198906250006075, + 0.006509656250003104, + 0.006445281249995105, + 0.0061509374999957345, + 0.0067677812500051004, + 0.0068176250000107075, + 0.006376249999988204, + 0.006626406249992556, + 0.00655031249999638, + 0.006542093749999367, + 0.008074625000006108, + 0.006378531249993102, + 0.00595309375000852, + 0.005758312500006468, + 0.005942500000003292, + 0.008496000000008053, + 0.0063757812500000455, + 0.006298468750003394, + 0.005967093750001595, + 0.0060120625000053, + 0.006085906250007156, + 0.006198437500003706, + 0.006322343749999959, + 0.00632703124999523, + 0.006244687500000623, + 0.00629474999999502, + 0.006631375000011985, + 0.006365250000001765, + 0.0062843125000000555, + 0.005832437499989851, + 0.006435562500001879, + 0.008564718750008637, + 0.006265312500005393, + 0.006465312499997822, + 0.007442874999995297, + 0.006687687499990602, + 0.0063945937500022865, + 0.006142781249991458, + 0.005866250000011064, + 0.006221937500001218, + 0.006244406250004886, + 0.00704443749999939, + 0.005888718750000521, + 0.006147593750000624, + 0.007242500000003815, + 0.00632209375000059, + 0.00730068750000612, + 0.006243906250006148, + 0.009055062499996325, + 0.006866000000002259, + 0.0066700312499961, + 0.007144375000009973, + 0.006066843750005546, + 0.006039187499993659, + 0.005995093750001956, + 0.006328281249992074, + 0.0062369062499954, + 0.006213250000001835, + 0.0066013437500060945, + 0.007071624999994697, + 0.0065316250000080345, + 0.006409062499997731, + 0.0065279687500066075, + 0.0066864687499901265, + 0.00738700000000847, + 0.006618468750005491, + 0.00634046874999683, + 0.0060494062499998336, + 0.008297593750000942, + 0.008389593749996038, + 0.006478000000001316, + 0.006425812499998074, + 0.006634375000004411, + 0.006760531250009194, + 0.006101406249996444, + 0.0066685625000104665, + 0.0063406562500034624, + 0.006163437499992597, + 0.006519312500003593, + 0.006588281250003547, + 0.0064227499999987, + 0.008168124999997417, + 0.008229906250008412, + 0.006668562499996256, + 0.006479562499990266, + 0.006322312500003591, + 0.006935093750001897, + 0.008014781249997327, + 0.00702649999999494, + 0.006046499999996513, + 0.006352531250001903, + 0.0061974062500098626, + 0.007294531249996794, + 0.007022281250002038, + 0.00823981249999406, + 0.007705812500006459, + 0.008150031249996914, + 0.007805437499996515, + 0.007738406249998775, + 0.00767999999999347, + 0.007827468750008393, + 0.007529000000005226, + 0.007551125000006209, + 0.007444406250002089, + 0.00792793749999987, + 0.007391593750000425, + 0.007418312500007573, + 0.008420312499993088, + 0.008036218750007151, + 0.008050437500003227, + 0.007704687499995089, + 0.007644468750001465, + 0.007675124999991567, + 0.0075317187500019145, + 0.007523343749994638, + 0.009206156250002095, + 0.008507468750011071, + 0.007747281250004789, + 0.007351374999998939, + 0.00748584374998984, + 0.008317000000005237, + 0.007537781250007924, + 0.007450468750008099, + 0.007547250000001782, + 0.013331625000006397, + 0.007582781249993786, + 0.009686187500008714, + 0.008172749999999951, + 0.007497437500006754, + 0.007191374999990785, + 0.007389406249998842, + 0.00734328125000161, + 0.008018656250001754, + 0.007545781250001937, + 0.007251031249992934, + 0.010187812500006999, + 0.009109374999994202, + 0.007401531250010862, + 0.007442687499988665, + 0.012788000000000466, + 0.007464531250008122, + 0.007285499999994727, + 0.007551687500011894, + 0.007409093749998874, + 0.007264562499997851, + 0.007776875000004679, + 0.010024843750002788, + 0.007263718749996428, + 0.007313718749998088, + 0.007370062500001495, + 0.007667124999997554, + 0.007224468749996049, + 0.007722093750004433, + 0.007535499999988815, + 0.009503156250005418, + 0.008488812500004883, + 0.008582500000002824, + 0.008423593750009672, + 0.012166968750008778, + 0.00797996875000706, + 0.007779937500004053, + 0.007835343750002721, + 0.008036656249998941, + 0.007795312499993656, + 0.007529718750006964, + 0.008018249999992122, + 0.008391500000001884, + 0.008155781250010818, + 0.007720437499997956, + 0.008119593750009813, + 0.008579156250007713, + 0.007805093750008041, + 0.008817375000006678, + 0.007799468750008032, + 0.008066031250010042, + 0.00793828125000573, + 0.008222687499994663, + 0.007786656249990642, + 0.00793040624999719, + 0.007823218750004912, + 0.007887875000008648, + 0.007993343750001713, + 0.00774143750000178, + 0.007750031249997846, + 0.008341531249996592, + 0.008800781250002387, + 0.007798500000006925, + 0.0077599374999977044, + 0.007881906250005954, + 0.007998249999999985, + 0.0076455625000022565, + 0.008058312499997555, + 0.008699656250001908, + 0.008015499999999065, + 0.007872718749993624, + 0.007753968750009221, + 0.007880999999997584, + 0.007968937500010043, + 0.007778218750004839, + 0.007826750000006655, + 0.007839750000002255, + 0.008076531249997743, + 0.00792437500000176, + 0.008016624999996225, + 0.0480807499999969, + 0.008935000000008131, + 0.04583121874999563, + 0.006378874999995787, + 0.006392593750007336, + 0.006054093749995104, + 0.00620037500000592, + 0.0061124375000076725, + 0.005837124999999332, + 0.005964906250000013, + 0.0061743125000077725, + 0.005893468750002739, + 0.006346406249988945, + 0.006460593750006183, + 0.006138687499998241, + 0.006024499999995214, + 0.006177656250002883, + 0.006109374999994088, + 0.005974999999992292, + 0.0059881562499981555, + 0.005976250000003347, + 0.00575871875000189, + 0.005899937500004171, + 0.006044687499993984, + 0.005694281250001154, + 0.006244124999994938, + 0.005816687500001194, + 0.007869812499990303, + 0.007412718749989722, + 0.01182543749999354, + 0.01326903125000456, + 0.01109081250000088, + 0.011537843749991339, + 0.011606312500006766, + 0.010800625000001673, + 0.010899937499999623, + 0.011388218749999623, + 0.010625000000004547, + 0.010681093750008586, + 0.011318656249997616, + 0.010677437499992948, + 0.010730937499999982, + 0.010941968749989428, + 0.010655999999997334 + ], + "edit": [ + 3.7417629999999917, + 3.8352410000002237, + 3.601296999999704, + 3.8290240000001177, + 3.9157490000002326, + 5.3919300000002295, + 5.920128000000204, + 6.191078999999718, + 5.783512999999857, + 5.7928320000000895, + 5.788496000000123, + 5.712729999999738, + 5.8384079999996175, + 6.234375, + 6.538864999999987 + ], + "sort": [ + 2.3270179999999527, + 2.172085000000152, + 2.070626000000175, + 2.145310999999765, + 2.447584000000006, + 2.289886000000024, + 2.2127059999997982, + 2.3217349999999897, + 2.373888000000079, + 2.0568779999998696, + 2.0720820000001368, + 2.029145999999855, + 2.331278999999995, + 2.8639210000001185, + 2.853150999999798 + ], + "filter": [ + 0.46985300000005736, + 0.4559409999997115, + 0.47302300000001196, + 0.4605589999996482, + 0.46900700000014695, + 0.5246219999999084, + 0.48805899999979374, + 0.5908599999997932, + 0.5337859999999637, + 0.37465000000020154, + 0.3198330000000169, + 0.31970400000000154, + 0.32337699999970937, + 0.3350799999998344, + 0.3033290000003035 + ], + "multiFilter": [ + 3.2191319999997177, + 3.211261000000377, + 3.807390999999825, + 3.4019760000001042, + 3.0907090000000608, + 3.152548999999908, + 3.430280000000039, + 3.155881000000136, + 3.1239199999999983, + 3.1024890000003325, + 3.5202910000002703, + 3.3877739999998084, + 3.3867709999999533, + 3.080257000000074, + 2.9905980000003183 + ], + "distinctLow": [ + 3.3919670000000224, + 5.39091099999996, + 5.104089999999815, + 4.116998999999851, + 3.693663000000015, + 3.4749719999999797, + 3.539788999999928, + 3.4574939999997696, + 3.746180000000095, + 3.633552000000236, + 3.5950040000002446, + 3.562449000000015, + 3.582636000000093, + 3.584534000000076, + 3.5646739999997408 + ], + "distinctHigh": [ + 20.38211799999999, + 20.51146499999959, + 20.53250900000012, + 20.87963800000034, + 28.41432999999961, + 18.813242999999602, + 17.292179999999917, + 17.912986000000274, + 17.070600999999897, + 18.29106499999989, + 19.36156200000005, + 18.83002499999975, + 20.065432999999757, + 24.779225999999653, + 24.480561999999736 + ], + "aggregate": [ + 0.18104500000026746, + 0.17914499999960753, + 0.1790009999999711, + 0.26686900000004243, + 0.17952699999977995, + 0.1815719999999601, + 0.18204800000012256, + 0.17966900000010355, + 0.20373200000040015, + 0.17922300000009272, + 0.2031210000000101, + 0.17968199999995704, + 0.20041500000024826, + 0.17941800000016883, + 0.17947400000002744, + 0.22161700000015117, + 0.17947499999991123, + 0.17988999999988664, + 0.18249299999979485, + 0.1798479999997653, + 0.17988199999990684, + 0.1821949999998651, + 0.17957699999988108, + 0.1793760000000475, + 0.17919399999982488, + 0.17946399999982532, + 0.19096499999977823, + 0.1790569999998297, + 0.17895899999984977, + 0.17902800000001662, + 0.1789530000000923, + 0.1790529999998398, + 0.18082099999992352, + 0.17993699999988166, + 0.1789880000001176, + 0.17899899999974878, + 0.17896399999972346, + 0.1810009999999238, + 0.17906500000026426, + 0.1789800000001378, + 0.17894100000012259, + 0.17894100000012259, + 0.1880750000000262, + 0.1958230000000185, + 0.17897199999970326, + 0.1789680000001681, + 0.17897100000027422, + 0.18418199999996432, + 0.18660700000009456, + 0.17897799999991548, + 0.17895199999975375, + 0.17895899999984977, + 0.1790219999998044, + 0.17904399999997622, + 0.1806059999998979, + 0.17890999999963242, + 0.17902800000001662, + 0.17894599999999627, + 0.1789810000000216, + 0.17897999999968306, + 0.18101000000024214, + 0.17900299999973868, + 0.17897399999992558, + 0.17893400000002657, + 0.17916199999990567, + 0.18141500000001543, + 0.17932100000007267, + 0.17907000000013795, + 0.17953799999986586, + 0.17959400000017922, + 0.1884490000002188, + 0.1839909999998781, + 0.1793420000003607, + 0.17942500000026484, + 0.17931599999974424, + 0.18438100000003033, + 0.20944300000019211, + 0.2279830000002221, + 0.18116300000019692, + 0.17923599999994622, + 0.20131499999979496, + 0.18535000000019863, + 0.17910000000028958, + 0.1789480000002186, + 0.17901500000016313, + 0.18442400000003545, + 0.18729399999983798, + 0.189136999999846, + 0.1874920000000202, + 0.1843509999998787, + 0.17900699999972858, + 0.18330699999978606, + 0.18137900000010632, + 0.24647900000036316, + 0.17948399999977482, + 0.17914699999982986, + 0.17894599999999627, + 0.1871259999998074, + 0.1790179999998145, + 0.17909599999984493, + 0.1789280000002691, + 0.17909999999983484, + 0.1790059999998448, + 0.1807360000002518, + 0.17901200000005701, + 0.2141300000002957, + 0.17935399999987567, + 0.17909099999997125, + 0.18507799999997587, + 0.17936899999995148, + 0.17903200000000652, + 0.17904100000032486, + 0.17892099999971833, + 0.17950199999995675, + 0.18106299999999464, + 0.1790409999998701, + 0.17900900000040565, + 0.17918300000019372, + 0.1795750000001135, + 0.181648999999652, + 0.17899100000022372, + 0.17895799999996598, + 0.17907800000011775, + 0.17894399999977395, + 0.1811240000001817, + 0.18232699999998658, + 0.18083299999989322, + 0.1789770000000317, + 0.17891400000007707, + 0.31944099999964237, + 0.3449550000000272, + 0.3417140000001382, + 0.3416269999997894, + 0.23822299999983443, + 0.17558000000008178, + 0.17513700000017707, + 0.17516200000000026, + 0.1900550000000294, + 0.17731699999967532, + 0.17679399999997258, + 0.20444799999995666, + 0.26826600000003964, + 0.1833929999997963, + 0.18583399999988615, + 0.17914699999982986, + 0.17909200000030978, + 0.17949300000009316, + 0.17895799999996598, + 0.1816289999997025, + 0.17913799999996627, + 0.18244700000013836, + 0.18592900000021473, + 0.1862820000001193, + 0.1815719999999601, + 0.18324399999983143, + 0.17926399999987552, + 0.17930200000000696, + 0.17925000000013824, + 0.17908799999986513, + 0.18767799999977797, + 0.19389799999999013, + 0.21380499999986569, + 0.21917000000030384, + 0.1904490000001715, + 0.18174299999964205, + 0.17913499999986016, + 0.178997999999865, + 0.1789640000001782, + 0.17952699999977995, + 0.1837199999999939, + 0.1868570000001455, + 0.1791280000002189, + 0.17945000000008804, + 0.17888100000027407, + 0.1788499999997839, + 0.18200100000012753, + 0.17906099999981961, + 0.17914900000005218, + 0.17908600000009756, + 0.19000300000016068, + 0.259070999999949, + 0.179388999999901, + 0.17911099999992075, + 0.17939400000022943, + 0.19888799999989715, + 0.17965499999991152, + 0.18256800000017392, + 0.18224199999986013, + 0.17909599999984493, + 0.1790489999998499, + 0.1790169999999307, + 0.18061299999999392, + 0.21031100000027436, + 0.17933899999979985, + 0.17905999999993583, + 0.17906099999981961, + 0.2001350000000457, + 0.1815440000000308, + 0.17910900000015317, + 0.17906399999992573 + ] + }, + "500000": { + "ingest": [ + 584.268806, + 575.6234469999999, + 581.0111109999998 + ], + "windowRead": [ + 0.012179500000002008, + 0.00970396874998869, + 0.012286812500008182, + 0.014358624999999847, + 0.013635593749995678, + 0.014803343749974829, + 0.014244875000002821, + 0.01428456249999499, + 0.015444874999985814, + 0.013058874999984482, + 0.010499124999995502, + 0.010725218750025078, + 0.015914562500000784, + 0.009761687500002836, + 0.010189968750012213, + 0.01029065624999248, + 0.009779218749997654, + 0.00951474999999391, + 0.00989834374999532, + 0.009063749999995707, + 0.009135343750017455, + 0.009035656250006241, + 0.009642437499991274, + 0.00859875000000443, + 0.008494093750016418, + 0.008495781249990841, + 0.008470625000001064, + 0.011030781249985466, + 0.008996187500002861, + 0.008226437500013617, + 0.008476687500007074, + 0.008575781250016234, + 0.008602874999979804, + 0.008732656250003856, + 0.008518093750012667, + 0.009585781249995762, + 0.008761656249987482, + 0.008892124999988482, + 0.00838774999999714, + 0.008477249999998548, + 0.008473437499986858, + 0.010758218749998605, + 0.010267031250009495, + 0.009001531249992922, + 0.008797093749990381, + 0.008272187500011796, + 0.008973062499990192, + 0.008398687500005053, + 0.008400687500000004, + 0.008583375000000615, + 0.008634312499992802, + 0.00887134375000187, + 0.00862471874998505, + 0.008616781249997985, + 0.008835124999990285, + 0.008802843750004286, + 0.010349687499996207, + 0.008446781250000868, + 0.009148437500016371, + 0.008298906249990523, + 0.008229593750002095, + 0.008279625000000124, + 0.008937843750004504, + 0.00861349999999561, + 0.008712562499994192, + 0.008755312499999945, + 0.008718406250011412, + 0.011212937500005182, + 0.010193906249980955, + 0.009040093750002143, + 0.009229468749992975, + 0.009235625000002301, + 0.00971406249999518, + 0.008856781249988899, + 0.009044281249998676, + 0.0085971562500049, + 0.008560750000015105, + 0.008716593749994672, + 0.009398812500023723, + 0.008895562499986909, + 0.00965665625000156, + 0.008888187499991318, + 0.00879312500001106, + 0.008718656250010781, + 0.008656312499994101, + 0.01417968750001819, + 0.008622406249997994, + 0.009654562500003294, + 0.00911499999998, + 0.008544718749988078, + 0.008349281250019658, + 0.008565218750021586, + 0.008490562499986254, + 0.00836962500000027, + 0.008824000000004162, + 0.008750875000004044, + 0.008798031250023541, + 0.008679062500021928, + 0.008878906250004093, + 0.008556406249994097, + 0.008642187500015552, + 0.008678062499996031, + 0.00860274999999433, + 0.00859131249998768, + 0.008572468750003281, + 0.008871749999997292, + 0.008332781250004473, + 0.008323874999973668, + 0.009082468749994632, + 0.00846887499997706, + 0.008798843750014385, + 0.00847343750001528, + 0.009795781250005575, + 0.00993693750001512, + 0.008524593749996257, + 0.009169749999983878, + 0.009377156249996688, + 0.010282062499982203, + 0.011666687499996442, + 0.0144233750000069, + 0.0133822187499959, + 0.01377587499999322, + 0.013726562500011141, + 0.013840343750018747, + 0.013159031250012276, + 0.011328562499983263, + 0.010861843750006983, + 0.010108062499995185, + 0.010243125000016562, + 0.024455687500022805, + 0.020311468750009, + 0.019721656249998887, + 0.019461375000020098, + 0.019109218749974843, + 0.018267562500000167, + 0.01734725000000026, + 0.009143749999992679, + 0.009514249999995172, + 0.00904665625000689, + 0.008563937499985741, + 0.008468656249988271, + 0.008722656250000682, + 0.008708718750000344, + 0.008749843749995989, + 0.00866059374999395, + 0.008830875000001015, + 0.008519687499983775, + 0.008355593749996615, + 0.015600624999990487, + 0.015024937499987345, + 0.015430218749997948, + 0.014962031250007612, + 0.015011593750017482, + 0.01450609375001477, + 0.014917843749998383, + 0.014048906249996662, + 0.01350215624998441, + 0.008995312500019281, + 0.00916006249997281, + 0.008772062499986077, + 0.008962249999996175, + 0.008744093750010506, + 0.008684249999987514, + 0.008851656249987627, + 0.008525906249985837, + 0.008580906249989084, + 0.008320937500002401, + 0.008620781250016307, + 0.008591187500002206, + 0.008449593750015083, + 0.009297031250014243, + 0.009119468749986481, + 0.008263812499990308, + 0.008045093750013166, + 0.008600687500006643, + 0.008506874999994807, + 0.008591031250006154, + 0.008395031250017837, + 0.009604562499987424, + 0.008745906249998825, + 0.008764124999999012, + 0.00833596875000353, + 0.008943156250012407, + 0.009048281250016998, + 0.008615406250015667, + 0.008732718749996593, + 0.008625062500016156, + 0.008634874999984277, + 0.008449437499990609, + 0.00879087500001674, + 0.010219124999991891, + 0.009321968749986809, + 0.009435468749984466, + 0.009341156250002314, + 0.009196625000015501, + 0.009907468750014914, + 0.009416218750004646, + 0.00937396874999763, + 0.010090062499983787, + 0.0094692499999951, + 0.009418093750014123, + 0.012620937500003038, + 0.010463062500008391, + 0.009728937500000256, + 0.010359437500000013, + 0.010434500000002345, + 0.011115343749992235, + 0.010705062499994256, + 0.010603093750006565, + 0.009756500000008828, + 0.013930093750019523, + 0.0098499375000074, + 0.009740749999991749, + 0.010165374999985488, + 0.010270906250013923, + 0.010232062499994754, + 0.009931999999992058, + 0.009257750000017495, + 0.00925893749999318, + 0.009074406249993672, + 0.009333437500004038, + 0.00895071875001463, + 0.015287000000000717, + 0.009658781249981985, + 0.011681343749984308, + 0.009729000000021415, + 0.010116156250006725, + 0.009342000000003736, + 0.009589468749993557, + 0.010155843749998894, + 0.009083781250012635, + 0.009215593750013795, + 0.014457593750023534, + 0.00907487499998183, + 0.009472406250012, + 0.00964318749998938, + 0.008621468750021677, + 0.008840125000006083, + 0.00928337499999543, + 0.008975687499997775, + 0.009046593749985732, + 0.008934218749999445, + 0.009802343749981901, + 0.008906312500016611, + 0.008944343749988093, + 0.009996343750003689, + 0.009229562499996291, + 0.008238124999991214, + 0.008429624999990892, + 0.008350718749994712, + 0.00890678125000477, + 0.007927093749998448, + 0.00796359374999156, + 0.011560531250012218, + 0.011452812499982201, + 0.011670031250019974, + 0.011384906250015092, + 0.010324937500001852, + 0.010688093749990912, + 0.01200703124999336, + 0.009951312500021459, + 0.009722374999995509, + 0.009714468749990601, + 0.00980484374997559, + 0.009582093749997966, + 0.009636156249996475, + 0.009326468750003869, + 0.00950603124999816, + 0.009754500000013877, + 0.009745843750010863, + 0.010352968749998581, + 0.010633593749986403, + 0.010394281250000859, + 0.010184781249989783, + 0.010398593750011287, + 0.010061687499984373, + 0.00985821874999715, + 0.010087906249992784, + 0.009992374999995945, + 0.01067646874997763, + 0.009936843749983382, + 0.009710437499990121, + 0.009985437500006356, + 0.01008731249999073, + 0.009927437500010683, + 0.009588812499998767, + 0.01024156249999919, + 0.01026331250000112, + 0.010034531249999645, + 0.010074062499995762, + 0.010376656250002725, + 0.010060656249976319, + 0.010148500000013883, + 0.01015640625001879, + 0.011676906249988406, + 0.011377374999995027, + 0.010153625000015154, + 0.009990906250010312, + 0.009884124999985033, + 0.009599593750010627 + ], + "edit": [ + 3.903439000000617, + 5.651608999999553, + 3.8417929999995977, + 3.6389090000002398, + 3.7797160000000076 + ], + "sort": [ + 12.06596300000001, + 12.869743000000199, + 10.883461000000352, + 13.089672000000064, + 12.06953700000031 + ], + "filter": [ + 1.6372639999999592, + 2.3050960000000487, + 1.698500000000422, + 1.735555999999633, + 1.5007510000004913 + ], + "multiFilter": [ + 19.52742599999965, + 19.348713000000316, + 19.278313000000708, + 19.017154999999548, + 19.638426999999865 + ], + "distinctLow": [ + 21.882676999999603, + 17.129455000000235, + 20.854402999999365, + 19.495935000000827, + 20.299150000000736 + ], + "distinctHigh": [ + 115.05843699999969, + 113.67504399999962, + 119.8219199999985, + 120.12956400000076, + 116.49238299999888 + ], + "aggregate": [ + 0.8337590000010096, + 0.8204339999992953, + 0.822903000000224, + 0.8524130000005243, + 0.8279050000001007, + 0.8467419999997219, + 0.8623060000008991, + 0.8773259999998118, + 0.8644010000007256, + 0.8831609999997454, + 1.02519299999949, + 1.0182129999993776, + 1.1769300000014482, + 1.5853780000015831, + 1.0796030000001338, + 0.9184510000013688, + 0.9077660000002652, + 0.8648149999989982, + 0.8066349999990052, + 0.8777769999996963, + 0.9125769999991462, + 0.9651350000003731, + 0.998700000000099, + 0.9442259999996168, + 0.940708000000086, + 0.9600350000000617, + 1.870005000000674, + 0.9529419999998936, + 0.9001680000001215, + 0.85891200000151, + 0.9492129999998724, + 0.883972999999969, + 0.8480999999992491, + 0.8664709999993647, + 0.8873320000002423, + 0.8766379999997298, + 1.7845729999989999, + 3.0285710000007384, + 2.1226019999994605, + 1.151847999999518, + 1.1391970000004221, + 1.5540299999993294, + 1.4676060000001598, + 1.1186429999997927, + 1.0565059999989899, + 1.0322209999994811, + 1.0542459999996936, + 0.9757819999995263, + 1.0848559999994905, + 0.9430860000011307, + 0.9055929999994987, + 0.8582749999986845, + 0.8504510000002483, + 0.8459899999998015, + 2.193217000000004, + 2.08399400000053, + 2.156003000000055, + 2.003020000000106, + 0.9480019999991782, + 0.9125700000004144, + 0.8447599999999511, + 0.8706300000012561, + 1.0569379999997182, + 0.874123999999938, + 0.8233770000006189, + 0.8327040000003763, + 0.8197219999983645, + 0.824282999999923, + 0.8468380000012985, + 0.8800780000001396, + 0.9263479999990523, + 1.2344020000000455, + 1.009684999999081, + 1.0767409999989468, + 1.0195929999990767, + 0.9148459999996703, + 0.9332429999994929, + 0.876776000000973, + 0.8827049999999872, + 0.8724650000003749, + 0.851859999998851, + 0.8548810000011144, + 0.8412170000010519, + 0.8444669999989856, + 1.000281000000541, + 0.880261000000246, + 0.8981999999996333, + 0.9060059999992518, + 0.8961010000002716, + 0.8844950000002427, + 0.8776180000004388, + 0.8734970000004978, + 0.9230159999988246, + 1.0401769999989483, + 1.0546059999996942, + 0.9956979999988107, + 0.9823639999995066, + 0.9827789999999368, + 0.9948289999992994, + 1.0070269999996526, + 1.0073869999996532, + 1.0211920000001555, + 1.035013999999137, + 1.0578580000001239, + 1.061823000000004, + 1.0601669999996375, + 1.080680000000939, + 2.1981959999993705, + 1.4932369999987714, + 1.1632799999988492, + 1.1117190000004484, + 1.0888899999990826, + 1.043257999999696, + 1.0079299999997602, + 0.9690859999991517, + 0.9623259999989386, + 0.9062410000005912, + 0.8800989999999729, + 0.8595249999998487, + 0.8437320000011823, + 0.8255520000002434, + 0.8219709999993938, + 1.0075880000003963, + 0.8814039999997476, + 0.8858619999991788, + 0.8961689999996452, + 0.8965290000014647, + 0.8320229999990261, + 0.8314559999998892, + 0.8454650000003312, + 0.8343509999995149, + 0.8223900000011781, + 0.8419849999991129, + 0.8204089999999269, + 0.8220350000010512, + 0.8219480000007025, + 0.8506589999997232, + 0.8220899999996618, + 0.8204330000007758, + 0.8218620000006922, + 0.9188990000002377, + 0.9143560000011348, + 0.8954240000002756, + 0.9471620000003895, + 0.9387189999997645, + 0.9470229999988078, + 0.9000189999987924, + 0.9185680000009597, + 0.9336600000006001, + 0.9344209999999293, + 0.8992629999993369, + 0.8758109999998851, + 0.8761509999985719, + 0.878764000000956, + 0.8769580000007409, + 0.8761829999984911, + 0.8727890000009211, + 0.826509000000442, + 0.9938929999989341, + 0.8766759999998612, + 0.9299709999995684, + 0.9071769999991375, + 0.8836729999984527, + 0.8918100000009872, + 0.8777150000005349, + 0.8769410000004427, + 0.8919399999995221, + 0.8767449999995733, + 0.8737600000004022, + 0.9304140000003827, + 0.8765930000008666, + 0.8475220000000263, + 0.8362699999997858, + 0.8235150000000431, + 0.8225129999991623, + 0.8123789999990549, + 0.8062960000006569, + 0.8066629999993893, + 0.8099349999993137, + 0.949851999999737, + 0.8294910000004165, + 0.8153949999996257, + 0.8147279999993771, + 0.903533000000607, + 0.9057969999994384, + 0.9110669999990932, + 0.8808649999991758, + 0.8630509999984497, + 0.8577889999996842, + 0.8708160000005591, + 0.8620260000006965, + 0.8573930000002292, + 0.8802470000009635, + 0.8814330000004702, + 0.8568800000011834, + 0.8571730000003299, + 0.8550169999998616, + 1.0242880000005243, + 0.9635770000004413, + 0.8870299999998679 + ] + }, + "1000000": { + "ingest": [ + 1124.1987410000002, + 1127.2986849999998, + 1211.2548559999996 + ], + "windowRead": [ + 0.011434406250032225, + 0.014476562500021828, + 0.011436687499895015, + 0.01249090625003646, + 0.011010312500047803, + 0.010898718750013359, + 0.011154562499996246, + 0.010876875000008113, + 0.010784343750060543, + 0.010873437499981264, + 0.010912999999959538, + 0.01092018750000534, + 0.01099118749993977, + 0.010627812500047185, + 0.012133031249959458, + 0.011953062499969747, + 0.01199921875002019, + 0.011764125000013337, + 0.012208156249926105, + 0.012318312500042339, + 0.012637343749929641, + 0.011234687499950269, + 0.01190690625003299, + 0.011797937499977706, + 0.011365781249992324, + 0.01128462499991656, + 0.011540218750042186, + 0.011274718749973545, + 0.011476968750002925, + 0.012056218749989966, + 0.011251343749904663, + 0.011960937500020918, + 0.011103156250101165, + 0.011122999999997774, + 0.011059781250082779, + 0.010908593750059481, + 0.01076509375002388, + 0.01103628124997158, + 0.01076643750002404, + 0.011523499999952946, + 0.011064000000033047, + 0.0114712499999996, + 0.011046468750009808, + 0.010814468750027117, + 0.01111653124996792, + 0.010874093749976055, + 0.012500250000016422, + 0.011795125000048756, + 0.012025187500057655, + 0.012263218750035776, + 0.012237531249979838, + 0.01266703124997548, + 0.011872968750026303, + 0.01699668750006822, + 0.020419250000031752, + 0.020065531249997548, + 0.02124031249991276, + 0.013546874999974534, + 0.01679921874995216, + 0.012619437500006825, + 0.011687374999951317, + 0.011215843749937449, + 0.011100843750000422, + 0.010776718749980319, + 0.010651062499960062, + 0.011075843750063541, + 0.010547531250040265, + 0.010528781249945496, + 0.010327812500008804, + 0.010143937500060929, + 0.011786406250053005, + 0.01024987499999952, + 0.010229812500028856, + 0.010331999999948493, + 0.010357500000054642, + 0.011087343749977663, + 0.010513281250041473, + 0.010510968750054417, + 0.011764437500005442, + 0.011608749999936663, + 0.012016406250040745, + 0.01167634374996851, + 0.012003343749938722, + 0.011650437499952204, + 0.011553250000019943, + 0.011623999999983425, + 0.011658249999982218, + 0.011570312499998181, + 0.01910490625004968, + 0.012206937499968262, + 0.011699406249931599, + 0.01178149999998368, + 0.011681656250061678, + 0.01186528124992492, + 0.011378468749967396, + 0.012040500000011889, + 0.011486187500054257, + 0.01137265625004602, + 0.011224656249964937, + 0.011180062499988708, + 0.011168156250050743, + 0.011053374999960397, + 0.011011281250034699, + 0.010903093749902837, + 0.011158625000007305, + 0.011211875000071814, + 0.010907812500022374, + 0.010990718749894768, + 0.01079887499997767, + 0.010842031249922002, + 0.012022906250081178, + 0.011594999999942956, + 0.012032125000018823, + 0.011888906250078435, + 0.012518812500047716, + 0.011687031249948632, + 0.0115299687499828, + 0.011338468750068387, + 0.01162284375004674, + 0.01150693750003029, + 0.01137021874990296, + 0.011349687500000982, + 0.011391781250040367, + 0.011358999999970365, + 0.012180718750073538, + 0.011131312500083368, + 0.011561312499907217, + 0.01129724999998416, + 0.011309312499975022, + 0.011442249999959131, + 0.011005749999981163, + 0.011334250000004431, + 0.011269874999925378, + 0.011271906249930908, + 0.011629500000026383, + 0.011235062499963533, + 0.010971718750056425, + 0.010943031249894375, + 0.011124499999937143, + 0.011074593749981432, + 0.011395999999990636, + 0.011181031249975604, + 0.011946000000079948, + 0.017068218749955122, + 0.017815281250022963, + 0.01422762499998953, + 0.012020218750080858, + 0.012242906249980479, + 0.011942812500024047, + 0.01179028125000059, + 0.011829031249931177, + 0.01176468749997639, + 0.01172828124992975, + 0.012355531250022977, + 0.011713281250081309, + 0.012094281250028871, + 0.011595843750001222, + 0.011822687500057327, + 0.011528656249993219, + 0.011344874999963395, + 0.011585156249907413, + 0.01160453125010008, + 0.01122025000006488, + 0.011377625000022817, + 0.011098718749963155, + 0.01140984375001608, + 0.01159606249996159, + 0.011063124999964202, + 0.010976343750030537, + 0.011052749999976186, + 0.010932093749943306, + 0.010926656250035194, + 0.010854875000063657, + 0.01062353124996207, + 0.011865343749946078, + 0.011751406250027685, + 0.012470406250031374, + 0.01454593749997457, + 0.011722031249973952, + 0.016502281249927364, + 0.012462937499890359, + 0.011715968749967942, + 0.011133437500006949, + 0.010848562499973013, + 0.011284718750061984, + 0.012255968749968815, + 0.0107906562500375, + 0.011224062499991305, + 0.011954593750033382, + 0.01115562500001488, + 0.014945593749985164, + 0.011922281250008382, + 0.011385343749907406, + 0.011038093750016742, + 0.011268406249996588, + 0.011214750000021922, + 0.010891593749988715, + 0.011148093749966392, + 0.01566668750001554, + 0.01606462500001271, + 0.015870124999992186, + 0.017028187500045533, + 0.016532218750057837, + 0.01743912500000988, + 0.017788312499988024, + 0.01797956249993149, + 0.019482468749970394, + 0.018758749999960855, + 0.020614749999936066, + 0.017116375000000517, + 0.018261562500015316, + 0.013870312500102955, + 0.01291249999997035, + 0.012424156249949192, + 0.012579999999957181, + 0.012665562499933003, + 0.01235353124991434, + 0.011838125000053878, + 0.011742187499976353, + 0.011690156249983374, + 0.011477500000069085, + 0.01447174999998424, + 0.012070375000007516, + 0.011636625000051026, + 0.011326437499974418, + 0.014498250000087864, + 0.011401031249988591, + 0.011122249999971245, + 0.010928593750008986, + 0.010439031250029984, + 0.011145281249923755, + 0.010843187499972373, + 0.010910562499930165, + 0.010969812499979525, + 0.010462468750006337, + 0.010610937500018736, + 0.010585812500039538, + 0.010274062500002401, + 0.011224843750028413, + 0.011520812499952626, + 0.011317093749994456, + 0.011322500000005675, + 0.010990968750093089, + 0.010807093750031527, + 0.010867437499996413, + 0.010211249999997563, + 0.010117250000007516, + 0.01023628125005871, + 0.010221531250067528, + 0.010108437499980027, + 0.0099032187499688, + 0.010407562499949563, + 0.009975749999966865, + 0.009729031250003572, + 0.01016018749999148, + 0.009564124999997148, + 0.009500437500037151, + 0.009835718749968692, + 0.009496531250078988, + 0.009463156250035354, + 0.00935612500006755, + 0.009276218750073895, + 0.009351718750053806, + 0.009433062499965672, + 0.00906078125001386, + 0.009314874999972744, + 0.009437656250042892, + 0.009122968749920801, + 0.009199656249961663, + 0.009969312500061278, + 0.01103968749998785, + 0.010356562500078326, + 0.01029428125002596, + 0.01097275000006448, + 0.010365218750052918, + 0.01067340625002089, + 0.010784375000071122, + 0.010340437500076405, + 0.01018090625007062, + 0.010448999999994157, + 0.010297281250018386, + 0.010536187500065353, + 0.010455125000021326, + 0.010106562499913707, + 0.00989115624997794, + 0.010806593749975946, + 0.01043059375001576, + 0.009837062499968852, + 0.010134343749996333, + 0.00982446874991183, + 0.01018378125002073, + 0.00971687500009466, + 0.009593062500016458, + 0.00955243750001955, + 0.018257000000062362, + 0.009541249999983847, + 0.009689999999977772, + 0.009430281250047301, + 0.009488843750091291, + 0.009478031250068852 + ], + "edit": [ + 3.572030999999697, + 3.231244999999035, + 3.7340579999981856, + 3.7718080000013288, + 3.5740249999980733 + ], + "sort": [ + 24.449263999998948, + 24.283793000002333, + 27.058264999999665, + 26.911009999999806, + 26.177773999999772 + ], + "filter": [ + 4.198064000000159, + 3.2409950000001118, + 3.43189099999654, + 3.838340000002063, + 3.235043000000587 + ], + "multiFilter": [ + 37.33966900000087, + 36.54788800000097, + 40.18242900000041, + 33.138348000000406, + 39.489604999998846 + ], + "distinctLow": [ + 36.791401999998925, + 36.40603899999769, + 62.20027299999856, + 36.77483800000118, + 42.686820000002626 + ], + "distinctHigh": [ + 243.42601499999728, + 232.01402600000074, + 230.7182470000007, + 240.92973699999857, + 241.39001199999984 + ], + "aggregate": [ + 1.9576989999986836, + 1.957116000001406, + 1.854468999998062, + 1.8511989999969956, + 1.8474639999985811, + 1.8782399999981862, + 1.8516049999998359, + 1.8318130000006931, + 1.8618710000009742, + 1.973894000002474, + 1.8717710000018997, + 1.8430279999993218, + 1.835629000001063, + 1.8298830000021553, + 1.8495419999999285, + 1.881478999999672, + 1.8470589999997173, + 1.883773999998084, + 1.8885020000016084, + 1.8691969999999856, + 2.538358000001608, + 1.984961000001931, + 1.8663940000005823, + 1.739556000000448, + 1.816209999997227, + 1.6515260000014678, + 1.6670870000016293, + 1.6781259999988833, + 1.8040099999998347, + 1.7574749999985215, + 1.7644399999990128, + 2.8111690000005183, + 1.7827670000006037, + 1.7151109999977052, + 1.6633479999982228, + 1.9540560000023106, + 1.8015039999991131, + 1.7581090000021504, + 3.1632669999999052, + 2.4011089999985415, + 1.8650930000003427, + 1.7546629999997094, + 1.687514999997802, + 1.7234150000003865, + 1.7910069999998086, + 1.8232910000006086, + 1.7655799999993178, + 1.8260530000006838, + 1.9459290000013425, + 1.9075779999984661, + 1.944071999998414, + 1.9384769999996934, + 1.97219799999948, + 2.006105000000389, + 2.0032940000019153, + 1.975033999999141, + 4.19601799999873, + 4.278747000000294, + 2.9251320000003034, + 1.7400610000004235, + 1.6666310000000522, + 1.664136999999755, + 1.6498030000002473, + 1.6596119999994698, + 1.6599559999995108, + 1.67717900000207, + 1.6998050000001967, + 2.953073000000586, + 2.8274830000009388, + 2.1641529999978957, + 1.976488000000245, + 1.8524490000017977, + 1.750649000001431, + 1.7158679999993183, + 1.6917099999991478, + 1.945757000001322, + 1.8422609999979613, + 1.9845970000023954, + 1.9973379999973986, + 1.9888060000012047, + 2.0046609999990324, + 2.0418509999981325, + 2.0200260000019625, + 2.03711900000053, + 2.0162400000008347, + 2.027487999999721, + 2.082984000000579, + 2.08110399999714, + 2.0288929999987886, + 2.019357000001037, + 2.023908000002848, + 2.0236600000025646, + 2.0408339999994496, + 2.0587049999994633, + 2.0690320000030624, + 2.0221239999991667, + 2.0127990000000864, + 2.0197660000012547, + 2.0133289999976114, + 2.2742849999995087, + 4.776872999998886, + 4.099811000000045, + 4.039125999999669, + 4.027293000002828, + 4.076022999997804, + 4.042465999998967, + 2.4518449999995937, + 1.694428999999218, + 1.7456500000007509, + 1.6745850000006612, + 1.6935369999991963, + 2.7324079999998503, + 1.613204000001133, + 1.6120570000020962, + 1.610287999999855, + 1.912307000002329, + 1.773084000000381, + 2.170351999997365, + 2.6107950000005076, + 1.6355939999994007, + 1.6820909999987634, + 1.7563799999988987, + 1.8425439999991795, + 1.9209970000010799, + 1.9776569999994535, + 1.9484529999972438, + 1.9692710000017541, + 1.9949689999994007, + 2.000477999998111, + 2.038724000001821, + 2.0140509999982896, + 2.0278980000002775, + 2.013645999999426, + 2.0191019999983837, + 2.0221119999987422, + 2.014538999999786, + 2.019677000000229, + 2.0203680000013264, + 2.051610000002256, + 2.070264000001771, + 2.0285599999988335, + 2.0641099999993457, + 2.058104000003368, + 2.075213000000076, + 3.2020859999975073, + 2.3742849999980535, + 1.9403890000030515, + 1.817191999998613, + 3.379363000000012, + 4.203795000001264, + 3.296641000000818, + 1.7001559999989695, + 1.6540300000015122, + 1.8382799999999406, + 1.6934189999992668, + 1.7610610000010638, + 1.6474620000008144, + 1.6477349999986473, + 1.6387609999983397, + 1.681830000001355, + 1.629397999997309, + 1.8737179999989166, + 1.7313439999998081, + 1.71271699999852, + 1.8639779999975872, + 1.746728999998595, + 1.7797209999989718, + 1.7672740000016347, + 1.7836680000000342, + 1.7265079999997397, + 1.7461419999999634, + 1.727950000000419, + 1.7157080000033602, + 1.8840989999989688, + 1.7567389999967418, + 1.7543449999975564, + 1.757975999997143, + 1.7564019999990705, + 1.7790249999998196, + 1.8043480000014824, + 1.757607999999891, + 1.7521879999985686, + 1.7746559999977762, + 1.7596659999981057, + 1.7938220000032743, + 1.7889969999996538, + 1.8154390000017884, + 1.794052000001102, + 1.8166450000026089, + 1.8328049999981886, + 1.821709000003466, + 1.7650140000005194, + 1.8519890000025043, + 1.8239700000012817, + 1.8115389999984473, + 1.9318420000017795, + 1.7666399999980058, + 1.7930540000015753, + 1.8189949999978126, + 1.7694599999995262 + ] + } + } + }, + { + "repetition": 2, + "captureSha256": "3379c8a13c7dacc4312e504b1694a29ff42b1a2b5bea2b51510f34f2950ed1c2", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:45:39.115Z", + "sheetwriteRows": [ + 1000, + 10000, + 100000, + 500000, + 1000000 + ], + "handsontableRows": [ + 1000, + 10000 + ] + }, + "sheetwrite": { + "1000": { + "ingest": [ + 2.7812450000000126, + 2.713661000000002, + 2.0203280000000063, + 3.393902999999966, + 5.11502200000001, + 1.3477139999999963, + 2.5196710000000166 + ], + "windowRead": [ + 0.009957406249998968, + 0.009817874999999532, + 0.009834062499999519, + 0.009950062499999746, + 0.01004378125000116, + 0.009886937499999249, + 0.009676781250000488, + 0.009791062499999725, + 0.009703281250001083, + 0.009930093750000424, + 0.009942656249998905, + 0.00988431249999877, + 0.009916875000000047, + 0.009666156250000668, + 0.01004165624999942, + 0.009898187499999267, + 0.00981025000000102, + 0.011551968750000086, + 0.012627062500000008, + 0.013287187500001352, + 0.013387406250000566, + 0.012290375000000964, + 0.010140187499999342, + 0.010530531249999697, + 0.010145718749999588, + 0.010011749999998543, + 0.010111625000000402, + 0.010188249999998789, + 0.010120281249999863, + 0.01219465624999927, + 0.010378156250000714, + 0.010097437499998918, + 0.01040428125000048, + 0.009963250000000201, + 0.0100694999999984, + 0.01072390624999997, + 0.010095656249999863, + 0.011262343750001236, + 0.011067125000000289, + 0.010200843749998967, + 0.010527031249999652, + 0.010162843749998984, + 0.010087812500000126, + 0.010283125000000837, + 0.01503828124999984, + 0.010126749999999518, + 0.0101448125000001, + 0.009976593750000262, + 0.010094374999999545, + 0.010239062500000173, + 0.009857000000000227, + 0.01073949999999968, + 0.021355781249999595, + 0.012451875000000001, + 0.010075843750000146, + 0.009972093749999189, + 0.009895843749999855, + 0.01011415624999934, + 0.011389812499999152, + 0.009770999999998864, + 0.009959343749999405, + 0.010125562499998964, + 0.012409937499999302, + 0.011030437500000545, + 0.011214750000000606, + 0.022185687500000384, + 0.01926387500000004, + 0.02022109374999914, + 0.01349068750000093, + 0.010006999999999877, + 0.009823093750000567, + 0.010133218749999173, + 0.010216499999998518, + 0.009894062499999023, + 0.009903843749999197, + 0.010795500000000402, + 0.009956843750000388, + 0.009867093749999611, + 0.01079975000000033, + 0.010522124999999605, + 0.0100043749999994, + 0.010217812499998757, + 0.010018906250000015, + 0.009762874999999838, + 0.01018668749999918, + 0.009737062499999283, + 0.009796218749999142, + 0.009834249999999045, + 0.009561343750000617, + 0.010299531250000271, + 0.009604843749999148, + 0.010076593750000029, + 0.009657250000000062, + 0.009735062499999003, + 0.010083031249999763, + 0.00978093750000042, + 0.009987750000000517, + 0.010096343749999903, + 0.01030515625000028, + 0.009756437500000104, + 0.010065000000000879, + 0.00955940625000018, + 0.00960759374999931, + 0.010513125000001011, + 0.010635781249998644, + 0.00915990624999985, + 0.010003406250000069, + 0.009473062500001461, + 0.00849828124999874, + 0.008729343749999785, + 0.008637437499999123, + 0.00867496875000029, + 0.009649468750000167, + 0.008796781250000052, + 0.008641562499999367, + 0.008626593749999856, + 0.008549406249999336, + 0.008824375000001439, + 0.009231031249999688, + 0.008543062499999365, + 0.008898500000000809, + 0.01082099999999997, + 0.008743031250000755, + 0.008670249999999768, + 0.00867834375000065, + 0.008539656249999084, + 0.008613062500000268, + 0.008759593749999794, + 0.010442218749998844, + 0.008663124999999994, + 0.00867537500000104, + 0.009095375000001127, + 0.010179218749998498, + 0.008748687499998908, + 0.009416656249999988, + 0.009898937500000926, + 0.009337249999999742, + 0.009367249999998606, + 0.008860656250000432, + 0.04935393749999939, + 0.007102031249999641, + 0.007787374999999486, + 0.007142500000000496, + 0.006982750000000593, + 0.006814093750000083, + 0.0067462499999990655, + 0.006581281249999904, + 0.006601031249999778, + 0.00661803124999949, + 0.007043999999998718, + 0.0069110312499987, + 0.006999187499999948, + 0.006981968749999012, + 0.007064968750000844, + 0.006612187500000033, + 0.0065872187500009005, + 0.006575749999999658, + 0.0065344999999989994, + 0.00672415624999978, + 0.006504500000000135, + 0.0066872500000005886, + 0.006509250000000577, + 0.006481218750000295, + 0.00750274999999867, + 0.006927718749999201, + 0.006983687500000002, + 0.006655937499999709, + 0.006698781249999897, + 0.00703246874999941, + 0.006857187500001416, + 0.007062718750001196, + 0.006987062500000363, + 0.006741562500000242, + 0.0066043125000003755, + 0.006545187500000438, + 0.006838406249999096, + 0.006764718750000398, + 0.0071805937500002415, + 0.006528468750000016, + 0.00670559375000046, + 0.006988999999999024, + 0.007112281250000407, + 0.007010968750000401, + 0.007024281250000541, + 0.006987000000000521, + 0.007213093749999899, + 0.00663403124999995, + 0.0064710312499993705, + 0.006468531250000353, + 0.0067280312500006545, + 0.006593687500000556, + 0.006601031249999778, + 0.006772781249999582, + 0.006693812500000007, + 0.0067433124999993765, + 0.007142624999998404, + 0.008236093749999895, + 0.00768053125000101, + 0.006956218750000076, + 0.0071310624999991745, + 0.006851406250000025, + 0.007101218749999916, + 0.007497312499999964, + 0.006902624999998608, + 0.0065144687499998355, + 0.006655437500000971, + 0.006844812500000685, + 0.006947906249999747, + 0.007134468749999456, + 0.006938687499999929, + 0.006928406250001018, + 0.006998124999999078, + 0.007023437499999119, + 0.0069383124999991, + 0.006454906250001002, + 0.006901968749998488, + 0.006434437500001167, + 0.0067441249999991015, + 0.006786187499999485, + 0.0068416874999996935, + 0.006835187500000117, + 0.006763593749999686, + 0.0066075624999992755, + 0.006822281250000728, + 0.006496187499999806, + 0.006580874999999153, + 0.006750187499999782, + 0.006453999999999738, + 0.006631000000000498, + 0.006810718749999722, + 0.006730749999999119, + 0.006545031249999056, + 0.006470187500001501, + 0.006543906249998344, + 0.006534000000000262, + 0.006412375000000026, + 0.006896499999999861, + 0.00700756250000012, + 0.006459468750000141, + 0.006367812499998848, + 0.006947906249999747, + 0.007060531249999613, + 0.006875843750000499, + 0.0070691874999990745, + 0.0067714687500011195, + 0.00685193750000046, + 0.0068061875000005045, + 0.0068456562500003315, + 0.006735312500000035, + 0.006844874999998751, + 0.009299218749999838, + 0.007122250000000108, + 0.006854875000000149, + 0.006367124999998808, + 0.006976218750001095, + 0.006896218750000571, + 0.006892093750000328, + 0.006749937500000414, + 0.0066597500000007415, + 0.006478562499999896, + 0.006532250000001127, + 0.006635124999998965, + 0.006591656250000355, + 0.006697624999999263, + 0.006556343750000693, + 0.006408156250000019, + 0.006475937500001194, + 0.0064883125000001485, + 0.006703968749999234, + 0.006400718750001033, + 0.00644612500000008, + 0.006390093749999437, + 0.007526374999999419, + 0.006953968750000428, + 0.006638437499999483, + 0.006462124999998764, + 0.006448499999999413, + 0.006821374999999463, + 0.006825375000000022, + 0.006781124999999832, + 0.0069435312500001345, + 0.006856281249998375, + 0.006690656249999094, + 0.006532343750000891, + 0.006298906250000513, + 0.006518281250000868, + 0.006670843749999378, + 0.006536968749999872, + 0.006264749999999708, + 0.006219656249999872, + 0.006285531249998755, + 0.006627218749999386, + 0.00683631250000083, + 0.00667628124999986, + 0.00677137499999958, + 0.006714750000000436, + 0.006916375000001196, + 0.006256156250000089, + 0.0062744375000001185, + 0.006307468750000211 + ], + "edit": [ + 8.474601000000007, + 5.9138659999999845, + 7.254669999999976, + 8.484770000000026, + 7.3273510000000215, + 6.90606200000002, + 7.598604000000023, + 4.446341000000018, + 4.419987000000049, + 4.365398000000027, + 4.465347999999949, + 4.480576000000042, + 6.419954000000075, + 4.58326999999997, + 5.608442999999966 + ], + "sort": [ + 0.13113700000008066, + 0.12258599999995567, + 0.11978799999997136, + 0.11758399999996527, + 0.10807999999997264, + 0.11457800000005136, + 0.10150500000008833, + 0.10162700000000768, + 0.11136099999998805, + 0.1011230000000296, + 0.09468500000002678, + 0.09981399999992391, + 0.11810200000002169, + 0.11778700000002118, + 0.10193600000002334 + ], + "filter": [ + 0.039182999999979984, + 0.1653519999999844, + 0.050379000000020824, + 0.02154700000005505, + 0.020245000000045366, + 0.02001800000005005, + 0.017451999999934742, + 0.018434999999954016, + 0.01704800000004525, + 0.017346999999972468, + 0.02073799999993753, + 0.02157600000009552, + 0.021092999999950734, + 0.024328999999966072, + 0.07953900000006797 + ], + "multiFilter": [ + 0.2289459999999508, + 0.21113200000002053, + 0.2002580000000762, + 0.2853890000000092, + 0.22292699999991328, + 0.22752600000001166, + 0.23958199999992758, + 0.20455299999991894, + 0.17997299999990446, + 0.19654100000002472, + 0.17825600000003305, + 0.2234690000000228, + 0.15928599999995185, + 0.15511499999990974, + 0.15399600000000646 + ], + "distinctLow": [ + 0.0819770000000517, + 0.07744400000001406, + 0.12835099999995236, + 0.0707519999999704, + 0.07085800000004383, + 0.07386300000007395, + 0.07354099999997743, + 0.1647449999999253, + 0.09952699999996639, + 0.070508000000018, + 0.06939199999999346, + 0.0792309999999361, + 0.08883300000002237, + 0.06223099999999704, + 0.06199900000001435 + ], + "distinctHigh": [ + 0.3050220000000081, + 0.28263800000001993, + 0.2593769999999722, + 0.27211799999997766, + 0.26864899999998215, + 0.2554659999999558, + 0.2563999999999851, + 0.2646469999999681, + 0.2885390000000143, + 0.9072360000000117, + 0.48800900000003367, + 0.4426940000000741, + 0.44363799999996445, + 0.5641460000000507, + 0.4704540000000179 + ], + "aggregate": [ + 0.004193554687499379, + 0.004016742187499922, + 0.004343109375000154, + 0.004143820312499713, + 0.004187726562499883, + 0.004178718750000421, + 0.004079984375000123, + 0.004062968749999563, + 0.00420760937500031, + 0.004337195312499986, + 0.00418933593750026, + 0.005965414062500507, + 0.005886476562499965, + 0.006131070312499709, + 0.006018867187499666, + 0.005917843750000706, + 0.00460510156250038, + 0.0042146015624995314, + 0.004405757812500077, + 0.00415207812500018, + 0.004227906249999691, + 0.004288484374999513, + 0.004283117187500629, + 0.004121648437499736, + 0.004124374999999958, + 0.004109374999999638, + 0.004145234374999696, + 0.004252046875000026, + 0.00415202343749943, + 0.003980062500000159, + 0.003968726562499469, + 0.003985156250000621, + 0.004162109375000611, + 0.004055328124999313, + 0.00410816406250003, + 0.004062648437500371, + 0.004124023437499957, + 0.004136374999999859, + 0.0040234687499998145, + 0.004158039062499341, + 0.004154476562500342, + 0.004124382812500826, + 0.004107281250000483, + 0.004065328124999823, + 0.00419060937499971, + 0.004240148437499869, + 0.004091820312500438, + 0.004106421874999988, + 0.004068093749999946, + 0.004023820312499815, + 0.004006187499999925, + 0.0040106015624994384, + 0.003971445312499711, + 0.00401103906250011, + 0.003913054687499695, + 0.004030351562500201, + 0.004027882812500216, + 0.003950664062500664, + 0.0039955781250000655, + 0.004009132812500482, + 0.003982976562500795, + 0.004015093750000531, + 0.0040243906250001515, + 0.003929164062499879, + 0.004066382812499825, + 0.004229015625000443, + 0.004059578124999241, + 0.003954054687500097, + 0.004020210937500046, + 0.004024203124999737, + 0.003948914062500641, + 0.0039398593749995214, + 0.0039780390624999384, + 0.003928984374999445, + 0.003960039062500087, + 0.005353624999999695, + 0.006094156249999649, + 0.005799210937500021, + 0.003993804687500102, + 0.004043203125000616, + 0.003908249999999391, + 0.004038835937500096, + 0.003945679687499926, + 0.004014617187499958, + 0.003910476562499987, + 0.003989210937500154, + 0.003963593749999994, + 0.003979421875, + 0.003953695312500116, + 0.003980249999999685, + 0.00393254687500022, + 0.0040149062500001165, + 0.003922578124999632, + 0.004672117187500824, + 0.004118929687499495, + 0.003937789062500308, + 0.003939304687500034, + 0.004038257812500667, + 0.003984210937500343, + 0.003958859375000401, + 0.003947710937500126, + 0.0038574609374997237, + 0.004716523437499731, + 0.003989687499999839, + 0.003950023437499617, + 0.0038509687499992395, + 0.0039459843750000445, + 0.003896523437499688, + 0.004016507812500514, + 0.003942085937500117, + 0.0039802812499996065, + 0.003918585937499941, + 0.00394183593749986, + 0.0039029609374994223, + 0.0039589609375001444, + 0.003913742187499736, + 0.003939398437500685, + 0.0038994453124994166, + 0.003921679687500124, + 0.0040555546874996296, + 0.003970554687500183, + 0.003916312500000352, + 0.003958835937499572, + 0.00389628906250028, + 0.004000375000000389, + 0.003940921874999503, + 0.003917656250000512, + 0.0039695937499999445, + 0.004008273437499987, + 0.0039442499999999825, + 0.003973835937499892, + 0.0038737812500002633, + 0.0039464843750005585, + 0.004660890624999858, + 0.0061977109375002115, + 0.0060404218750003125, + 0.0061200624999999675, + 0.006136578125000014, + 0.003969023437500496, + 0.003929546874999801, + 0.003985023437500068, + 0.004006296874999649, + 0.0038667109374994624, + 0.0039086406250001815, + 0.0038893984374999135, + 0.003931593749999962, + 0.003968953124999786, + 0.003927062499999856, + 0.003925726562500564, + 0.004114664062499607, + 0.0039499296874998535, + 0.003924351562500483, + 0.003929062499999247, + 0.004424195312499712, + 0.003939671874999995, + 0.0040123046875004675, + 0.005487367187499537, + 0.006058421875000164, + 0.006086671874999894, + 0.006036187500000345, + 0.004642195312499986, + 0.003771281249999703, + 0.0037917656250003873, + 0.0038502421875001858, + 0.003794304687500194, + 0.0038362187500000644, + 0.003763960937499533, + 0.0038452187500004342, + 0.0038504374999996926, + 0.0038071953124996227, + 0.0037709062500006496, + 0.0038414296874993425, + 0.0038092187500007313, + 0.003811343749999807, + 0.0037375312499996483, + 0.0038406093750005255, + 0.0038841406250007537, + 0.0038012187500005012, + 0.003806835937499642, + 0.0038174218749995603, + 0.003851593750000326, + 0.0040068515625000245, + 0.0037142578125006764, + 0.0038378515624994947, + 0.0037982343750000425, + 0.003809632812499686, + 0.0037973124999997054, + 0.003989523437500253, + 0.003855703125000609, + 0.00394848437499995, + 0.0038917500000001937, + 0.003937554687500011, + 0.003837578125000185, + 0.00385763281249929, + 0.0038033593750004258, + 0.0038285234374999533, + 0.0038283046874996174, + 0.0039578984375001625, + 0.003853835937499994, + 0.0037669609374999524 + ] + }, + "10000": { + "ingest": [ + 14.74053600000002, + 15.010086000000001, + 12.554310999999984, + 13.538681999999994, + 15.853718999999955, + 16.197693000000072, + 12.304843000000005 + ], + "windowRead": [ + 0.006537437500000465, + 0.00652090624999957, + 0.0067680312500009165, + 0.006947156249999864, + 0.00695509375000114, + 0.0068945625000012, + 0.008078937500002326, + 0.007514437500002913, + 0.007227562500002449, + 0.006898124999999311, + 0.006944624999999149, + 0.007047718749998211, + 0.00798846874999981, + 0.006629312499999429, + 0.008127968749999326, + 0.007152749999999486, + 0.007010781250002651, + 0.007007593750000041, + 0.006994437500001283, + 0.007656937499998406, + 0.006894499999997805, + 0.006747656249999068, + 0.006729593750002039, + 0.006781375000002754, + 0.006905656250001613, + 0.00680259374999892, + 0.0066695312499973625, + 0.006540187500000627, + 0.006535437499998409, + 0.007256249999997522, + 0.007807468749998492, + 0.007314687499999195, + 0.008709812500001135, + 0.009694718750001385, + 0.006938906249999377, + 0.0069077812499998, + 0.006865468750000048, + 0.007043562500001599, + 0.006586468750001018, + 0.00651231249999995, + 0.006590187499998734, + 0.006527156250001553, + 0.007095812500001131, + 0.006937718749998822, + 0.006932875000000394, + 0.006809625000002484, + 0.007123874999997781, + 0.007012218749999022, + 0.0074626250000022765, + 0.007486000000000104, + 0.006948781249999314, + 0.006790875000000085, + 0.006491062500000311, + 0.00648490624999809, + 0.00654343750000308, + 0.006755374999997343, + 0.007307562500002973, + 0.008980531249999757, + 0.00855334375000183, + 0.007105124999998935, + 0.006870187499998792, + 0.006469687500000987, + 0.006570468750002334, + 0.006444249999997709, + 0.006742437500001586, + 0.006630656250003142, + 0.009302812499999646, + 0.006481562499999427, + 0.006975374999999673, + 0.006934812499999055, + 0.006519218750000277, + 0.0069311249999977065, + 0.006911124999998464, + 0.006728312499998168, + 0.006483500000001641, + 0.006601500000002147, + 0.006485062499997696, + 0.006808906250000746, + 0.0068975624999971785, + 0.006927562500003148, + 0.006972718749999274, + 0.008203281249997474, + 0.007141499999999468, + 0.007025562500000859, + 0.00689837499999868, + 0.006923906250001721, + 0.007152218750000827, + 0.006611843750000901, + 0.006418468749998851, + 0.006752625000000734, + 0.006755437499997186, + 0.007036343750002061, + 0.0067261874999999804, + 0.006859843750000039, + 0.006813749999999175, + 0.006844687499999225, + 0.0070400937499996985, + 0.006879093750001175, + 0.00690021875000113, + 0.006860593749998145, + 0.00702968749999755, + 0.006965031250000919, + 0.006903656249999557, + 0.006961374999999492, + 0.0069532187499987685, + 0.006660781249998138, + 0.006566687500001223, + 0.006997531250000577, + 0.007017468749999978, + 0.007045906249999234, + 0.006823750000002349, + 0.04606803124999814, + 0.007532562499999784, + 0.007266250000000696, + 0.007024125000000936, + 0.006996874999998681, + 0.006809468749999326, + 0.006716875000002176, + 0.00648968750000023, + 0.006529093750000214, + 0.006497406250002058, + 0.006930968750001654, + 0.006797843750000254, + 0.006830656250002676, + 0.006798156249999465, + 0.008429468750001945, + 0.006853531249998213, + 0.006543406250003159, + 0.006495874999998819, + 0.0065162812500005884, + 0.00654409374999787, + 0.008937781250001109, + 0.006720281249997129, + 0.006579656250000454, + 0.006484562499998958, + 0.006957124999999564, + 0.009486968750000102, + 0.006892249999999933, + 0.006951781249998845, + 0.006805843750001372, + 0.006569843750000359, + 0.006499937500002773, + 0.006610218750001451, + 0.006518499999998539, + 0.0069374374999995325, + 0.00676353125000162, + 0.00680203125000034, + 0.006766656250000835, + 0.006920718749999111, + 0.006473499999998467, + 0.006617562500000673, + 0.007748874999997213, + 0.006875187500000379, + 0.007044312499999705, + 0.006954156249999954, + 0.006930031250000468, + 0.007000062499997739, + 0.006998937500000579, + 0.006861093750000435, + 0.006869218749997685, + 0.006880625000000862, + 0.006950937499997423, + 0.006984093749998976, + 0.006972843749998958, + 0.0068686562499991055, + 0.006845031249998357, + 0.007022781250000776, + 0.006987281249998034, + 0.006576125000002264, + 0.006457187500000572, + 0.00652224999999973, + 0.006639937500001025, + 0.006562625000000821, + 0.006594437499998662, + 0.006471999999998701, + 0.006474750000002416, + 0.006599687499999618, + 0.006612375000003112, + 0.0064574062500000196, + 0.006634687500000069, + 0.006448437500001347, + 0.006569249999998306, + 0.006515812500001772, + 0.0064410000000023615, + 0.006547874999998982, + 0.007022937500000381, + 0.006543218750000079, + 0.006434468750001088, + 0.0065152812499995605, + 0.006474343749999889, + 0.006688312499999682, + 0.006479437500001239, + 0.006450187499996929, + 0.006412656249999316, + 0.006420343750001223, + 0.00677596874999864, + 0.006877312499998567, + 0.0067620312499983015, + 0.006704656250001051, + 0.0067379999999985785, + 0.006921625000000375, + 0.006772343750000687, + 0.006845468750000805, + 0.006767281249999257, + 0.007003125000000665, + 0.006801343750002076, + 0.006468312500000906, + 0.006384093750000375, + 0.006560249999999712, + 0.006546437499999058, + 0.006538749999997151, + 0.006385500000000377, + 0.006519093750000593, + 0.008707187499997104, + 0.006895843750001518, + 0.00694493749999836, + 0.006821062500002029, + 0.006975343749999752, + 0.007117656249999271, + 0.006866156249998312, + 0.00646737499999972, + 0.00651928125000012, + 0.006544531250000318, + 0.006583500000001408, + 0.0064725312500009125, + 0.006501374999999143, + 0.008070906250001286, + 0.006833843749998181, + 0.006835593750000868, + 0.0069035312499998724, + 0.006858499999999879, + 0.006828781250000304, + 0.007473781250002531, + 0.006496031249998424, + 0.007760906250002364, + 0.006886343749997081, + 0.007010031250000992, + 0.0069493125000015254, + 0.006860281249998934, + 0.008324656250000118, + 0.00986725000000277, + 0.008666625000000039, + 0.006941000000001196, + 0.007083281249997242, + 0.006689781249999527, + 0.006598468749999142, + 0.006835000000002367, + 0.006944906249998439, + 0.006978156249999756, + 0.007077499999997627, + 0.006954781250001929, + 0.0069140312499982315, + 0.0068799375000025975, + 0.006955031250001298, + 0.0069897499999989066, + 0.006853687499997818, + 0.006843593749998433, + 0.006942531250000883, + 0.007020250000000061, + 0.0069041562499982945, + 0.006942999999999699, + 0.006817531250000286, + 0.006946125000002468, + 0.006916499999999104, + 0.006925749999997066, + 0.006868624999999184, + 0.007058468749999491, + 0.006883968749999525, + 0.006565437500000826, + 0.006415031250000425, + 0.006487218749999357, + 0.006678156250000455, + 0.00658815625000031, + 0.006560593749998844, + 0.006402906249999063, + 0.006443406249999839, + 0.006687593750001497, + 0.006883875000003314, + 0.0068252812500020354, + 0.006778000000000617, + 0.006811406250001539, + 0.006699468749999937, + 0.006596156249997875, + 0.006656312499998762, + 0.006853156249999159, + 0.006958562499999488, + 0.006839375000001979, + 0.006786781249999763, + 0.009020093749999347, + 0.0068294999999984896, + 0.006713187500000828, + 0.006451968749999537, + 0.0064755000000005225, + 0.0066768750000001376, + 0.006581187500000141, + 0.006575624999999974, + 0.006397281249999054, + 0.006531406250001481, + 0.006443468749999681, + 0.006856656250000981 + ], + "edit": [ + 4.347373000000061, + 4.658234999999991, + 4.190384999999992, + 4.214852999999948, + 6.855232000000001, + 9.71067400000004, + 4.0672499999999445, + 4.134364000000005, + 4.0106179999999085, + 3.9875470000000632, + 4.142493000000059, + 4.693430000000035, + 6.809213, + 4.732609999999909, + 4.2403659999999945 + ], + "sort": [ + 0.29610200000001896, + 0.28983100000004924, + 0.2934089999999969, + 0.2891869999999699, + 0.28476100000000315, + 0.28822600000000875, + 0.2884920000000193, + 0.28744399999993675, + 0.2849429999999984, + 0.2873109999999315, + 0.27793500000007043, + 0.2889509999999973, + 0.30184699999995246, + 0.2936049999999568, + 0.29933200000004945 + ], + "filter": [ + 0.0543400000000247, + 0.05312800000001516, + 0.053134000000000015, + 0.05739300000004732, + 0.05761099999995167, + 0.05837999999994281, + 0.05439499999999953, + 0.053026000000045315, + 0.05332099999998263, + 0.055441000000087115, + 0.055399999999963256, + 0.05380999999999858, + 0.05663700000002336, + 0.061815000000024156, + 0.05484900000010384 + ], + "multiFilter": [ + 0.4853570000000218, + 0.4585970000000543, + 0.4706740000000309, + 0.4651820000000271, + 0.4704229999999825, + 0.5004509999999982, + 0.4991139999999632, + 0.5200039999999717, + 0.5090410000000247, + 0.501749000000018, + 0.5116580000000113, + 0.5008619999999837, + 0.5206759999999804, + 0.5198829999999361, + 0.4604459999999335 + ], + "distinctLow": [ + 0.43644800000004125, + 0.467145999999957, + 0.4299439999999777, + 0.4337679999999864, + 0.43987400000003163, + 0.47802500000000236, + 0.4701119999999719, + 0.468283999999926, + 0.45222400000000107, + 0.4495759999999791, + 0.4558160000000271, + 0.45172500000001037, + 0.46581099999991693, + 0.462079000000017, + 0.46189300000003186 + ], + "distinctHigh": [ + 2.5492320000000745, + 2.480788000000075, + 3.3778080000000728, + 2.689677999999958, + 2.3659249999999474, + 2.6283959999999524, + 2.4055549999999357, + 2.4073869999999715, + 2.4372299999999996, + 2.6487999999999374, + 2.2219139999999697, + 2.2689940000000206, + 2.3560710000001563, + 2.170229000000063, + 2.1515750000000935 + ], + "aggregate": [ + 0.02160984375000119, + 0.019921898437498697, + 0.020841984375000067, + 0.0196037968749998, + 0.020198953124999974, + 0.02040864062499992, + 0.021359421874999285, + 0.01958688281250076, + 0.019629554687501383, + 0.01976605468749959, + 0.019954804687499106, + 0.020034023437499826, + 0.02361471093749934, + 0.023995406250000073, + 0.023089367187500542, + 0.022918890625000188, + 0.022678195312499483, + 0.02229178906250162, + 0.022514710937500126, + 0.022555218749999995, + 0.022438445312499056, + 0.022287812500000115, + 0.02255905468750008, + 0.02169225781250006, + 0.021807953125000168, + 0.02175210937499905, + 0.021757859374998745, + 0.021718031249999825, + 0.021922195312500392, + 0.021907695312501474, + 0.022037281249998486, + 0.023272351562500404, + 0.02181803906250046, + 0.02214162499999972, + 0.022388195312499803, + 0.026763671874999062, + 0.02188345312499962, + 0.021868765624999398, + 0.022039632812498766, + 0.02226628124999941, + 0.023346757812499064, + 0.022569523437500294, + 0.023010539062500612, + 0.022968640625000702, + 0.022792968750000142, + 0.022315695312499884, + 0.024554656250000306, + 0.022404898437500265, + 0.022080195312499384, + 0.021833304687501, + 0.021671335937499592, + 0.02161636718749982, + 0.024029953124999892, + 0.02174046093749915, + 0.021724984375000034, + 0.02162703906249952, + 0.021982570312500727, + 0.028228953124999734, + 0.02113885156250106, + 0.035530242187499894, + 0.02388220312499989, + 0.01852314843750058, + 0.01867639843749913, + 0.018503304687499167, + 0.019398617187500022, + 0.0201605624999992, + 0.01962875000000075, + 0.019049695312499892, + 0.018911890625000538, + 0.019198710937500252, + 0.01832311718749935, + 0.019220359374999774, + 0.018378187499999754, + 0.018393507812499266, + 0.018301703125001012, + 0.023911945312500293, + 0.029151718750000555, + 0.019059382812500303, + 0.02064758593750149, + 0.018346007812500176, + 0.018484593749999334, + 0.01848294531250083, + 0.019721625000000742, + 0.018887195312499827, + 0.01991287500000105, + 0.018772117187500825, + 0.018853507812499615, + 0.018990148437499244, + 0.024128617187500367, + 0.02116374999999948, + 0.021320000000001116, + 0.02159117968750124, + 0.021699734374999835, + 0.021842820312500066, + 0.022035687500000734, + 0.02740732031250026, + 0.024612101562500044, + 0.02816663281249987, + 0.023536453124998857, + 0.0227333359375006, + 0.02357355468750022, + 0.02304337500000031, + 0.022296820312499577, + 0.02229060156249929, + 0.022401546875000733, + 0.022452015624999433, + 0.02236682031250048, + 0.022308499999999398, + 0.022300882812499978, + 0.022305148437499867, + 0.022346812500000368, + 0.022816195312499232, + 0.023018757812499402, + 0.022855734375001546, + 0.02414465624999984, + 0.023389617187499212, + 0.020480070312499876, + 0.025169671875000077, + 0.018431726562498696, + 0.01801457031250031, + 0.01802019531250032, + 0.02430224999999986, + 0.0192845625000011, + 0.01854102343749986, + 0.01872136718750106, + 0.01809460156249898, + 0.0183277499999992, + 0.018042031250001145, + 0.020836273437499386, + 0.01821200781249921, + 0.01849485937500006, + 0.018082281249999, + 0.017955843750000255, + 0.0179635703124994, + 0.018091906249999568, + 0.020373820312499902, + 0.01839832031249955, + 0.01897478906250072, + 0.018296125000000885, + 0.018393062499999502, + 0.018414812499999655, + 0.018889250000000857, + 0.02429771875000064, + 0.01858024999999941, + 0.01882807812499898, + 0.018575593750000507, + 0.01850108593749944, + 0.019145593750000245, + 0.020965999999999596, + 0.019439265625001312, + 0.02470942187500036, + 0.018610046875000563, + 0.018851468750000322, + 0.018520484374999313, + 0.018511249999999535, + 0.0198106093749999, + 0.018769414062500545, + 0.022519210937499423, + 0.025887890624998633, + 0.018825624999999846, + 0.019900617187500913, + 0.01893928125000066, + 0.01880639843749954, + 0.01920364843750022, + 0.019096249999998705, + 0.01863885156249978, + 0.02278898437500132, + 0.026432078124999592, + 0.019382085937500904, + 0.019228601562499392, + 0.019305609374999477, + 0.019132164062499513, + 0.019186156250000863, + 0.01917564843749986, + 0.035102453124999045, + 0.018607820312499967, + 0.018984671874999748, + 0.018724554687500117, + 0.023455968749999556, + 0.02658842968750008, + 0.024652039062500464, + 0.019997195312500438, + 0.024115179687500543, + 0.019576710937499797, + 0.020260304687500508, + 0.0190007890625008, + 0.01896551562500015, + 0.019231664062500542, + 0.019662710937499384, + 0.019191570312500517, + 0.020006242187498913, + 0.01971806249999908, + 0.019049726562499814, + 0.020001046875000483, + 0.01931530468749898, + 0.019341804687499575, + 0.02310753124999998, + 0.01955612499999937, + 0.019077695312500254, + 0.019167148437500003 + ] + }, + "100000": { + "ingest": [ + 124.70729800000004, + 114.1035330000002, + 114.87859300000036, + 120.7781359999999, + 110.55003299999998, + 115.26336000000038, + 116.2351550000003 + ], + "windowRead": [ + 0.007588437500004375, + 0.007072468749996119, + 0.007150093749999087, + 0.007972250000008785, + 0.006968000000000529, + 0.007728531249995285, + 0.007183812500002773, + 0.006962312499993573, + 0.00714037499999165, + 0.007050437499998452, + 0.0068826874999956544, + 0.00736568749999833, + 0.0071005000000070595, + 0.006989531249999459, + 0.006901781249993633, + 0.007143156250009497, + 0.006986093750001032, + 0.00694512500000144, + 0.00708118749999187, + 0.007642968750005252, + 0.007153687500007777, + 0.007312281250008823, + 0.007166343750000692, + 0.006918499999997607, + 0.007453406249993577, + 0.006977812500011282, + 0.007326437499997951, + 0.007294968750002795, + 0.007140375000005861, + 0.006954500000006192, + 0.007146468749994028, + 0.007121906249992094, + 0.007137031249996539, + 0.007093156249993626, + 0.007020750000009457, + 0.006897624999993468, + 0.007073812499996279, + 0.007328531249996217, + 0.006965124999993577, + 0.008756406250000737, + 0.007146156249987712, + 0.007129875000003949, + 0.007099281250006584, + 0.007251031250007145, + 0.007110406249992707, + 0.00711684374999777, + 0.007064437500005738, + 0.007039593750008066, + 0.0070517187499916645, + 0.006930499999995732, + 0.007152906249999091, + 0.007070374999997853, + 0.006978687500009073, + 0.00729350000000295, + 0.0070653750000104765, + 0.01102937500000678, + 0.010795906250010034, + 0.012098000000008824, + 0.008082031250012278, + 0.008955031249996637, + 0.007187031249998199, + 0.007430312499991487, + 0.007422718749992896, + 0.007206656249991283, + 0.007273374999996918, + 0.007998749999998722, + 0.007337249999991968, + 0.007904312500002675, + 0.006943156250002858, + 0.008233187499996575, + 0.00708031250000829, + 0.00708612500000072, + 0.007081531249994555, + 0.00909618749999197, + 0.007130125000003318, + 0.007059593750000204, + 0.007023968749990672, + 0.007371343749994708, + 0.006971718749994693, + 0.007035999999999376, + 0.007042781250007124, + 0.0067278437499993515, + 0.007230906250001112, + 0.006924812500002986, + 0.007425968749998901, + 0.0071090625000067575, + 0.007034718749991953, + 0.0069993124999996326, + 0.007042593750000492, + 0.006989718750006091, + 0.006850874999997814, + 0.007159968750002577, + 0.007064843749986949, + 0.007015156250005816, + 0.006929749999997625, + 0.006982468749995974, + 0.007146593749993713, + 0.006835218750012473, + 0.00715743750001252, + 0.011722906250000165, + 0.01158650000000705, + 0.00778896875000612, + 0.007783406249998848, + 0.008220781250003029, + 0.007090000000005148, + 0.007665843750004342, + 0.007106843750008807, + 0.007104531249993329, + 0.007056718750007462, + 0.006960718749994044, + 0.006819062499999973, + 0.008479187500000762, + 0.023487781249997397, + 0.0073820312500032514, + 0.007507656249998718, + 0.0075602499999973816, + 0.038231343750013025, + 0.007264312499998482, + 0.009728124999995202, + 0.008456156249991409, + 0.008083968750000281, + 0.007661406249994229, + 0.00761968749999653, + 0.007171249999998963, + 0.007260656249997055, + 0.007077031249991705, + 0.007196125000007214, + 0.007471406250004975, + 0.007182499999998981, + 0.00701775000000282, + 0.008664343749998693, + 0.01114596875000018, + 0.011052406250001923, + 0.011538687500006972, + 0.01148087500000372, + 0.01173984375000714, + 0.011442062499995131, + 0.011590156249994266, + 0.011432312499991326, + 0.009095843749989285, + 0.0071341875000001664, + 0.006865437499996574, + 0.007021156249990668, + 0.007223312500002521, + 0.007017843750006136, + 0.007434375000002547, + 0.007080625000000396, + 0.007311624999999822, + 0.006784406250005759, + 0.006967812500008108, + 0.007070593750000853, + 0.007085187500010193, + 0.007062281250000524, + 0.007237312499995596, + 0.007022000000006301, + 0.0069495624999973415, + 0.007165812499991375, + 0.008710125000007451, + 0.01114596875000018, + 0.011439531249990864, + 0.01124299999999323, + 0.011231874999992897, + 0.011666187499997704, + 0.011361937499998476, + 0.011340624999988336, + 0.011304968749996647, + 0.011313562499992713, + 0.011518343749997939, + 0.01123518750000585, + 0.011403874999999175, + 0.011479687499999613, + 0.010093312499989793, + 0.0072114062500077125, + 0.007465187500002912, + 0.007404781250002657, + 0.010925624999998718, + 0.009214499999998793, + 0.011848374999999578, + 0.007245593749999557, + 0.007545374999992305, + 0.006930062500003942, + 0.006756468749998135, + 0.006759156249998455, + 0.006603718750000098, + 0.007419031250009311, + 0.006993999999991729, + 0.006790031249991557, + 0.006690718749993607, + 0.006821250000001555, + 0.006856875000011087, + 0.007106031250003753, + 0.007228562500003477, + 0.007030656250009315, + 0.007022125000005985, + 0.0070882812500059345, + 0.006976187500001174, + 0.006997624999996788, + 0.006858687499999405, + 0.007003124999997112, + 0.007491437500007692, + 0.006869906250003055, + 0.006957374999998933, + 0.006782343750003861, + 0.00669893749999062, + 0.006681312499992487, + 0.006617875000003437, + 0.006608156249996, + 0.00659381250000024, + 0.006828562499990198, + 0.006599593749996302, + 0.007013406249996024, + 0.007052125000001297, + 0.0077278437499899155, + 0.007344281249999085, + 0.007088218749998987, + 0.006943968749993701, + 0.006887124999991556, + 0.010220968749990789, + 0.007250999999996566, + 0.006976999999992017, + 0.007613281250002046, + 0.007086937500005774, + 0.006805124999999634, + 0.007100062500001059, + 0.0072094374999949196, + 0.0070519062499982965, + 0.006652750000000651, + 0.006853843750008082, + 0.006676031249995162, + 0.00666062499999498, + 0.006928656249996834, + 0.006984218750005766, + 0.006826468749991932, + 0.007024562500006937, + 0.0071161875000029795, + 0.0067395312500053706, + 0.00676015624999593, + 0.006903843750009742, + 0.006953531249990874, + 0.007091875000000414, + 0.007190125000008152, + 0.007080593750004027, + 0.007008968750000122, + 0.007493281250006589, + 0.006791718750008613, + 0.006574281249996261, + 0.006826656249998564, + 0.006935187499991002, + 0.006937062500000479, + 0.006981374999995182, + 0.006904781250000269, + 0.006734093749997783, + 0.007171656250008596, + 0.007188499999998044, + 0.008256062499995664, + 0.007595343749997596, + 0.00785128124999801, + 0.00866193749999411, + 0.007280031250004981, + 0.007151718750009195, + 0.007144218749999709, + 0.007079468750006868, + 0.007229656250004268, + 0.007027968749994784, + 0.00691553125000155, + 0.007086718750002774, + 0.006988375000005931, + 0.006777406250009221, + 0.006663187499995615, + 0.007010468749996335, + 0.006493937499996605, + 0.006644093749997637, + 0.00684603125000649, + 0.007006437500010065, + 0.0067150937500031205, + 0.006935406249994003, + 0.006784656250005128, + 0.006719937500008655, + 0.007060968749996732, + 0.006941687500003013, + 0.006947843749998128, + 0.006850812500005077, + 0.00699062500000025, + 0.0068181562500058135, + 0.006724375000004557, + 0.006795000000010987, + 0.006588531250002916, + 0.006728156249991457, + 0.007073843749992648, + 0.006844062499993697, + 0.006597718750001036, + 0.006516656249999642, + 0.0067441562499936936, + 0.006835687500000631, + 0.007395093750005799, + 0.007309593749994292, + 0.007025499999997464, + 0.007056843749992936, + 0.007093656250006575, + 0.006958781250006041 + ], + "edit": [ + 4.504612000000179, + 4.537467000000106, + 4.360954999999649, + 4.692388000000392, + 4.821317999999792, + 6.0775290000001405, + 5.818933999999899, + 5.765425999999934, + 6.397761000000173, + 6.655555000000277, + 7.539998000000196, + 3.86897399999998, + 3.6890700000003562, + 3.738589999999931, + 3.7122989999998026 + ], + "sort": [ + 2.1901130000001103, + 2.187793000000056, + 2.223783999999796, + 2.2419620000000577, + 2.7951640000001134, + 2.4996510000000853, + 2.1879109999999855, + 2.201974000000064, + 2.2616299999999683, + 2.181126999999833, + 2.7099099999995815, + 2.2791610000003857, + 2.1895330000002104, + 2.186001000000033, + 2.169717999999648 + ], + "filter": [ + 0.3551910000001044, + 0.3287529999997787, + 0.33212600000024395, + 0.36926199999970777, + 0.3285260000002381, + 0.40776599999981045, + 0.3485110000001441, + 0.3265630000000783, + 0.35450900000023466, + 0.3297429999997803, + 0.38914999999997235, + 0.3324390000002495, + 0.32641899999998714, + 0.3294660000001386, + 0.3280490000001919 + ], + "multiFilter": [ + 3.4762699999996585, + 3.4365029999999024, + 3.5253529999999955, + 3.63771399999996, + 3.6113510000000133, + 3.5230499999997846, + 3.712778000000071, + 3.6056179999995948, + 3.5349800000003597, + 3.894731999999749, + 3.630166999999801, + 3.6838470000002417, + 3.5965860000001157, + 3.555836999999883, + 3.5685849999999846 + ], + "distinctLow": [ + 3.93195999999989, + 5.1058240000002115, + 3.9389790000000175, + 5.49096099999997, + 3.8814430000002176, + 3.8796839999999975, + 3.676868000000013, + 3.911004999999932, + 3.7904539999999542, + 4.817831999999726, + 4.4398269999996955, + 3.914937000000009, + 3.9119619999996758, + 3.886848999999984, + 3.9051259999996546 + ], + "distinctHigh": [ + 21.623368000000028, + 21.481378999999833, + 22.254631999999674, + 22.6004539999999, + 27.03053, + 23.7900810000001, + 23.295128000000204, + 25.14701600000035, + 17.994764000000032, + 18.129480000000058, + 17.637598999999682, + 19.985861999999997, + 19.975312999999915, + 17.92981400000008, + 18.32233099999985 + ], + "aggregate": [ + 0.18804000000000087, + 0.18778800000018236, + 0.18845099999998638, + 0.18976399999974092, + 0.1881199999997989, + 0.18782800000008137, + 0.1881119999998191, + 0.18752699999959077, + 0.19165300000031493, + 0.25102800000013303, + 0.18875900000011825, + 0.18797899999981382, + 0.18766999999979816, + 0.191707999999835, + 0.18755700000019715, + 0.18765499999972235, + 0.18760500000007596, + 0.18770200000017212, + 0.18967800000018542, + 0.18740399999978763, + 0.18757899999991423, + 0.18743499999982305, + 0.18763699999999517, + 0.19012900000006994, + 0.1880660000001626, + 0.1881149999999252, + 0.22010899999986577, + 0.18784899999991467, + 0.18771000000015192, + 0.19089600000006612, + 0.18811799999957657, + 0.18843500000002678, + 0.18723099999988335, + 0.18760599999995975, + 0.19077000000015687, + 0.18760699999984354, + 0.18759500000032858, + 0.1874760000000606, + 0.18598299999985102, + 0.195252999999866, + 0.183292000000165, + 0.18319599999995262, + 0.18388000000004467, + 0.18307400000003327, + 0.18307899999990696, + 0.18643999999994776, + 0.1832880000001751, + 0.18338700000003882, + 0.18472700000029363, + 0.18329799999992247, + 0.1859039999999368, + 0.18345799999997325, + 0.18348799999967014, + 0.18362600000000384, + 0.18324200000006385, + 0.18579500000032567, + 0.18342900000016016, + 0.1833889999998064, + 0.18329899999980626, + 0.18808500000022832, + 0.19470200000023397, + 0.1860940000001392, + 0.18362399999978152, + 0.18321800000012445, + 0.18317500000011933, + 0.18633700000009412, + 0.1918230000001131, + 0.18618699999979071, + 0.18330100000002858, + 0.1833599999999933, + 0.18331399999988207, + 0.18381899999985762, + 0.1984199999997145, + 0.1839110000000801, + 0.18348800000012488, + 0.18336900000031164, + 0.18388199999981225, + 0.18639399999983652, + 0.18353100000013, + 0.1835230000001502, + 0.18338200000016514, + 0.18325999999979103, + 0.18526399999973364, + 0.18542699999989054, + 0.1835879999998724, + 0.18323599999985163, + 0.1853539999997338, + 0.18561700000009296, + 0.18812600000001112, + 0.18609699999979057, + 0.18577800000002753, + 0.19309900000007474, + 0.18673900000021604, + 0.18750999999974738, + 0.1853009999999813, + 0.1835679999999229, + 0.18365499999981694, + 0.18521499999997104, + 0.25007899999991423, + 0.18799300000000585, + 0.18766199999981836, + 0.18753300000025774, + 0.18767299999990428, + 0.18792600000006132, + 0.1898510000000897, + 0.18748100000038903, + 0.18765299999995477, + 0.18756799999982832, + 0.18776100000013685, + 0.19073699999989913, + 0.1881389999998646, + 0.19112700000005134, + 0.18778100000008635, + 0.18820000000005166, + 0.19114399999989473, + 0.18808499999977357, + 0.1879599999997481, + 0.1882940000000417, + 0.18747400000029302, + 0.19104700000025332, + 0.1911960000002182, + 0.18797300000005635, + 0.1876720000000205, + 0.2193369999999959, + 0.19074399999999514, + 0.190733999999793, + 0.19437799999968775, + 0.18778700000029858, + 0.18764599999985876, + 0.1874960000000101, + 0.2418470000002344, + 0.1884989999998652, + 0.1878140000003441, + 0.19615999999996347, + 0.18893300000036106, + 0.19197399999984555, + 0.19455100000004677, + 0.21329699999978402, + 0.18704799999977695, + 0.1835769999997865, + 0.18673600000010993, + 0.18341899999995803, + 0.18323499999996784, + 0.18318500000032145, + 0.18429199999991397, + 0.1861919999996644, + 0.18332499999996799, + 0.18321500000001834, + 0.18339000000014494, + 0.18337400000018533, + 0.215987000000041, + 0.19139499999982945, + 0.1877079999999296, + 0.1874920000000202, + 0.18760999999994965, + 0.18756399999983842, + 0.21245700000008583, + 0.18783399999983885, + 0.18744599999990896, + 0.2084780000000137, + 0.1899559999997109, + 0.1943690000002789, + 0.1918719999998757, + 0.1919700000003104, + 0.19209399999999732, + 0.21472799999992276, + 0.19495799999958763, + 0.1920789999999215, + 0.1921399999996538, + 0.19237499999962893, + 0.1920090000003256, + 0.1944090000001779, + 0.19244800000024043, + 0.19177099999978964, + 0.1919820000002801, + 0.19164599999976417, + 0.19585400000005393, + 0.19216899999992165, + 0.19205399999964357, + 0.1922270000000026, + 0.1922150000000329, + 0.1920479999998861, + 0.20164800000020477, + 0.19303199999967546, + 0.1922260000001188, + 0.2494379999998273, + 0.19538099999999758, + 0.1918919999998252, + 0.18822099999988495, + 0.18762500000002547, + 0.19530399999985093, + 0.20139599999993152, + 0.1903610000003937, + 0.18763099999978294, + 0.18762100000003556, + 0.18759500000032858, + 0.18727799999987838, + 0.1922270000000026, + 0.18778299999985393, + 0.18738000000030297 + ] + }, + "500000": { + "ingest": [ + 624.0975319999998, + 587.1914789999992, + 627.5805529999998 + ], + "windowRead": [ + 0.012706906250002703, + 0.011699125000006916, + 0.011471000000000231, + 0.011478250000010348, + 0.011546718749997353, + 0.01120512500000359, + 0.011163531249991365, + 0.010660312499993552, + 0.012661374999993313, + 0.01055115624998848, + 0.012892312499985792, + 0.01098434375001034, + 0.01051218750001226, + 0.01070853124997484, + 0.011964531250015398, + 0.011357312499995942, + 0.011154562499996246, + 0.010841437500005213, + 0.010653343750021804, + 0.01248568750000345, + 0.01375281250000171, + 0.013827937499996779, + 0.011605718749990501, + 0.01149165625000137, + 0.011342031249995443, + 0.011310156249976444, + 0.01245049999999992, + 0.01143243749999101, + 0.0125195312499784, + 0.011034281250005051, + 0.011908750000003465, + 0.011423624999991944, + 0.011522437499991156, + 0.012774781249987655, + 0.010976093750002747, + 0.011353093750017251, + 0.01229287499998577, + 0.011076750000000857, + 0.011949312499979214, + 0.010926531250021299, + 0.01232674999999972, + 0.011978062499991893, + 0.010683999999997695, + 0.010586062499982063, + 0.010965562500018677, + 0.010649187500007429, + 0.011667437499994548, + 0.011556124999998474, + 0.01228121874999033, + 0.012665781250007058, + 0.012205218750011682, + 0.01226737500002173, + 0.011642156250019298, + 0.013778218749990856, + 0.012043437499983156, + 0.011729187500009175, + 0.011298531249991584, + 0.011787781250006901, + 0.011113812500013864, + 0.010990031250003085, + 0.01057293750000099, + 0.010993156250009406, + 0.013358749999980546, + 0.01422359374998905, + 0.013187312500008375, + 0.012097750000009455, + 0.011393437500004211, + 0.011615562499997623, + 0.011391187500009892, + 0.012211437500013744, + 0.011256812499993885, + 0.011032156249996206, + 0.010598499999986188, + 0.011035312499984684, + 0.010527562500016074, + 0.010293937499994854, + 0.0104328124999995, + 0.010163593750007749, + 0.011081093749993443, + 0.01124103125002307, + 0.010990500000019665, + 0.010869124999999258, + 0.010482218750013317, + 0.010761968750017559, + 0.010361593750019438, + 0.015082343749980964, + 0.01036934374999987, + 0.010582656249994216, + 0.010208781250014454, + 0.010205062500006079, + 0.010259031250001271, + 0.010767562500006989, + 0.010254250000002685, + 0.010313562499987938, + 0.011167531249981266, + 0.01094349999999622, + 0.010974968750019798, + 0.012172749999990629, + 0.010437562500015929, + 0.013285968749983113, + 0.010431093750014497, + 0.010325718750010537, + 0.010178843749997668, + 0.010430656250008496, + 0.010529312500011656, + 0.010202749999990601, + 0.009973343750004915, + 0.009966781250000167, + 0.010992468750004036, + 0.01214562500001648, + 0.01388909374998093, + 0.010635968749994618, + 0.011109468750021279, + 0.013375999999993837, + 0.010680374999992637, + 0.010914687500019227, + 0.010696124999981294, + 0.01182165624999243, + 0.01128740625000546, + 0.011389031249990467, + 0.010936843750016578, + 0.011302812499991433, + 0.010987968749986976, + 0.010750343749975855, + 0.01221306249999543, + 0.010758750000007922, + 0.013048531250007045, + 0.011227156249987047, + 0.012279093750009906, + 0.012865750000003118, + 0.012387625000002345, + 0.012201250000003938, + 0.013473374999989574, + 0.01268384374998277, + 0.013039000000020451, + 0.012866999999999962, + 0.012895906250008693, + 0.012983749999989413, + 0.013139249999994718, + 0.013140906249986983, + 0.012888906249997945, + 0.01261859374997698, + 0.012910375000018348, + 0.015222125000008191, + 0.013235249999979715, + 0.012907062499976973, + 0.013050781250001364, + 0.01298587499999826, + 0.013055437500014477, + 0.013383656249999376, + 0.01779559375000872, + 0.01393350000000737, + 0.012913562499988984, + 0.014449437499990836, + 0.014091281249989152, + 0.014098093749993268, + 0.01250475000000506, + 0.013572937499986892, + 0.013156812500000115, + 0.013426062500002445, + 0.013295281249980917, + 0.013303593750009668, + 0.013672656250008686, + 0.013371593750008515, + 0.013299531249998608, + 0.013185218749981686, + 0.013136031250013502, + 0.013717093749988862, + 0.012690249999991465, + 0.012751156249976248, + 0.012230312500008722, + 0.012476999999989857, + 0.012079499999998689, + 0.011891500000018596, + 0.01241528124998581, + 0.012238562499987893, + 0.012545156250013179, + 0.012050499999986641, + 0.011980937499998845, + 0.01264578125000071, + 0.011374781250026444, + 0.01127531250000402, + 0.01134546874999387, + 0.013028843749992802, + 0.01573168749999354, + 0.010925437499992086, + 0.010405312500012087, + 0.011313218749990028, + 0.011902968749978982, + 0.01309909375001439, + 0.011831999999998288, + 0.010999812499989048, + 0.01264909374998524, + 0.01112490625001783, + 0.011029218749996517, + 0.01100424999998495, + 0.010818656249995229, + 0.011328968749978685, + 0.01071506249999743, + 0.010505062499987616, + 0.010282468750006046, + 0.010249937500020678, + 0.010180312499983302, + 0.010132531250008014, + 0.014707562500007043, + 0.016120312499992906, + 0.017281656250020205, + 0.01617937499997879, + 0.016654531249997717, + 0.016077125000009573, + 0.010421000000008007, + 0.01029740625000386, + 0.010399874999990288, + 0.009938656250000122, + 0.012115687499999694, + 0.009639218750010059, + 0.009321656249994703, + 0.009282593750015167, + 0.009399218749990723, + 0.009364906249999194, + 0.00939821875002167, + 0.009002968749996398, + 0.016386500000010074, + 0.009633374999992839, + 0.01018640624999989, + 0.009216437499986796, + 0.00917981249997979, + 0.00901840624999295, + 0.009762843749996364, + 0.011128187500020204, + 0.009074749999996357, + 0.009201843750020089, + 0.012459187500013513, + 0.012341968750007482, + 0.010681343750007954, + 0.009965437500000007, + 0.009668593749978527, + 0.009961687500009475, + 0.010295281250023436, + 0.011378906250001819, + 0.011107531250019065, + 0.011433218749999696, + 0.010796562499990614, + 0.009498343750010463, + 0.009476593750008533, + 0.009302343749993724, + 0.009875374999978703, + 0.00996337500001232, + 0.010660250000000815, + 0.009689218749997508, + 0.009609750000009853, + 0.009513687500003698, + 0.009562656249983092, + 0.009625999999997248, + 0.009947781249991294, + 0.009939437500008808, + 0.009901906250007642, + 0.009576156250005852, + 0.009642156250009748, + 0.009720499999986032, + 0.009266093749999982, + 0.009319812499995805, + 0.009540468750003583, + 0.009599093750011889, + 0.009402656250017571, + 0.00930465624998078, + 0.009006812500018668, + 0.009242125000014312, + 0.008968437499987658, + 0.009516656249985544, + 0.010869562500005259, + 0.009324125000006234, + 0.009233749999992824, + 0.009656500000005508, + 0.009417874999996911, + 0.009497562500001777, + 0.009086124999981848, + 0.009771999999998116, + 0.010057343749991787, + 0.009363437499985139, + 0.009908187500002441, + 0.009107468749988357, + 0.011779187499996624, + 0.009360781249995398, + 0.009195656250000184, + 0.00952690625001651, + 0.009808374999977332, + 0.009675125000001117, + 0.009861937500005524, + 0.013842374999995855, + 0.01375684375000219, + 0.0101525937500071, + 0.010159437499993373, + 0.010439593749993037, + 0.011327218749983103, + 0.010524468750020333, + 0.011161812499977941, + 0.009689656250003509, + 0.009517406249983651, + 0.011901062500015769 + ], + "edit": [ + 4.013580999999249, + 3.9073609999995824, + 3.7992599999997765, + 3.681344999999965, + 5.832884999999806 + ], + "sort": [ + 13.877306000000317, + 14.869150999999874, + 12.070702999999412, + 12.16255799999999, + 12.896081000000777 + ], + "filter": [ + 1.7427810000008321, + 1.7744050000001153, + 2.2317629999997735, + 1.8136259999992035, + 1.7416439999997237 + ], + "multiFilter": [ + 18.696947000000364, + 18.83332700000028, + 20.341066000000865, + 19.160461999999825, + 20.453638000000865 + ], + "distinctLow": [ + 22.99478799999997, + 22.092376000000513, + 19.620562000000064, + 21.519071000000622, + 23.00829899999917 + ], + "distinctHigh": [ + 143.19677299999967, + 132.54120599999987, + 149.94341899999927, + 135.2032479999998, + 130.7985950000002 + ], + "aggregate": [ + 1.0536320000010164, + 1.020780000000741, + 0.9811110000009649, + 0.972594000000754, + 0.942709000000832, + 0.9107239999993908, + 0.9053039999998873, + 0.8964260000011564, + 0.9043240000009973, + 0.9033710000003339, + 0.8997959999996965, + 1.1367380000010598, + 1.027077000000645, + 0.911855000000287, + 0.8977649999997084, + 0.8970690000005561, + 0.8978370000004361, + 0.9056060000002617, + 0.9037260000004608, + 1.0430230000001757, + 0.9260049999993498, + 0.9107899999999063, + 0.9131950000009965, + 0.9139329999998154, + 0.9627930000006018, + 1.5448280000000523, + 0.902713000001313, + 0.8969049999996059, + 0.967333000000508, + 1.0778169999994134, + 0.9185550000001967, + 0.9201100000009319, + 0.9068839999999909, + 0.8988549999994575, + 0.9016689999989467, + 0.915461000000505, + 1.5369619999983115, + 1.2771350000002712, + 0.9306660000002012, + 0.9452339999988908, + 0.9196219999994355, + 0.8973370000003342, + 0.8993209999989631, + 0.8983919999991485, + 1.0010789999996632, + 0.9808119999997871, + 0.9256989999994403, + 0.9182930000006309, + 0.9234969999997702, + 0.927453999998761, + 0.9140640000005078, + 0.9226319999997941, + 0.9175830000003771, + 0.9579940000003262, + 0.9218160000000353, + 0.9166650000006484, + 0.9504889999989246, + 0.9264559999992343, + 1.1578190000000177, + 0.9475800000000163, + 1.062431000000288, + 1.8016920000009122, + 2.2653190000000905, + 1.3076329999985319, + 0.9162909999995463, + 0.9250210000009247, + 0.9184260000001814, + 0.9106030000002647, + 0.9105689999996684, + 1.77670500000022, + 1.882648999999219, + 0.9421729999994568, + 0.9187229999988631, + 0.9118789999993169, + 0.9113419999994221, + 0.916283000000476, + 0.8976610000008804, + 0.9772279999997409, + 0.9505879999996978, + 0.9783250000000407, + 0.9616280000009283, + 0.9341029999995953, + 1.0069650000004913, + 1.0116609999986395, + 1.0982489999987592, + 0.9062540000013541, + 0.9201759999996284, + 0.8982290000003559, + 0.8971180000007735, + 0.9097729999994044, + 0.960877999999866, + 1.1719560000001366, + 1.1225549999999203, + 1.0359590000007302, + 0.9894260000000941, + 0.9676609999987704, + 0.9665549999990617, + 0.9696269999985816, + 0.9938459999993938, + 1.009611000001314, + 1.0255099999994854, + 1.9931440000000293, + 3.098758000000089, + 2.708270999999513, + 2.8872280000014143, + 1.0754909999996016, + 1.0418829999998707, + 1.0456919999996899, + 1.0262149999998655, + 1.1082170000008773, + 1.1140579999992042, + 1.0648409999994328, + 1.0836970000000292, + 1.088610000000699, + 1.0739959999991697, + 1.0646120000001247, + 1.097700000000259, + 1.1196089999994001, + 1.1057180000007065, + 1.091984999999113, + 1.143119000000297, + 1.0910100000000966, + 1.1330920000000333, + 1.1352120000010473, + 1.1216239999994286, + 1.1291049999999814, + 1.1477990000003047, + 1.1393850000004022, + 1.1286510000009002, + 1.1307880000003934, + 1.1454400000002352, + 1.1275320000004285, + 1.1254749999989144, + 1.1214959999997518, + 1.1195459999999002, + 1.1313849999987724, + 1.2613639999999577, + 1.1314970000003086, + 1.157760000000053, + 1.1068990000003396, + 1.088517000000138, + 1.0506579999982932, + 1.0225350000000617, + 0.9883759999993345, + 0.9417059999996127, + 0.9426629999998113, + 0.9421000000002095, + 1.203577000000223, + 0.9477340000012191, + 0.9398810000002413, + 0.9425800000008167, + 0.9389820000014879, + 0.9354409999996278, + 0.9388609999987239, + 0.9394519999987097, + 0.9381389999998646, + 0.9425630000005185, + 1.0955839999987802, + 1.2846359999984998, + 1.0664859999997134, + 0.9473390000002837, + 1.0445479999998497, + 0.9537209999998595, + 0.9402509999999893, + 0.94077500000094, + 0.9358290000000125, + 0.9434990000008838, + 0.938958000000639, + 0.9070909999991272, + 0.9446489999991172, + 0.9509429999998247, + 0.9395519999998214, + 0.9381130000001576, + 0.9282700000003388, + 0.9469339999996009, + 0.973718999999619, + 0.9313000000001921, + 0.9132490000010876, + 1.0237859999997454, + 0.9415449999996781, + 0.9572839999982534, + 0.9542549999987386, + 0.9888670000000275, + 0.9430620000002818, + 0.929296999998769, + 0.9160080000001471, + 0.9289489999991929, + 0.9180910000013682, + 0.926249000000098, + 0.9313299999994342, + 0.9926859999995941, + 1.1419029999997292, + 1.4845059999988734, + 1.908871999999974, + 1.1315009999998438, + 1.0724929999996675, + 1.0727850000002945, + 1.031221999999616, + 1.0158419999988837, + 1.0681879999992816 + ] + }, + "1000000": { + "ingest": [ + 1224.2846009999994, + 1136.2497629999998, + 1169.4835249999996 + ], + "windowRead": [ + 0.010844781250057167, + 0.01240859375002401, + 0.010834062499952779, + 0.010731187500027772, + 0.010764687500000036, + 0.010474062500065884, + 0.010557843749893436, + 0.012560406249917833, + 0.010799781249943408, + 0.010251656249920416, + 0.010775656249961685, + 0.010286968749937841, + 0.011273125000002437, + 0.011226749999991625, + 0.011386499999957778, + 0.011402343749978172, + 0.011408281250055552, + 0.010820937499943284, + 0.012107093749932574, + 0.011002406249986052, + 0.011138343749962587, + 0.01086849999990136, + 0.010954374999982974, + 0.010900625000090258, + 0.010976156249967062, + 0.011290250000001834, + 0.011016750000067077, + 0.010782812499996908, + 0.010666343750017404, + 0.01106575000005705, + 0.010730031249977401, + 0.01023987499991108, + 0.010555812500001593, + 0.010483656250016793, + 0.01034490624999762, + 0.01024462499992751, + 0.01213146874999893, + 0.010969875000000684, + 0.010301593750000393, + 0.010364718749997337, + 0.010332531249900967, + 0.010017531250014144, + 0.011755968749980639, + 0.010157687500054635, + 0.01061818749997201, + 0.011402593750062806, + 0.011792093749932064, + 0.01198924999994233, + 0.0124410937499988, + 0.01265762499997436, + 0.0110117500000797, + 0.011076593749976382, + 0.012066000000004351, + 0.01068090624994511, + 0.011067875000094318, + 0.010903843749929365, + 0.010769062500003201, + 0.010939343750010266, + 0.011220843749924825, + 0.01085478125003192, + 0.010503218750045562, + 0.01102615624995451, + 0.010664812499953769, + 0.010435218749989872, + 0.010784281249925698, + 0.010572531249977146, + 0.010238843750016713, + 0.010750124999958643, + 0.010570312499908141, + 0.010125687499908054, + 0.010286437499985368, + 0.010097781250010485, + 0.011167593749974003, + 0.010114499999986037, + 0.009811125000055654, + 0.009937968750023174, + 0.009919749999994565, + 0.01017165625000871, + 0.01108409375001429, + 0.01138684375007415, + 0.01111168750003344, + 0.01052350000009028, + 0.010857750000013766, + 0.011092125000004671, + 0.013372968749990832, + 0.011039374999995744, + 0.010559374999957072, + 0.01120974999992086, + 0.01680124999995769, + 0.011550875000011729, + 0.011311156250030763, + 0.010497781250023763, + 0.01063284375004514, + 0.011569750000035128, + 0.01047728124990499, + 0.010386468749970845, + 0.010327031249971697, + 0.010321687500095322, + 0.011419218750006621, + 0.01020743749995745, + 0.010265531249956439, + 0.010289406249967215, + 0.010186843749920627, + 0.010139687499986394, + 0.010282437499995467, + 0.010689874999911808, + 0.010659968750019289, + 0.010425749999967593, + 0.010240593750040716, + 0.010294250000015381, + 0.011387656250008149, + 0.011081750000016655, + 0.011476937499992346, + 0.011035124999921209, + 0.011033062500018787, + 0.011186406249976244, + 0.01130612499991912, + 0.010971406249950633, + 0.011312156250028238, + 0.010712281249993794, + 0.010732687499967142, + 0.010884906249998494, + 0.010716937499978485, + 0.010794499999974505, + 0.010993812499918931, + 0.01057090624999546, + 0.011461906250019638, + 0.010778156250012216, + 0.011804624999967928, + 0.010282468750006046, + 0.01035762500009696, + 0.012297437500023989, + 0.01012168750003184, + 0.011037437500021952, + 0.011815093749987682, + 0.01049656250006592, + 0.018965593750067455, + 0.01736153125000328, + 0.017854781250093765, + 0.017238656250015083, + 0.016779968749915497, + 0.018730937499981337, + 0.011437968749987704, + 0.011793781250048596, + 0.011237093749969063, + 0.01152040625004247, + 0.011370468749987594, + 0.010975718750046326, + 0.011051406249976026, + 0.010793937500011452, + 0.011029656250002517, + 0.010743374999947264, + 0.01104909374998897, + 0.010904499999924155, + 0.01079806250004367, + 0.010924468749976768, + 0.010548281249953106, + 0.01042718749999949, + 0.01051299999994626, + 0.011167656249995161, + 0.010279937499944936, + 0.010943281250092696, + 0.010076000000026397, + 0.010483375000035267, + 0.021700156249949032, + 0.018016124999917338, + 0.01016824999999244, + 0.01036256249994949, + 0.010599093749988242, + 0.009876093749994652, + 0.009649843750025866, + 0.010292156249988693, + 0.010063718749961481, + 0.009862312499990367, + 0.012076687499984473, + 0.012323906250003347, + 0.011584999999968204, + 0.010817374999987805, + 0.010594718750098764, + 0.012830656250002903, + 0.01413053124997532, + 0.010880093749960906, + 0.010743312500039792, + 0.010495874999946864, + 0.010788062499955231, + 0.010565437499963082, + 0.010341749999952299, + 0.010561187500002234, + 0.01019993750003323, + 0.01025606249993416, + 0.010415968750066895, + 0.010237687500080028, + 0.010155406249964471, + 0.0100395312499586, + 0.010505781250003565, + 0.009797062500069842, + 0.009987468749955042, + 0.011161843749960099, + 0.010063312500051325, + 0.009926187500013839, + 0.012041968749940679, + 0.0101108750000094, + 0.010109906250022505, + 0.01163056249993133, + 0.01120809375004228, + 0.01297853125004167, + 0.011014906249897649, + 0.010640593750053995, + 0.011220437500014668, + 0.011727749999977277, + 0.01083925000000363, + 0.011688999999933003, + 0.010750843749974592, + 0.010613250000005792, + 0.010917781249986547, + 0.010600562499917032, + 0.010667937499988511, + 0.011545000000069194, + 0.0105951562500195, + 0.010530000000017026, + 0.011482062500022039, + 0.011628812499907326, + 0.014248968749939195, + 0.010509124999998676, + 0.011640593750030348, + 0.01081168749999506, + 0.010860031249990243, + 0.010529281250001077, + 0.011253437499931351, + 0.011752000000001317, + 0.010536437499922613, + 0.010065843750112435, + 0.010374406249979984, + 0.011075406250029118, + 0.009970625000050859, + 0.010049374999994143, + 0.01018712500001584, + 0.010807249999970736, + 0.011774312500051565, + 0.011530781250030486, + 0.011710281250088883, + 0.011634843750016444, + 0.011622593749962107, + 0.011813531250027154, + 0.011536187499928019, + 0.011180312499959655, + 0.01133506249993843, + 0.011118468749941712, + 0.010780937500044274, + 0.010905999999977212, + 0.010970406249953157, + 0.010398406250033077, + 0.010453125000026375, + 0.01064237499997489, + 0.010535749999917243, + 0.010215031250027096, + 0.010553156250011853, + 0.010271968749975713, + 0.010269437500028289, + 0.01148953124993568, + 0.010044656249988293, + 0.010175218749964188, + 0.010279687499973988, + 0.010014156249894768, + 0.009876687499968284, + 0.010147062499981985, + 0.009907781250035441, + 0.010186312499968153, + 0.010171374999913496, + 0.010158749999959582, + 0.013907187500080909, + 0.012843937499951608, + 0.010922124999979133, + 0.013006843750076769, + 0.011006374999965374, + 0.010964281249925989, + 0.010870468749999418, + 0.011837906249979824, + 0.01077181250002468, + 0.010866843750022781, + 0.01062206250003328, + 0.010531312500006607, + 0.010654281250026543, + 0.011179593750057393, + 0.010569468749963562, + 0.010754562499982967, + 0.012197187499964457, + 0.01014134374997866, + 0.011837593749987718, + 0.01023037499999191, + 0.010555062499975065, + 0.010458687499976804, + 0.01023912499999824, + 0.01147328125000513, + 0.020719281250080712, + 0.010263218749969383, + 0.010587312499978907, + 0.01008331250000083, + 0.010281718749979518, + 0.011605656250026186 + ], + "edit": [ + 3.786967000000004, + 3.7107079999987036, + 3.7510389999988547, + 3.84809800000221, + 3.7235540000001492 + ], + "sort": [ + 26.12194399999862, + 25.746455000000424, + 32.73160799999823, + 28.913809999998193, + 30.862930999999662 + ], + "filter": [ + 3.993179000000964, + 3.650225000001228, + 3.664163000001281, + 3.2403550000017276, + 3.6707660000029136 + ], + "multiFilter": [ + 36.880017999999836, + 47.040938000001915, + 49.847311000001355, + 41.64907800000219, + 46.89758200000142 + ], + "distinctLow": [ + 36.77935399999842, + 42.55798899999718, + 40.99079999999958, + 37.71061399999962, + 38.00593300000037 + ], + "distinctHigh": [ + 267.2413460000025, + 269.6675789999972, + 270.44150400000217, + 285.0922989999999, + 261.4656309999991 + ], + "aggregate": [ + 1.939728000001196, + 2.037005999998655, + 1.923732999999629, + 1.8926919999976235, + 1.914478999999119, + 1.9081939999996393, + 1.9549339999975928, + 1.8741730000001553, + 1.8659459999980754, + 1.847078999999212, + 1.9028399999988324, + 1.940984999997454, + 1.8890160000009928, + 1.9008349999967322, + 1.8844529999987572, + 1.9158239999997022, + 1.9982159999999567, + 1.9547809999967285, + 1.9121530000011262, + 1.913752000000386, + 1.906513999998424, + 1.8924619999997958, + 1.9047819999977946, + 2.319100000000617, + 1.9850579999983893, + 1.9653920000018843, + 1.900684000000183, + 1.8918659999981173, + 1.9042809999991732, + 1.9072959999975865, + 1.908739999998943, + 1.9731280000014522, + 1.952342000000499, + 1.8728399999999965, + 1.8879809999998542, + 2.0918210000018007, + 1.896391999998741, + 1.8793110000005981, + 1.8829569999979867, + 1.8765729999977339, + 1.8524639999995998, + 1.926089000000502, + 1.889668999996502, + 2.060683000003337, + 1.8843960000012885, + 1.891542000001209, + 1.888969999999972, + 1.8833229999981995, + 1.8777899999986403, + 1.8719959999980347, + 1.9409969999978784, + 2.45967500000188, + 1.978995000001305, + 1.8924839999999676, + 1.8517289999981585, + 1.8838009999999485, + 1.8885410000002594, + 1.9288359999991371, + 1.9370830000007118, + 1.8941029999987222, + 2.1288110000023153, + 1.8893590000006952, + 1.8796469999979308, + 1.8565419999977166, + 1.8374409999996715, + 1.8835660000004282, + 1.834736000000703, + 1.8938469999993686, + 1.9047949999985576, + 1.929629999998724, + 1.894655000000057, + 1.8777269999991404, + 1.879585999999108, + 1.8755940000010014, + 1.8753759999999602, + 1.8595929999974032, + 1.9766649999983201, + 1.8648639999992156, + 2.1853210000008403, + 2.178540000000794, + 2.1691700000010314, + 2.122395000002143, + 1.9171060000007856, + 1.8809479999981704, + 1.9186759999975038, + 1.871766000000207, + 1.8910709999981918, + 1.8819509999993898, + 1.8799050000015995, + 1.8543980000031297, + 1.8480139999992389, + 1.9145470000003115, + 1.880721999998059, + 1.9351459999998042, + 2.548946999999316, + 2.734744999997929, + 2.523674000000028, + 3.0794069999974454, + 1.935563999999431, + 2.0304490000016813, + 2.045600999997987, + 2.9940999999998894, + 4.762914999999339, + 2.3963960000000952, + 1.9224950000025274, + 1.9589349999987462, + 1.9435219999977562, + 1.8975339999997232, + 1.8906160000005912, + 2.00756900000124, + 1.9349549999969895, + 1.8796549999970011, + 1.8614390000002459, + 1.9064450000005309, + 1.9051890000009735, + 1.8995670000003884, + 2.249325000000681, + 2.180361000002449, + 2.122737000001507, + 2.2069980000014766, + 2.2552660000001197, + 2.3013339999997697, + 2.3862499999995634, + 2.254585999999108, + 2.2553350000016508, + 2.2658190000001923, + 2.2596220000014, + 2.254965000000084, + 2.260637000003044, + 2.4211230000000796, + 2.2660410000025877, + 2.269093000002613, + 2.281510000000708, + 2.2601900000008754, + 2.246907000000647, + 2.286065000000235, + 2.4325100000023667, + 2.24749299999894, + 2.2529749999994237, + 2.2503780000006373, + 2.2429029999984778, + 2.205432999999175, + 2.1815180000012333, + 2.308661999999458, + 2.209151999999449, + 2.252015999998548, + 2.40846700000111, + 2.187235999997938, + 2.182176000002073, + 2.248956999999791, + 2.317968999999721, + 2.1926149999999325, + 2.1857679999993707, + 2.2381880000029923, + 2.2457939999985683, + 2.444519999997283, + 2.184288000000379, + 2.324322000000393, + 2.198165000001609, + 2.2008159999968484, + 2.1820110000007844, + 2.2397280000004685, + 2.2485190000006696, + 2.244398999999248, + 2.385020000001532, + 2.2300990000003367, + 2.3296379999992496, + 2.2820409999985714, + 2.24895099999776, + 2.201699000001099, + 2.1982610000013665, + 2.362836000000243, + 2.2605450000010023, + 2.3246279999984836, + 2.3822849999996834, + 2.2739609999989625, + 2.2423410000010335, + 2.242882999998983, + 2.4044489999978396, + 2.2551820000007865, + 2.2438529999999446, + 2.3301300000021, + 2.2195750000028056, + 2.188913000001776, + 2.2290350000002945, + 2.379425999999512, + 2.2600149999998393, + 2.2572870000003604, + 2.2463470000002417, + 2.219535000000178, + 2.1929569999992964, + 2.2207149999994726, + 2.187356999998883, + 2.1830709999994724, + 2.30156899999929, + 2.2247150000002875, + 2.223963000000367, + 2.1929399999971793, + 2.1868480000011914, + 2.1790839999994205 + ] + } + } + }, + { + "repetition": 3, + "captureSha256": "0ee271e46ab76a7596fabcada654c6cec78d50f78ac315efd269dae82ece638b", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:56:07.050Z", + "sheetwriteRows": [ + 1000, + 10000, + 100000, + 500000, + 1000000 + ], + "handsontableRows": [ + 1000, + 10000 + ] + }, + "sheetwrite": { + "1000": { + "ingest": [ + 1.2806019999999876, + 1.501306999999997, + 1.752691000000027, + 3.100262999999984, + 4.886671999999976, + 1.438904999999977, + 1.5600160000000187 + ], + "windowRead": [ + 0.012956374999999909, + 0.012568093749999676, + 0.012483874999999145, + 0.018880437500000014, + 0.013209406249998779, + 0.012733687500000812, + 0.012359343750000917, + 0.012508156250000013, + 0.011840843749999053, + 0.012295593750000222, + 0.011937187500000945, + 0.011609218750001205, + 0.018131437499999237, + 0.011325218749998811, + 0.012045000000000528, + 0.011493687499999794, + 0.011502093749999887, + 0.012792906250000513, + 0.013379374999999527, + 0.01291590625000083, + 0.011914093750000632, + 0.012061093750000751, + 0.011182718749999765, + 0.0109996562500001, + 0.010931624999999556, + 0.011099906249999236, + 0.010889656250000712, + 0.010966656249999929, + 0.011014437499998309, + 0.010698937499999062, + 0.010967437499999733, + 0.011669968750000592, + 0.01747471874999995, + 0.017461875000000404, + 0.01697050000000111, + 0.017927500000000762, + 0.015241906249999104, + 0.018379093749999242, + 0.011072562500000771, + 0.010484874999999505, + 0.010909937500001021, + 0.01046278125000022, + 0.011048312499999824, + 0.010851750000000493, + 0.011046437500001005, + 0.010470624999999956, + 0.010267531250001127, + 0.010490531249999435, + 0.010477281250000914, + 0.010559031250000572, + 0.010511812500000772, + 0.011369062500000027, + 0.02064703124999845, + 0.021986874999999628, + 0.019306000000000267, + 0.01938381249999921, + 0.018570125000000104, + 0.020860031250000688, + 0.019119187499999413, + 0.0184110000000004, + 0.01796859375000004, + 0.018399875000000065, + 0.018220250000000604, + 0.01765331250000024, + 0.01779331250000027, + 0.017534624999999693, + 0.0160514062499999, + 0.009233906250001311, + 0.008967906249999658, + 0.009178500000000867, + 0.009031031250000154, + 0.012430968749999494, + 0.0093213125000009, + 0.008876468750001365, + 0.008875875000001088, + 0.009236906250000843, + 0.00889518750000029, + 0.008711687499999954, + 0.008995593750000808, + 0.009470468750000904, + 0.008911593749999724, + 0.009031687500000274, + 0.009082906249998857, + 0.008799718749999741, + 0.008565812500000547, + 0.008565093750000585, + 0.008903687500000146, + 0.008735031249999636, + 0.014519531250000384, + 0.009714499999999404, + 0.007698343750000447, + 0.007646062499999218, + 0.007669468750000519, + 0.00790462500000011, + 0.007402062500000639, + 0.007419218749999956, + 0.007344656249999915, + 0.00755543750000065, + 0.007308531249998751, + 0.007222437499999401, + 0.007298125000000155, + 0.0076987187499995, + 0.007216937500000853, + 0.008292781249998882, + 0.007356531250000131, + 0.012531156250000564, + 0.007698875000000882, + 0.007344874999999362, + 0.007370687499999917, + 0.007244562500000384, + 0.007035468750000717, + 0.007158250000001587, + 0.0072451250000007406, + 0.007475499999999968, + 0.006928343750001176, + 0.006989406250001551, + 0.006940437499999064, + 0.007278218750000676, + 0.007503593750000093, + 0.007624687499999894, + 0.008566187500001377, + 0.0075321562499990335, + 0.007398187499999764, + 0.00714262500000018, + 0.007445187500000117, + 0.007448843749999767, + 0.009837343750000116, + 0.007625093750000644, + 0.0075944999999997265, + 0.008722812500000288, + 0.007947874999999271, + 0.007646656249999495, + 0.015350093749999516, + 0.01639693749999971, + 0.017084343749999675, + 0.015141656249999969, + 0.018519249999998877, + 0.017317562500000605, + 0.016795593749998616, + 0.06332962499999972, + 0.013376250000000312, + 0.012860875000001215, + 0.014341687499999978, + 0.012165187499999064, + 0.01188475000000011, + 0.011852750000000967, + 0.011326437500001063, + 0.006153499999999923, + 0.006137999999999977, + 0.0064952500000003965, + 0.006271906249999404, + 0.006405374999999935, + 0.006119687500000026, + 0.006214500000000456, + 0.006337468750000852, + 0.006101812500000747, + 0.006396312499999723, + 0.005971374999999668, + 0.006082593749999532, + 0.005840437499999851, + 0.005861031249999371, + 0.0064241875000004, + 0.005419093749999604, + 0.0057421250000011526, + 0.005553625000001006, + 0.006012625000000327, + 0.006337218749999707, + 0.006602281250000175, + 0.005987562499999655, + 0.0056496250000002135, + 0.005687312499999209, + 0.006577625000000253, + 0.005690562499999885, + 0.00554178125000071, + 0.005628968749999075, + 0.005543562499999766, + 0.005695281249998629, + 0.006323156249999684, + 0.006906625000000943, + 0.006039937499998871, + 0.006059499999999218, + 0.0060960937499991985, + 0.006434937499999904, + 0.006042562500001125, + 0.00572337500000053, + 0.005706281249999279, + 0.005857875000000234, + 0.006474218749998428, + 0.00608387499999985, + 0.0070275937499992835, + 0.006029218749999288, + 0.006573374999998549, + 0.00634737500000071, + 0.005874781250000183, + 0.005684750000000349, + 0.005569187499999018, + 0.00631175000000006, + 0.006680093749999116, + 0.00619862499999968, + 0.005898625000000379, + 0.006226218750001067, + 0.005967937499999465, + 0.006594656249999886, + 0.005784312499999444, + 0.005587906249999719, + 0.005910031250000003, + 0.0055803437499992725, + 0.006296562499999325, + 0.005880437500000113, + 0.006385812499999588, + 0.0062925000000007, + 0.006522781250000165, + 0.006845687500000253, + 0.006520312500001069, + 0.0066342187499994765, + 0.010293531249999432, + 0.007668874999998465, + 0.0059684687499999, + 0.00567912500000034, + 0.006022500000000264, + 0.005585656250000071, + 0.005584218750000147, + 0.005629750000000655, + 0.005911531250001545, + 0.005850125000000261, + 0.0056971249999993034, + 0.005406281249999978, + 0.0055248749999989855, + 0.005764312500000202, + 0.005916499999999658, + 0.005841375000001037, + 0.005751312500001049, + 0.005817593749998906, + 0.005518906249999844, + 0.00563056250000038, + 0.005688375000000079, + 0.005730749999999674, + 0.005717218750000086, + 0.005861031249999371, + 0.005534937499998449, + 0.0057184062500006405, + 0.005495656249999925, + 0.0055066875000004956, + 0.005465937500000351, + 0.006274531249999882, + 0.006608281249999237, + 0.0061880937500014, + 0.006231343749998786, + 0.006193281250000737, + 0.007498281250001071, + 0.007407687499998872, + 0.0074494375000000446, + 0.00733284374999954, + 0.006916968749999697, + 0.0068579687499994435, + 0.006721156250000249, + 0.00677368749999907, + 0.006713125000000986, + 0.0063267499999994925, + 0.006464437500000031, + 0.006606156249999273, + 0.007162218750000449, + 0.00753981250000102, + 0.008032656250000159, + 0.007980968749999207, + 0.008120437500000577, + 0.007758531250001255, + 0.007383625000001004, + 0.007528656250000765, + 0.007897406249998795, + 0.008683125000001013, + 0.008357812499999895, + 0.009794687500001231, + 0.007788031249999605, + 0.008370468749999915, + 0.00803431249999953, + 0.007746937500000328, + 0.007755343750000421, + 0.007439062499999594, + 0.007525187500000641, + 0.007734281250000308, + 0.007599781249998827, + 0.008181031250000359, + 0.007984499999999173, + 0.007884843750000314, + 0.007974781250000618, + 0.00773568750000031, + 0.007403687500000089, + 0.007540406249999521, + 0.007267937499999988, + 0.007420218749999208, + 0.007465500000000347, + 0.007436249999999589, + 0.007227281249999606, + 0.012967343750000637, + 0.007917468749999657, + 0.008078749999999246, + 0.008572250000000281, + 0.00833603124999982, + 0.00815674999999949 + ], + "edit": [ + 7.578988000000038, + 4.899010999999973, + 6.729864999999961, + 7.778900999999962, + 6.706523000000004, + 8.563034000000016, + 5.94292999999999, + 3.960090999999977, + 5.075469999999996, + 4.4501750000000015, + 4.397997000000032, + 4.774291000000005, + 6.8529250000000275, + 4.919995999999969, + 4.814937999999984 + ], + "sort": [ + 0.14948900000001686, + 0.13884799999993902, + 0.13029699999992772, + 0.1512119999999868, + 0.1336110000000872, + 0.1276350000000548, + 0.13305700000000797, + 0.13254199999994398, + 0.10945700000002034, + 0.10719600000004448, + 0.12891400000000885, + 0.13616700000000037, + 0.20030900000006113, + 0.13197999999999865, + 0.13719400000002224 + ], + "filter": [ + 0.0345470000000887, + 0.027827000000002045, + 0.03677299999992556, + 0.03607399999998506, + 0.022366000000033637, + 0.02307399999995141, + 0.019182999999998174, + 0.026157000000011976, + 0.020538999999985208, + 0.01836100000002716, + 0.02635499999996682, + 0.025641999999947984, + 0.03931599999998525, + 0.04075199999999768, + 0.04422499999998308 + ], + "multiFilter": [ + 0.11890700000003562, + 0.10310200000003533, + 0.10412400000006983, + 0.11482899999998608, + 0.11325399999998353, + 0.11188799999990806, + 0.11775299999999334, + 0.12472800000000461, + 0.10033200000009401, + 0.136620999999991, + 0.09532500000000255, + 0.12336299999992661, + 0.09096199999999044, + 0.08722999999997683, + 0.10156199999994442 + ], + "distinctLow": [ + 0.07937900000001719, + 0.07787800000005518, + 0.07752000000004955, + 0.09097700000006625, + 0.07155899999997928, + 0.07173899999997957, + 0.07766300000002957, + 0.09738300000003619, + 0.10913400000004003, + 0.07077000000003864, + 0.07480199999997694, + 0.061392999999952735, + 0.0603760000000193, + 0.06027099999994334, + 0.062324999999987085 + ], + "distinctHigh": [ + 0.3154469999999492, + 0.26291200000002846, + 0.255849000000012, + 0.24653299999999945, + 0.247524999999996, + 0.22569799999996576, + 0.24467600000002676, + 0.24950400000000172, + 0.27448600000002443, + 0.2636699999999337, + 0.27470100000005004, + 0.2467460000000301, + 0.24360400000000482, + 0.255896000000007, + 0.2718280000000277 + ], + "aggregate": [ + 0.004420703124999648, + 0.00450329687499984, + 0.004472843750000344, + 0.00462837500000024, + 0.004483046874999452, + 0.00453953906249982, + 0.004648210937499897, + 0.004558367187500245, + 0.004651460937500573, + 0.0048838281250001, + 0.004686195312499919, + 0.00463934375000008, + 0.004634281249999539, + 0.004648890624999957, + 0.004592164062499293, + 0.004641851562499966, + 0.0046715234375005465, + 0.004874296875000184, + 0.004861476562499689, + 0.004833601562499901, + 0.00483862500000054, + 0.004830546874999619, + 0.004761812499999962, + 0.0047759687500006365, + 0.004736234374999704, + 0.004781851562499995, + 0.004618171875000243, + 0.004778734374999871, + 0.004784882812499447, + 0.00473585156250067, + 0.004537765624999857, + 0.004606515624999474, + 0.004648656250000549, + 0.004630289062499848, + 0.00461003124999948, + 0.00460844531250082, + 0.004643148437499356, + 0.004598328125000606, + 0.004628023437499351, + 0.004630164062500164, + 0.004611109375000311, + 0.0047307109375003265, + 0.0045836093749995754, + 0.00465029687499996, + 0.0045542109375000805, + 0.004528789062500316, + 0.004602539062500632, + 0.004560585937499972, + 0.004555304687499984, + 0.004567492187500299, + 0.004644429687499674, + 0.004626632812500198, + 0.004628203124999786, + 0.004566562499999982, + 0.004624749999999622, + 0.004621859374999815, + 0.004611164062500173, + 0.004596234375000563, + 0.004750820312499293, + 0.004519937500000459, + 0.0046178750000001045, + 0.004652734375000023, + 0.0044913281249998604, + 0.004658421874999874, + 0.004712546875000001, + 0.004535515625000208, + 0.004442359375000038, + 0.004295882812500373, + 0.004400265624999733, + 0.005186945312500413, + 0.004621937500000506, + 0.006887046874999747, + 0.006255320312500423, + 0.0060762031249996795, + 0.006056046874999943, + 0.006536054687500403, + 0.006022664062500738, + 0.006281234374999833, + 0.0039693437499996875, + 0.00366010156249974, + 0.0037244687499997653, + 0.003740679687499693, + 0.0037964375000001382, + 0.003686749999999961, + 0.0038900468750000528, + 0.0037629687500002618, + 0.0036449531249997946, + 0.003692570312500365, + 0.004051476562500156, + 0.00346619531249992, + 0.0033980390624996915, + 0.003415226562499818, + 0.0033167734375005864, + 0.003782000000000174, + 0.0031623749999996065, + 0.00320941406249986, + 0.0031747421874994686, + 0.003204570312499655, + 0.003113078124999724, + 0.0030572500000003444, + 0.0030757421875007296, + 0.0033203281250004935, + 0.003100039062499782, + 0.003111812499999367, + 0.003189609375000124, + 0.0032621718749998863, + 0.0031391249999996873, + 0.0031760546874997075, + 0.0030277734375001586, + 0.0029924375000005554, + 0.0030204687499999494, + 0.00298193750000042, + 0.0030262421874995837, + 0.0029944218749999862, + 0.003169343750000664, + 0.003284570312500179, + 0.003918703124999645, + 0.003393585937499388, + 0.003387000000000029, + 0.0031219453125004293, + 0.00311497656250026, + 0.0031204921875005454, + 0.003074968750000018, + 0.003245359374999701, + 0.003084624999999619, + 0.0031050625000004217, + 0.003284437499999626, + 0.003079476562500183, + 0.0032980937500006746, + 0.0031641328125004975, + 0.003037796874999721, + 0.0030755546874994266, + 0.0030736953125005684, + 0.003332796875000099, + 0.0037188828124996576, + 0.0034981562500000507, + 0.003143679687499734, + 0.003169664062499855, + 0.0032380859375003013, + 0.003175359375000575, + 0.003328007812499756, + 0.0031786484375002644, + 0.0030862890624998585, + 0.003105882812500127, + 0.00309264843749979, + 0.003117296874999731, + 0.003356710937500118, + 0.0030412187499999632, + 0.003193156250000051, + 0.0033879140625003856, + 0.0033284140625005065, + 0.003040124999999172, + 0.0030490312499997785, + 0.0032760468750003824, + 0.003245921874999169, + 0.003064875000000633, + 0.003083562500000525, + 0.00308896093749933, + 0.0031147968749998256, + 0.0032194140625003698, + 0.0032849531250001007, + 0.0032316015624997974, + 0.0033132499999997123, + 0.003211593749999686, + 0.003180320312499596, + 0.0030476406249997368, + 0.0031229296874997203, + 0.003068343749999869, + 0.0031288046874999864, + 0.0030283281250005345, + 0.003117132812499257, + 0.0031400859374999257, + 0.003080898437500146, + 0.0030635390625004533, + 0.0031125781250000983, + 0.0037601406250002967, + 0.003353156249999323, + 0.00341198437500001, + 0.003316171875000329, + 0.0032263515624997297, + 0.0030868984375000963, + 0.0032543203124992814, + 0.003316562500000231, + 0.0031806718749995966, + 0.003131617187499991, + 0.0032335546875001953, + 0.0033813437500000987, + 0.0034019843749995005, + 0.0031975703124995647, + 0.003222296875000197, + 0.0034039062499999773, + 0.0031976953125001373, + 0.003237687500000419, + 0.0032467890624996443, + 0.0032578750000000767, + 0.003312593750000481, + 0.0031406718749993345, + 0.003246218750000196, + 0.0031885546874992343, + 0.0031800000000004047 + ] + }, + "10000": { + "ingest": [ + 11.290988999999968, + 11.268035999999938, + 11.586033000000043, + 11.94004899999993, + 12.09248100000002, + 14.591373999999973, + 13.362055999999939 + ], + "windowRead": [ + 0.006072437499998529, + 0.005960656250000085, + 0.006026656250000428, + 0.00562106249999772, + 0.005665687500002292, + 0.005800156250000299, + 0.0059954375000010884, + 0.006033718750000361, + 0.006020812500000972, + 0.005681124999998843, + 0.0057930937500003665, + 0.005805937499999914, + 0.005893593749998871, + 0.00601137499999993, + 0.005990437499999501, + 0.0060450000000003, + 0.006328812500001391, + 0.005713499999998817, + 0.006007218749999765, + 0.0059246562499986055, + 0.005726468750001601, + 0.0060046249999992085, + 0.005730906249997503, + 0.005626406250001992, + 0.0056055625000013265, + 0.005690906249999017, + 0.005628906249999233, + 0.005888656249997126, + 0.005686281250000036, + 0.0056240000000009616, + 0.00568209374999995, + 0.005754843750001015, + 0.005677062499998442, + 0.010218687500000101, + 0.009475437500000794, + 0.0070542499999994845, + 0.007044218749999942, + 0.006517156249998379, + 0.006304906250001352, + 0.006311093749999941, + 0.006310468750001519, + 0.006391781249998729, + 0.006260812499998991, + 0.006341093749998805, + 0.006354312500000958, + 0.006177125000000672, + 0.006433156250000849, + 0.006299874999999844, + 0.007148593749999321, + 0.006548375000001272, + 0.006510562499997263, + 0.0067528750000001025, + 0.006023468749997818, + 0.005934437499998779, + 0.006006031249999211, + 0.006081406249997201, + 0.006149812499998575, + 0.006146218750000543, + 0.0060685000000013645, + 0.006017718750001677, + 0.00581981250000041, + 0.005701281250001244, + 0.0056535937500008515, + 0.009261499999997369, + 0.0072474375000020075, + 0.006824093749997928, + 0.012105999999999284, + 0.014810187500000183, + 0.01520040625000263, + 0.0137339687500031, + 0.008141562500000532, + 0.008183906250000206, + 0.008025718750001687, + 0.007767468750000006, + 0.008059343749998504, + 0.006950875000001133, + 0.006865062500001073, + 0.007091718749997256, + 0.007399875000000833, + 0.006873312499998008, + 0.006966843749999896, + 0.007242125000001209, + 0.0069765312499967536, + 0.007197562500000032, + 0.006826468749999037, + 0.006865468750000048, + 0.0068920312500004854, + 0.0070334999999985826, + 0.006913843750002258, + 0.007362249999999904, + 0.007779875000000658, + 0.007314906249998643, + 0.007458156249999348, + 0.007344249999999164, + 0.007229218749998267, + 0.007703343750002034, + 0.008282624999999655, + 0.007341906250001529, + 0.007599437499997919, + 0.007790406250002491, + 0.008186124999998157, + 0.007673531249999144, + 0.00716684374999943, + 0.007424156249999925, + 0.007439000000001528, + 0.007665906249997079, + 0.007806249999998016, + 0.0076323437500001035, + 0.008010031249998661, + 0.007996031250002034, + 0.007933874999999091, + 0.059708781249998566, + 0.007920031249998516, + 0.0076451874999996505, + 0.007295406249998138, + 0.0069406874999984325, + 0.007435156249997021, + 0.007376187500000242, + 0.007561062500002436, + 0.007349562499999962, + 0.007410749999998245, + 0.007322375000001102, + 0.00704443749999939, + 0.0067740624999999, + 0.006742093749998901, + 0.006656656250001447, + 0.007031343750000474, + 0.006564125000000587, + 0.0066518437499993865, + 0.006451656250000326, + 0.00643693750000196, + 0.007167687500000852, + 0.007023281250003066, + 0.006841125000001114, + 0.006758375000000427, + 0.006861562499999252, + 0.0070141562500012355, + 0.0068521562499981314, + 0.008869281249999972, + 0.00643374999999935, + 0.006646781249997957, + 0.006501062500003485, + 0.006482062500001717, + 0.0062629687500006526, + 0.006590468750001577, + 0.007967875000002067, + 0.007272968750001496, + 0.007379781249998274, + 0.007451406249998627, + 0.006847000000000492, + 0.006608437499998843, + 0.006490781250001021, + 0.007598437500000443, + 0.006023593749997502, + 0.006504687500001438, + 0.006286531250001559, + 0.006407531249998044, + 0.006446781249998423, + 0.007490062500000505, + 0.006107249999999453, + 0.006011624999999299, + 0.007183500000000009, + 0.006382468750000925, + 0.006509812499999157, + 0.005815625000000324, + 0.005592531250002253, + 0.005595250000002494, + 0.007254249999999018, + 0.0063007812500011084, + 0.005905468749997311, + 0.005950812500000069, + 0.005900031249996829, + 0.005938093750000206, + 0.005902687500000781, + 0.0060197812500000225, + 0.0056285625000001005, + 0.005538000000001375, + 0.0056210312500013515, + 0.005613249999999681, + 0.006184999999998553, + 0.0056173749999999245, + 0.00559174999999712, + 0.005621687499999695, + 0.005598906250000368, + 0.0058842500000011455, + 0.005611468749997073, + 0.0056555312499995125, + 0.005797999999998638, + 0.006062937500001198, + 0.005606062500000064, + 0.005839250000001073, + 0.0059657499999978825, + 0.005957187499998184, + 0.005937375000002021, + 0.0059510937500029115, + 0.006167031250001287, + 0.0058206874999982006, + 0.005730031249999712, + 0.005654031249999747, + 0.005645250000000601, + 0.0055890937500002735, + 0.006785468750003076, + 0.00954878125000036, + 0.007033781250001425, + 0.008254593749999373, + 0.006319624999999718, + 0.0060217187499986835, + 0.0060322812500004375, + 0.006156843749998586, + 0.0060161249999985955, + 0.006242531249998962, + 0.005951843750001018, + 0.005955093749999918, + 0.006004218750000234, + 0.005734031250000271, + 0.006003468749998575, + 0.00588790624999902, + 0.005979812500001458, + 0.005894999999998873, + 0.0060737187499988465, + 0.0061234687500011376, + 0.007855406250001806, + 0.00563849999999988, + 0.005563468750001022, + 0.005593000000001069, + 0.005871468750001441, + 0.0060128749999996955, + 0.005986437499998942, + 0.005920843750001126, + 0.005998906249999436, + 0.006060062499997798, + 0.006113937500000333, + 0.006069593749998603, + 0.006271000000001692, + 0.00620540624999677, + 0.006082125000002492, + 0.005774031249998757, + 0.006017281249999229, + 0.007082249999999846, + 0.006406781249999938, + 0.006062031249999933, + 0.0056189999999993745, + 0.005801156250001327, + 0.006084156250000916, + 0.006112218750001119, + 0.0060201875000025495, + 0.005967562500000412, + 0.005763968749999293, + 0.00592068750000152, + 0.006028093750000352, + 0.006103468749998342, + 0.006109656250000484, + 0.006014093750000171, + 0.005973625000002869, + 0.006144687500000856, + 0.005779000000000423, + 0.006175875000000275, + 0.006256843750001906, + 0.006026437500000981, + 0.006101875000002366, + 0.005889468749998628, + 0.006041656249998084, + 0.006140468750000849, + 0.006008843749999215, + 0.006145500000002357, + 0.006116562500000811, + 0.0061290312500013044, + 0.005696249999999736, + 0.005791406250001074, + 0.0057120937499988145, + 0.005747374999998556, + 0.005743625000000918, + 0.006005374999997315, + 0.005808312500001023, + 0.005712687499997315, + 0.005746250000001396, + 0.00569578125000092, + 0.0059863749999991, + 0.006343312500000309, + 0.00908609374999969, + 0.006162750000001438, + 0.005782718749998139, + 0.006091343750000533, + 0.007521249999999924, + 0.008205312499999451, + 0.007388312500001604, + 0.006595000000000795, + 0.006303374999998113, + 0.006299406250001027, + 0.006422281249999884, + 0.006339718750002277, + 0.006224374999998616, + 0.0059247500000019215, + 0.005893781249998398, + 0.005806812500001257, + 0.006031187500003199, + 0.0060325937499996485, + 0.006271874999999483, + 0.006278000000001782, + 0.0064488125000004 + ], + "edit": [ + 4.08717200000001, + 4.613213999999971, + 4.095304000000056, + 4.063252000000034, + 4.164494999999988, + 5.742455000000064, + 4.551166999999964, + 3.8269980000000032, + 4.0386459999999715, + 3.9627739999999676, + 3.937526000000048, + 3.872575999999981, + 6.080180000000041, + 4.5758690000000115, + 4.090764000000036 + ], + "sort": [ + 0.24558900000010908, + 0.24195799999995415, + 0.2445390000000316, + 0.24624400000004698, + 0.24536699999998746, + 0.2429459999999608, + 0.24797399999999925, + 0.23844499999995605, + 0.2381790000000592, + 0.2350179999999682, + 0.24595099999999093, + 0.24290300000006937, + 0.25527499999998327, + 0.24683300000003783, + 0.25661999999999807 + ], + "filter": [ + 0.052587000000016815, + 0.05120899999997164, + 0.04988400000002002, + 0.0493860000000268, + 0.05210799999997562, + 0.06883900000002541, + 0.07305599999995138, + 0.05150099999991653, + 0.07111100000008719, + 0.05445899999995163, + 0.05084600000009232, + 0.050857000000064545, + 0.0685280000000148, + 0.11266999999998006, + 0.07014200000003257 + ], + "multiFilter": [ + 0.4355209999999943, + 0.4333440000000337, + 0.41649500000005446, + 0.42938600000002225, + 0.41667599999993854, + 0.423795000000041, + 0.4159460000000763, + 0.42547700000000077, + 0.4108889999999974, + 0.4172249999999167, + 0.4197480000000269, + 0.4042419999999538, + 0.48751499999991665, + 0.42586199999993823, + 0.41238700000008066 + ], + "distinctLow": [ + 0.36598800000001575, + 0.43758200000002034, + 0.37045499999999265, + 0.3739550000000236, + 0.38843099999996866, + 0.4208289999999124, + 0.37977599999999256, + 0.3699779999999464, + 0.3688170000000355, + 0.3866800000000694, + 0.36071900000001733, + 0.3593789999999899, + 0.37235599999996793, + 0.3654950000000099, + 0.3672840000000406 + ], + "distinctHigh": [ + 2.118253999999979, + 2.194774999999936, + 2.1923380000000634, + 2.5396650000000136, + 2.007940000000076, + 2.643143000000009, + 2.0856509999999844, + 2.1025680000000193, + 2.039121000000023, + 2.5360540000000356, + 2.620544999999993, + 2.3574760000000197, + 2.2150459999999157, + 2.0421080000000984, + 2.154186999999979 + ], + "aggregate": [ + 0.019330695312499202, + 0.021156632812500575, + 0.019252031249999746, + 0.019146640625001154, + 0.019141515624999883, + 0.01929942187500089, + 0.019490710937498434, + 0.019520617187499312, + 0.019657507812500086, + 0.019184070312499912, + 0.01918469531250011, + 0.01915045312500041, + 0.019213367187500552, + 0.02048457812500004, + 0.02090561718750017, + 0.01958107031249945, + 0.01918671093750035, + 0.018739515625000536, + 0.018728132812499965, + 0.019170765624998864, + 0.0187458671874996, + 0.02146907031250045, + 0.019376234374998802, + 0.019383835937500038, + 0.019823171875000156, + 0.019228484375000576, + 0.019716078125000536, + 0.02006813281250075, + 0.019802703124998544, + 0.027027898437500752, + 0.019739992187499666, + 0.019768890624998647, + 0.020131117187499825, + 0.02190936718749903, + 0.021278312499999785, + 0.020914773437500145, + 0.023394703124999694, + 0.02275166406250051, + 0.020259164062499835, + 0.020928031249999535, + 0.020051625000000683, + 0.019196054687499853, + 0.019196921875000328, + 0.019228804687500656, + 0.01914871874999946, + 0.020714890625001203, + 0.01957583593750023, + 0.018887828124999118, + 0.019999812500000047, + 0.03235162500000044, + 0.0246133671875004, + 0.019377765625000265, + 0.018029648437501322, + 0.017519421875000774, + 0.018411929687500717, + 0.021792921875000815, + 0.02088968750000042, + 0.021487585937499887, + 0.02156226562500052, + 0.02313885156249995, + 0.022159000000000262, + 0.02185625781249989, + 0.022422164062501082, + 0.02233750781249988, + 0.02234517968750005, + 0.022301593750000848, + 0.022266414062499962, + 0.0225368437500002, + 0.022207242187500142, + 0.022264507812499446, + 0.021811164062500055, + 0.03253747656249928, + 0.020341000000000165, + 0.019174789062500253, + 0.019515804687499028, + 0.018701945312500357, + 0.028155039062498943, + 0.021154203124998716, + 0.018549828124999834, + 0.018066367187500987, + 0.018238609375000436, + 0.01847316406249888, + 0.021272437500000407, + 0.01907389062500009, + 0.017868726562500825, + 0.01718733593749988, + 0.017322734374999982, + 0.01881749218749995, + 0.019315984374999928, + 0.017471304687500577, + 0.01946996093749931, + 0.018387851562501112, + 0.01800028906250084, + 0.01809132812499925, + 0.0200883671874994, + 0.02000819531249931, + 0.020077195312499185, + 0.019311476562499763, + 0.01865746093750076, + 0.0184798359374998, + 0.018541820312499624, + 0.02142513281249947, + 0.020462460937499927, + 0.020149039062500762, + 0.019399968749999275, + 0.019182070312499633, + 0.01845692187499992, + 0.018246156250000922, + 0.01876020312499982, + 0.020120054687499334, + 0.018629859374998503, + 0.018337062500000556, + 0.019760562500000134, + 0.01899398437499933, + 0.01884631249999913, + 0.019689015624999584, + 0.02131539843749941, + 0.019708789062500287, + 0.01914208593749933, + 0.0187240859375013, + 0.018727679687499332, + 0.018719992187500978, + 0.021355500000000305, + 0.01945081250000058, + 0.019075984375000132, + 0.018717499999999276, + 0.01877052343749952, + 0.019193749999999454, + 0.019480484375000273, + 0.021631117187499882, + 0.019533007812500003, + 0.019570593750000143, + 0.019603234374999445, + 0.018930773437499937, + 0.019157960937500107, + 0.02041691406249946, + 0.019568304687499705, + 0.019572359375001014, + 0.019241960937499414, + 0.018874124999999964, + 0.018920726562500434, + 0.019185062500000072, + 0.020714749999999782, + 0.019632796874999414, + 0.019941046874999202, + 0.019647484374999635, + 0.0193782968750007, + 0.019252335937499865, + 0.019900898437500203, + 0.019631523437499965, + 0.024806398437499766, + 0.021116429687500826, + 0.02008109375000089, + 0.01987082031249976, + 0.019750218749999604, + 0.021231765625000065, + 0.02096419531249971, + 0.01969458593750062, + 0.0192284843749988, + 0.01924021874999937, + 0.01946083593750103, + 0.020224000000000686, + 0.02070832031249914, + 0.020513429687500917, + 0.01935231250000058, + 0.019352820312500185, + 0.01920895312500015, + 0.019210421874999994, + 0.02064119531249986, + 0.02053381250000008, + 0.019744695312500227, + 0.01927117968750025, + 0.019190429687499844, + 0.01929771874999986, + 0.01969014843749939, + 0.03655694531249942, + 0.01738320312500008, + 0.017311460937499135, + 0.018121437499999615, + 0.018657687499999298, + 0.018878734374998984, + 0.018621132812500107, + 0.018019031250000594, + 0.02120964843749995, + 0.021276648437501322, + 0.022809210937499103, + 0.022238226562500074, + 0.022716937500000256, + 0.02300308593749989, + 0.023028148437500562, + 0.049052906250000916, + 0.019430804687498693, + 0.018582750000000203, + 0.018908835937500257, + 0.018679257812500794, + 0.019158132812499673, + 0.01941756250000104, + 0.020211179687498415, + 0.022454632812499042, + 0.022039679687498648 + ] + }, + "100000": { + "ingest": [ + 126.066284, + 137.73217099999988, + 120.7194629999999, + 127.69486899999993, + 124.29930000000013, + 112.45881499999996, + 113.0703840000001 + ], + "windowRead": [ + 0.006854406249999556, + 0.0069967187500026284, + 0.006979000000001179, + 0.006731312500008357, + 0.006829093749999515, + 0.007104000000012434, + 0.006863718749997361, + 0.0073226562499968395, + 0.0070156250000081855, + 0.006821468749990345, + 0.0066120312500004275, + 0.006931156250004733, + 0.006771312499992632, + 0.006578437499996426, + 0.006726343750003139, + 0.006821125000001871, + 0.006664125000000354, + 0.006423999999995544, + 0.006660687500001927, + 0.006715906249993964, + 0.006661906250002403, + 0.006909093749996487, + 0.0068230625000040845, + 0.006484343750003063, + 0.006827156250011512, + 0.006705218749999631, + 0.006931312500000786, + 0.007942374999998947, + 0.006866906249996418, + 0.0067531562499993925, + 0.006862031250008727, + 0.006937687499998901, + 0.007671968750003089, + 0.006618000000003121, + 0.006610093749998214, + 0.006563843750001297, + 0.006820812499995554, + 0.007126531249994628, + 0.006607781249996947, + 0.008402531249998901, + 0.00721078124999508, + 0.007065749999995319, + 0.006718968749993337, + 0.006806843749998848, + 0.006678218749996745, + 0.006778468750013644, + 0.007879937499993162, + 0.007063875000000053, + 0.006751062500001126, + 0.006727374999996982, + 0.007115937500003611, + 0.006713343749993328, + 0.006542875000008053, + 0.007009187500003122, + 0.006740968750008847, + 0.006518656250008803, + 0.007141968749991179, + 0.00668056249999438, + 0.006737406250010736, + 0.0071234062500025175, + 0.007353750000007153, + 0.0070615312500024174, + 0.006530093750001242, + 0.006940812500005222, + 0.007022750000004407, + 0.009863249999995105, + 0.008311187499998596, + 0.007376093750011137, + 0.0064979999999934535, + 0.006927250000003937, + 0.006929999999996994, + 0.007113562499995396, + 0.007714250000006473, + 0.007019031249996033, + 0.007067437499998164, + 0.007011906249999811, + 0.00711437500000045, + 0.007135156250001273, + 0.0068499687499894435, + 0.007251156250006829, + 0.00717893750000087, + 0.006818031249991918, + 0.0071579062500006785, + 0.0072233437499988895, + 0.006525281250006287, + 0.0075964374999983875, + 0.006682687500003226, + 0.007639968749998616, + 0.0070050937499956945, + 0.007936125000000516, + 0.006872062499994058, + 0.00700631249999617, + 0.0069942187499947295, + 0.007203562499995542, + 0.006795406250006408, + 0.006701250000006098, + 0.00672809374999872, + 0.006802937500012263, + 0.006994781250000415, + 0.006688593749998972, + 0.009847125000007395, + 0.006746906250000961, + 0.006940874999997959, + 0.006975624999995489, + 0.00699196875000041, + 0.0068452499999978045, + 0.0067670624999891515, + 0.006765468749989623, + 0.006628750000004402, + 0.0065436562500025275, + 0.006444374999986735, + 0.006842156250002063, + 0.03489415625000447, + 0.007243875000000344, + 0.007320687499998257, + 0.00733609374999844, + 0.04232215624999469, + 0.007890843750004706, + 0.007117781250002508, + 0.0071100312499936535, + 0.007169062499997381, + 0.006906843750002167, + 0.006970718750011429, + 0.006816687499991758, + 0.007084687499997244, + 0.006826593749991616, + 0.00728006250000135, + 0.00720987500000092, + 0.006803843749992211, + 0.006702750000002311, + 0.006362281250005708, + 0.006281437500007314, + 0.006353781249998747, + 0.006229781249999178, + 0.006435250000009773, + 0.0061739374999945085, + 0.006170312500003661, + 0.006793906249995985, + 0.006723781249988292, + 0.006473093750003045, + 0.0067002187500122545, + 0.006654968749998602, + 0.0065795000000008486, + 0.006794875000011302, + 0.00650637500000073, + 0.006225812500005645, + 0.006446375000010107, + 0.006450562499992429, + 0.006626562500002819, + 0.006643468749999215, + 0.006612156250000112, + 0.006328312500002653, + 0.006276343750002411, + 0.006558124999997972, + 0.006298874999998816, + 0.006239937499998405, + 0.006888156249999611, + 0.006648093749987538, + 0.014625406250004858, + 0.013618875000005914, + 0.013538156250007205, + 0.012965874999991911, + 0.017406468749996407, + 0.007286468749995834, + 0.00869109375000221, + 0.00829381249999983, + 0.007013468750002971, + 0.0069071249999979045, + 0.007113937499994449, + 0.006978656249998494, + 0.006591031249996604, + 0.0063011562499895035, + 0.006565124999994509, + 0.006468343750000827, + 0.00627771875001315, + 0.006521687499997597, + 0.006112562499993146, + 0.006104531249988554, + 0.006164375000011546, + 0.0061038750000079744, + 0.006200906250001026, + 0.006171375000008084, + 0.006405968750001989, + 0.006365843750003819, + 0.006070812499999079, + 0.00688793749999661, + 0.006247031249998258, + 0.006433874999999034, + 0.006601750000001516, + 0.0067216250000115, + 0.006321718750001537, + 0.006542843749997473, + 0.006155374999991636, + 0.006089750000001004, + 0.0072499062499957745, + 0.006930968749998101, + 0.007385031249995677, + 0.006779875000006541, + 0.006535656249994304, + 0.0073386250000027076, + 0.007904906249990518, + 0.006825187499998719, + 0.006550031250000643, + 0.007457812500007321, + 0.006317187500002319, + 0.006251562499997476, + 0.0060825624999978345, + 0.00624565625000173, + 0.006532093750010404, + 0.006150187499997628, + 0.006003093749995969, + 0.006039218750004238, + 0.005877562500003819, + 0.0060897812499973725, + 0.006232593749999182, + 0.006092156250005587, + 0.005797656249995953, + 0.005854156250009623, + 0.0061822500000090486, + 0.0068951875000067275, + 0.006139406249999979, + 0.005868656249987225, + 0.0063667812500085574, + 0.006023312500005318, + 0.006001718749999441, + 0.00596406249999859, + 0.0058784062499910306, + 0.0072046249999999645, + 0.007001125000002162, + 0.0065781562500006885, + 0.006236281249996978, + 0.00612862500000233, + 0.006280906249997997, + 0.006438593750004884, + 0.00608490624999547, + 0.005938999999997918, + 0.006057031249994793, + 0.0061066562499974, + 0.006799062500007835, + 0.006016156249998517, + 0.006030093749998855, + 0.006116249999990941, + 0.007030124999999998, + 0.011559593749993269, + 0.007834812500007615, + 0.007566437500003076, + 0.009402843749995782, + 0.008920906249997529, + 0.008086124999991284, + 0.008566593749989693, + 0.007569656249998502, + 0.00673865625000758, + 0.006796906250002621, + 0.006766249999998308, + 0.00652275000000202, + 0.006804312500008791, + 0.0071439062499933925, + 0.008345499999990125, + 0.006610656250003899, + 0.0071224374999872, + 0.006888656249998348, + 0.006943656250001595, + 0.007078468750009392, + 0.00699690624999505, + 0.006678343749996429, + 0.006663625000001616, + 0.00652543750000234, + 0.006736062499996365, + 0.007209093749992235, + 0.00690118750000579, + 0.006901249999998527, + 0.006808062499999323, + 0.006988531249987773, + 0.0068563125000054015, + 0.00645325000000696, + 0.006696250000004511, + 0.010993124999998827, + 0.006551718749989277, + 0.0064832187500059035, + 0.006371968750002566, + 0.006129031250011963, + 0.006688687500002288, + 0.006523343750004074, + 0.006082968750007467, + 0.006081468749997043, + 0.00640887500000531, + 0.005884000000008882, + 0.010554281250009012, + 0.00737040625000418, + 0.006203531250008609, + 0.006188874999992322, + 0.006755812500003344, + 0.006110124999992195, + 0.0059850312499918346, + 0.006117562500008944, + 0.006026656250000428, + 0.0065666562500013015, + 0.006084281249997048, + 0.0068713750000028995, + 0.011153718749994823 + ], + "edit": [ + 3.6667419999998856, + 3.695897000000059, + 3.701745000000301, + 4.091286000000309, + 4.776879000000008, + 6.250840000000153, + 5.424726000000192, + 5.515947999999753, + 5.589058000000023, + 6.846864000000096, + 6.859266000000389, + 3.426800000000185, + 3.4039020000000164, + 3.3317189999997936, + 4.260287999999946 + ], + "sort": [ + 2.0778549999999996, + 2.041027000000213, + 1.9736280000001898, + 2.0022549999998773, + 2.0316619999998693, + 2.148783999999978, + 2.1208489999999074, + 2.169096999999965, + 2.0911919999998645, + 2.0659630000000107, + 2.078686999999718, + 2.0683610000000954, + 2.0443209999998544, + 2.2627290000000357, + 2.085721000000376 + ], + "filter": [ + 0.3424960000002102, + 0.323421000000053, + 0.31777299999976094, + 0.31692999999995664, + 0.3111539999999877, + 0.3155149999997775, + 0.31261300000005576, + 0.30698900000015783, + 0.3196219999999812, + 0.3073190000000068, + 0.3244269999995595, + 0.35866900000019086, + 0.31293700000014724, + 0.3063529999999446, + 0.3113450000000739 + ], + "multiFilter": [ + 3.8055169999997815, + 3.48059400000011, + 3.522860000000037, + 3.4670360000000073, + 3.6126749999998538, + 3.4958620000002156, + 4.984586000000036, + 3.785856999999851, + 3.8313709999997627, + 3.5193990000002486, + 3.637471999999889, + 3.6113750000004075, + 3.739023999999972, + 4.068546999999853, + 3.3792490000000726 + ], + "distinctLow": [ + 3.6523339999998825, + 3.9431100000001607, + 3.9936430000002474, + 3.8701390000001084, + 3.792026999999962, + 3.8837250000001404, + 3.777107000000342, + 3.8106290000000627, + 3.7331380000000536, + 3.9392800000000534, + 3.8468159999997624, + 3.929529999999886, + 3.703891999999996, + 3.8728510000000824, + 3.862424000000374 + ], + "distinctHigh": [ + 23.312656999999945, + 21.609869999999773, + 22.93262700000014, + 21.20226700000012, + 23.038015000000087, + 22.050239000000147, + 25.19048500000008, + 31.19966199999999, + 24.389554000000317, + 23.63437699999986, + 21.848885000000337, + 23.166823000000022, + 21.392913000000135, + 17.34078800000043, + 18.824345999999878 + ], + "aggregate": [ + 0.18378299999994852, + 0.1833639999999832, + 0.1832209999997758, + 0.18469800000002579, + 0.20150100000000748, + 0.183364999999867, + 0.18308399999978064, + 0.1831529999999475, + 0.1832009999998263, + 0.1831290000000081, + 0.18574100000023464, + 0.18323599999985163, + 0.18339100000002873, + 0.18527799999992567, + 0.18345199999976103, + 0.1858780000002298, + 0.18356600000015533, + 0.18329700000003868, + 0.18319000000019514, + 0.18342500000017026, + 0.183404999999766, + 0.1860810000002857, + 0.1833200000000943, + 0.18421899999975722, + 0.18793400000004112, + 0.21139700000003359, + 0.1862660000001597, + 0.18375299999979688, + 0.2421129999997902, + 0.193304999999782, + 0.18561099999988073, + 0.18519100000003164, + 0.18515500000012253, + 0.18670299999985218, + 0.18324500000016997, + 0.183165999999801, + 0.185312999999951, + 0.18527499999981956, + 0.18344900000010966, + 0.183245999999599, + 0.18938400000024558, + 0.18650799999977608, + 0.18539800000007745, + 0.18368799999961993, + 0.1833240000000842, + 0.18334700000013981, + 0.18323599999985163, + 0.18473199999971257, + 0.1831369999999879, + 0.18329700000003868, + 0.18307699999968463, + 0.1835839999998825, + 0.18645500000002357, + 0.183556999999837, + 0.1846880000002784, + 0.18598500000007334, + 0.1858710000001338, + 0.18879100000003746, + 0.1884829999999056, + 0.1837470000000394, + 0.18376500000022133, + 0.18349399999988236, + 0.22415399999999863, + 0.18693599999960497, + 0.18354900000031193, + 0.18338500000027125, + 0.2070659999999407, + 0.20382100000006176, + 0.18575300000020434, + 0.1836620000003677, + 0.18342600000005405, + 0.18315199999960896, + 0.18315100000017992, + 0.18319000000019514, + 0.18551899999965826, + 0.18326800000022558, + 0.18322200000011435, + 0.21241700000018682, + 0.1837230000001, + 0.1859180000001288, + 0.1835080000000744, + 0.18331699999998818, + 0.18327700000008917, + 0.18341999999984182, + 0.18566599999985556, + 0.18322399999988193, + 0.1833000000001448, + 0.18323699999973542, + 0.183259000000362, + 0.18319700000029115, + 0.18587600000000748, + 0.18322699999998804, + 0.1847010000001319, + 0.21439599999985148, + 0.18372100000033242, + 0.18637399999988702, + 0.1833759999999529, + 0.18310499999961394, + 0.18332699999973556, + 0.18292299999984607, + 0.18278300000019954, + 0.18850400000019363, + 0.185551999999916, + 0.18869600000016362, + 0.18734799999992902, + 0.18300900000031106, + 0.18590699999958815, + 0.1838830000001508, + 0.1832950000002711, + 0.18775400000004083, + 0.18960500000002867, + 0.1852920000001177, + 0.18469500000037442, + 0.18308499999966443, + 0.18758500000012646, + 0.18869599999970887, + 0.1854089999997086, + 0.2545319999999265, + 0.18408599999975195, + 0.18367299999999886, + 0.186851000000388, + 0.18865099999993618, + 0.1887419999998201, + 0.1831929999998465, + 0.18370999999979176, + 0.18331699999998818, + 0.18328199999996286, + 0.1862949999999728, + 0.18852500000002692, + 0.1878959999999097, + 0.184769999999844, + 0.18366500000001906, + 0.18698500000027707, + 0.18784899999991467, + 0.18769799999972747, + 0.18732200000022203, + 0.18738900000016656, + 0.18878999999969892, + 0.19044699999994918, + 0.19075700000030338, + 0.18740099999968152, + 0.18745699999999488, + 0.18774699999994482, + 0.19020899999986796, + 0.18475200000011682, + 0.18876399999999194, + 0.18835699999999633, + 0.1831290000000081, + 0.18615300000010393, + 0.1834289999997054, + 0.18319300000030125, + 0.1833639999999832, + 0.18306799999982104, + 0.1834960000001047, + 0.18663599999990765, + 0.18333900000016, + 0.18296600000030594, + 0.3147489999996651, + 0.18335700000034194, + 0.21507999999994354, + 0.18356700000003912, + 0.18317100000012942, + 0.18306200000006356, + 0.22829300000012154, + 0.18529799999987517, + 0.18315799999982119, + 0.18305099999997765, + 0.1831609999999273, + 0.18303100000002814, + 0.18622499999992215, + 0.20624499999985346, + 0.18363500000032218, + 0.18331699999998818, + 0.18348699999978635, + 0.18543199999976423, + 0.18326800000022558, + 0.18319800000017494, + 0.18306900000015958, + 0.1831619999998111, + 0.18310399999973015, + 0.18563499999982014, + 0.18440000000009604, + 0.18382699999983743, + 0.18307999999979074, + 0.18322399999988193, + 0.1869859999997061, + 0.206702999999834, + 0.1860900000001493, + 0.18354299999964496, + 0.18306899999970483, + 0.18321300000025076, + 0.18633299999964947, + 0.18494700000019293, + 0.18309799999997267, + 0.18316300000014962, + 0.18432499999971697, + 0.18544999999994616, + 0.18317999999999302, + 0.18302899999980582, + 0.18301999999994223 + ] + }, + "500000": { + "ingest": [ + 610.3295949999992, + 593.400103, + 569.1756599999999 + ], + "windowRead": [ + 0.009989749999988362, + 0.010484875000003058, + 0.010154749999998103, + 0.010399125000020604, + 0.009846906250004395, + 0.00977840625000681, + 0.009844156250011338, + 0.009723187499986352, + 0.011682687499984468, + 0.00971090624997828, + 0.009892562499999258, + 0.010018343750004988, + 0.010549375000010741, + 0.00961362499998586, + 0.011579624999995985, + 0.011604250000004868, + 0.010357093749973956, + 0.010166156249994174, + 0.011054437500007452, + 0.010132343750001382, + 0.010309093750009879, + 0.009903218749997222, + 0.011060874999998305, + 0.016112249999991946, + 0.009783656250021977, + 0.009842468750008493, + 0.009538281250002001, + 0.009687781249994032, + 0.010088812499986943, + 0.009937000000007856, + 0.009755874999996195, + 0.009869749999978694, + 0.010001343749991065, + 0.009889624999999569, + 0.009797718749979367, + 0.010012562500008926, + 0.00941075000000069, + 0.009820812500009879, + 0.00981962499997735, + 0.009366468749988144, + 0.009463343750013564, + 0.009542343749984639, + 0.00937531249999779, + 0.009252187499981801, + 0.01039046875001759, + 0.009406843749985683, + 0.010161187500017377, + 0.00983937499998433, + 0.01035590624999827, + 0.011542937499996242, + 0.009231781250008453, + 0.010114624999999933, + 0.01701203125000461, + 0.009763249999991785, + 0.009562093749991618, + 0.009569531250008367, + 0.009570999999994001, + 0.00957978125001091, + 0.00956184374999225, + 0.0106157187499889, + 0.00930109374999688, + 0.009497812500001146, + 0.00983440624997911, + 0.012553281249978454, + 0.014318343750005624, + 0.011011156250020804, + 0.009947343749985293, + 0.010143749999997453, + 0.011369750000000067, + 0.009869062500001746, + 0.010080406249983298, + 0.010219124999991891, + 0.009707687499997064, + 0.00968468749999829, + 0.009952031250008986, + 0.0096580312500123, + 0.009577000000007274, + 0.009412281250007482, + 0.010167937500000335, + 0.009931437500000584, + 0.010947687499992753, + 0.009909156250017759, + 0.01600165625001182, + 0.010223562500016214, + 0.01007793750000019, + 0.014327249999979585, + 0.01002703124999016, + 0.009759624999986727, + 0.009454031249987338, + 0.009564718749999201, + 0.009490437500005555, + 0.009455531249983551, + 0.009541468750001059, + 0.009288687500003334, + 0.009524781250007663, + 0.009556343750006135, + 0.009921499999990147, + 0.009600375000019312, + 0.009576718750025748, + 0.010421031249990165, + 0.011934031250007138, + 0.009598750000009204, + 0.009890843750014255, + 0.009670593750001899, + 0.009593218750012511, + 0.01051843749999648, + 0.009608906250008431, + 0.00951231250002138, + 0.009634718749992999, + 0.01591153124999778, + 0.01183328124997729, + 0.012666718750011796, + 0.012858437500000264, + 0.011692562500002168, + 0.00999181249997605, + 0.01001965625002299, + 0.010098499999998012, + 0.009759093750005832, + 0.009908249999995178, + 0.009983343750008089, + 0.009959718749996682, + 0.009869281250018958, + 0.009874281250006334, + 0.009461593750017983, + 0.009515031250003858, + 0.00965262500000108, + 0.009969968749999225, + 0.009809281249999913, + 0.010032687500000748, + 0.010299937500008127, + 0.009752718749979294, + 0.009677531249991489, + 0.009919749999994565, + 0.009770874999986745, + 0.009622031250017926, + 0.009444906249996166, + 0.009464156250004407, + 0.00952528124997798, + 0.009503687500000524, + 0.015739500000023554, + 0.009070781250017035, + 0.009340750000006892, + 0.010202531250001812, + 0.009927406250000104, + 0.010403062500017768, + 0.009695843749994992, + 0.009419374999993124, + 0.010510468749998836, + 0.009491593749999083, + 0.009425406250016977, + 0.012162499999988086, + 0.010066125000008697, + 0.011198937499983685, + 0.010330000000010386, + 0.009696281250000993, + 0.01043034374998797, + 0.009290249999992284, + 0.009424499999994396, + 0.009849968749989557, + 0.009779875000020866, + 0.01116993750000006, + 0.01143515625000191, + 0.012361812499989355, + 0.010052906249995885, + 0.009742281249998541, + 0.009973156249998283, + 0.009786312500011718, + 0.009667156250003472, + 0.017498218750006345, + 0.009723062500000879, + 0.009389687500004129, + 0.009472937499992895, + 0.009430343750011616, + 0.010160031249995427, + 0.011145968749985968, + 0.0098704999999768, + 0.009897718750011109, + 0.009996031249983162, + 0.010876156249992164, + 0.010133781250004859, + 0.009841687499999807, + 0.009993750000006685, + 0.009757281250017513, + 0.009629625000002306, + 0.009746718749994443, + 0.009477437499981534, + 0.009345468750012742, + 0.009712343750010177, + 0.009389343750001444, + 0.009498437500013779, + 0.009976531250003973, + 0.010154281249981523, + 0.00970106249999958, + 0.010103374999999915, + 0.009788656250009353, + 0.009893374999990101, + 0.009575406250007745, + 0.020276656250018732, + 0.014884593749997066, + 0.014207406249994392, + 0.016918906249998145, + 0.011726937500014856, + 0.009540750000013531, + 0.01047628124999278, + 0.009838468750018592, + 0.009658187499979931, + 0.011565906249984437, + 0.010496000000017602, + 0.012347468749993595, + 0.011522562500005051, + 0.010077281249976977, + 0.009999093749996746, + 0.01156649999998649, + 0.010666062500007456, + 0.010146968749978669, + 0.010190875000006372, + 0.009883968750017402, + 0.009960531250015947, + 0.010970125000000053, + 0.010052718749989253, + 0.010102937499993914, + 0.010459343750000016, + 0.01664296874997717, + 0.010513437500009104, + 0.01648837499999445, + 0.010026437500016527, + 0.0107126250000249, + 0.010219750000004524, + 0.010431406250006603, + 0.010585406249987273, + 0.010172812500002237, + 0.010060812500000793, + 0.010583624999981112, + 0.009902312500003063, + 0.009678031249990227, + 0.00995259375000046, + 0.009753593749991296, + 0.00978734374999135, + 0.01008934374999626, + 0.009919281250006406, + 0.00992543749998731, + 0.010001156250012855, + 0.00976203125000552, + 0.009855781249996198, + 0.010294406249983012, + 0.009984156249998932, + 0.009666281250019892, + 0.009701156250002896, + 0.011831093750004129, + 0.009853031250003141, + 0.009363531249988455, + 0.010217281249992993, + 0.009289281250005388, + 0.010501656249999769, + 0.01888134374999595, + 0.011119124999993346, + 0.0110582812500013, + 0.00969612500000494, + 0.011244343750007602, + 0.010470906250020562, + 0.010055406249989574, + 0.010290625000010323, + 0.010990093750024243, + 0.010647468749994005, + 0.010024187500022208, + 0.010545906250001735, + 0.009817281250008136, + 0.00996021874999542, + 0.00986449999999195, + 0.009828499999997575, + 0.010251968749997786, + 0.010242781249985455, + 0.010209468749991402, + 0.010283781249995627, + 0.010553093750019116, + 0.010161937499987062, + 0.010197031250015698, + 0.010597781249998661, + 0.010146187499998405, + 0.010015624999994088, + 0.01002274999999031, + 0.009872000000001435, + 0.009790156250005566, + 0.016966750000023012, + 0.009550687499995547, + 0.009643124999996644, + 0.010181781249997357, + 0.009949281250015929, + 0.009873749999997017, + 0.009953593749997935, + 0.009996656249995794, + 0.00992325000001415, + 0.010166874999981701, + 0.009886625000007143, + 0.010001750000014908, + 0.010183124999997517, + 0.01073884375000489, + 0.011194750000015574, + 0.013161281249978174, + 0.009928312499994263 + ], + "edit": [ + 4.010052999999971, + 4.173447999999553, + 5.16590400000041, + 3.635920000000624, + 3.899054999999862 + ], + "sort": [ + 13.063545999999405, + 11.662688000000344, + 11.77170599999954, + 13.56706099999974, + 12.728502999998454 + ], + "filter": [ + 1.7037189999991824, + 1.6042760000000271, + 1.8507530000006227, + 1.6197350000002189, + 1.801183999999921 + ], + "multiFilter": [ + 28.004586000000927, + 16.71781699999883, + 17.566721999999572, + 21.067881000000853, + 22.44847699999991 + ], + "distinctLow": [ + 24.102616000000125, + 23.574037000000317, + 22.787529999999606, + 20.211463999999978, + 26.13400399999955 + ], + "distinctHigh": [ + 135.77427100000023, + 119.24585500000103, + 133.77108699999917, + 128.1433739999993, + 124.19873999999982 + ], + "aggregate": [ + 0.9202580000001035, + 0.9182899999996152, + 0.9022210000002815, + 0.8864809999995487, + 0.8928209999994579, + 1.010471999999936, + 1.044144999999844, + 1.113387999999759, + 1.3255970000009256, + 2.2570450000002893, + 1.9199370000005729, + 0.8714660000005097, + 0.874934999999823, + 0.9004010000007838, + 0.9052499999997963, + 0.8943770000005316, + 0.8862420000004931, + 0.8866909999997006, + 0.8852909999986878, + 0.8819839999996475, + 0.8821729999999661, + 0.8740809999999328, + 0.8910890000006475, + 0.9573399999990215, + 0.8956130000005942, + 0.8853859999999258, + 0.8837700000003679, + 0.8967450000000099, + 0.9412319999992178, + 1.0094499999995605, + 1.0951110000005428, + 0.9887510000007751, + 0.9735430000000633, + 1.0864870000004885, + 0.9718689999990602, + 0.9116089999988617, + 0.8946180000002641, + 0.8775100000002567, + 0.8812470000011672, + 0.8927650000005087, + 0.9243850000002567, + 0.9116310000008525, + 0.8810680000005959, + 0.8926559999999881, + 0.9620869999998831, + 0.9374319999988074, + 0.9573959999997896, + 1.0101269999995566, + 0.9867510000003676, + 1.0320840000003955, + 1.0785799999994197, + 1.0618239999985235, + 1.061119999998482, + 1.1068410000007134, + 1.1119650000000547, + 1.1025829999998678, + 1.1153639999993175, + 1.1291009999986272, + 1.0941560000010213, + 1.9560110000002169, + 2.76726299999973, + 1.8549800000000687, + 1.1063350000003993, + 1.0405639999989944, + 1.002269000000524, + 0.9472390000009909, + 0.9140530000004219, + 0.8945649999986927, + 0.8908670000000711, + 0.8922519999996439, + 0.8910730000006879, + 0.8926100000007864, + 0.8941309999991063, + 0.8925469999994675, + 0.8901969999988069, + 1.0258259999991424, + 0.9044020000001183, + 0.9894300000014482, + 0.8883700000005774, + 0.8483049999995274, + 0.8476399999999558, + 0.8836430000010296, + 0.886782999999923, + 0.8870070000011765, + 0.872323999999935, + 0.8318149999995512, + 0.8357739999992191, + 0.8770690000001196, + 0.8648439999997208, + 0.8358729999999923, + 0.885935000000245, + 0.926633999999467, + 0.9329359999992448, + 0.9301879999984521, + 0.8990319999993517, + 0.927799999999479, + 0.949216000000888, + 1.101846999999907, + 0.9659259999989445, + 0.9230879999995523, + 0.878564999999071, + 1.8806339999991906, + 2.1750819999997475, + 1.3225779999993392, + 0.9368690000010247, + 0.910557000001063, + 0.8952049999988958, + 0.8902490000000398, + 0.8602570000002743, + 1.0322979999982635, + 0.9214909999991505, + 0.8786959999997634, + 0.8905369999993127, + 0.8246859999999288, + 0.832935999998881, + 0.8424119999999675, + 1.6331740000005084, + 0.8698649999987538, + 0.8043189999989409, + 0.8188219999992725, + 0.8139229999997042, + 0.822306000000026, + 0.8133130000005622, + 0.8291449999996985, + 0.8357189999987895, + 0.9116979999998875, + 0.9033269999999902, + 1.0967600000003586, + 0.906860000000961, + 0.8922060000004421, + 0.8650260000013077, + 0.8563620000004448, + 0.8844339999996009, + 1.0979040000001987, + 0.998474999998507, + 1.0547480000004725, + 0.8855710000007093, + 0.8219680000001972, + 0.8298979999999574, + 0.8656250000003638, + 0.8601090000011027, + 0.8945540000004257, + 0.9528340000015305, + 1.0372729999999137, + 0.9973509999999806, + 1.1530340000008437, + 1.1954220000006899, + 1.2901380000002973, + 1.2354429999995773, + 1.1991200000011304, + 2.160212999999203, + 2.6332019999990735, + 2.4997779999994236, + 1.149370999999519, + 0.9896430000007967, + 0.9624590000003082, + 0.9249540000000707, + 1.0356580000006943, + 0.9233420000000478, + 0.9381189999985509, + 0.9292729999997391, + 0.9458230000000185, + 1.957073000001401, + 2.618222999999489, + 2.351835999999821, + 2.210850000001301, + 2.0819809999993595, + 1.6780390000003536, + 0.9217530000005354, + 0.8896359999998822, + 0.926634000001286, + 0.9193689999992785, + 0.9416130000008707, + 0.9400989999994636, + 0.9383799999995972, + 0.9379979999994248, + 0.9349230000007083, + 0.9381450000000768, + 0.9385550000006333, + 0.937195000000429, + 0.9375349999991158, + 0.9586810000000696, + 0.9653799999996409, + 0.9390109999985725, + 0.9385190000011789, + 0.8993399999999383, + 0.8779930000000604, + 0.8804099999997561, + 0.9301930000001448, + 0.9382210000003397, + 0.9348730000001524, + 0.9817979999988893, + 0.8911669999997684, + 0.9733129999985977, + 0.9058290000011766, + 0.8813520000003336, + 0.8798739999983809, + 0.879704999999376, + 0.8987239999987651, + 0.9348659999996016 + ] + }, + "1000000": { + "ingest": [ + 1173.9659549999997, + 1237.4776679999995, + 1191.4025250000013 + ], + "windowRead": [ + 0.01069090625003355, + 0.011255624999989777, + 0.010662374999924396, + 0.010577218749972417, + 0.016019062500049586, + 0.011328031249945525, + 0.010577249999982996, + 0.01013781250003376, + 0.010400000000004184, + 0.010358687500001906, + 0.010173249999979816, + 0.00931434375002027, + 0.009511843750033222, + 0.009318812500055174, + 0.013497718750045351, + 0.014714156250079213, + 0.01158128124995983, + 0.011548593750035252, + 0.012809531250013606, + 0.01223478124995836, + 0.012510968750007123, + 0.01225143750002644, + 0.011852656250084692, + 0.012159406250020766, + 0.012154218749969914, + 0.012208781250024003, + 0.011954593749919695, + 0.01192103125003996, + 0.012024874999951862, + 0.011348750000024665, + 0.011578312499977983, + 0.011837187500077562, + 0.011857624999947802, + 0.01298553124991031, + 0.012957718750044478, + 0.012816031250054039, + 0.0116325312499157, + 0.011965750000058506, + 0.01286321874999885, + 0.012154656250004336, + 0.011802562499951819, + 0.011781031250052365, + 0.01183675000004314, + 0.01173099999994065, + 0.015062031250067776, + 0.01593462499999987, + 0.015403468749923377, + 0.013611562499932006, + 0.014480343750051361, + 0.014147812500027612, + 0.014030781250085056, + 0.013693906249955035, + 0.013998031249911946, + 0.013189375000024484, + 0.013290843750041859, + 0.013764187499987202, + 0.019162749999964035, + 0.01876724999999624, + 0.019206468749985106, + 0.018930468749999818, + 0.019496624999987944, + 0.019809937499985608, + 0.014951437500030806, + 0.013206875000037144, + 0.013270531249986561, + 0.013201500000036503, + 0.012834093750029751, + 0.017981687499968757, + 0.01901115625003058, + 0.01868349999995189, + 0.01887165624998488, + 0.01879156249992775, + 0.018917812500035325, + 0.018306312499930755, + 0.012497656249934153, + 0.012609875000066495, + 0.012510343749909225, + 0.012425375000020722, + 0.014151968749956723, + 0.013685718749911757, + 0.013868218750076267, + 0.013471593749954991, + 0.013935593749920372, + 0.012975906249948821, + 0.013146656250000888, + 0.012965406249918487, + 0.013215187500009051, + 0.012742375000016182, + 0.020123843749956905, + 0.012764593750034692, + 0.012884062500006621, + 0.015798749999930806, + 0.0132781562499531, + 0.016292187499971078, + 0.018335281249960644, + 0.017881062500009648, + 0.01320256249994145, + 0.01232178124996608, + 0.012028062500007763, + 0.013294062499994652, + 0.016056000000048698, + 0.013215968750046159, + 0.012298656249981832, + 0.012270750000084263, + 0.012501843749987529, + 0.01207412500002647, + 0.012350749999995969, + 0.012056874999984757, + 0.0121329687499383, + 0.012331125000059728, + 0.013512562499954583, + 0.013525062499979867, + 0.013427531249931235, + 0.013043624999909298, + 0.013378843750047054, + 0.012833374999900116, + 0.01306546875002823, + 0.012666031249978005, + 0.013163968749950072, + 0.01290243749997444, + 0.01257265624997217, + 0.01292246875004821, + 0.012563062499907574, + 0.012543124999979227, + 0.012426187499954722, + 0.012082718749979904, + 0.012587999999936983, + 0.012080531250035165, + 0.01227971875005096, + 0.01612421874995107, + 0.011826124999970489, + 0.011852312500082007, + 0.011359218749930733, + 0.011977218750075735, + 0.011594187500008957, + 0.011651156249968153, + 0.011646468749972883, + 0.011509812499980399, + 0.011684500000001208, + 0.011705624999990505, + 0.011518187499973465, + 0.011451406249989304, + 0.012844718749988715, + 0.019037281250007254, + 0.01842799999997169, + 0.018331187499939006, + 0.018251718749979773, + 0.018333999999981643, + 0.018250125000008666, + 0.01320040625000729, + 0.012666625000065324, + 0.012885812499916938, + 0.012511406250041546, + 0.012444937500049491, + 0.012547656250035288, + 0.012619781249895823, + 0.0124604375000672, + 0.012106468749948363, + 0.015886312500015265, + 0.012883656249982778, + 0.016569124999932683, + 0.017108343750010135, + 0.017304125000009662, + 0.017559343750008338, + 0.01774606250000943, + 0.018293468749902786, + 0.01684903124998982, + 0.013294968750074077, + 0.012707750000004125, + 0.012598781249948843, + 0.01285043749999204, + 0.012191124999958447, + 0.011703312500003449, + 0.011888093750030748, + 0.012997406249951382, + 0.013207875000034619, + 0.02415306249997684, + 0.020773374999976113, + 0.019832281250046435, + 0.016626499999915723, + 0.012093468749981184, + 0.011894281249965388, + 0.011900624999952925, + 0.011679906249923988, + 0.011593187500011481, + 0.011519593749994783, + 0.011474000000021078, + 0.01109028124994893, + 0.010908656249966953, + 0.011111968750014967, + 0.010916906249917702, + 0.010669249999978092, + 0.010810687499997584, + 0.010130343750006432, + 0.010292968749922693, + 0.010720218749952437, + 0.010892375000025822, + 0.01093621875008921, + 0.010934156249959415, + 0.010065499999996064, + 0.010678406249894579, + 0.009976531250003973, + 0.010045093750022716, + 0.009943874999976288, + 0.010857999999984713, + 0.009666406249948523, + 0.011485187500056782, + 0.011952906250030537, + 0.010718375000010383, + 0.011210312499997599, + 0.010067625000033331, + 0.010163093750065855, + 0.010474218750005093, + 0.010430281249909967, + 0.009995000000003529, + 0.010172187499961183, + 0.010063343749948217, + 0.009759843749975516, + 0.010098156250023749, + 0.010045656249985768, + 0.009730218749950836, + 0.009494812500065564, + 0.011181624999949236, + 0.00982312499991167, + 0.010269750000020395, + 0.011094781249994412, + 0.012545749999958389, + 0.011337062500047068, + 0.010377968749935462, + 0.01006446874998801, + 0.010498499999926025, + 0.009969843749900065, + 0.010380062500075837, + 0.010223093750028056, + 0.010054937499944572, + 0.010174531250072505, + 0.009335437499998989, + 0.010066937500027962, + 0.010904656249977052, + 0.010931531249980253, + 0.010780062499975429, + 0.010636812500024462, + 0.010953281250067448, + 0.012119187499934014, + 0.011242156249977597, + 0.01293056250005975, + 0.015606468749979285, + 0.01252265624998472, + 0.011120187499955136, + 0.011765562500045235, + 0.01150221875002444, + 0.011587843749907734, + 0.011886968749990956, + 0.012248250000084226, + 0.012584968749933978, + 0.012127625000061926, + 0.012043875000017579, + 0.01656384374996378, + 0.011909374999959255, + 0.012170937500059154, + 0.011595687499948326, + 0.011604406250057764, + 0.011575375000006716, + 0.011581593750065622, + 0.011467593750012384, + 0.012610656249989916, + 0.011706000000003769, + 0.01161490624997441, + 0.011752656249996107, + 0.011752156250054213, + 0.012797843750036009, + 0.01300768749990766, + 0.013037593750027554, + 0.013214187500011576, + 0.012897000000066328, + 0.013200968749970343, + 0.012869593749996966, + 0.012673812499997439, + 0.012990187500008687, + 0.012513843749957232, + 0.012478281249968859, + 0.012231093749960564, + 0.012347531250043176, + 0.013135562499996922, + 0.01274443750003229, + 0.013092156249967957, + 0.013169562500024767, + 0.012400968750057473, + 0.012642812500075706, + 0.012467249999986052, + 0.012536937500044587, + 0.012435968749969106, + 0.012001062499962245, + 0.012289750000036292, + 0.023560093750006672, + 0.013085625000030632, + 0.014601937500060558, + 0.012690281250002045, + 0.012085437499990803, + 0.012031624999963242 + ], + "edit": [ + 3.9760349999996834, + 4.25178600000072, + 3.4749270000029355, + 3.9845619999978226, + 3.463607999998203 + ], + "sort": [ + 28.069706999998743, + 26.464004000001296, + 28.59472200000164, + 35.307550000001356, + 26.297256999998353 + ], + "filter": [ + 4.7609880000018165, + 3.4407759999994596, + 3.1613950000028126, + 4.185321999997541, + 4.943638000000647 + ], + "multiFilter": [ + 35.16705499999807, + 35.35860599999796, + 37.69713899999988, + 37.61641999999847, + 35.75274200000058 + ], + "distinctLow": [ + 48.561477999999624, + 39.57513699999981, + 44.92129299999942, + 46.86954700000206, + 43.21398000000045 + ], + "distinctHigh": [ + 265.66725099999894, + 291.192919000001, + 271.54598500000066, + 275.532142, + 276.56591299999855 + ], + "aggregate": [ + 2.885236000001896, + 3.194916000000376, + 2.786258000000089, + 2.315245000001596, + 2.307851000001392, + 2.252363999999943, + 2.2491210000007413, + 2.2513440000002447, + 2.668130000001838, + 2.2068319999998494, + 2.459273000000394, + 2.1920179999979155, + 2.1947760000002745, + 2.190028999997594, + 2.2422349999978906, + 2.267792999999074, + 2.2559569999975793, + 2.2381700000005367, + 2.197642999999516, + 2.1780109999999695, + 2.1985459999996237, + 2.1916609999971115, + 2.2289009999985865, + 2.2119070000007923, + 2.254306999999244, + 2.253865999999107, + 2.2540809999991325, + 2.200845000003028, + 2.249737999998615, + 2.2734459999992396, + 2.2529059999978926, + 2.2451339999970514, + 2.242173000002367, + 2.241206000002421, + 2.2396279999993567, + 2.185203000000911, + 2.2389040000016394, + 2.202152000001661, + 2.1903980000024603, + 2.189946999998938, + 2.181421000001137, + 2.1926370000001043, + 2.1889719999999215, + 2.1956130000035046, + 2.271229999998468, + 2.2805260000022827, + 2.246579999999085, + 2.2532739999987825, + 2.2412619999995513, + 2.253719000000274, + 2.2533320000002277, + 2.2576629999966826, + 2.244469000001118, + 2.2262029999983497, + 2.5348610000000917, + 2.1834170000001905, + 2.2008810000006633, + 2.1903020000027027, + 2.2613710000005085, + 2.275603999998566, + 2.251291000000492, + 2.187821999999869, + 2.1792180000011285, + 2.9483839999993506, + 3.0574169999999867, + 2.291140000001178, + 2.308063000000402, + 2.242288000001281, + 2.265175000000454, + 2.265638000000763, + 2.2437190000018745, + 2.190554000000702, + 2.2078270000019984, + 2.255960000002233, + 2.3711719999992056, + 2.1904620000022987, + 2.199176999998599, + 2.1990630000000237, + 2.2535419999985606, + 2.2759990000013204, + 2.4591230000005453, + 2.3531130000010307, + 2.27734799999962, + 2.239274999999907, + 2.2253190000010363, + 2.182002999998076, + 2.219410000001517, + 2.25242900000012, + 3.604071000001568, + 2.612135000003036, + 2.3441810000003898, + 2.3162499999998545, + 2.27583500000037, + 2.2116600000008475, + 2.207980999999563, + 2.185249999998632, + 2.1798970000018016, + 2.1278219999985595, + 2.137090000000171, + 2.1747340000001714, + 2.1916810000002442, + 2.195521000001463, + 2.1814420000009704, + 2.1975820000006934, + 2.189351999997598, + 2.1971410000005562, + 2.1854480000001786, + 2.255761000000348, + 2.284510000001319, + 2.2419470000022557, + 2.2545070000014675, + 2.245097999999416, + 2.241688999998587, + 2.2471800000021176, + 2.241624000002048, + 2.195264000001771, + 2.2315380000000005, + 2.1857249999993655, + 2.2965770000009798, + 2.1261860000013257, + 2.133463000001939, + 2.1336320000009437, + 2.1430209999998624, + 2.1669240000010177, + 2.180247000000236, + 2.1836979999970936, + 2.18478099999993, + 2.1903439999987313, + 2.1996330000001763, + 2.1877889999996114, + 2.186509000002843, + 2.1940989999966405, + 2.189512000000832, + 2.1935539999976754, + 2.190755999999965, + 2.1869449999976496, + 2.206970999999612, + 2.198606000001746, + 2.194424000001163, + 2.270556999999826, + 2.2485039999992296, + 2.199155000002065, + 2.1844160000000556, + 2.1901969999998983, + 2.1940919999979087, + 2.2409609999995155, + 2.2069230000015523, + 2.186015999999654, + 2.1981940000005125, + 2.156281999999919, + 2.175188999997772, + 2.1845439999997325, + 2.1867779999993218, + 2.1926349999994272, + 2.187004999999772, + 2.186520000002929, + 2.1881949999988137, + 2.184573000002274, + 2.2252359999984037, + 2.1888099999996484, + 2.1924030000009225, + 2.2435939999995753, + 2.6585420000010345, + 2.4211189999987255, + 2.2085189999997965, + 2.2016589999984717, + 2.234741000000213, + 2.265931999998429, + 2.2520709999989776, + 2.2531119999985094, + 2.237096000000747, + 2.2485799999994924, + 2.248486000000412, + 2.2483959999990475, + 2.1807039999985136, + 2.29545799999687, + 2.1956480000008014, + 2.2122890000027837, + 2.249619000001985, + 2.182394999999815, + 2.1858380000012403, + 2.1901489999982005, + 2.179305999998178, + 2.143912999999884, + 2.127738999999565, + 2.185592000001634, + 2.732097000000067, + 2.2695310000017344, + 2.189925000002404, + 2.2012380000014673, + 2.1870529999978316, + 2.1932419999975536, + 2.2091359999976703, + 2.8051980000018375, + 2.432172000000719, + 2.3221529999973427, + 2.3178740000003017, + 2.305305000001681, + 2.263727999998082, + 2.2736949999998615 + ] + } + } + } + ], + "formula": [ + { + "repetition": 1, + "captureSha256": "0a7249bcae62739e89a682c4bfb16b3a0eff247fe4551a363ccb78e7d8f577cc", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:18:58.856Z" + }, + "source": { + "protocol": "formula-benchmark-v2", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "files": { + "bench/package.json": "203206a590058cdc8c6a2c9f6741ff4c1407080734cc967fd7b97754dae7e8c1", + "bench/src/formula-bench.ts": "814dda4c759a694f671987b344dd57900d08a3a2896fe8733468aab78f984272", + "bench/src/formula-dataset.ts": "2e7d91f025d2447abb33efa7fa7d8b90a0e8787a9b9c54fe1064b82520ac079d", + "bench/src/gate-protocol.ts": "b681b1d0639c7018ab1af84bf38e7f48cd4a4544659bfbd337ca9e7512bab61b", + "bench/src/protocol-meta.ts": "229884d4d408527d6bb9a0983c92dbffe47b0f2b64ca32316494f22056da7aa6", + "bench/src/stats.ts": "4659c44455c7beb012ce355e9c5863c7e2d7273faf377b43337ba7e4de4c000f", + "bun.lock": "55ea174bc73aca5c016c4e85b7ac718e8605e54fd45b2ef4a736f0ee9480ee0b", + "packages/wasm/pkg/sheetwrite_wasm.js": "560c5416f6175a4a69d566fba895c9375dda064b3ef00c99e8a3410b5925d76f", + "packages/wasm/pkg/sheetwrite_wasm_bg.wasm": "d0a73eb34ef002a017900528e0c63c0d5597f13f0d8f58da0c0b91730160eec2" + }, + "digest": "124fd1dc19b80496ffdbcba112d2a01ab0974d12a826c965eaf7dcce30fd67ce" + }, + "workloads": [ + { + "id": "independent-parse-load", + "size": 1000, + "samplesMs": [ + 1.893195999999996, + 1.2927200000000028, + 2.249495000000003, + 1.9831179999999975, + 1.1429630000000088 + ], + "allocationSamples": [ + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-first-recompute", + "size": 1000, + "samplesMs": [ + 0.7318520000000035, + 0.7092710000000011, + 0.6800700000000006, + 0.7480800000000016, + 1.3661500000000046 + ], + "allocationSamples": [ + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-parse-load", + "size": 10000, + "samplesMs": [ + 7.950014999999993, + 7.942511999999994, + 7.282154999999989, + 7.224086999999997, + 7.688245999999992 + ], + "allocationSamples": [ + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-first-recompute", + "size": 10000, + "samplesMs": [ + 5.534831999999994, + 5.585107999999991, + 8.775660000000016, + 5.675243999999964, + 5.793025999999998 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-parse-load", + "size": 100000, + "samplesMs": [ + 65.51802500000008, + 67.99880699999994, + 76.69020099999989, + 65.24886900000001, + 66.61461099999997 + ], + "allocationSamples": [ + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "independent-first-recompute", + "size": 100000, + "samplesMs": [ + 120.48893700000008, + 125.63248899999962, + 114.1869099999999, + 119.17407899999989, + 114.387925 + ], + "allocationSamples": [ + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "linear-chain", + "size": 8, + "samplesMs": [ + 0.04198900000028516, + 0.019090000000232976, + 0.016251000000011118, + 0.016432999999778986, + 0.01586300000008123 + ], + "allocationSamples": [ + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 8 + }, + { + "id": "linear-chain", + "size": 16, + "samplesMs": [ + 0.032730999999785126, + 0.024813999999878433, + 0.025480000000243308, + 0.024754999999913707, + 0.02463599999964572 + ], + "allocationSamples": [ + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 16 + }, + { + "id": "linear-chain", + "size": 32, + "samplesMs": [ + 0.06086400000003778, + 0.08151799999996001, + 0.07706999999982145, + 0.070835999999872, + 0.06668200000012803 + ], + "allocationSamples": [ + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 32 + }, + { + "id": "linear-chain", + "size": 64, + "samplesMs": [ + 0.1206769999998869, + 0.1322800000002644, + 0.12012100000038117, + 0.12125699999978679, + 0.12647400000014386 + ], + "allocationSamples": [ + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 64 + }, + { + "id": "wide-fan-out-edit", + "size": 1000, + "samplesMs": [ + 0.9957650000001195, + 0.36326199999984965, + 0.3369460000003528, + 0.49807400000008784, + 0.34741699999995035 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "wide-fan-out-edit", + "size": 100000, + "samplesMs": [ + 62.205754999999954, + 61.38371200000029, + 62.834499000000505, + 69.7835270000005, + 60.97207400000025 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "diamond-edit", + "size": 32, + "samplesMs": [ + 0.09897000000000844, + 0.08499200000005658, + 0.09353199999986828, + 0.08955400000013469, + 0.08812400000078924 + ], + "allocationSamples": [ + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 21474836477 + }, + { + "id": "shared-range-edit", + "size": 1000, + "samplesMs": [ + 0.5642700000007608, + 0.5623350000005303, + 0.5480319999996937, + 0.566964999999982, + 0.49687099999937345 + ], + "allocationSamples": [ + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 101 + }, + { + "id": "distinct-range-edit", + "size": 1000, + "samplesMs": [ + 0.020689999999376596, + 0.013067999999293534, + 0.01270600000043487, + 0.012580999999954656, + 0.011867000000165717 + ], + "allocationSamples": [ + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "11:10" + }, + { + "id": "cross-sheet-range-edit", + "size": 1000, + "samplesMs": [ + 0.5585569999993822, + 0.5315220000002228, + 0.5225230000005467, + 0.523377000000437, + 0.6898779999992257 + ], + "allocationSamples": [ + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100 + }, + { + "id": "scalar-edit-affects-0", + "size": 1000, + "samplesMs": [ + 0.0028819999997722334, + 0.0024890000004234025, + 0.002650999999787018, + 0.002727999999478925, + 0.002405000000180735 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1001 + }, + { + "id": "scalar-edit-affects-1", + "size": 1, + "samplesMs": [ + 0.003185999999914202, + 0.008335999999872001, + 0.006701999999677355, + 0.006219999999302672, + 0.0075679999999920256 + ], + "allocationSamples": [ + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 11 + }, + { + "id": "scalar-edit-affects-1000", + "size": 1000, + "samplesMs": [ + 0.35448099999939586, + 0.3297240000001693, + 0.3865330000007816, + 0.3420989999995072, + 0.34827099999984057 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "scalar-edit-affects-100000", + "size": 100000, + "samplesMs": [ + 63.75166300000001, + 62.46538000000055, + 61.83054100000027, + 65.87496199999987, + 68.65594899999996 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "topology-remove-add", + "size": 10000, + "samplesMs": [ + 14.087454000000434, + 10.423009999999522, + 13.541388000000552, + 9.880208999999923, + 9.960508000000118 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "2:10000" + }, + { + "id": "cycles", + "size": 1000, + "samplesMs": [ + 1.5062740000003032, + 1.410091000000648, + 1.4768530000001192, + 2.403346999999485, + 1.826788999999735 + ], + "allocationSamples": [ + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#CYCLE!" + }, + { + "id": "removed-sheet-ref", + "size": 1000, + "samplesMs": [ + 0.5358009999999922, + 0.5204180000000633, + 0.550864000000729, + 0.9512389999999868, + 0.500622999999905 + ], + "allocationSamples": [ + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#REF!" + }, + { + "id": "error-propagation", + "size": 1000, + "samplesMs": [ + 1.5547170000008919, + 1.4971319999995103, + 0.7624560000003839, + 0.738390999999865, + 0.7727190000005066 + ], + "allocationSamples": [ + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#DIV/0!" + }, + { + "id": "criteria-range-edit", + "size": 100000, + "samplesMs": [ + 5.55685800000083, + 7.455552000000353, + 9.62620700000025, + 6.026842000000215, + 6.95407299999988 + ], + "allocationSamples": [ + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 50001 + }, + { + "id": "lookup-range-edit", + "size": 100000, + "samplesMs": [ + 6.32702800000061, + 5.196133000000373, + 5.291493000000628, + 5.640526000000136, + 5.761154000000715 + ], + "allocationSamples": [ + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 199998 + }, + { + "id": "spill-filter-resize", + "size": 100000, + "samplesMs": [ + 32.1466419999997, + 31.17312099999981, + 32.822041000000354, + 30.575184999999692, + 31.1522130000003 + ], + "allocationSamples": [ + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + } + ], + "output": "99999:0" + }, + { + "id": "sumproduct-vector-edit", + "size": 100000, + "samplesMs": [ + 6.344764000000396, + 6.044081000000006, + 6.038461999999527, + 5.919976000000133, + 5.938213999999789 + ], + "allocationSamples": [ + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100004 + }, + { + "id": "sumproduct-matrix-edit", + "size": 100000, + "samplesMs": [ + 5.352431999999681, + 4.515285999999833, + 4.979714000000058, + 5.048084000000017, + 5.357223999999405 + ], + "allocationSamples": [ + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 200004 + }, + { + "id": "criteria-multi-range-edit", + "size": 100000, + "samplesMs": [ + 16.1234629999999, + 16.167671999999584, + 16.958894999999757, + 15.747143000000506, + 16.715800999999374 + ], + "allocationSamples": [ + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + } + ], + "output": 74999 + }, + { + "id": "unicode-text-date-edit", + "size": 1000, + "samplesMs": [ + 1.329713000000993, + 1.243164000001343, + 1.1672070000004169, + 1.2012099999992643, + 1.1630069999991974 + ], + "allocationSamples": [ + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 173864 + }, + { + "id": "percentile-covariance", + "size": 100000, + "samplesMs": [ + 10.189204000000245, + 11.16130399999929, + 11.834629999999379, + 9.881783000000723, + 8.662446000000273 + ], + "allocationSamples": [ + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1666756666.6 + }, + { + "id": "let-reuse-edit", + "size": 100000, + "samplesMs": [ + 3.3799099999996542, + 5.842097999999169, + 3.7870349999993778, + 4.807156999999279, + 3.253160000000207 + ], + "allocationSamples": [ + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 300003 + }, + { + "id": "iterative-finance", + "size": 1000, + "samplesMs": [ + 3.469858000000386, + 3.3997479999998177, + 3.4625169999999343, + 3.431163999999626, + 3.4164010000004055 + ], + "allocationSamples": [ + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 0.16807260450028427 + }, + { + "id": "incremental-dependency-closure-edit", + "size": 100000, + "samplesMs": [ + 0.03324400000019523, + 0.02114900000015041, + 0.01976999999897089, + 0.01800600000024133, + 0.017538000000058673 + ], + "allocationSamples": [ + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "12:100001" + }, + { + "id": "spill-sequence-admission", + "size": 100000, + "samplesMs": [ + 13.413534000001164, + 12.713991000000533, + 13.600908000000345, + 13.85888999999952, + 13.414721999999529 + ], + "allocationSamples": [ + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + } + ], + "output": "1:100000:0" + } + ] + }, + { + "repetition": 2, + "captureSha256": "a92b284034ad2159acc8ee1a5faad0e50dc6e75353ce491ace7201d7cadd79d5", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:45:46.706Z" + }, + "source": { + "protocol": "formula-benchmark-v2", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "files": { + "bench/package.json": "203206a590058cdc8c6a2c9f6741ff4c1407080734cc967fd7b97754dae7e8c1", + "bench/src/formula-bench.ts": "814dda4c759a694f671987b344dd57900d08a3a2896fe8733468aab78f984272", + "bench/src/formula-dataset.ts": "2e7d91f025d2447abb33efa7fa7d8b90a0e8787a9b9c54fe1064b82520ac079d", + "bench/src/gate-protocol.ts": "b681b1d0639c7018ab1af84bf38e7f48cd4a4544659bfbd337ca9e7512bab61b", + "bench/src/protocol-meta.ts": "229884d4d408527d6bb9a0983c92dbffe47b0f2b64ca32316494f22056da7aa6", + "bench/src/stats.ts": "4659c44455c7beb012ce355e9c5863c7e2d7273faf377b43337ba7e4de4c000f", + "bun.lock": "55ea174bc73aca5c016c4e85b7ac718e8605e54fd45b2ef4a736f0ee9480ee0b", + "packages/wasm/pkg/sheetwrite_wasm.js": "560c5416f6175a4a69d566fba895c9375dda064b3ef00c99e8a3410b5925d76f", + "packages/wasm/pkg/sheetwrite_wasm_bg.wasm": "d0a73eb34ef002a017900528e0c63c0d5597f13f0d8f58da0c0b91730160eec2" + }, + "digest": "124fd1dc19b80496ffdbcba112d2a01ab0974d12a826c965eaf7dcce30fd67ce" + }, + "workloads": [ + { + "id": "independent-parse-load", + "size": 1000, + "samplesMs": [ + 2.641811000000004, + 1.8225550000000013, + 1.980719999999998, + 0.899521, + 0.8367920000000026 + ], + "allocationSamples": [ + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-first-recompute", + "size": 1000, + "samplesMs": [ + 1.6202920000000063, + 0.8057150000000064, + 0.7848719999999929, + 0.7955690000000004, + 1.472262999999998 + ], + "allocationSamples": [ + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-parse-load", + "size": 10000, + "samplesMs": [ + 9.836331999999985, + 7.027897999999993, + 6.823497000000003, + 7.579423999999989, + 13.40664000000001 + ], + "allocationSamples": [ + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-first-recompute", + "size": 10000, + "samplesMs": [ + 7.675085000000024, + 7.878632999999979, + 7.285495999999966, + 8.156733000000031, + 6.9665919999999915 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-parse-load", + "size": 100000, + "samplesMs": [ + 75.291607, + 70.50690200000008, + 74.91374999999994, + 66.37654599999996, + 63.366040999999996 + ], + "allocationSamples": [ + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "independent-first-recompute", + "size": 100000, + "samplesMs": [ + 117.27352199999996, + 119.46305200000006, + 111.03007400000024, + 119.51998700000013, + 121.57820700000002 + ], + "allocationSamples": [ + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "linear-chain", + "size": 8, + "samplesMs": [ + 0.05345999999963169, + 0.02466999999978725, + 0.0178169999999227, + 0.016031000000111817, + 0.016224999999849388 + ], + "allocationSamples": [ + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 8 + }, + { + "id": "linear-chain", + "size": 16, + "samplesMs": [ + 0.05224699999962468, + 0.0417290000000321, + 0.03853899999967325, + 0.03866299999981493, + 0.038634000000001834 + ], + "allocationSamples": [ + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 16 + }, + { + "id": "linear-chain", + "size": 32, + "samplesMs": [ + 0.07266400000025897, + 0.06850699999995413, + 0.07067999999981112, + 0.06808700000010504, + 0.07067099999994753 + ], + "allocationSamples": [ + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 32 + }, + { + "id": "linear-chain", + "size": 64, + "samplesMs": [ + 0.12860300000011193, + 0.14214200000014898, + 0.11901099999977305, + 0.11701399999992645, + 0.11976000000004206 + ], + "allocationSamples": [ + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 64 + }, + { + "id": "wide-fan-out-edit", + "size": 1000, + "samplesMs": [ + 0.7208789999999681, + 0.32649799999990137, + 0.3770879999997305, + 0.3249489999998332, + 0.47317199999997683 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "wide-fan-out-edit", + "size": 100000, + "samplesMs": [ + 65.33202200000005, + 64.88058799999999, + 61.7792529999997, + 71.67542400000002, + 62.27090099999987 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "diamond-edit", + "size": 32, + "samplesMs": [ + 0.11038899999948626, + 0.09537999999975, + 0.09751400000004651, + 0.09219500000017433, + 0.09310300000015559 + ], + "allocationSamples": [ + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 21474836477 + }, + { + "id": "shared-range-edit", + "size": 1000, + "samplesMs": [ + 0.5673999999999069, + 0.642851999999948, + 0.6710310000007667, + 0.5249699999994846, + 0.5064360000005763 + ], + "allocationSamples": [ + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 101 + }, + { + "id": "distinct-range-edit", + "size": 1000, + "samplesMs": [ + 0.02384799999981624, + 0.020846000000346976, + 0.019204000000172528, + 0.012561000000459899, + 0.012349999999969441 + ], + "allocationSamples": [ + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "11:10" + }, + { + "id": "cross-sheet-range-edit", + "size": 1000, + "samplesMs": [ + 0.5665360000002693, + 0.5391289999997753, + 0.5613270000003467, + 0.5347410000003947, + 0.6020950000001903 + ], + "allocationSamples": [ + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100 + }, + { + "id": "scalar-edit-affects-0", + "size": 1000, + "samplesMs": [ + 0.005304000000251108, + 0.005126000000018394, + 0.0043319999995219405, + 0.002763999999842781, + 0.0025620000005801558 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1001 + }, + { + "id": "scalar-edit-affects-1", + "size": 1, + "samplesMs": [ + 0.003117999999631138, + 0.0027919999993173406, + 0.002484999999978754, + 0.002645999999913329, + 0.0033990000001722365 + ], + "allocationSamples": [ + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 11 + }, + { + "id": "scalar-edit-affects-1000", + "size": 1000, + "samplesMs": [ + 0.45273399999950925, + 0.6897090000002208, + 0.350879999999961, + 0.4626349999998638, + 0.38368999999966036 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "scalar-edit-affects-100000", + "size": 100000, + "samplesMs": [ + 64.9473710000002, + 66.35942100000011, + 72.28452199999992, + 64.32496399999945, + 65.00891299999967 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "topology-remove-add", + "size": 10000, + "samplesMs": [ + 9.505444000000352, + 9.675252, + 9.039824999999837, + 9.248585999999705, + 8.962276000000202 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "2:10000" + }, + { + "id": "cycles", + "size": 1000, + "samplesMs": [ + 2.5165199999992183, + 1.5241949999999633, + 1.4033429999999498, + 1.7580539999999019, + 1.4171159999996235 + ], + "allocationSamples": [ + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#CYCLE!" + }, + { + "id": "removed-sheet-ref", + "size": 1000, + "samplesMs": [ + 0.43866500000058295, + 0.4172200000002704, + 0.42539099999976315, + 0.47360500000013417, + 0.42182099999990896 + ], + "allocationSamples": [ + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#REF!" + }, + { + "id": "error-propagation", + "size": 1000, + "samplesMs": [ + 0.7962959999995292, + 0.7582380000003468, + 0.8263930000002802, + 0.828454999999849, + 1.0298570000004474 + ], + "allocationSamples": [ + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#DIV/0!" + }, + { + "id": "criteria-range-edit", + "size": 100000, + "samplesMs": [ + 5.245232000000215, + 5.53306000000066, + 5.234633000000031, + 5.427056999999877, + 5.2357529999999315 + ], + "allocationSamples": [ + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 50001 + }, + { + "id": "lookup-range-edit", + "size": 100000, + "samplesMs": [ + 5.910255000000689, + 5.94746799999939, + 5.642801999999392, + 5.905236999999943, + 5.577565000000504 + ], + "allocationSamples": [ + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 199998 + }, + { + "id": "spill-filter-resize", + "size": 100000, + "samplesMs": [ + 27.506860000000415, + 29.26227000000017, + 28.5843789999999, + 32.15817599999991, + 29.337946999999986 + ], + "allocationSamples": [ + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + } + ], + "output": "99999:0" + }, + { + "id": "sumproduct-vector-edit", + "size": 100000, + "samplesMs": [ + 6.410552999999709, + 5.275733999999829, + 6.22568500000034, + 6.100209999999606, + 7.403976999999941 + ], + "allocationSamples": [ + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100004 + }, + { + "id": "sumproduct-matrix-edit", + "size": 100000, + "samplesMs": [ + 8.68536099999983, + 5.190298999999868, + 5.456215000000157, + 5.18515699999989, + 5.463441000000785 + ], + "allocationSamples": [ + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 200004 + }, + { + "id": "criteria-multi-range-edit", + "size": 100000, + "samplesMs": [ + 13.93062800000007, + 15.60837199999969, + 13.87643399999979, + 13.6230570000007, + 15.196823999999651 + ], + "allocationSamples": [ + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + } + ], + "output": 74999 + }, + { + "id": "unicode-text-date-edit", + "size": 1000, + "samplesMs": [ + 1.909802000000127, + 1.1740600000002814, + 1.1941170000000056, + 2.3052959999995437, + 1.247895000000426 + ], + "allocationSamples": [ + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 173864 + }, + { + "id": "percentile-covariance", + "size": 100000, + "samplesMs": [ + 12.130707000000257, + 8.39110200000141, + 9.549974999999904, + 10.369095000000016, + 10.870132000000012 + ], + "allocationSamples": [ + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1666756666.6 + }, + { + "id": "let-reuse-edit", + "size": 100000, + "samplesMs": [ + 4.0175080000008165, + 3.51253799999904, + 3.5488249999998516, + 4.107890999999654, + 4.325033999999505 + ], + "allocationSamples": [ + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 300003 + }, + { + "id": "iterative-finance", + "size": 1000, + "samplesMs": [ + 4.02657999999974, + 3.9694990000007238, + 6.4632760000004055, + 3.6387009999998554, + 4.030974000001152 + ], + "allocationSamples": [ + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 0.16807260450028427 + }, + { + "id": "incremental-dependency-closure-edit", + "size": 100000, + "samplesMs": [ + 0.03844299999946088, + 0.024439999999231077, + 0.01944999999977881, + 0.023962999999639578, + 0.019264999998995336 + ], + "allocationSamples": [ + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "12:100001" + }, + { + "id": "spill-sequence-admission", + "size": 100000, + "samplesMs": [ + 13.858033999998952, + 14.192857000000004, + 13.481136000000333, + 13.546282000001156, + 13.58076599999913 + ], + "allocationSamples": [ + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + } + ], + "output": "1:100000:0" + } + ] + }, + { + "repetition": 3, + "captureSha256": "7b029739f0e0ee6b4dad022830c1e573fd9b576e3a05689126ea5e07bac47449", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:56:17.590Z" + }, + "source": { + "protocol": "formula-benchmark-v2", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "files": { + "bench/package.json": "203206a590058cdc8c6a2c9f6741ff4c1407080734cc967fd7b97754dae7e8c1", + "bench/src/formula-bench.ts": "814dda4c759a694f671987b344dd57900d08a3a2896fe8733468aab78f984272", + "bench/src/formula-dataset.ts": "2e7d91f025d2447abb33efa7fa7d8b90a0e8787a9b9c54fe1064b82520ac079d", + "bench/src/gate-protocol.ts": "b681b1d0639c7018ab1af84bf38e7f48cd4a4544659bfbd337ca9e7512bab61b", + "bench/src/protocol-meta.ts": "229884d4d408527d6bb9a0983c92dbffe47b0f2b64ca32316494f22056da7aa6", + "bench/src/stats.ts": "4659c44455c7beb012ce355e9c5863c7e2d7273faf377b43337ba7e4de4c000f", + "bun.lock": "55ea174bc73aca5c016c4e85b7ac718e8605e54fd45b2ef4a736f0ee9480ee0b", + "packages/wasm/pkg/sheetwrite_wasm.js": "560c5416f6175a4a69d566fba895c9375dda064b3ef00c99e8a3410b5925d76f", + "packages/wasm/pkg/sheetwrite_wasm_bg.wasm": "d0a73eb34ef002a017900528e0c63c0d5597f13f0d8f58da0c0b91730160eec2" + }, + "digest": "124fd1dc19b80496ffdbcba112d2a01ab0974d12a826c965eaf7dcce30fd67ce" + }, + "workloads": [ + { + "id": "independent-parse-load", + "size": 1000, + "samplesMs": [ + 2.6205110000000005, + 0.9905809999999988, + 3.7217470000000006, + 1.6024189999999976, + 1.2024389999999983 + ], + "allocationSamples": [ + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-first-recompute", + "size": 1000, + "samplesMs": [ + 0.8237749999999977, + 0.8602159999999941, + 1.098994999999988, + 0.7915670000000006, + 0.6771949999999975 + ], + "allocationSamples": [ + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-parse-load", + "size": 10000, + "samplesMs": [ + 10.580421999999999, + 7.65242600000002, + 8.846782000000019, + 7.7343740000000025, + 7.272172999999981 + ], + "allocationSamples": [ + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-first-recompute", + "size": 10000, + "samplesMs": [ + 6.325011000000018, + 6.757024000000001, + 6.643358999999975, + 7.455221999999992, + 6.119826999999987 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-parse-load", + "size": 100000, + "samplesMs": [ + 66.97629000000006, + 75.29753500000004, + 64.43901699999992, + 77.718257, + 79.46572300000003 + ], + "allocationSamples": [ + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "independent-first-recompute", + "size": 100000, + "samplesMs": [ + 120.22800099999995, + 114.20407900000009, + 119.01392899999973, + 125.10242999999991, + 116.26178299999992 + ], + "allocationSamples": [ + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "linear-chain", + "size": 8, + "samplesMs": [ + 0.06558499999982814, + 0.03601200000002791, + 0.02630700000008801, + 0.025821999999607215, + 0.034848000000238244 + ], + "allocationSamples": [ + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 8 + }, + { + "id": "linear-chain", + "size": 16, + "samplesMs": [ + 0.028236999999990076, + 0.022559999999884894, + 0.03871399999979985, + 0.03401199999962046, + 0.0334499999999025 + ], + "allocationSamples": [ + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 16 + }, + { + "id": "linear-chain", + "size": 32, + "samplesMs": [ + 0.06376099999988583, + 0.059504000000288215, + 0.06168200000001889, + 0.056894999999713036, + 0.06077300000015384 + ], + "allocationSamples": [ + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 32 + }, + { + "id": "linear-chain", + "size": 64, + "samplesMs": [ + 0.07518400000026304, + 0.14766700000018318, + 0.12822099999993952, + 0.11607499999990978, + 0.11784000000034212 + ], + "allocationSamples": [ + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 64 + }, + { + "id": "wide-fan-out-edit", + "size": 1000, + "samplesMs": [ + 0.33828399999993053, + 0.36038799999960247, + 0.47794800000019677, + 0.3508130000000165, + 0.43182100000012724 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "wide-fan-out-edit", + "size": 100000, + "samplesMs": [ + 61.68009200000006, + 64.72716600000012, + 69.55895999999939, + 64.17630999999983, + 66.52621900000031 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "diamond-edit", + "size": 32, + "samplesMs": [ + 0.12306199999966339, + 0.10399000000052183, + 0.1847490000000107, + 0.17550300000038987, + 0.11407599999984086 + ], + "allocationSamples": [ + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 21474836477 + }, + { + "id": "shared-range-edit", + "size": 1000, + "samplesMs": [ + 0.5756940000001123, + 0.565813000000162, + 0.5360160000000178, + 0.5305550000002768, + 0.5381680000000415 + ], + "allocationSamples": [ + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 101 + }, + { + "id": "distinct-range-edit", + "size": 1000, + "samplesMs": [ + 0.022449000000051456, + 0.0247190000000046, + 0.013584000000264496, + 0.01306899999963207, + 0.013246000000435743 + ], + "allocationSamples": [ + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "11:10" + }, + { + "id": "cross-sheet-range-edit", + "size": 1000, + "samplesMs": [ + 0.564476000000468, + 0.7082849999997052, + 0.5219500000002881, + 0.5359579999994821, + 0.5341159999998126 + ], + "allocationSamples": [ + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100 + }, + { + "id": "scalar-edit-affects-0", + "size": 1000, + "samplesMs": [ + 0.003378000000338943, + 0.0039240000005520415, + 0.0026180000004387693, + 0.0029990000002726447, + 0.0020859999995082035 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1001 + }, + { + "id": "scalar-edit-affects-1", + "size": 1, + "samplesMs": [ + 0.009420999999747437, + 0.007917999999335734, + 0.007916000000477652, + 0.0066969999998036656, + 0.004791000000295753 + ], + "allocationSamples": [ + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 11 + }, + { + "id": "scalar-edit-affects-1000", + "size": 1000, + "samplesMs": [ + 0.34083000000009633, + 0.6717979999993986, + 0.33799199999975826, + 0.41056599999956234, + 0.5046190000002753 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "scalar-edit-affects-100000", + "size": 100000, + "samplesMs": [ + 72.01823400000012, + 66.60932500000035, + 67.98934099999951, + 68.65650399999959, + 70.71188099999927 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "topology-remove-add", + "size": 10000, + "samplesMs": [ + 11.703079000000798, + 9.041198999999324, + 8.645558999999594, + 9.051661000000422, + 11.024022999999943 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "2:10000" + }, + { + "id": "cycles", + "size": 1000, + "samplesMs": [ + 1.7826020000002245, + 1.6903019999999742, + 1.4947210000000268, + 1.4387449999994715, + 1.7333579999994981 + ], + "allocationSamples": [ + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#CYCLE!" + }, + { + "id": "removed-sheet-ref", + "size": 1000, + "samplesMs": [ + 0.7431450000003679, + 0.47413500000038766, + 0.45294300000023213, + 0.5494109999999637, + 0.5076430000008259 + ], + "allocationSamples": [ + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#REF!" + }, + { + "id": "error-propagation", + "size": 1000, + "samplesMs": [ + 0.7875699999995049, + 0.7401780000000144, + 0.7682269999995697, + 0.7369769999995697, + 0.7724990000006073 + ], + "allocationSamples": [ + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#DIV/0!" + }, + { + "id": "criteria-range-edit", + "size": 100000, + "samplesMs": [ + 6.153918999999405, + 6.850545999999667, + 6.881680999999844, + 6.638324999999895, + 6.315421000000242 + ], + "allocationSamples": [ + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 50001 + }, + { + "id": "lookup-range-edit", + "size": 100000, + "samplesMs": [ + 6.221000999999887, + 5.672304000000622, + 5.4763980000006995, + 5.552513999999974, + 5.458061000000271 + ], + "allocationSamples": [ + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 199998 + }, + { + "id": "spill-filter-resize", + "size": 100000, + "samplesMs": [ + 27.09572599999956, + 27.052451999999903, + 31.536301999999523, + 33.57234999999946, + 27.515308000000005 + ], + "allocationSamples": [ + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + } + ], + "output": "99999:0" + }, + { + "id": "sumproduct-vector-edit", + "size": 100000, + "samplesMs": [ + 5.75595500000054, + 6.235625000000255, + 5.037710999999945, + 6.625833000000057, + 5.966167999999925 + ], + "allocationSamples": [ + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100004 + }, + { + "id": "sumproduct-matrix-edit", + "size": 100000, + "samplesMs": [ + 5.380133999999998, + 8.409002999999757, + 5.005866999999853, + 5.326522999999725, + 5.027011999999559 + ], + "allocationSamples": [ + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 200004 + }, + { + "id": "criteria-multi-range-edit", + "size": 100000, + "samplesMs": [ + 13.286855000000287, + 16.559197999999924, + 16.958442000000105, + 14.151502000000619, + 13.899215999999797 + ], + "allocationSamples": [ + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + } + ], + "output": 74999 + }, + { + "id": "unicode-text-date-edit", + "size": 1000, + "samplesMs": [ + 1.4323150000000169, + 1.377198000000135, + 1.413511999999173, + 1.8694250000007742, + 1.3122849999999744 + ], + "allocationSamples": [ + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 173864 + }, + { + "id": "percentile-covariance", + "size": 100000, + "samplesMs": [ + 12.953201999998782, + 7.952981999998883, + 8.835786999999982, + 8.832319999999527, + 10.294670999999653 + ], + "allocationSamples": [ + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1666756666.6 + }, + { + "id": "let-reuse-edit", + "size": 100000, + "samplesMs": [ + 4.333823000000848, + 4.545518000000811, + 6.228758999999627, + 4.216291999999157, + 4.388761000000159 + ], + "allocationSamples": [ + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 300003 + }, + { + "id": "iterative-finance", + "size": 1000, + "samplesMs": [ + 3.490433999999368, + 3.4098979999998846, + 3.498764999998457, + 3.6664419999997335, + 3.745849000000817 + ], + "allocationSamples": [ + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 0.16807260450028427 + }, + { + "id": "incremental-dependency-closure-edit", + "size": 100000, + "samplesMs": [ + 0.03006900000036694, + 0.021851999999853433, + 0.02128900000025169, + 0.018169000000852975, + 0.017778999999791267 + ], + "allocationSamples": [ + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "12:100001" + }, + { + "id": "spill-sequence-admission", + "size": 100000, + "samplesMs": [ + 11.77695500000118, + 10.721847999999227, + 10.58408000000054, + 12.77183100000002, + 10.863519000000451 + ], + "allocationSamples": [ + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + } + ], + "output": "1:100000:0" + } + ] + } + ], + "render": [ + { + "pass": 1, + "captureSha256": "c9748bf35386a5b1b3054ba6915baf02fff3bcfe9cffbaede49fe17185b42da5", + "gate": "pass: complete matched comparison found no statistically detected regression", + "metadata": { + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T11:56:41.519Z", + "bunVersion": "1.3.14", + "nodeVersion": "24.3.0", + "browserVersion": "149.0.7827.55", + "os": "linux 7.1.3-2-cachyos", + "arch": "x64", + "cpu": "12th Gen Intel(R) Core(TM) i9-12900H", + "engineVersions": { + "sheetwrite": "0.3.1", + "handsontable": "18.0.0" + }, + "datasetSeed": 1592639710, + "datasetHashes": { + "100000": "fnv1a32:178eac66" + }, + "viewport": { + "width": 640, + "height": 480 + }, + "measuredSamples": 3, + "warmupSamples": 1, + "minimumSampleDurationMs": 100, + "rounds": 10, + "orderSeed": 1371602926, + "engineOrder": [ + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ] + ], + "launchAttempts": [ + { + "round": 1, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 1, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 2, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 2, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 3, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 3, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 4, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 4, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 5, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 5, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 6, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 6, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 7, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 7, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 8, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 8, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 9, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 9, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 10, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 10, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + } + ] + }, + "results": [ + { + "round": 1, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.2721518987356508, + 1.0422680412380736, + 1.0416666666678793 + ] + }, + { + "round": 1, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.0631578947405185, + 1.152873563217588, + 1.1800000000046567 + ] + }, + { + "round": 1, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.41882845188323486, + 0.4384279475978466, + 0.4205882352925524 + ] + }, + { + "round": 1, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.340816326528474, + 0.3780669144988337, + 0.22000000000199568 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.4985981308419919, + 0.47846889952487315, + 0.4097959183669668 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.518041237112802, + 0.5469945355209069, + 0.544565217391684 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4218487394963853, + 0.42372881356129516, + 0.4943396226422782 + ] + }, + { + "round": 1, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7507462686617553, + 0.7679389313019755, + 0.6972222222199586 + ] + }, + { + "round": 1, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.5075000000040744, + 2.788888888899237, + 2.977777777795887 + ] + }, + { + "round": 1, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.811111111106584, + 2.4190476190498367, + 2.414285714286269 + ] + }, + { + "round": 1, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6354430379763045, + 0.6464516129021743, + 0.5815028901699112 + ] + }, + { + "round": 1, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.5905882352990481, + 0.6072727272745617, + 0.5999999999969328 + ] + }, + { + "round": 1, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.8347826086961583, + 0.7960629921294675, + 0.7062937062880077 + ] + }, + { + "round": 1, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3057636887610753, + 0.2817258883245776, + 0.3211838006229804 + ] + }, + { + "round": 2, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3116883116868, + 1.0881720430077484, + 1.1133333333289355 + ] + }, + { + "round": 2, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1386363636305428, + 1.1505747126420725, + 1.1292134831486835 + ] + }, + { + "round": 2, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.43991228070195865, + 0.41749999999786575, + 0.3926070038893293 + ] + }, + { + "round": 2, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3247159090953408, + 0.23776722090089839, + 0.31529745042539087 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.48221153846064296, + 0.5229166666649689, + 0.4726415094337426 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5563535911593206, + 0.5500000000030703, + 0.6047058823545847 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4766666666682189, + 0.5410810810815845, + 0.4835748792230039 + ] + }, + { + "round": 2, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8752136752168592, + 0.8229508196732762, + 0.7952380952349539 + ] + }, + { + "round": 2, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.794444444440564, + 2.3068181818181817, + 3.3470588235342054 + ] + }, + { + "round": 2, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.899999999993348, + 3.2354838709767546, + 2.475609756089043 + ] + }, + { + "round": 2, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5427027027021993, + 0.6464516129014233, + 0.6849315068517071 + ] + }, + { + "round": 2, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6903448275916664, + 0.5877192982469757, + 0.6159509202462559 + ] + }, + { + "round": 2, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.8046153846116235, + 0.7192857142853817, + 0.800800000003539 + ] + }, + { + "round": 2, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3917293233085333, + 0.2881844380403458, + 0.2849002849002849 + ] + }, + { + "round": 3, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.397222222233217, + 1.2280487804843976, + 1.2910256410295216 + ] + }, + { + "round": 3, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.0870967741945499, + 1.2071428571348188, + 1.5272727272822522 + ] + }, + { + "round": 3, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4433628318612917, + 0.40280000000214206, + 0.43521739130728354 + ] + }, + { + "round": 3, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.29791666666694383, + 0.31477987421412934, + 0.2849002849009482 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.7474074074058552, + 0.6461538461549975, + 0.4529411764710096 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5081218274092765, + 0.5405405405424284, + 0.6011976047870731 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.45963302752165414, + 0.4579908675732108, + 0.462672811062161 + ] + }, + { + "round": 3, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.772307692312349, + 0.742222222221015, + 0.764885496184628 + ] + }, + { + "round": 3, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.587179487165159, + 2.4902439024299383, + 3.01176470587619 + ] + }, + { + "round": 3, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.862857142869117, + 2.4119047619086422, + 2.2577777777798476 + ] + }, + { + "round": 3, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6863013698611, + 0.5725714285685015, + 0.7343065693403465 + ] + }, + { + "round": 3, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6331249999995634, + 0.633333333335237, + 0.6744966442929581 + ] + }, + { + "round": 3, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6809523809530145, + 0.7106382978802666, + 0.7306569343080989 + ] + }, + { + "round": 3, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.31928783382816955, + 0.32598187311185284, + 0.3416382252558932 + ] + }, + { + "round": 4, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.4882352941135384, + 1.4169014084552953, + 1.1477272727272727 + ] + }, + { + "round": 4, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1260869565176899, + 1.2419753086445624, + 1.071276595737993 + ] + }, + { + "round": 4, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4314655172392718, + 0.415352697094856, + 0.4259574468059346 + ] + }, + { + "round": 4, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3976190476179389, + 0.31343283581776793, + 0.26516587677758224 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5572222222270082, + 0.5091370558377998, + 0.4643518518515285 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.6555555555589034, + 0.5593582887686839, + 0.7190789473664297 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.45294117646942933, + 0.4371179039305377, + 0.4085714285665819 + ] + }, + { + "round": 4, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8606837606773927, + 0.8032000000011176, + 0.7099290780107167 + ] + }, + { + "round": 4, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.767567567558758, + 2.571794871802036, + 2.566666666663085 + ] + }, + { + "round": 4, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.9857142857109595, + 2.668421052632192, + 2.4414634146222207 + ] + }, + { + "round": 4, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6257668711692151, + 0.6652173913056494, + 0.6179012345684761 + ] + }, + { + "round": 4, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6910344827607081, + 0.6484276729572928, + 0.6115853658525228 + ] + }, + { + "round": 4, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6849315068540993, + 0.809677419357843, + 0.8637931034468709 + ] + }, + { + "round": 4, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.2599999999999395, + 0.35909090909121144, + 0.24594594594588873 + ] + }, + { + "round": 5, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.1964285714063971, + 1.1613636363578157, + 1.2084337349319045 + ] + }, + { + "round": 5, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1551724138091608, + 1.051041666668122, + 1.0499999999980598 + ] + }, + { + "round": 5, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4488789237651456, + 0.4214285714326802, + 0.4210084033543009 + ] + }, + { + "round": 5, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.29325513197232006, + 0.3436426116878493, + 0.2662234042549476 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.47089201877628206, + 0.4634259259263571, + 0.4906862745068365 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5117346938742249, + 0.6931034482710449, + 0.6011976047842847 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4414096916338536, + 0.4259574468168331, + 0.41882845189102835 + ] + }, + { + "round": 5, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7178571428654582, + 0.839669421488373, + 0.7852713178406476 + ] + }, + { + "round": 5, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.0666666666723112, + 2.897142857113587, + 3.0454545454545454 + ] + }, + { + "round": 5, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.0153846153989434, + 2.623076923090057, + 2.5923076923220205 + ] + }, + { + "round": 5, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5356382978708543, + 0.5934911242647637, + 0.6242236024945951 + ] + }, + { + "round": 5, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.7328467153294869, + 0.6890410959006172, + 0.7242857143000168 + ] + }, + { + "round": 5, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.8216783216669243, + 0.8547008547088147, + 0.8213114754209051 + ] + }, + { + "round": 5, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.38951048951016387, + 0.2811797752811605, + 0.4604545454547571 + ] + }, + { + "round": 6, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.455072463783638, + 1.152873563205545, + 1.3594594594607181 + ] + }, + { + "round": 6, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.3038961038918706, + 1.1454545454683036, + 1.3739726027307955 + ] + }, + { + "round": 6, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.47809523810144694, + 0.4818181818123889, + 0.5825581395373203 + ] + }, + { + "round": 6, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.4356521739087918, + 0.33183183183323023, + 0.3670329670336493 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5541436464065244, + 0.6777027026888587, + 0.582558139530552 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5905882352990481, + 0.6790540540461881, + 0.6477419354847722 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.569886363639274, + 0.5500000000056289, + 0.7013986013956707 + ] + }, + { + "round": 6, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8291338582699165, + 0.9682692307665443, + 0.8964285714318976 + ] + }, + { + "round": 6, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.8027777777816585, + 2.4380952380930205, + 2.892682926820182 + ] + }, + { + "round": 6, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.0303030303030303, + 2.994117647067041, + 2.6076923076732035 + ] + }, + { + "round": 6, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.7674242424263591, + 0.6622516556461002, + 0.7583333333428582 + ] + }, + { + "round": 6, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6642384105855415, + 0.5541436464039516, + 0.5661016949163066 + ] + }, + { + "round": 6, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7134751772957174, + 0.6464516128969169, + 0.8170731707298143 + ] + }, + { + "round": 6, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.2549618320609502, + 0.3663194444444444, + 0.273972602739726 + ] + }, + { + "round": 7, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.2060240963698332, + 1.1244444444542752, + 1.1674418604829846 + ] + }, + { + "round": 7, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1211111111281853, + 1.2120481927778168, + 1.1397727272547358 + ] + }, + { + "round": 7, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.43947368421236443, + 0.42961373390398055, + 0.42595744681287 + ] + }, + { + "round": 7, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3086419753107978, + 0.2740831295897032, + 0.2857142857182771 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5196891191784639, + 0.5251308900489428, + 0.48076923077146955 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.6060606060648394, + 0.5405405405443162, + 0.5273684210609645 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.43232758621010803, + 0.46216216216572803, + 0.433333333326681 + ] + }, + { + "round": 7, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8982142857109595, + 0.7084507042309269, + 0.7492537313495388 + ] + }, + { + "round": 7, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.330232558138452, + 2.337209302330996, + 2.754054054051537 + ] + }, + { + "round": 7, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.088888888894063, + 2.3302325581438668, + 2.3697674418582992 + ] + }, + { + "round": 7, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5791907514394342, + 0.5698863636326595, + 0.5368983957276525 + ] + }, + { + "round": 7, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6790540540414686, + 0.5791907514353967, + 0.6876712328760745 + ] + }, + { + "round": 7, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.8154471544776021, + 0.994059405930451, + 0.7215827338199848 + ] + }, + { + "round": 7, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3776729559751356, + 0.2738927738927739, + 0.30642201834848143 + ] + }, + { + "round": 8, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.2419753086345018, + 1.169767441861548, + 1.1010989011035066 + ] + }, + { + "round": 8, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.307792207776484, + 1.1420454545269338, + 1.075268817204301 + ] + }, + { + "round": 8, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.5164948453533837, + 0.4223628692124589, + 0.41020408162505045 + ] + }, + { + "round": 8, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.2673796791574584, + 0.326912181300214, + 0.23923444977134875 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5000000000093132, + 0.5030150753773525, + 0.44185022026349663 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5234374999975747, + 0.5284210526237362, + 0.5138461538471091 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4596330275269943, + 0.4110655737649573, + 0.45330396476037604 + ] + }, + { + "round": 8, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8104838709677419, + 0.7429629629667572, + 0.7590909090905563 + ] + }, + { + "round": 8, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.7999999999883585, + 2.3159090909228492, + 2.5717948717781556 + ] + }, + { + "round": 8, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.9166666666796015, + 2.5325000000128055, + 2.7162162162350945 + ] + }, + { + "round": 8, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6000000000066922, + 0.6679999999934807, + 0.6072727272738562 + ] + }, + { + "round": 8, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6185185185268545, + 0.6314465408784531, + 0.6191358024651116 + ] + }, + { + "round": 8, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6883561643803722, + 0.7556390977408597, + 0.6924137931028059 + ] + }, + { + "round": 8, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3204986149589647, + 0.3184713375796178, + 0.2958579881656805 + ] + }, + { + "round": 9, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3359999999900658, + 1.1494252873670268, + 1.3698630137081986 + ] + }, + { + "round": 9, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1155555555493468, + 1.0723404255299334, + 1.0350515463979935 + ] + }, + { + "round": 9, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4356521739057549, + 0.40566801618660236, + 0.4366812227114905 + ] + }, + { + "round": 9, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.35622775800662027, + 0.32927631578595057, + 0.2280182232332452 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5143589743711532, + 0.4906862745068365, + 0.4406926406938502 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5629213483182692, + 0.5521978021939643, + 0.5440217391423294 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4300429184567343, + 0.43275862069828597, + 0.45384615384425747 + ] + }, + { + "round": 9, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7215827338082595, + 0.8564102564078684, + 0.7548872180321583 + ] + }, + { + "round": 9, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.475609756074846, + 2.2909090908889826, + 2.5974358974311214 + ] + }, + { + "round": 9, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.8527777777570815, + 2.3928571428626864, + 2.574999999994179 + ] + }, + { + "round": 9, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6980645161212211, + 0.6459119496735269, + 0.6831249999973806 + ] + }, + { + "round": 9, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6279503105697077, + 0.6770270270267124, + 0.6442307692367393 + ] + }, + { + "round": 9, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7127659574385521, + 0.8031999999918044, + 0.7960317460191806 + ] + }, + { + "round": 9, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3344311377251086, + 0.37490636704241936, + 0.4291845493562232 + ] + }, + { + "round": 10, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3902777777726039, + 1.184705882346915, + 1.2935897435885495 + ] + }, + { + "round": 10, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.0838709677324219, + 1.2948717948777648, + 1.1348314606715413 + ] + }, + { + "round": 10, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.42050209204631245, + 0.4098360655814043, + 0.4304721030144844 + ] + }, + { + "round": 10, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.42310924369630504, + 0.2954545454552069, + 0.2272727272806647 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5445652174024397, + 0.5014999999967403, + 0.4669767441964427 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5345744680826294, + 0.5473118279509808, + 0.5133333333326169 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4036290322565624, + 0.5516483516427227, + 0.4845410628044069 + ] + }, + { + "round": 10, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7889763779542226, + 0.8024000000096858, + 0.7656488549799608 + ] + }, + { + "round": 10, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.5666666666690547, + 2.3181818181765266, + 2.786111111105937 + ] + }, + { + "round": 10, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.8076923077042477, + 2.4414634146477754, + 2.392857142879317 + ] + }, + { + "round": 10, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5738636363662821, + 0.6223602484454696, + 0.6115853658511031 + ] + }, + { + "round": 10, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6128048780516199, + 0.6592105263047606, + 0.6448717948738844 + ] + }, + { + "round": 10, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6869863013701819, + 0.6718120805312873, + 0.7223021582760614 + ] + }, + { + "round": 10, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.26648936170262305, + 0.34542586750788645, + 0.2808988764044944 + ] + } + ] + }, + { + "pass": 2, + "captureSha256": "0be19fe2848fc68edadfa2b5675eec094daf98c4f9ead8e8935c089a0a6428db", + "gate": "pass: complete matched comparison found no statistically detected regression", + "metadata": { + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T13:08:55.359Z", + "bunVersion": "1.3.14", + "nodeVersion": "24.3.0", + "browserVersion": "149.0.7827.55", + "os": "linux 7.1.3-2-cachyos", + "arch": "x64", + "cpu": "12th Gen Intel(R) Core(TM) i9-12900H", + "engineVersions": { + "sheetwrite": "0.3.1", + "handsontable": "18.0.0" + }, + "datasetSeed": 1592639710, + "datasetHashes": { + "100000": "fnv1a32:178eac66" + }, + "viewport": { + "width": 640, + "height": 480 + }, + "measuredSamples": 3, + "warmupSamples": 1, + "minimumSampleDurationMs": 100, + "rounds": 10, + "orderSeed": 1371602926, + "engineOrder": [ + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ] + ], + "launchAttempts": [ + { + "round": 1, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 1, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 2, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 2, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 3, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 3, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 4, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 4, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 5, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 5, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 6, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 6, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 7, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 7, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 8, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 8, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 9, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 9, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 10, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 10, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + } + ] + }, + "results": [ + { + "round": 1, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.2612500000279396, + 1.1916666666733189, + 1.2456790124077672 + ] + }, + { + "round": 1, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1431818181775848, + 1.2512195121565062, + 1.1999999999866955 + ] + }, + { + "round": 1, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.44292035397241075, + 0.4131687243120293, + 0.41193415638090036 + ] + }, + { + "round": 1, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.32605863191757706, + 0.34280821917680643, + 0.263730569957355 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5524861878453039, + 0.642948717935584, + 0.8474576271344292 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.519689119232751, + 0.5143589743341391, + 0.5894117646905429 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.5566666666883975, + 0.513846153832781, + 0.4196652719150901 + ] + }, + { + "round": 1, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8937499999800431, + 0.7759689922451742, + 0.7142857142990189 + ] + }, + { + "round": 1, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.304545454490422, + 2.500000000022715, + 3.150000000052387 + ] + }, + { + "round": 1, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.6205128204937163, + 3.3433333333271245, + 2.571794871813976 + ] + }, + { + "round": 1, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6464516129164446, + 0.6335443037715328, + 0.6958333332958218 + ] + }, + { + "round": 1, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.5888235294424435, + 0.6937931033622088, + 0.657516339848585 + ] + }, + { + "round": 1, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.681632653043485, + 0.7352941177018425, + 0.7367647058700266 + ] + }, + { + "round": 1, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.332198142414284, + 0.26109660574655696, + 0.35120481927318115 + ] + }, + { + "round": 2, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3466666667163372, + 1.0806451612302372, + 1.1870588235776214 + ] + }, + { + "round": 2, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.3440000000223518, + 1.2000000000088697, + 1.0945652173730829 + ] + }, + { + "round": 2, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.44866071425245274, + 0.45339366512550083, + 0.46342592594575965 + ] + }, + { + "round": 2, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.29687500002381223, + 0.25717948716945754, + 0.2645502645551922 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.49900497508638386, + 0.5278350515339101, + 0.5214285714485284 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.6738255033644553, + 0.6575163398911945, + 0.6217391304266842 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.5000000000046566, + 0.40857142857751066, + 0.4721698113453557 + ] + }, + { + "round": 2, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7541353383304593, + 0.7275362318530139, + 0.7952380952691394 + ] + }, + { + "round": 2, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.539999999967404, + 2.7078947368274, + 2.724324324193436 + ] + }, + { + "round": 2, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.235483870991776, + 3.5857142858606363, + 3.0333333332656007 + ] + }, + { + "round": 2, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6701863353655483, + 0.6622641509422248, + 0.6078787878889478 + ] + }, + { + "round": 2, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6958333333346268, + 0.5865497075903573, + 0.7019999999615053 + ] + }, + { + "round": 2, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6951388888798343, + 0.6924137931188633, + 0.9008928571378679 + ] + }, + { + "round": 2, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.30120481927710846, + 0.31645569620253167, + 0.36101083032490977 + ] + }, + { + "round": 3, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.6258064516699844, + 1.1835294117493664, + 1.2759493670980386 + ] + }, + { + "round": 3, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1643678160469937, + 1.198809523800654, + 1.1477272727590224 + ] + }, + { + "round": 3, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.5045226130484786, + 0.487864077647298, + 0.4549999999813735 + ] + }, + { + "round": 3, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.33192771085796047, + 0.2490049751118678, + 0.31677215191818586 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5970238095116136, + 0.5843023255597367, + 0.569318181835115 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.7775193798362978, + 0.9894736842579094, + 0.6451807228612703 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.5045226130484786, + 0.5005000000027939, + 0.4807692307916183 + ] + }, + { + "round": 3, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8366666667163372, + 0.8104838709376992, + 0.80384615387481 + ] + }, + { + "round": 3, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.478048780478719, + 2.5692307694265857, + 3.036363636284615 + ] + }, + { + "round": 3, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.673684210565529, + 2.8714285714817898, + 2.532499999948777 + ] + }, + { + "round": 3, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6695364238447602, + 0.5381720430287783, + 0.553038674067109 + ] + }, + { + "round": 3, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6535947712418301, + 0.7161971830999033, + 0.6555555555847735 + ] + }, + { + "round": 3, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7412587413043304, + 0.7606060606229937, + 0.6635761589416309 + ] + }, + { + "round": 3, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3381270902997574, + 0.2901449275351521, + 0.30233236151657805 + ] + }, + { + "round": 4, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.6290322580494947, + 1.2683544303703158, + 1.3635135135437186 + ] + }, + { + "round": 4, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.3025974025949836, + 1.1551724138466277, + 1.229268292714728 + ] + }, + { + "round": 4, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4892682926820182, + 0.45225225224554, + 0.45963302754515084 + ] + }, + { + "round": 4, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.32386363635305315, + 0.3773584905730666, + 0.26525198938992045 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.49073170730162685, + 0.49166666665205766, + 0.5451456310489731 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5324468085185644, + 0.5882352941176471, + 0.6348101266164663 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.47846889953489935, + 0.48388625587826656, + 0.5106060606135865 + ] + }, + { + "round": 4, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7881889764263522, + 0.795238095232182, + 0.8120967741274545 + ] + }, + { + "round": 4, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.7162162161407037, + 2.908571428353233, + 2.7837837838089547 + ] + }, + { + "round": 4, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.0545454545398103, + 3.8538461539607782, + 2.9647058823748544 + ] + }, + { + "round": 4, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6401273885587598, + 0.6036144578380578, + 0.6856164383855075 + ] + }, + { + "round": 4, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6333333332876458, + 0.5770114942389573, + 0.7000000000494969 + ] + }, + { + "round": 4, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6790540540225904, + 0.7444444444099511, + 0.7192857143070016 + ] + }, + { + "round": 4, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.2873563218417567, + 0.334504792329888, + 0.32323529411874274 + ] + }, + { + "round": 5, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3315789472973465, + 1.2820512821348622, + 1.1639534883352733 + ] + }, + { + "round": 5, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1764705882681643, + 1.0648936169776828, + 1.0265306123076197 + ] + }, + { + "round": 5, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.45045045045045046, + 0.4327586206752036, + 0.43333333331156215 + ] + }, + { + "round": 5, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.4721698113014254, + 0.4588235293971557, + 0.3207386363699863 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.615337423306027, + 0.7289855072099337, + 0.7013986014038116 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.8655172414146364, + 0.8589743589425188, + 0.8221311475165555 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.5541436464129561, + 0.5421621621611553, + 0.4995024875501421 + ] + }, + { + "round": 5, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7357664233427087, + 0.7253623188513777, + 0.8237704917498422 + ] + }, + { + "round": 5, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.5871794872367992, + 2.367441860439126, + 2.973529411726357 + ] + }, + { + "round": 5, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.911111111028327, + 2.407142857111813, + 2.224444444374078 + ] + }, + { + "round": 5, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6718750000058208, + 0.5715909090887924, + 0.5319148936516982 + ] + }, + { + "round": 5, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.5797687861530078, + 0.562702702700689, + 0.5865497075958036 + ] + }, + { + "round": 5, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.764122137373299, + 0.7335766423289685, + 0.7656488549533008 + ] + }, + { + "round": 5, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.324301675981816, + 0.2777777777777778, + 0.32591549295827116 + ] + }, + { + "round": 6, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.2537500001024455, + 1.2144578313118364, + 1.3197368420292868 + ] + }, + { + "round": 6, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.128089887634171, + 1.315789473708719, + 1.0468750000097014 + ] + }, + { + "round": 6, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.3960474308050079, + 0.39409448818384313, + 0.44247787615152456 + ] + }, + { + "round": 6, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.47916666668822505, + 0.3042613635903267, + 0.20681818183857856 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.494088669936058, + 0.40485829960268277, + 0.44687499999417923 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5164948453569842, + 0.5427027026845797, + 0.5725714285884584 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4102459016416344, + 0.43565217395839484, + 0.43799126637473246 + ] + }, + { + "round": 6, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7507462686191855, + 0.6666666666852931, + 0.6979166667054718 + ] + }, + { + "round": 6, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.451219512217837, + 2.255555555721124, + 2.8194444445220546 + ] + }, + { + "round": 6, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.7916666666666665, + 2.251111111189756, + 2.219565217383206 + ] + }, + { + "round": 6, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6311764705761829, + 0.568181818197693, + 0.6030120481680854 + ] + }, + { + "round": 6, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.5629213483313497, + 0.5871345029316015, + 0.6217391304208996 + ] + }, + { + "round": 6, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7419117646675337, + 0.6542483660228112, + 0.726086956543335 + ] + }, + { + "round": 6, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.328196721310254, + 0.3194888178913738, + 0.3333333333333333 + ] + }, + { + "round": 7, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3012987013011204, + 1.0945652173528366, + 1.2537500000093131 + ] + }, + { + "round": 7, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1200000000289745, + 1.1098901098082354, + 0.9980198020152379 + ] + }, + { + "round": 7, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4184100418721782, + 0.42142857143952817, + 0.4570776255733278 + ] + }, + { + "round": 7, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.36400000001219185, + 0.36007194247150376, + 0.2665071770455243 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.45844748856916545, + 0.43419913422654977, + 0.4634259259371363 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5510989010978776, + 0.5655367231722606, + 0.6281250000465661 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.45844748856916545, + 0.43565217391790256, + 0.4878048780714957 + ] + }, + { + "round": 7, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8203252032399178, + 0.842857142902535, + 0.8040000000447035 + ] + }, + { + "round": 7, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.8714285714817898, + 2.4804878048371615, + 2.4166666666666665 + ] + }, + { + "round": 7, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.087878788059408, + 2.9764705882407725, + 2.6435897435801916 + ] + }, + { + "round": 7, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6675159235538286, + 0.6679999999515712, + 0.5976190476157215 + ] + }, + { + "round": 7, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.5803468207844851, + 0.6562091503170581, + 0.5597765363086868 + ] + }, + { + "round": 7, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7429629629477859, + 0.7952380952617478, + 0.8403361344929127 + ] + }, + { + "round": 7, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.296153846152744, + 0.33612903225866536, + 0.2727520435957152 + ] + }, + { + "round": 8, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.4183098591444359, + 1.1744186046619922, + 1.5920634921787986 + ] + }, + { + "round": 8, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.2512499999487772, + 1.2108433735164175, + 1.0547368421562409 + ] + }, + { + "round": 8, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4241525423910342, + 0.4341991341942962, + 0.5040201005156166 + ] + }, + { + "round": 8, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.29460227270398964, + 0.24355231143688272, + 0.29146005509334 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.491666666656623, + 0.529629629607948, + 0.44843049328189527 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5923076922999773, + 0.5770114942871291, + 0.5825581395251374 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.47358490567092065, + 0.49900497510491765, + 0.513846153828005 + ] + }, + { + "round": 8, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.9561904762117636, + 1.022448979517711, + 1.114444444442375 + ] + }, + { + "round": 8, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.576923076970837, + 2.7810810810408078, + 3.5137931034290073 + ] + }, + { + "round": 8, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.423333333339542, + 4.258333333379899, + 2.92285714287843 + ] + }, + { + "round": 8, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.710638297847241, + 0.7367647059248102, + 0.6731543624211078 + ] + }, + { + "round": 8, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.7422222222098046, + 0.6248447205235036, + 0.858119658067122 + ] + }, + { + "round": 8, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7342857142976884, + 0.7699999999684783, + 0.8040000000223517 + ] + }, + { + "round": 8, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.2887978142081592, + 0.33003300330033003, + 0.2631578947368421 + ] + }, + { + "round": 9, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.4681159419857936, + 1.2833333332927372, + 1.4507246376487657 + ] + }, + { + "round": 9, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.2858974358472877, + 1.311688311736692, + 1.0659574468104922 + ] + }, + { + "round": 9, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.41841004187997166, + 0.45499999998984014, + 0.44185022027580484 + ] + }, + { + "round": 9, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.33322475569668536, + 0.26540284357982646, + 0.3096590909170283 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.4906862745171084, + 0.5524861878916127, + 0.5689265536944156 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.6388535031953909, + 0.5159793814413787, + 0.5486338797630996 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.48454106280103254, + 0.42918454936821443, + 0.47393364931116877 + ] + }, + { + "round": 9, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7968253968357448, + 0.7621212120972235, + 0.8555555555523715 + ] + }, + { + "round": 9, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.0147058822981574, + 2.751351351195292, + 2.625641025746098 + ] + }, + { + "round": 9, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.7947368421346734, + 3.156249999970896, + 2.41190476196685 + ] + }, + { + "round": 9, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5666666666498292, + 0.5830508474639412, + 0.6197530863818104 + ] + }, + { + "round": 9, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6128048780203865, + 0.6483870968102448, + 0.6341772151851579 + ] + }, + { + "round": 9, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7976190476042647, + 0.7851562499563443, + 0.7414814814925194 + ] + }, + { + "round": 9, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.31514285714498586, + 0.32894736842105265, + 0.303951367781155 + ] + }, + { + "round": 10, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.4414285714205886, + 1.305194805291566, + 1.2256097560748458 + ] + }, + { + "round": 10, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.32236842107714, + 1.3581081080325954, + 1.2240963855040181 + ] + }, + { + "round": 10, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4726415094392339, + 0.4115226337678516, + 0.46651162792776907 + ] + }, + { + "round": 10, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.2952802359733654, + 0.41708333330849806, + 0.2835694050849033 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.6374233128857211, + 0.5070707070537739, + 0.4873786407559025 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5312169312041194, + 0.5524861878607401, + 0.5615384615650707 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.44424778760402606, + 0.44336283187571485, + 0.45871559636018006 + ] + }, + { + "round": 10, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8911504425701842, + 0.8572649572554052, + 0.8333333333643774 + ] + }, + { + "round": 10, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.9852941176744507, + 2.7513513512708045, + 2.8833333333022892 + ] + }, + { + "round": 10, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.7135135135235817, + 3.558620689757939, + 2.833333333307463 + ] + }, + { + "round": 10, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6937931034071693, + 0.6958333333540294, + 0.6172839506460285 + ] + }, + { + "round": 10, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6203703703473747, + 0.5928994082796151, + 0.5273684210389068 + ] + }, + { + "round": 10, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6927152318164509, + 0.7149999999973391, + 0.9570093457804663 + ] + }, + { + "round": 10, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.30393258427018616, + 0.31509433962029854, + 0.3225806451612903 + ] + } + ] + } + ] +} diff --git a/bench/results/wasm-build-matrix-opt-level-s.json b/bench/results/wasm-build-matrix-opt-level-s.json new file mode 100644 index 00000000..8bd1c625 --- /dev/null +++ b/bench/results/wasm-build-matrix-opt-level-s.json @@ -0,0 +1,16607 @@ +{ + "schemaVersion": 1, + "plan": 97, + "variant": "s", + "artifact": { + "rustOptLevel": "s", + "rawBytes": 618731, + "brotliQuality11Bytes": 197448, + "wasmOpt": "-O3", + "sha256": "a500b0d54b9076b2c991478c243e86af420ebb70fda57ce27695d1cef95e3b0a" + }, + "conditions": { + "cpu": "12th Gen Intel(R) Core(TM) i9-12900H", + "os": "linux 7.1.3-2-cachyos", + "arch": "x64", + "bun": "1.3.14", + "node": "24.3.0", + "chromium": "149.0.7827.55", + "power": "AC0 online; battery charging", + "cpuPolicy": "intel_pstate active; scaling governor powersave", + "concurrency": 1, + "otherWork": "No other deliberate workload; desktop session and system services remained active." + }, + "interleaveOrder": [ + "3-r1", + "2-r1", + "s-r1", + "2-r2", + "s-r2", + "3-r2", + "s-r3", + "3-r3", + "2-r3" + ], + "data": [ + { + "repetition": 1, + "captureSha256": "29ed1fc3a91da29a01270188589f31139c9642653c1428e6313b4041055dbb99", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:30:01.032Z", + "sheetwriteRows": [ + 1000, + 10000, + 100000, + 500000, + 1000000 + ], + "handsontableRows": [ + 1000, + 10000 + ] + }, + "sheetwrite": { + "1000": { + "ingest": [ + 1.6102539999999976, + 1.534770999999978, + 1.579422999999963, + 1.7901170000000093, + 2.3402240000000347, + 4.718699000000015, + 1.4650609999999915 + ], + "windowRead": [ + 0.009680656249999586, + 0.009647375000000125, + 0.009577218749999616, + 0.009655031250000334, + 0.009975156250000339, + 0.009397406250000628, + 0.00944199999999995, + 0.009737812500000942, + 0.009478624999999852, + 0.009792968750000242, + 0.011097687499999509, + 0.009525562500000362, + 0.010155375000000078, + 0.010002968750001173, + 0.009899437499999664, + 0.00992124999999966, + 0.011230281249998697, + 0.009947781250000176, + 0.016575093750001102, + 0.011650312500000481, + 0.010948437499999741, + 0.010609031250000456, + 0.010771874999999653, + 0.012058812499999405, + 0.012174249999999276, + 0.014012750000000906, + 0.012068187500000604, + 0.012484562500000962, + 0.012399437499999166, + 0.012713468749998569, + 0.012702875000000446, + 0.012231593750000158, + 0.01220703125, + 0.012084187500001065, + 0.012140062500000326, + 0.011963312500000711, + 0.017052125000001084, + 0.013199781249999987, + 0.011728687500001556, + 0.013258656250000556, + 0.013103750000000858, + 0.012450750000001065, + 0.01277584375000096, + 0.015243343749999028, + 0.015159000000000589, + 0.014686437499999982, + 0.020851562499998977, + 0.01386840624999941, + 0.013698406250000517, + 0.013842687500000395, + 0.013805062500001242, + 0.01437875000000055, + 0.018202968750001602, + 0.019036468750000424, + 0.017275343750000616, + 0.015004875000000695, + 0.013399937500000902, + 0.013664593749998843, + 0.023947656249999838, + 0.01799556249999945, + 0.01209753124999935, + 0.012715937499999441, + 0.012493499999999713, + 0.0116908750000011, + 0.01202503124999943, + 0.01170943750000042, + 0.011408093750000958, + 0.011652749999999656, + 0.01142165624999869, + 0.011860968749999756, + 0.01814393749999965, + 0.018440312499999223, + 0.01801753125000083, + 0.018263875000000596, + 0.018083968750000068, + 0.02419278124999913, + 0.01686893749999996, + 0.016023000000000565, + 0.016611999999998517, + 0.015770093749999603, + 0.01650412500000087, + 0.015381062500001264, + 0.016300343750000224, + 0.015363281249999972, + 0.016736062499999704, + 0.01493243749999884, + 0.014921718749999258, + 0.014634968750000255, + 0.015272000000001285, + 0.014835218749999157, + 0.015580593750000205, + 0.015355156250000945, + 0.014748374999999925, + 0.014813218749999635, + 0.015544062500000067, + 0.015095312499999736, + 0.01605440624999943, + 0.016042718750000518, + 0.013773812500000204, + 0.010072031249999114, + 0.01041290625000002, + 0.008601781250000329, + 0.008519062499999563, + 0.008521874999999568, + 0.008439437499999869, + 0.008639249999999876, + 0.008437999999999946, + 0.008425437499999688, + 0.014399062499999005, + 0.008262562499998793, + 0.008112343749999695, + 0.008242437499999866, + 0.009060718749999808, + 0.00833696874999923, + 0.008098718750000344, + 0.008141562499998756, + 0.008065999999999462, + 0.007989000000000246, + 0.008099656249999754, + 0.008191843749999705, + 0.008719687499999296, + 0.008786593750000904, + 0.00829981250000067, + 0.00933546874999891, + 0.008122218749999632, + 0.008311562499999425, + 0.00835740625000092, + 0.00810249999999968, + 0.00859615625000032, + 0.008126250000000113, + 0.00832040625000019, + 0.008086812500000207, + 0.00875015625000053, + 0.008207999999999771, + 0.008372843749999248, + 0.008045156250000574, + 0.01414078124999918, + 0.009261312499999619, + 0.007944124999999858, + 0.007922750000000534, + 0.052526968749999625, + 0.0076037812500011626, + 0.006370250000001576, + 0.0061632500000001755, + 0.006286531250001559, + 0.006028968749999919, + 0.006302250000000953, + 0.005957812500000159, + 0.005791343750001232, + 0.006624718750000369, + 0.006132843749998784, + 0.006790249999999887, + 0.006118062500000576, + 0.0060739062500001495, + 0.006383406250000334, + 0.006225750000000474, + 0.006362906250000577, + 0.0061800312500004395, + 0.006152500000000671, + 0.011488312499999154, + 0.007013406249999576, + 0.0070429375000014005, + 0.007443593750000588, + 0.006977656249999242, + 0.006699593749999622, + 0.007402624999999219, + 0.006573531249999931, + 0.00703459375000115, + 0.006664531249999328, + 0.006849593749999272, + 0.0064871875000012125, + 0.0070891250000002515, + 0.00629181250000066, + 0.006143343750000696, + 0.006222312500000271, + 0.00614806249999944, + 0.006056281250000239, + 0.006184499999999815, + 0.006300750000001187, + 0.007182593750000521, + 0.006285874999999663, + 0.005985781250000599, + 0.0061872499999999775, + 0.006146750000000978, + 0.006108781250000916, + 0.00615006249999972, + 0.011937000000001419, + 0.006711500000001536, + 0.006677812499999547, + 0.006906031250000666, + 0.0071853750000006045, + 0.006956468750001221, + 0.007682062499998921, + 0.007726593750000177, + 0.007032500000001107, + 0.006852093750000066, + 0.007002687499999993, + 0.007959843750001028, + 0.0067893750000003195, + 0.0066610625000009804, + 0.006474281250000047, + 0.006579343749999467, + 0.006638625000000786, + 0.0065171250000002345, + 0.007684375000000188, + 0.006860874999999211, + 0.006894625000001042, + 0.006849624999999193, + 0.006894718750000806, + 0.007471374999999725, + 0.007294281250000978, + 0.00696600000000025, + 0.007136656250001039, + 0.006877875000000699, + 0.00680003125000006, + 0.006486531249999317, + 0.006579062500000177, + 0.0069934062500003336, + 0.007024218750000699, + 0.007239906250001482, + 0.007000125000001134, + 0.007131125000000793, + 0.0067168750000004, + 0.006834656249999682, + 0.006721562499999223, + 0.006771031250000448, + 0.006956437499999524, + 0.00691812500000033, + 0.006952281249999359, + 0.006858874999998932, + 0.006513187499999518, + 0.0069798437499990484, + 0.00705518750000067, + 0.007022687499999236, + 0.007044468749999311, + 0.007087218749999735, + 0.00691784375000104, + 0.007072499999999593, + 0.0073273437499992156, + 0.007463624999999752, + 0.007258406249999183, + 0.007614218749999679, + 0.008167593749998758, + 0.008244406250000225, + 0.0076122187499994, + 0.007533999999999708, + 0.007597906250000008, + 0.008851718749999904, + 0.013645062500000193, + 0.007926218750000658, + 0.007953968749999873, + 0.008219437500001092, + 0.008543749999999406, + 0.007980687499999917, + 0.007815656250000913, + 0.007611750000000583, + 0.007649687500000724, + 0.007399093749999253, + 0.007766124999999846, + 0.007370906250001141, + 0.007432468749998478, + 0.0076057187500016, + 0.008253718749999805, + 0.010191062499998793, + 0.007574937499999379, + 0.0075518749999989865, + 0.007555062499999821, + 0.007093499999999864, + 0.007598593750000049, + 0.007687343749999798, + 0.00802328124999896, + 0.007851656250000616, + 0.008905312499999596, + 0.0077846562499992444, + 0.007924031250000851, + 0.007548968750000995, + 0.0074630624999993955, + 0.0074523749999997335, + 0.00753378125000026, + 0.007686375000000467, + 0.007478500000001276, + 0.007832999999999757, + 0.00801612500000104, + 0.007846281249999976, + 0.007906531250000626, + 0.007966687499999736, + 0.008402625000000441, + 0.007946750000000335, + 0.007574937499999379, + 0.007590500000000944, + 0.007819906249999065, + 0.007795406249998749, + 0.007832062500000347, + 0.007792343749999375, + 0.007827875000000262, + 0.00785499999999928, + 0.007723218749999816, + 0.007930656249998336, + 0.007883500000000154, + 0.007934437499999447 + ], + "edit": [ + 8.042665999999997, + 12.097577000000001, + 11.059121000000005, + 11.338176999999973, + 10.55648100000002, + 7.194429000000014, + 6.35009500000001, + 3.9482849999999416, + 4.1831809999999905, + 4.11567100000002, + 4.201834000000076, + 4.079548000000045, + 5.86211000000003, + 7.1975250000000415, + 5.265184999999974 + ], + "sort": [ + 0.10968000000002576, + 0.09363600000006045, + 0.09280200000000605, + 0.09314800000004197, + 0.10809199999994235, + 0.09400699999991957, + 0.09889499999997042, + 0.09165099999995618, + 0.09152700000004188, + 0.08842700000002424, + 0.08589300000005551, + 0.08962599999995291, + 0.10313299999995706, + 0.10951600000009876, + 0.09259899999995014 + ], + "filter": [ + 0.027335999999991145, + 0.022831999999993968, + 0.024680999999986852, + 0.020983000000001084, + 0.03304400000001806, + 0.02130400000010013, + 0.02010300000006282, + 0.019600999999966007, + 0.021154999999907886, + 0.027241000000003623, + 0.027980999999954292, + 0.033475999999950545, + 0.032031999999958316, + 0.023578000000043176, + 0.02498199999990902 + ], + "multiFilter": [ + 0.10681099999999333, + 0.0964129999999841, + 0.09103800000002593, + 0.10488900000007106, + 0.10864800000001651, + 0.10139200000003257, + 0.10419200000001183, + 0.0972629999999981, + 0.08931000000006861, + 0.09189400000002479, + 0.08792500000004111, + 0.11415699999997742, + 0.08392500000002201, + 0.07777699999996912, + 0.08046899999999368 + ], + "distinctLow": [ + 0.07385699999997541, + 0.08038599999997587, + 0.0809870000000501, + 0.06997900000010304, + 0.07182999999997719, + 0.0690869999999677, + 0.07054999999991196, + 0.0800050000000283, + 0.13428399999997964, + 0.06801499999994576, + 0.06668100000001687, + 0.06609600000001592, + 0.08967700000005152, + 0.06196299999999155, + 0.06024199999990287 + ], + "distinctHigh": [ + 0.28037700000004406, + 0.2688550000000305, + 0.2539409999999407, + 0.23123599999996713, + 0.228746000000001, + 0.23092899999994643, + 0.22181899999998222, + 0.21643700000004173, + 0.23150700000007873, + 0.26214999999990596, + 0.22618099999999686, + 0.22610999999994874, + 0.2146579999999858, + 0.22450400000002446, + 0.23431600000003527 + ], + "aggregate": [ + 0.0033977890625003226, + 0.003618367187499416, + 0.0033494531250006787, + 0.003532820312499574, + 0.003319703125000295, + 0.0033398515625000513, + 0.003256796875000134, + 0.003308734374999567, + 0.0036844218750005098, + 0.0035013125000000755, + 0.0035005546875002125, + 0.003353906250000094, + 0.004376507812500208, + 0.003287109374999986, + 0.003244960937500707, + 0.003408062500000142, + 0.003329546874999423, + 0.003230835937499954, + 0.0032684453125000346, + 0.0032280234374999495, + 0.0031335312499995993, + 0.0031969453124993663, + 0.0031519687500001226, + 0.0031714687499997396, + 0.003181296874999795, + 0.0033020156249996546, + 0.0031580156249999547, + 0.00325561718749956, + 0.003316796874999639, + 0.0032287499999998914, + 0.00337639843750015, + 0.0033241640624996904, + 0.0033016249999997527, + 0.0031592421874995225, + 0.003334101562500358, + 0.00323301562499978, + 0.0034666718750004932, + 0.0034625156249994404, + 0.003473046874999497, + 0.0037463750000004126, + 0.003293328125000272, + 0.0034108515625002056, + 0.0036336953125006843, + 0.0036073515625005825, + 0.00338535156249975, + 0.003481351562499846, + 0.0033830703125001804, + 0.0033418359375003703, + 0.00342300000000062, + 0.0035827031250006414, + 0.0032966953124997644, + 0.003363203124999714, + 0.0034532812499996624, + 0.003373585937499257, + 0.003389656250000428, + 0.003505156250000141, + 0.0034533124999995835, + 0.003463703124999995, + 0.0035617109374994627, + 0.00408986718750004, + 0.0034846406249995354, + 0.0034981015625001888, + 0.003483257812499474, + 0.003511281249999776, + 0.0034215390624998676, + 0.003442109375000335, + 0.0036151562500004175, + 0.0033843046874997285, + 0.003387617187500247, + 0.0035302421874998657, + 0.003440117187500036, + 0.0034486093749999114, + 0.0034379765625001113, + 0.0034058750000003357, + 0.003476320312500114, + 0.004892343749999917, + 0.0034328359374997675, + 0.0033393281250004847, + 0.0033276250000007224, + 0.003337656250000265, + 0.0032913203125000123, + 0.0034129296874993997, + 0.003300929687499732, + 0.0033895859374997173, + 0.0034487812500003656, + 0.0034628515625003686, + 0.003440148437499957, + 0.003608601562499203, + 0.0034152656250006075, + 0.0033812265624995064, + 0.003455476562499449, + 0.0034123046875000895, + 0.0034574765624997283, + 0.0033650000000005065, + 0.0036521640625002405, + 0.003331984374999486, + 0.003342523437500411, + 0.003251562500000027, + 0.0033504531249999303, + 0.003353781249999521, + 0.0034036562499997203, + 0.003371593749999846, + 0.0033820625000000604, + 0.0033189609374995044, + 0.0033735390625002637, + 0.003404171875000195, + 0.003490499999999841, + 0.003458835937499849, + 0.003532570312500205, + 0.003405515625000355, + 0.003361546874999455, + 0.003651781250000319, + 0.003432515625000576, + 0.0034669375000007108, + 0.0032330312499997405, + 0.0033640468750002483, + 0.003236492187499884, + 0.0032808671875006468, + 0.0034216406250004994, + 0.0032401640625003836, + 0.0033090234375006133, + 0.0031025390624996874, + 0.0033505390625006015, + 0.0030445859375003437, + 0.0030064374999998478, + 0.0032752031250007363, + 0.0031906249999993364, + 0.0032481562500006333, + 0.003385804687500382, + 0.003088148437499605, + 0.003031874999999573, + 0.003075343749999959, + 0.0032055312499998934, + 0.003167710937499457, + 0.003162781250000357, + 0.0032038281250006406, + 0.0032684375000000543, + 0.003443476562500436, + 0.0034046406249998995, + 0.003406406250000771, + 0.0032568828125008054, + 0.0033859531250000074, + 0.003300742187500205, + 0.003307765624999348, + 0.0033687734374998612, + 0.0034535390624998996, + 0.00344694531250056, + 0.0032599921875000604, + 0.003309375000000614, + 0.0031357734375001556, + 0.003307843750000039, + 0.004361476562499966, + 0.0034362265625000887, + 0.003436289062499931, + 0.0032936953125002333, + 0.0033341250000002987, + 0.0032075156250002124, + 0.003018804687500598, + 0.0030914687500001037, + 0.0030919921874996703, + 0.0030515156249997233, + 0.0029131953124998944, + 0.0030842187499997564, + 0.0029220703124996916, + 0.0030206640624994563, + 0.0031427421875003247, + 0.0030578437499997335, + 0.002994328125000223, + 0.00286842968749923, + 0.0029988750000002895, + 0.0029215390624992565, + 0.00298423437499995, + 0.0030186484375001044, + 0.0029721640624993384, + 0.0031941718750001513, + 0.0030480234374996584, + 0.00306971874999995, + 0.0030895390625005348, + 0.005055773437500299, + 0.003070859374999735, + 0.003230695312499421, + 0.0029232031250003843, + 0.002769828124999485, + 0.0029136249999996977, + 0.00294132031249994, + 0.003008796875000108, + 0.0031163906250002427, + 0.0031594140624999767, + 0.0030039609374998832, + 0.0031658124999998094, + 0.003063874999999605, + 0.003279976562500231, + 0.00304744531250023, + 0.0030348828124999727, + 0.003070562499999596, + 0.0029411171874995645, + 0.0031333046875001713, + 0.0032116640624995085, + 0.003156101562499458, + 0.0034018906250006253 + ] + }, + "10000": { + "ingest": [ + 11.811735999999996, + 14.406871000000024, + 12.506647999999927, + 13.295689000000039, + 13.742081999999982, + 12.567356000000018, + 12.45279400000004 + ], + "windowRead": [ + 0.010288281249998477, + 0.010612312500001053, + 0.009538437500001606, + 0.007899812499999825, + 0.007942968749997448, + 0.008255906250003164, + 0.008065750000000094, + 0.008269156249998133, + 0.008486937499998959, + 0.008315500000001919, + 0.008392375000003227, + 0.009076187499999833, + 0.00824771875000252, + 0.007785406249997351, + 0.007872062499998833, + 0.00800328124999794, + 0.00837184374999822, + 0.00842021875000043, + 0.00840899999999678, + 0.00837015625000248, + 0.008419843749997824, + 0.008250656250002208, + 0.008214250000001755, + 0.008304437500001427, + 0.0083134062500001, + 0.008467718750001296, + 0.008525062500002178, + 0.008643906250000555, + 0.008978500000001333, + 0.00866262499999948, + 0.008677343750001398, + 0.008717093750000515, + 0.008271031250000505, + 0.008469500000000352, + 0.008583437500000457, + 0.008448125000001028, + 0.008240125000000376, + 0.008977124999997699, + 0.01163159374999978, + 0.01624025000000273, + 0.015880968750000335, + 0.015515343749999744, + 0.015675437500000555, + 0.015551999999999566, + 0.015298562499999946, + 0.014977031250001716, + 0.014463062499999069, + 0.008112218750000011, + 0.008923343750002033, + 0.008267968750001131, + 0.00830240624999945, + 0.00829196874999738, + 0.008180124999999094, + 0.008115500000002385, + 0.008267531249998683, + 0.008350374999999133, + 0.008221781250000504, + 0.008149281249998808, + 0.007983093750002723, + 0.007934781249996803, + 0.008190562499997611, + 0.008305000000000007, + 0.008230718749999255, + 0.008043718749998874, + 0.00815606249999945, + 0.008450625000001821, + 0.008133312500000045, + 0.00809171875000203, + 0.007968937499999384, + 0.015371500000000538, + 0.015222656249999744, + 0.01570381249999997, + 0.015002062499998914, + 0.016049406250001397, + 0.015351499999997742, + 0.015686250000001678, + 0.00815740624999961, + 0.008059312499998583, + 0.008090843749997134, + 0.007897218749999269, + 0.007691312500000436, + 0.0076254374999997765, + 0.007844125000001867, + 0.0077294375000001025, + 0.007282156249999616, + 0.0073595624999995835, + 0.0077182499999999266, + 0.007335218750000649, + 0.007623375000001431, + 0.007864281250000715, + 0.007899593750000378, + 0.007832374999999558, + 0.007709781249999992, + 0.007764375000000712, + 0.007833968749999087, + 0.00787515625000168, + 0.007865375000001507, + 0.00775006250000132, + 0.007914156249999138, + 0.00795646874999889, + 0.008261812500002463, + 0.008110218750001508, + 0.008290562500000931, + 0.008082843749999569, + 0.008179625000000357, + 0.008059750000001031, + 0.008427874999998863, + 0.008293218749997777, + 0.008005531249999365, + 0.0496176562499997, + 0.008199218749997073, + 0.008999937499996946, + 0.00839409375000244, + 0.008192687499999352, + 0.007739062500000671, + 0.008163500000001989, + 0.008233031250000522, + 0.00821468750000065, + 0.008172500000000582, + 0.008216531249999548, + 0.008380562500001076, + 0.008220843749999318, + 0.00823968750000148, + 0.008329968749997363, + 0.008308187499999065, + 0.008355312500000878, + 0.008293906249999594, + 0.01033406250000013, + 0.00812196874999671, + 0.00818993749999919, + 0.008351437500000003, + 0.008661437499998925, + 0.0083075000000008, + 0.00860640624999931, + 0.008706531250002314, + 0.008388406249999036, + 0.008509062499999942, + 0.008274218749999562, + 0.008426406249999019, + 0.008119125000000338, + 0.008327749999999412, + 0.007926218749997105, + 0.008206999999998743, + 0.008183281249998231, + 0.008113656249999934, + 0.008235250000002026, + 0.008123999999998688, + 0.007906187500001494, + 0.008149218749998965, + 0.00811006249999835, + 0.00805415624999739, + 0.007924374999998207, + 0.007955093750002362, + 0.007869187499998986, + 0.008475624999999098, + 0.008373031249998775, + 0.008318625000001134, + 0.008441250000000622, + 0.008178406249999881, + 0.00833278125000092, + 0.008384968749997057, + 0.008501187499998508, + 0.00814559374999746, + 0.00819293749999872, + 0.008213187500000885, + 0.008376750000000044, + 0.008255187500001426, + 0.008242406249998169, + 0.008278250000000043, + 0.008150531250002757, + 0.008129343749999407, + 0.008498156249999056, + 0.00861693749999759, + 0.008433906249997847, + 0.008395718749998338, + 0.008372468750000195, + 0.008593156250000789, + 0.008810374999999482, + 0.008360781250001281, + 0.008302218749999923, + 0.008722531250000998, + 0.008348749999999683, + 0.008571656249998227, + 0.008249843750000707, + 0.008530125000000055, + 0.0085873437499977, + 0.008605625000001282, + 0.00866962499999957, + 0.008478718749998393, + 0.008156125000002845, + 0.008168593749999786, + 0.00837959374999997, + 0.008301125000002685, + 0.008404656250000642, + 0.008309718749998751, + 0.008261156250000568, + 0.008149218749998965, + 0.00815575000000024, + 0.008551406249999616, + 0.008529843750000765, + 0.008941656249998431, + 0.008549968749999692, + 0.008563062499998608, + 0.008468937500001772, + 0.008381531250002183, + 0.008349468749997868, + 0.008740812500001027, + 0.008170937500000974, + 0.008224781250000035, + 0.008340406249999432, + 0.008332031249999261, + 0.008411218749998284, + 0.008140343750000056, + 0.008366406249997738, + 0.008210124999997959, + 0.008251375000000394, + 0.008204093750002528, + 0.008610406249999869, + 0.008280124999998861, + 0.00820584374999811, + 0.008159749999997246, + 0.008374187499999408, + 0.008227406250000513, + 0.008221999999999952, + 0.008353718750001349, + 0.008112031250000484, + 0.008086093749998469, + 0.008428218749997995, + 0.00826390625000073, + 0.008342625000000936, + 0.008233343749999733, + 0.008415968750000502, + 0.00827203124999798, + 0.008327156250000911, + 0.008318062499999002, + 0.008295531250002597, + 0.008239156249999269, + 0.0078418125000006, + 0.00780706250000307, + 0.007813468750001107, + 0.008302000000000476, + 0.008165343750000886, + 0.008120406250000656, + 0.00809656250000046, + 0.008152937500000235, + 0.008254437499999767, + 0.008278687499998938, + 0.007862750000001029, + 0.008298968750001023, + 0.008373093749998617, + 0.008127906249999484, + 0.008186531249997131, + 0.008210906249999539, + 0.007829781250002554, + 0.007796781250000606, + 0.008173187499998846, + 0.008173250000002241, + 0.008157250000000005, + 0.007994531249998715, + 0.008186500000000763, + 0.008159656250001035, + 0.008122062500000027, + 0.008152656250000945, + 0.008178343750000039, + 0.008610749999999001, + 0.008096906249999591, + 0.008087937499997366, + 0.008531468750000215, + 0.008216625000002864, + 0.008423156250000119, + 0.008542593750000549, + 0.008340593749998959, + 0.008180718750001148, + 0.008322781249997746, + 0.00830937499999962, + 0.008244812500002752, + 0.008460437499998363, + 0.008161812499999144, + 0.00803928124999942, + 0.007867000000000957, + 0.008092781249999348, + 0.007897406249998795, + 0.00803309375000083, + 0.008048500000001013, + 0.007989437500000918, + 0.007983281249998697, + 0.00798871874999918, + 0.007881562499999717, + 0.007778906249999551, + 0.007770687499998985, + 0.008572593749999413, + 0.010162562499999694, + 0.008068093750001282, + 0.008409406249999307, + 0.007905406249999913, + 0.008063187499999458, + 0.008258343750000563, + 0.0086069062500016, + 0.008011812499997717, + 0.010885124999997942 + ], + "edit": [ + 4.955531999999948, + 5.128673000000049, + 5.6764890000000605, + 6.497974999999997, + 4.899511999999959, + 6.247855999999956, + 3.9042859999999564, + 4.187636999999995, + 4.477991000000088, + 4.570239000000015, + 4.511060000000043, + 5.953412999999955, + 4.688755000000015, + 4.0061059999999316, + 3.9475780000000213 + ], + "sort": [ + 0.23132399999997233, + 0.23310300000002826, + 0.2311409999999796, + 0.22530199999994238, + 0.22700099999997292, + 0.23106200000006538, + 0.22891699999991033, + 0.2202389999999923, + 0.21822399999996378, + 0.217412999999965, + 0.24225799999999253, + 0.22510199999999259, + 0.26072899999996935, + 0.2351610000000619, + 0.2429060000000618 + ], + "filter": [ + 0.06342999999992571, + 0.06341799999995601, + 0.07351700000003802, + 0.06534699999997429, + 0.07829099999992195, + 0.09863899999993464, + 0.07245899999998073, + 0.06856399999992391, + 0.06575099999997747, + 0.06151700000009441, + 0.0664480000000367, + 0.06213600000000952, + 0.06274299999995492, + 0.0705319999999574, + 0.06573400000002039 + ], + "multiFilter": [ + 0.48271200000010595, + 0.5105689999999186, + 0.5221549999999979, + 0.44805200000007517, + 0.4470169999999598, + 0.4905310000000327, + 0.46874000000002525, + 0.49548700000002555, + 0.48500000000001364, + 0.49836199999992914, + 0.48634900000001835, + 0.5066790000000765, + 0.414621000000011, + 0.4173829999999725, + 0.44155700000010256 + ], + "distinctLow": [ + 0.4368570000000318, + 0.42391700000007404, + 0.4218580000000429, + 0.4378840000000537, + 0.4487970000000132, + 0.4586549999999079, + 0.46222099999999955, + 0.44567799999992985, + 0.7244130000000268, + 0.7395819999999276, + 0.7909519999999475, + 0.7380329999999731, + 0.7244949999999335, + 0.6941810000000714, + 0.7187079999999924 + ], + "distinctHigh": [ + 3.215274000000022, + 2.1515699999999924, + 1.892904000000044, + 1.9252050000000054, + 1.9260620000000017, + 2.249447000000032, + 1.9051739999999882, + 3.5006539999999404, + 2.1769789999999603, + 2.2280550000000403, + 2.0545569999999316, + 1.9979600000000346, + 2.0999970000000303, + 2.2622910000000047, + 2.045620999999983 + ], + "aggregate": [ + 0.022177039062500015, + 0.018952343749999656, + 0.018924421875000874, + 0.01889719531249945, + 0.019065546875001615, + 0.019185812499999955, + 0.019551171875001216, + 0.01913506250000019, + 0.019462281250000046, + 0.019077687499999385, + 0.019048007812498824, + 0.01921093750000047, + 0.019325601562501404, + 0.01936717187499859, + 0.020005664062498596, + 0.01910072656249895, + 0.018879890625001394, + 0.019067070312500434, + 0.018937656249999435, + 0.01889567187500063, + 0.018838562499999156, + 0.018759507812500686, + 0.018684976562500566, + 0.019220101562499536, + 0.018545937500000775, + 0.018356999999999957, + 0.018581476562500754, + 0.01886402343749971, + 0.018815929687500343, + 0.018971718750000477, + 0.019835007812499583, + 0.018894109374999246, + 0.019102835937498952, + 0.020686500000000052, + 0.01929242187499902, + 0.023756078125000357, + 0.019762453124998913, + 0.018933328124999704, + 0.018930375000000055, + 0.019615796874999702, + 0.01923553906249964, + 0.019287203124999763, + 0.0196685703124988, + 0.020198132812501157, + 0.01937799218750058, + 0.019380140624999598, + 0.01917160156249942, + 0.01915169531249994, + 0.01887396093749949, + 0.019813250000000338, + 0.018785335937499426, + 0.01879746093749901, + 0.019237085937499288, + 0.019109343749999397, + 0.019103187499998953, + 0.019868382812498808, + 0.018890445312500503, + 0.018898156249999687, + 0.01911877343749957, + 0.019363468749999058, + 0.019363101562499097, + 0.019206406249999475, + 0.019333546874999996, + 0.018963250000000542, + 0.019069156250001384, + 0.01991834374999968, + 0.019303531249999395, + 0.019353234375000028, + 0.019222078125000763, + 0.019409234374998974, + 0.019296968749999976, + 0.018921406249999606, + 0.019776585937499647, + 0.01925612500000007, + 0.019055562500000178, + 0.01882006249999968, + 0.019413296874999375, + 0.019742195312499433, + 0.02005344531250053, + 0.019323093749999742, + 0.019076617187499423, + 0.018867609375000427, + 0.019145906249999456, + 0.01927847656249959, + 0.018985617187500026, + 0.019277695312499787, + 0.0195874609374993, + 0.01954022656249954, + 0.01918460937499944, + 0.01930206249999955, + 0.0190572734375003, + 0.019001593749999657, + 0.018972953125000913, + 0.020059617187500933, + 0.018851164062500203, + 0.018924906250001428, + 0.020392257812499537, + 0.01923014843749904, + 0.018922585937499292, + 0.019503101562499126, + 0.02105088281249934, + 0.019372273437499032, + 0.019306187499999794, + 0.019575328125000624, + 0.0193948749999997, + 0.019299328125001125, + 0.019774906250001223, + 0.019127054687499978, + 0.019113296875000074, + 0.019029851562500255, + 0.019570640625000024, + 0.01925420312499959, + 0.019285929687500314, + 0.019585796875000838, + 0.019102859375001557, + 0.02834699218750103, + 0.0191477265624993, + 0.019313812500000083, + 0.01893389062500006, + 0.018811046875001125, + 0.018909203125000218, + 0.01887303906250004, + 0.019377828125000107, + 0.023074656249999492, + 0.019455984374999957, + 0.027792671875001673, + 0.018096578125000207, + 0.019466859374999146, + 0.020622742187500265, + 0.03730991406249906, + 0.022263281249999878, + 0.017732132812501078, + 0.018871804687499605, + 0.019502820312499836, + 0.02158481250000044, + 0.023481640625000466, + 0.02256044531250012, + 0.022743273437500378, + 0.04887596093749913, + 0.030654179687500616, + 0.020010453124999827, + 0.018041226562500512, + 0.017040218750000946, + 0.017201101562500654, + 0.017193374999999733, + 0.017241070312500995, + 0.0185914765624986, + 0.018341906249998985, + 0.01846513281249962, + 0.018354945312500703, + 0.018691890624999985, + 0.018607125000000835, + 0.019685460937500565, + 0.03446389843750097, + 0.03241477343749999, + 0.017007945312499828, + 0.017015898437501065, + 0.017316859375000604, + 0.018115875000001225, + 0.0186089765625006, + 0.018143093750000006, + 0.018985749999998802, + 0.01878988281250038, + 0.01875625781250001, + 0.02303626562499872, + 0.021017281249999797, + 0.019615929687500255, + 0.018278296875001487, + 0.01833756250000107, + 0.017956710937498954, + 0.017492359374999822, + 0.018721742187498336, + 0.018083234375000146, + 0.01894984375000064, + 0.020152445312499268, + 0.018592835937500496, + 0.018628382812501343, + 0.01887635937499965, + 0.01909347656249949, + 0.019710382812499816, + 0.020247484375000013, + 0.018898117187498897, + 0.019067656249999843, + 0.019057765624999945, + 0.018797093750000826, + 0.021475210937500933, + 0.023568742187499936, + 0.018942953125000273, + 0.01912478906250037, + 0.019254437499999, + 0.01879360937500074, + 0.018817570312499754, + 0.01917370312500033, + 0.023925054687500946, + 0.019013171875000623, + 0.017879304687500763, + 0.017981203125000178, + 0.01807604687500053, + 0.019930828125000133, + 0.030282499999998436 + ] + }, + "100000": { + "ingest": [ + 150.2509160000002, + 144.83037499999978, + 139.86844999999994, + 148.055562, + 148.1090419999996, + 130.87277099999983, + 129.2945239999999 + ], + "windowRead": [ + 0.008463499999990631, + 0.008629687499990268, + 0.00958221874999765, + 0.008752812500006257, + 0.008757500000001528, + 0.008770281250008338, + 0.008520156250000355, + 0.008536937499997066, + 0.008898718750003809, + 0.008573781249992862, + 0.008677593749993662, + 0.00926524999999856, + 0.008576718749992551, + 0.008504468750004435, + 0.008969562499999029, + 0.008884968750010103, + 0.00888278125000852, + 0.009136468750000404, + 0.00902131249999627, + 0.008686312500003623, + 0.008651812500005462, + 0.009000968750001448, + 0.008974625000007563, + 0.00877649999999619, + 0.008991375000007906, + 0.00844784374999108, + 0.008839781249989187, + 0.008909718750004458, + 0.008609750000005079, + 0.008848437499992201, + 0.008432187500005739, + 0.008738718749995655, + 0.00878143750000504, + 0.008586249999993356, + 0.00856734375000201, + 0.00859243749999905, + 0.008461906250005313, + 0.008650937500007672, + 0.008550562499991088, + 0.011074562499999274, + 0.0090365625000004, + 0.008605625000001282, + 0.00858171875000835, + 0.009038781249998351, + 0.008287187499988136, + 0.008281093749999968, + 0.008241749999996273, + 0.008546531249990608, + 0.008469093749994272, + 0.00856890625000517, + 0.008855906250005319, + 0.009099374999991028, + 0.008539281250008912, + 0.0088150624999912, + 0.008815781250007149, + 0.00833084375000226, + 0.008501093749998745, + 0.00882493749999469, + 0.008526906249997523, + 0.008717437499996095, + 0.008268187499993473, + 0.00879196875000332, + 0.008207374999997796, + 0.008427875000009522, + 0.00882715624999264, + 0.008812093749995142, + 0.008815031249994831, + 0.00884374999999693, + 0.008782000000010726, + 0.009098687499999869, + 0.008916343750001943, + 0.008675968750011975, + 0.008984124999997789, + 0.008803687500005708, + 0.008738031250004497, + 0.00881912500000226, + 0.008833562500001335, + 0.009315093750004166, + 0.008386624999999981, + 0.008869562499995709, + 0.008706937499994183, + 0.00856509374999348, + 0.008993250000003172, + 0.008781374999998093, + 0.008728500000003692, + 0.009228000000007341, + 0.008889968749997479, + 0.008625531250004315, + 0.008737218749999442, + 0.009305906249991835, + 0.00847453125000186, + 0.00877403124999887, + 0.008907781249988034, + 0.009222937499998807, + 0.008430250000003525, + 0.008552406249989986, + 0.008920843750004792, + 0.008687812499999836, + 0.008891250000004902, + 0.00863640625000528, + 0.012326500000000351, + 0.009070750000006456, + 0.008656375000001049, + 0.008549437499993928, + 0.008637843750008756, + 0.008830781249997699, + 0.008698187500002064, + 0.008884218749997785, + 0.008924656250002272, + 0.008713781250008878, + 0.008444312500003548, + 0.008484249999995086, + 0.008544406249995973, + 0.00848818749999225, + 0.008606156249996388, + 0.008493906249995575, + 0.008248218749997704, + 0.008463375000005158, + 0.008862937499998225, + 0.008678593750005348, + 0.008626843750008106, + 0.008739343749994077, + 0.008139687500005266, + 0.008552937499999302, + 0.008228531249997673, + 0.00851734375000035, + 0.008265062500001363, + 0.009063781250006286, + 0.008397375000001261, + 0.008171750000002476, + 0.008177156249999484, + 0.008721500000007154, + 0.008484218749998718, + 0.008995406250008386, + 0.008659999999991896, + 0.008301781249997475, + 0.008561124999999947, + 0.008488593750001883, + 0.00818890624999824, + 0.008556031250009255, + 0.009020562499998164, + 0.008669250000011175, + 0.008974625000007563, + 0.008963812499999335, + 0.013445093749993475, + 0.015936281250006346, + 0.018424499999994737, + 0.018948093749997952, + 0.03946765625001092, + 0.02078715624999461, + 0.020433718749998775, + 0.0743369687499893, + 0.01438659375000384, + 0.015058656249991031, + 0.013766750000002048, + 0.013617656250005439, + 0.014333031250004069, + 0.01379093750000493, + 0.014094812499990894, + 0.01407674999998676, + 0.01424240624999129, + 0.013478375000005371, + 0.01350665625000147, + 0.014109625000003234, + 0.0127836249999973, + 0.013013250000000198, + 0.01277421874999618, + 0.012417187500005866, + 0.012226406249993715, + 0.01244353124999975, + 0.01218371874999491, + 0.011763656249996757, + 0.012302812499996207, + 0.011478531249991875, + 0.010897812500004989, + 0.011531718750006803, + 0.013217375000010634, + 0.012276843750001376, + 0.011548750000002883, + 0.012306000000009476, + 0.014734937499994771, + 0.007444250000006036, + 0.0074875937499996326, + 0.00709756249999316, + 0.0072690625000007, + 0.006901406249994579, + 0.006757500000006189, + 0.006738249999997947, + 0.007053656249993878, + 0.007243437500008554, + 0.006889062500007981, + 0.0071661874999904285, + 0.006986062500004664, + 0.006985718750001979, + 0.006916687499995078, + 0.006991718750001041, + 0.00698031250000497, + 0.007122937500000148, + 0.007037124999996536, + 0.007015656250004554, + 0.006827000000001249, + 0.006982843750009238, + 0.007354593749994365, + 0.006878624999998806, + 0.007155999999994833, + 0.0070623437500074715, + 0.007294500000000426, + 0.007364312500001802, + 0.007254656249997993, + 0.006693218750001506, + 0.007116968749997454, + 0.007466406250003388, + 0.00744931250000036, + 0.007405499999990184, + 0.007331781250002223, + 0.008145562499990433, + 0.0072656874999950105, + 0.007591593749992853, + 0.008804593749999867, + 0.007250374999998144, + 0.006703031249998048, + 0.006663781249997669, + 0.006939156249998746, + 0.0072191562500023565, + 0.007242999999988342, + 0.006930156249993047, + 0.006865031250001152, + 0.007153781249996882, + 0.007103656249995538, + 0.006698843750001515, + 0.006896375000010835, + 0.015524937499989733, + 0.011280031249995659, + 0.011419062499996357, + 0.011749156250004944, + 0.011298749999994584, + 0.011412187499999504, + 0.01155887499999153, + 0.01127846875000671, + 0.013349656249999953, + 0.008625375000008262, + 0.008459531249997099, + 0.008452937499995983, + 0.008543593749990919, + 0.008084624999995071, + 0.007580687500009731, + 0.007845625000001633, + 0.00722759375000237, + 0.007203312499996173, + 0.007388812500010999, + 0.007374406249994081, + 0.007149093749987401, + 0.007035781249996376, + 0.006937906250001902, + 0.006915375000005497, + 0.007179093749996923, + 0.007234249999996223, + 0.0070675937499942165, + 0.006878031249996752, + 0.0074026249999974425, + 0.007489562499998215, + 0.006969937500002743, + 0.007047499999998763, + 0.006862656249992938, + 0.0066848750000048085, + 0.006707374999990634, + 0.006724218750008504, + 0.006500093750005931, + 0.006420718749993171, + 0.00709846875000153, + 0.006642531249994477, + 0.006624500000000921, + 0.007412906249996354, + 0.0074390000000050804, + 0.006994187499998361, + 0.007339874999999552, + 0.007289156249996154, + 0.008228875000000357, + 0.007279218749999927, + 0.008204750000004424, + 0.006830031249990043, + 0.006892031249989827, + 0.011111062500006597, + 0.00660121875000641, + 0.0067003749999940965, + 0.006509031250004682, + 0.00710024999999348, + 0.006614249999998378, + 0.006940499999998906, + 0.007650156249994211, + 0.007072562499999435, + 0.007075562500006072, + 0.007053531249994194, + 0.006776000000002114, + 0.007013687499991761, + 0.007419937500003471, + 0.007003968749998535, + 0.007046968750003657, + 0.0071394374999869115, + 0.007033843750008373 + ], + "edit": [ + 4.725929000000178, + 6.688873000000058, + 4.223558000000139, + 4.296032000000196, + 4.992062999999689, + 6.889596999999867, + 7.320449000000281, + 7.09666500000003, + 5.814777999999933, + 5.685314999999719, + 5.863377000000128, + 5.477465999999822, + 5.824247999999898, + 6.192620000000261, + 7.911413000000266 + ], + "sort": [ + 2.3287740000000667, + 2.22954800000025, + 2.060620000000199, + 2.020035999999891, + 2.334997999999814, + 2.406743000000006, + 2.2608259999997244, + 2.424901999999747, + 2.4211119999999937, + 2.4260340000000724, + 2.4224020000001474, + 2.5641649999997753, + 2.632759999999962, + 2.6149999999997817, + 2.5977560000001176 + ], + "filter": [ + 0.5739810000000034, + 0.534291999999823, + 0.5682929999998123, + 0.5874050000002171, + 0.5710380000000441, + 0.6054100000001199, + 0.5557890000000043, + 0.6181849999998121, + 0.579345000000103, + 0.6183750000000146, + 0.5862520000000586, + 0.575050999999803, + 0.6277210000002924, + 0.6160979999999654, + 0.6143839999999727 + ], + "multiFilter": [ + 5.766900999999962, + 5.725470000000314, + 4.980121000000054, + 4.461428999999953, + 4.199867000000268, + 3.9543290000001434, + 4.710876999999982, + 4.962047999999868, + 5.052447000000029, + 5.006437000000005, + 5.068525000000136, + 5.091638999999759, + 5.226296000000275, + 5.078230000000076, + 5.1262189999997645 + ], + "distinctLow": [ + 5.000352000000021, + 4.934827000000041, + 4.820600000000013, + 4.907266999999592, + 4.986539999999877, + 4.82435600000008, + 5.077346999999918, + 4.985607000000073, + 4.96684600000026, + 4.9340400000000955, + 5.183821999999964, + 5.010757999999896, + 4.926101000000017, + 5.036908999999923, + 5.028982000000269 + ], + "distinctHigh": [ + 30.60456299999987, + 31.450976999999966, + 23.116691000000174, + 22.727990000000318, + 24.78980199999978, + 26.73131000000012, + 25.749123000000054, + 27.827933999999914, + 26.278508999999758, + 25.066987000000154, + 28.788053000000218, + 25.021527000000333, + 25.47614599999997, + 25.69694500000014, + 25.518073000000186 + ], + "aggregate": [ + 0.22574500000018816, + 0.2241119999998773, + 0.22418699999980163, + 0.22764599999982238, + 0.224283000000014, + 0.22413099999994301, + 0.22381300000006377, + 0.22370200000023033, + 0.22782099999994898, + 0.2223319999998239, + 0.21792900000036752, + 0.21786699999984194, + 0.22150600000031773, + 0.21825099999978192, + 0.21814199999971606, + 0.2178009999997812, + 0.21828099999993356, + 0.2961880000002566, + 0.27994600000010905, + 0.22392599999966478, + 0.21801899999991292, + 0.22336899999982052, + 0.21803500000032727, + 0.21777600000041275, + 0.2178790000002664, + 0.22135900000012043, + 0.21801899999991292, + 0.2181709999999839, + 0.2177769999998418, + 0.21792000000004919, + 0.21976800000038565, + 0.21790999999984706, + 0.2178289999997105, + 0.21801400000003923, + 0.21787499999982174, + 0.22029299999985597, + 0.21763199999986682, + 0.21784400000024107, + 0.21212500000001455, + 0.2155729999999494, + 0.21224099999972168, + 0.21224500000016633, + 0.21215200000006007, + 0.21215900000015608, + 0.21585700000014185, + 0.2122629999998935, + 0.21200999999973646, + 0.21509599999990314, + 0.21181799999976647, + 0.21560199999976248, + 0.2122279999998682, + 0.21193499999981213, + 0.21216099999992366, + 0.21663399999988542, + 0.21210500000006505, + 0.21219299999984287, + 0.21828299999970113, + 0.2118929999996908, + 0.2147899999999936, + 0.21203600000035294, + 0.21226900000010573, + 0.21634999999969295, + 0.21202499999981228, + 0.21470499999986714, + 0.21216899999990346, + 0.21860700000024735, + 0.21187899999995352, + 0.2173600000000988, + 0.2122190000000046, + 0.2180700000003526, + 0.21279299999969226, + 0.2122220000001107, + 0.21700900000041656, + 0.2128469999997833, + 0.21261600000025282, + 0.2121950000000652, + 0.21288099999992482, + 0.21845900000016627, + 0.2239529999997103, + 0.22388899999987188, + 0.22384400000009919, + 0.2336739999996098, + 0.22450000000026193, + 0.22370300000011412, + 0.2290379999999459, + 0.222295000000031, + 0.21803300000010495, + 0.21811600000000908, + 0.21791399999983696, + 0.21780100000023594, + 0.22164199999997436, + 0.21917600000006132, + 0.21776200000022072, + 0.22222400000009657, + 0.22451300000011543, + 0.22843399999965186, + 0.2236640000000989, + 0.22395300000016505, + 0.2278150000001915, + 0.2272250000000895, + 0.2242330000003676, + 0.22383199999967474, + 0.2288260000000264, + 0.22754499999973632, + 0.2238670000001548, + 0.22739499999988766, + 0.21781499999997322, + 0.21787700000004406, + 0.2272010000001501, + 0.22384000000010928, + 0.22818899999992937, + 0.22411300000021583, + 0.23548499999969863, + 0.22443599999996877, + 0.22399500000028638, + 0.22476000000006024, + 0.2177849999998216, + 0.23515499999984968, + 0.21826499999997395, + 0.2199270000000979, + 0.2280240000000049, + 0.2203300000001036, + 0.2181390000000647, + 0.21786800000018047, + 0.21786599999995815, + 0.2204810000002908, + 0.2206820000001244, + 0.22512600000027305, + 0.22346999999990658, + 0.2237609999997403, + 0.22657800000024508, + 0.2236550000002353, + 0.22413400000004913, + 0.22864300000037474, + 0.2236630000002151, + 0.23315299999967465, + 0.22484099999974205, + 0.22486000000026252, + 0.2256630000001678, + 0.22740999999996347, + 0.2237209999998413, + 0.22410899999977119, + 0.22632599999997183, + 0.22383099999979095, + 0.22885699999960707, + 0.22428800000034244, + 0.22403600000006918, + 0.22401200000012977, + 0.22790799999984301, + 0.2245229999998628, + 0.22436199999992823, + 0.22452100000009523, + 0.22785700000031284, + 0.22398199999997814, + 0.2244100000002618, + 0.224898999999823, + 0.22407699999985198, + 0.2278639999999541, + 0.21828299999970113, + 0.2179759999999078, + 0.21779000000015003, + 0.2209619999998722, + 0.217616999999791, + 0.21824599999990824, + 0.21789599999965503, + 0.2177809999998317, + 0.22665999999981068, + 0.21781300000020565, + 0.22275800000033996, + 0.21825400000034278, + 0.2178449999996701, + 0.2217599999999038, + 0.21763100000043778, + 0.2195070000002488, + 0.2177280000000792, + 0.24899200000027122, + 0.3378099999999904, + 0.23299599999972997, + 0.21864199999981793, + 0.2237169999998514, + 0.2179599999999482, + 0.21785099999988233, + 0.21766800000023068, + 0.2195409999999356, + 0.21739600000000792, + 0.2173680000000786, + 0.21977700000024925, + 0.2237009999998918, + 0.22923899999977948, + 0.223500999999942, + 0.22367599999961385, + 0.22391000000015993, + 0.22922399999970366, + 0.22395899999992253, + 0.22458899999992354, + 0.22387899999966976, + 0.2242410000003474, + 0.22698399999990215, + 0.2242959999998675, + 0.22391600000037215 + ] + }, + "500000": { + "ingest": [ + 648.7530819999993, + 695.8102930000005, + 753.6603170000008 + ], + "windowRead": [ + 0.01007765624996182, + 0.010804250000035154, + 0.01098703125001066, + 0.010385281250023581, + 0.011522343749959418, + 0.010520437499963009, + 0.01062962499997866, + 0.010347718750040258, + 0.010188937500004158, + 0.009868624999967324, + 0.010087468749986783, + 0.010310062500025197, + 0.009812812500001655, + 0.010207218749997082, + 0.010699500000043827, + 0.016246937500000058, + 0.010106687500012868, + 0.009882937499980926, + 0.010171281249995445, + 0.010014531249964875, + 0.010289781249980479, + 0.009945281249997606, + 0.010280375000036202, + 0.010515562499961106, + 0.010060906249975687, + 0.010755531250026706, + 0.010636468750021777, + 0.010891093749989977, + 0.012610531250004442, + 0.011446468750023087, + 0.010595249999994394, + 0.011333750000005693, + 0.011225906249990203, + 0.010926687500045773, + 0.01088453124998523, + 0.010148874999970303, + 0.01113512499995295, + 0.011746593749990097, + 0.009913187499989817, + 0.009914656250032294, + 0.010709687499968368, + 0.010061218749967793, + 0.010062749999974585, + 0.011018031250046079, + 0.016772312499995223, + 0.009749249999970289, + 0.01017337499996529, + 0.01134034375002102, + 0.011819812500050375, + 0.011414093750033771, + 0.010428156249986387, + 0.010860625000020718, + 0.01113178124995784, + 0.010725874999991447, + 0.01092937499998925, + 0.011193312499983676, + 0.010742093749968262, + 0.010967281250032102, + 0.010788593749964548, + 0.011383531250032775, + 0.010622375000025386, + 0.010448875000008684, + 0.010976406249994852, + 0.01084465625001485, + 0.010838624999962576, + 0.010928750000005039, + 0.012009874999989734, + 0.011514281250015301, + 0.010603750000029777, + 0.010407187499993142, + 0.013964187499993841, + 0.010725312499971551, + 0.010268281249977917, + 0.010430687500047497, + 0.01644299999998111, + 0.010244000000000142, + 0.011511312499976611, + 0.010090812499981894, + 0.011430281250000007, + 0.010587687499992171, + 0.010548437500006003, + 0.010368000000028132, + 0.01056349999998929, + 0.010374624999997195, + 0.009990781249996417, + 0.014769937499977459, + 0.010274718749997191, + 0.010203062500011129, + 0.009877718749976339, + 0.009793343750004624, + 0.00970124999997779, + 0.009838000000002012, + 0.009661093750025884, + 0.009693781249950462, + 0.010331968749994758, + 0.010351156250010263, + 0.010327749999987645, + 0.010230718749994594, + 0.010143437500005348, + 0.010203406250013813, + 0.010957468750007138, + 0.01668656250001277, + 0.010639812500016887, + 0.010382562500012682, + 0.010557843750007123, + 0.010311624999985725, + 0.011013999999988755, + 0.010331937500041022, + 0.010424124999985906, + 0.010574562499982676, + 0.010455437500013431, + 0.010733125000001564, + 0.011059687499994197, + 0.010457750000000487, + 0.010269750000020395, + 0.010307031250022192, + 0.010314531250003256, + 0.010633968750028089, + 0.010675499999990734, + 0.010649093749975691, + 0.011360156250020736, + 0.010636312500025724, + 0.010428624999974545, + 0.010440281249998407, + 0.01017321875002608, + 0.009811624999997548, + 0.011025625000002037, + 0.01067959374995553, + 0.01052025000001322, + 0.010625281250042917, + 0.010165874999984226, + 0.016130250000003343, + 0.00998846875000936, + 0.010022437500026626, + 0.009857187499960673, + 0.009971468749995438, + 0.009837624999988748, + 0.00978356249999024, + 0.009740656250016855, + 0.009825062499999149, + 0.009853656250015774, + 0.011434624999992593, + 0.01150937500000282, + 0.01089437499996393, + 0.01081262500002822, + 0.014736625000011827, + 0.011220468750025248, + 0.0107812187500258, + 0.012028124999972079, + 0.01135246875003304, + 0.010875093750030373, + 0.010944312499987063, + 0.011042187499981537, + 0.01075131249996275, + 0.010567437499958032, + 0.01081840624999586, + 0.010557281249987227, + 0.01015140624997457, + 0.010733500000014828, + 0.01051625000002332, + 0.01720953124998914, + 0.01029968750003718, + 0.01067134375000478, + 0.010530593749990658, + 0.010146218749980562, + 0.010665312499952506, + 0.010453031249994638, + 0.010239750000039294, + 0.010028468750022057, + 0.01031799999998384, + 0.009931812499985426, + 0.009873187500033964, + 0.010186031249986627, + 0.009739718749983695, + 0.010178593750026721, + 0.010794218749992979, + 0.011168031250008426, + 0.010111812499985717, + 0.01117040625001664, + 0.009976312500043605, + 0.010029874999986532, + 0.010149968749999516, + 0.00987590624998802, + 0.009772156249994168, + 0.009963781250007742, + 0.009691343749977932, + 0.011453531249969728, + 0.012967093749978176, + 0.010289687500005584, + 0.016526093749973825, + 0.010839156249971893, + 0.010507968750005148, + 0.011598468749980384, + 0.010365374999992127, + 0.010332750000031865, + 0.011332843749983113, + 0.010625000000004547, + 0.011005781249991742, + 0.011550249999970674, + 0.014412968749979882, + 0.015324843749965567, + 0.012495125000043572, + 0.010701499999981934, + 0.010336937500028398, + 0.010211187499976404, + 0.009874093749999702, + 0.011335468749962274, + 0.01020303125000055, + 0.010352187500018317, + 0.010334750000026816, + 0.010209843749976244, + 0.010325312499958272, + 0.011450062499989144, + 0.010238781249995554, + 0.014683312499983003, + 0.01177231249999977, + 0.011290718749989992, + 0.011539125000012973, + 0.01737212500000851, + 0.010059843750013897, + 0.012174906249981632, + 0.009930062499961423, + 0.01842643750001116, + 0.010430906250007865, + 0.01198484374998543, + 0.011106625000024906, + 0.010308499999950982, + 0.012306406249990687, + 0.010830000000055406, + 0.010974312500025007, + 0.013794812500009357, + 0.010898437499974989, + 0.010447718750015156, + 0.010657437500015021, + 0.009891281250020256, + 0.010943624999981694, + 0.010258031249975375, + 0.010474218750005093, + 0.010449718749953263, + 0.010623968749996493, + 0.01080318750001652, + 0.010485031250027532, + 0.011180281250005919, + 0.010413406249995205, + 0.010333968749989708, + 0.016780156250035816, + 0.010114531249996617, + 0.010591374999989966, + 0.010250500000040574, + 0.010090187500054526, + 0.010551500000019587, + 0.010422687500010852, + 0.009820124999976088, + 0.010314187500000571, + 0.010154187500006628, + 0.010687406249985543, + 0.010323499999969954, + 0.010391312500019012, + 0.010065562499960379, + 0.010343750000004093, + 0.009919718750040829, + 0.010331812499998705, + 0.010356906250024167, + 0.010115468749972933, + 0.009791562500026885, + 0.010316312499980995, + 0.009861156249996839, + 0.009896468750014265, + 0.009513343749972591, + 0.009708968749976066, + 0.010069093749962121, + 0.00999896874998285, + 0.010117718749995674, + 0.010065843749998749, + 0.01038549999998395, + 0.016190718750010547, + 0.009772781250035223, + 0.009952343750001091, + 0.009932749999961743, + 0.009752937500024927, + 0.009721781250050299, + 0.00975015624999287, + 0.009715937500004657, + 0.00962703124997688, + 0.010316999999986365, + 0.009369375000005675, + 0.011418062500013093, + 0.01338156250000111, + 0.00990731249999044, + 0.009744624999996176, + 0.01018843750000542, + 0.00978112500001771, + 0.01057424999999057, + 0.01015412499998547, + 0.009928062500023316, + 0.010049374999994143, + 0.010360656249986278, + 0.009658968749988617, + 0.00983271875003311, + 0.00972643750003499 + ], + "edit": [ + 4.271631999999954, + 8.174042999999074, + 3.7423689999995986, + 3.940918000000238, + 3.846136000000115 + ], + "sort": [ + 11.674893999999767, + 11.449689999999464, + 12.058016999999381, + 13.159460000000763, + 12.65394600000036 + ], + "filter": [ + 2.4455829999988055, + 2.959039000001212, + 2.348043999998481, + 3.1229129999992438, + 2.588529999999082 + ], + "multiFilter": [ + 20.691672999999355, + 20.889651999999842, + 21.639352000000144, + 21.556038999999146, + 22.835649000000558 + ], + "distinctLow": [ + 21.59110800000053, + 19.921243000000686, + 23.34211299999879, + 26.092726999999286, + 23.48272999999972 + ], + "distinctHigh": [ + 138.20171400000072, + 134.00521300000037, + 149.42576499999996, + 132.60067400000116, + 129.9203779999989 + ], + "aggregate": [ + 1.2283229999993637, + 1.094397000000754, + 1.090594000001147, + 1.0897939999995288, + 1.0887620000012248, + 1.0973679999988235, + 1.1569240000007994, + 1.091737999999168, + 1.0885189999989962, + 1.094383999999991, + 1.0909110000011424, + 1.09177500000078, + 1.1016649999983201, + 1.093297999999777, + 1.0914020000000164, + 1.0894559999997, + 1.1133609999997134, + 1.3559839999998076, + 1.1317810000000463, + 1.120548000000781, + 1.12570500000038, + 1.1265390000007756, + 1.125121000000945, + 1.118199000000459, + 1.1144069999991189, + 1.0884729999997944, + 1.096230999999534, + 1.0937720000001718, + 1.0902879999994184, + 1.090355999998792, + 1.1444229999997333, + 1.1215459999984887, + 1.1183929999988322, + 1.1188310000015917, + 1.125079999999798, + 1.7706020000005083, + 1.1240089999992051, + 1.1219060000003083, + 1.1318840000003547, + 1.1211770000008983, + 1.1210140000002866, + 1.1281450000005862, + 1.1281550000003335, + 1.1222579999994196, + 1.1296430000002147, + 1.1214619999991555, + 1.1231090000001132, + 1.1277089999985037, + 1.1220869999997376, + 1.2190690000006725, + 1.1260110000002896, + 1.121607999999469, + 1.1218370000005962, + 1.1206199999996898, + 1.1249939999997878, + 1.1037799999994604, + 1.08891500000027, + 1.100812999999107, + 1.103891000000658, + 1.1222729999990406, + 1.1251160000010714, + 1.1204780000007304, + 1.1216139999996813, + 1.1246030000002065, + 1.1247789999997622, + 1.1255390000005718, + 1.1252220000005764, + 1.120799000000261, + 1.120044000001144, + 1.120996000001469, + 1.1118839999999182, + 1.0917829999998503, + 1.0993040000012115, + 1.0921220000000176, + 1.1245810000000347, + 1.1394659999987198, + 1.1208150000002206, + 1.1222560000005615, + 1.121860999999626, + 1.1228009999995265, + 1.120071999999709, + 1.1455319999986386, + 1.183988999999201, + 1.1473000000005413, + 1.1526229999999487, + 1.1200649999991583, + 1.1243500000000495, + 1.1237829999990936, + 1.1212789999990491, + 1.1206039999997301, + 1.1383770000011282, + 1.1212579999992158, + 1.1241309999986697, + 1.1296750000001339, + 1.2437089999984892, + 1.1184849999990547, + 1.145539999999528, + 1.1181580000011309, + 1.128114999999525, + 1.1246140000002924, + 1.0908390000004147, + 1.0901359999988927, + 1.0926909999998315, + 1.0899070000014035, + 1.0890089999993506, + 1.0903799999996409, + 1.089890999999625, + 1.0901780000003782, + 1.0903980000002775, + 1.0897439999989729, + 1.0896109999994223, + 1.0605649999997695, + 1.0598319999990053, + 1.0610209999995277, + 1.061530999999377, + 1.075038000000859, + 1.089905999999246, + 1.0969420000001264, + 1.096239999998943, + 1.0899630000003526, + 1.0947179999984655, + 1.090158999999403, + 1.090027000000191, + 1.0996999999988475, + 1.1269810000012512, + 1.186491999998907, + 1.0936539999984234, + 1.0926840000010998, + 1.1143489999994927, + 1.1199820000001637, + 1.1208649999989575, + 1.1217620000006718, + 1.1260270000002492, + 1.1304150000014488, + 1.1215470000006462, + 1.1108560000011494, + 1.0902690000002622, + 1.0914080000002286, + 1.1046790000000328, + 2.101136999999653, + 1.457629000000452, + 1.0732669999997597, + 1.0017160000006697, + 0.9876569999996718, + 0.9544389999991836, + 0.934902000000875, + 0.9225999999998749, + 0.9027099999984785, + 0.8774470000007568, + 0.892452999998568, + 0.8905140000006213, + 0.8943970000000263, + 0.9290399999990768, + 1.6703309999993508, + 1.9474519999985205, + 1.956662000000506, + 1.3044900000004418, + 0.8344469999992725, + 0.8242220000011002, + 1.0289239999983693, + 2.0115200000000186, + 2.3844909999988886, + 2.590904999999111, + 1.8416760000000068, + 1.3996019999995042, + 1.5308569999997417, + 1.7732320000013715, + 1.4280720000006113, + 0.8514549999999872, + 0.8268200000002253, + 0.8250439999992523, + 0.8487849999983155, + 0.824601000000257, + 0.9983529999990424, + 0.8413039999995817, + 0.8553620000002411, + 0.8603910000001633, + 0.9239070000003267, + 0.9984720000011293, + 0.948420000000624, + 0.8376289999996516, + 0.8490550000005896, + 0.8920650000000023, + 0.8961589999998978, + 0.8939439999994647, + 1.2046010000012757, + 1.2465850000007777, + 1.1191750000016327, + 1.0682219999998779, + 1.1196710000003804, + 1.098588999999265, + 1.1091199999991659, + 1.1210580000006303, + 1.1302709999999934, + 1.1253910000014002, + 1.119622000000163, + 1.0889119999992545, + 1.0899280000012368, + 1.090116000001217, + 1.0891279999996186 + ] + }, + "1000000": { + "ingest": [ + 1493.9500210000006, + 1443.3689259999992, + 1457.1333569999988 + ], + "windowRead": [ + 0.010964093750089887, + 0.011001031250089, + 0.010698000000047614, + 0.010325812500013853, + 0.010875687500060849, + 0.01001662499993472, + 0.009998906249961692, + 0.010888625000006869, + 0.010066374999951222, + 0.01021618749996378, + 0.011053687499952503, + 0.010600343750070351, + 0.010658374999934495, + 0.010478281250016153, + 0.012899999999945067, + 0.011222156250028092, + 0.012658531249940097, + 0.010882625000022017, + 0.011254375000021355, + 0.011177218750049178, + 0.011027656250007567, + 0.010850531249957385, + 0.011003875000028529, + 0.010788218750008127, + 0.011522343750016262, + 0.011343093750042499, + 0.011497781250000116, + 0.011345125000048029, + 0.011596281249921958, + 0.01497549999999137, + 0.011477499999955398, + 0.010752031250035543, + 0.011476281249997555, + 0.010963718750076623, + 0.010636687499982145, + 0.01079349999997703, + 0.010290156249993743, + 0.01066324999999324, + 0.010686499999906118, + 0.010463468750003813, + 0.01053575000003093, + 0.010446250000086366, + 0.010442125000054148, + 0.01030846875005409, + 0.010874781249981424, + 0.009927562500024578, + 0.011096562500028995, + 0.011184843750015716, + 0.01134440625003208, + 0.011548874999903092, + 0.011534343749985965, + 0.011147281250032393, + 0.014195749999998952, + 0.011109468749964435, + 0.011217156250040716, + 0.011322375000077045, + 0.011609468750066299, + 0.015869500000007974, + 0.019038749999936044, + 0.01889259375002439, + 0.014241406249993815, + 0.012577562500041495, + 0.01229184375006298, + 0.012629281250042368, + 0.012156874999959655, + 0.01242762499998662, + 0.012177875000020322, + 0.012017000000014377, + 0.013260906250025073, + 0.012163750000013351, + 0.011736031250052292, + 0.012697937499979162, + 0.011606000000028871, + 0.011692656250033906, + 0.011597031249948486, + 0.011857281249945117, + 0.011579562499946405, + 0.011167468750045373, + 0.013338406249999935, + 0.013115749999997206, + 0.015847281249989464, + 0.018239531249946594, + 0.01816012500000852, + 0.016399625000076412, + 0.012216281249948224, + 0.012602312500007429, + 0.012017968750001273, + 0.012874750000037238, + 0.019035812500078464, + 0.012522750000016458, + 0.012257312499968975, + 0.011989875000040229, + 0.014345375000061722, + 0.011603718750052394, + 0.012430593750082153, + 0.011888593749972642, + 0.01257318750003833, + 0.012843687500094347, + 0.011900875000037558, + 0.013070000000084292, + 0.012120562499944754, + 0.011536062499999389, + 0.012421000000017557, + 0.01087778124997385, + 0.010943156249936692, + 0.011162812500060681, + 0.012521812499926455, + 0.011356812500025626, + 0.010738187500010099, + 0.013285218749956584, + 0.013260374999958913, + 0.012555718749922562, + 0.013594906250091299, + 0.013140843749965825, + 0.01815221874994677, + 0.013161749999994754, + 0.013487499999996544, + 0.033701156250003805, + 0.024127656250016116, + 0.012780499999962558, + 0.012443562499925065, + 0.012309093749991007, + 0.015602437499978805, + 0.012055562499995176, + 0.012660781250019681, + 0.011898531249926236, + 0.012901999999940017, + 0.012322937500016451, + 0.012485249999940606, + 0.012559375000023465, + 0.011834937499997977, + 0.012125968749955973, + 0.011611625000000458, + 0.01197571875002268, + 0.01260896874998707, + 0.011753343750001477, + 0.01148000000000593, + 0.011919375000047694, + 0.01162971874998675, + 0.013925374999985252, + 0.011555843749988526, + 0.011393093749916261, + 0.013201656249975713, + 0.012804843749904649, + 0.013466656249988773, + 0.012932500000033542, + 0.01310875000001488, + 0.01729565624998486, + 0.017920812500051397, + 0.014377281250062879, + 0.012357874999906926, + 0.012468781249936, + 0.013377999999988788, + 0.018963062500006345, + 0.019737937499940017, + 0.022274375000051805, + 0.022967156250047083, + 0.019274031250006374, + 0.016302218750070097, + 0.015840062499933083, + 0.01549462500008758, + 0.015418062499975349, + 0.018148125000038817, + 0.01542125000003125, + 0.014781968749957741, + 0.015077218749979693, + 0.014804375000039727, + 0.015070531249989472, + 0.014385249999918415, + 0.015048437500013279, + 0.01414599999998245, + 0.014007312499984437, + 0.014248718749968248, + 0.013936124999986532, + 0.015897843749939966, + 0.01575862499998948, + 0.015846343750013148, + 0.01550015625002743, + 0.015353937500094617, + 0.014732843750039137, + 0.014913812500026324, + 0.014652968750056061, + 0.014852625000003172, + 0.014561562500034597, + 0.01447093750005024, + 0.014071500000000015, + 0.014508718749993932, + 0.014254781250087944, + 0.014200499999901695, + 0.014052124999921034, + 0.014066343749959742, + 0.014161562499907632, + 0.016125937499964493, + 0.013739625000084743, + 0.013727937499993459, + 0.013368593749987667, + 0.013635125000064363, + 0.01306493749996207, + 0.012983531249915359, + 0.012768937500027278, + 0.013079812499995569, + 0.012903437499971915, + 0.014277749999905609, + 0.012611999999990076, + 0.012873624999997446, + 0.013215999999943051, + 0.014207374999955391, + 0.013839218750035798, + 0.013971812500017222, + 0.013707437499988373, + 0.013576718750073269, + 0.013857000000029984, + 0.01358015624998643, + 0.013249437500007843, + 0.013568437499998254, + 0.013567749999992884, + 0.013384562499936692, + 0.013264406249959393, + 0.013568624999948042, + 0.013346593750043212, + 0.013210406249982043, + 0.016182999999955427, + 0.013143499999955566, + 0.01297056249995876, + 0.012851968749941989, + 0.013288031249999221, + 0.01301837500000147, + 0.012738468750058018, + 0.013148437499921783, + 0.012549281249903288, + 0.013014718749900567, + 0.012344843750042855, + 0.012637593750014275, + 0.012751374999993459, + 0.012759875000028842, + 0.012854749999974047, + 0.012407718749955166, + 0.012493343750065833, + 0.013853562500003136, + 0.013735343749999629, + 0.014321531249947839, + 0.01356318750003993, + 0.014017875000035929, + 0.014155250000044362, + 0.014139375000013388, + 0.01342287500006023, + 0.013299781249997977, + 0.013515843750042222, + 0.019278843749930274, + 0.022496406249956635, + 0.021898062499985826, + 0.02216681250001784, + 0.02280703124995398, + 0.02171909374999359, + 0.022544343750041662, + 0.021088874999918517, + 0.02319053125006576, + 0.021772124999984044, + 0.021388062500022897, + 0.021238375000052656, + 0.0212509375000991, + 0.02174890624996806, + 0.020004843750029977, + 0.018765281250011867, + 0.018979312499936896, + 0.01788231249997807, + 0.020263312499992026, + 0.01891459375008253, + 0.020143125000004147, + 0.017173625000054926, + 0.018676468750072672, + 0.019399312500013366, + 0.018488656250042368, + 0.018720874999985426, + 0.0186052499999505, + 0.019745343750059874, + 0.02159443749997081, + 0.012740093750039705, + 0.012302499999918837, + 0.011886500000059641, + 0.011854937500061169, + 0.011975781250043838, + 0.011544468750003034, + 0.012172562499927153, + 0.01217809374998069, + 0.01176115625003149, + 0.013443656250046843, + 0.011609343750023982, + 0.010980718749920015, + 0.011138843749904481, + 0.011719531250037107, + 0.011289625000017622, + 0.010929874999987987, + 0.011296937499992055, + 0.021361968750056803, + 0.014917156250021435, + 0.012716531250021035, + 0.012275343750047796, + 0.013187343750018954, + 0.012670999999954802 + ], + "edit": [ + 7.640911000002234, + 3.7271270000019285, + 3.81412199999977, + 5.051487000000634, + 3.5694210000001476 + ], + "sort": [ + 24.11598099999901, + 27.501940000001923, + 26.761356999999407, + 27.044072000000597, + 23.921884999999747 + ], + "filter": [ + 5.407859999999346, + 5.02691699999923, + 4.81703799999741, + 5.1849570000013046, + 5.433548000000883 + ], + "multiFilter": [ + 43.45376699999906, + 48.20119200000045, + 54.95572700000048, + 49.11369000000195, + 47.92856500000198 + ], + "distinctLow": [ + 39.89324300000226, + 40.33049000000028, + 47.19324599999891, + 41.30449000000226, + 50.20981799999936 + ], + "distinctHigh": [ + 280.9412429999975, + 263.9848559999991, + 291.96246000000247, + 276.0253010000015, + 285.5455019999972 + ], + "aggregate": [ + 2.1843989999979385, + 2.2299479999965115, + 2.28997199999867, + 2.3059460000004037, + 2.2359160000014526, + 2.2426239999986137, + 2.252155000001949, + 2.2519930000016757, + 2.24911499999871, + 2.290265999999974, + 2.28710399999909, + 2.246490999998059, + 2.2536679999975604, + 2.2397100000016508, + 2.4105099999978847, + 2.2444550000000163, + 2.242333999998664, + 2.2523179999989225, + 2.2227060000004712, + 2.248546000002534, + 2.219108999997843, + 2.1870949999974982, + 2.236457999999402, + 2.253892000000633, + 2.241743000002316, + 2.301847999999154, + 2.2088589999984833, + 2.2295430000012857, + 2.274599999997008, + 2.2341289999967557, + 2.2535339999994903, + 2.2029599999987113, + 2.1887949999982084, + 2.1971150000026682, + 2.2318449999984296, + 2.1824180000003253, + 2.1994310000009136, + 2.25066599999991, + 2.237237000001187, + 2.1935689999991155, + 2.178434000001289, + 2.1857789999994566, + 2.1935469999989436, + 2.188713999999891, + 2.3710420000024897, + 2.241569999998319, + 2.282476999997016, + 2.301562999997259, + 2.2488550000016403, + 2.2875179999973625, + 2.250209999998333, + 2.2484349999976985, + 2.2486560000033933, + 2.289662999999564, + 2.2259349999985716, + 2.206053999998403, + 2.2256149999993795, + 2.2628900000017893, + 2.1905709999991814, + 2.2175349999997707, + 2.2094299999989744, + 2.2045539999999164, + 2.1794750000008207, + 2.178470999999263, + 2.180443999997806, + 2.1623019999969983, + 2.1919620000007853, + 2.20471699999689, + 2.188502000000881, + 2.2043250000024273, + 2.7561659999992116, + 2.2643709999974817, + 2.257979999998497, + 2.2788589999981923, + 2.3009019999990414, + 2.25337700000091, + 2.3104549999989104, + 2.24293299999772, + 2.2289790000031644, + 2.190623999998934, + 2.248282000000472, + 2.2446390000004612, + 2.2597509999977774, + 2.1980470000016794, + 2.1857749999981024, + 2.2305340000020806, + 2.1871529999989434, + 2.210786999999982, + 2.2560650000013993, + 2.180316000001767, + 2.178429999999935, + 2.2466539999986708, + 2.2536910000017087, + 2.182598000003054, + 2.2690629999997327, + 2.2418199999992794, + 2.2468270000026678, + 2.2769010000010894, + 2.285799000001134, + 2.3054660000016156, + 2.726651999997557, + 2.332323999999062, + 2.238843999999517, + 2.2413220000016736, + 2.2430419999982405, + 2.2050799999997253, + 2.1795290000009118, + 2.1923320000023523, + 2.2298589999991236, + 2.180953999999474, + 2.1785190000009607, + 2.220408999997744, + 2.197325000001001, + 2.19930899999963, + 2.1884959999988496, + 2.207714999996824, + 2.2014559999988705, + 2.4053339999991294, + 2.270886000002065, + 2.248294999997597, + 2.284313000000111, + 2.23773699999947, + 2.175626000000193, + 2.131629999999859, + 2.118618000000424, + 2.1293449999975564, + 2.1342469999981404, + 2.1485820000016247, + 2.120377000002918, + 2.329312999998365, + 4.1118920000008075, + 2.5738640000017767, + 2.312713999999687, + 2.3166459999993094, + 2.6081990000020596, + 2.241793000001053, + 2.239097000001493, + 2.245362000001478, + 2.2780109999985143, + 2.2360920000028273, + 2.181365000000369, + 2.1915359999984503, + 2.1872739999998885, + 2.1869670000014594, + 2.179271000000881, + 2.1385879999979807, + 2.198582000000897, + 2.1893510000008973, + 2.1795679999995627, + 2.182278000000224, + 2.180417999999918, + 2.1927550000000338, + 2.144830000001093, + 2.1760920000015176, + 2.1944260000018403, + 2.1823509999994712, + 2.1994400000003225, + 2.179017999998905, + 2.20408099999986, + 2.1801649999979418, + 2.1829710000019986, + 2.198145000002114, + 2.1910700000007637, + 2.1644740000010643, + 2.1782970000022033, + 2.2045130000005884, + 2.1871140000002924, + 2.261039000000892, + 2.2295300000005227, + 2.201217000001634, + 2.276196999999229, + 2.24331600000005, + 2.2342919999973674, + 2.48021300000255, + 2.2492180000008375, + 2.247703000000911, + 2.243302999999287, + 2.182111000001896, + 2.2969540000012785, + 2.2435249999980442, + 2.227347000000009, + 2.2543899999982386, + 2.246530000000348, + 2.2281829999992624, + 2.2348050000000512, + 2.2044070000010834, + 2.23725000000195, + 2.2967160000007425, + 2.3332530000006955, + 2.3597570000019914, + 2.263503000001947, + 2.4222220000010566, + 2.243147000001045, + 2.242250999999669, + 2.19423199999801, + 2.1772990000026766, + 2.1827459999985876, + 2.187382999996771, + 2.236325999998371, + 2.15310700000191 + ] + } + } + }, + { + "repetition": 2, + "captureSha256": "47acc45184bfc352860e540a1ff185ebbecf73a0e5b48c2206a38735eca24eb9", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:40:23.763Z", + "sheetwriteRows": [ + 1000, + 10000, + 100000, + 500000, + 1000000 + ], + "handsontableRows": [ + 1000, + 10000 + ] + }, + "sheetwrite": { + "1000": { + "ingest": [ + 1.3565600000000018, + 1.3828359999999975, + 1.276076000000046, + 1.5786390000000097, + 2.243629999999996, + 7.732690999999988, + 2.58763399999998 + ], + "windowRead": [ + 0.009876281249999508, + 0.010396343749999204, + 0.010581781249999977, + 0.013786906250000897, + 0.014232781249999604, + 0.013092343749999458, + 0.011194906249999192, + 0.011285875000000445, + 0.011200000000000543, + 0.011727562500000843, + 0.011804781250001284, + 0.011597250000001225, + 0.012116281249999972, + 0.011520718750000825, + 0.01797328125000064, + 0.011808406249999237, + 0.011808656250000382, + 0.011833562499999672, + 0.011734781250000381, + 0.01214756250000093, + 0.012464000000001363, + 0.012416093749999746, + 0.01246018750000033, + 0.01665050000000079, + 0.012874781249999856, + 0.012433750000001353, + 0.012572718750000433, + 0.012659812499999035, + 0.012165718749999499, + 0.01259993750000099, + 0.012239093750000762, + 0.017594468749999592, + 0.011294156250000853, + 0.011274843749999874, + 0.011610749999999115, + 0.011348968749999244, + 0.012526187500000674, + 0.011351093749999208, + 0.010423031250001102, + 0.011931656249998923, + 0.01222856249999893, + 0.01017250000000125, + 0.010322562499998966, + 0.010411031250001201, + 0.011322218750001056, + 0.010461843749999034, + 0.009908562499999718, + 0.010026343749999, + 0.009965375000000165, + 0.011269562500000774, + 0.01199584375000029, + 0.011655093749999068, + 0.011736437499999752, + 0.015456468750000951, + 0.015080843750000739, + 0.019183874999999517, + 0.017112531249999563, + 0.00947993750000009, + 0.009322218750000388, + 0.009165593749999701, + 0.008672812500000404, + 0.011155468750001063, + 0.015098718750000018, + 0.014692374999999203, + 0.012837562499999677, + 0.012985281249999758, + 0.011203874999999641, + 0.01050109375000119, + 0.010589562500001648, + 0.01047312500000075, + 0.010272781250000307, + 0.010959937499999128, + 0.010673812500000324, + 0.011236312500001233, + 0.01161331249999975, + 0.011052937499998805, + 0.011107250000000235, + 0.011005750000000702, + 0.010971875000000963, + 0.011089312499999338, + 0.01137281249999944, + 0.011532468750001357, + 0.011763906249999678, + 0.011525156250000279, + 0.011545812500001418, + 0.011384156250000999, + 0.011248812499999872, + 0.011250531250000861, + 0.011318531249999708, + 0.017458781249999333, + 0.014847312499998822, + 0.012525406249999094, + 0.012354281249999488, + 0.011558468749999662, + 0.011528718750000166, + 0.012595562499999602, + 0.009975250000000102, + 0.01074153124999988, + 0.00950749999999978, + 0.009241624999999587, + 0.009465187500000027, + 0.01023237500000107, + 0.009808593749999872, + 0.009257656249999968, + 0.00916518749999895, + 0.009168812500000456, + 0.00927571875000055, + 0.00895071875000042, + 0.008939593750000085, + 0.017891593750000823, + 0.014752124999999339, + 0.008739968749999605, + 0.008870343750000842, + 0.009146499999999946, + 0.009308406249999734, + 0.00862775000000049, + 0.008519749999999604, + 0.008618156249999842, + 0.009112843749999655, + 0.008356812500000643, + 0.008598281249998507, + 0.008645968750000677, + 0.008153406250000828, + 0.008029187500000035, + 0.008296249999999006, + 0.008340687500000499, + 0.008239999999998915, + 0.008208749999999654, + 0.008113531249998474, + 0.008231000000000321, + 0.008110437500000955, + 0.007964687499999457, + 0.009061312500000085, + 0.008006281249999248, + 0.008023968750000776, + 0.008850125000000375, + 0.00854087499999956, + 0.008042124999999345, + 0.0080612187499991, + 0.008205249999999609, + 0.05087456249999889, + 0.0076053750000006914, + 0.006740718750000596, + 0.00694015625000155, + 0.006478187500000843, + 0.006285312499999307, + 0.006298093749999012, + 0.006424968750000204, + 0.006456531250000452, + 0.00646106249999967, + 0.0065682812500007515, + 0.006572968749999575, + 0.006348406249999883, + 0.006398749999998898, + 0.006427437500001076, + 0.006625093749999422, + 0.006518656249999921, + 0.0062283437499992544, + 0.006543125000000316, + 0.006615374999999091, + 0.006586906249999913, + 0.0067374062500000775, + 0.006604749999999271, + 0.008512062499999473, + 0.008255406250000874, + 0.008397593749998933, + 0.00816306249999954, + 0.008649156249999734, + 0.007967687500000764, + 0.007967812500000448, + 0.007824999999998639, + 0.007986374999999768, + 0.007727656249999271, + 0.00762553124999954, + 0.007735062500000112, + 0.007950343750000144, + 0.007989843749999892, + 0.008316531249999315, + 0.008471312499999328, + 0.008135031250001035, + 0.008209812500000524, + 0.0077929062499997315, + 0.007452125000000365, + 0.007461781250000854, + 0.007685281250001452, + 0.00817893749999854, + 0.008105343750001381, + 0.007913812500000006, + 0.007906468749999007, + 0.008249249999998653, + 0.007659562500000661, + 0.007521593749999056, + 0.007612249999999321, + 0.008164468749999543, + 0.008024437500001369, + 0.00781221875000071, + 0.008830812499999396, + 0.008229000000000042, + 0.007898187499998599, + 0.007980843750001299, + 0.008226156250000116, + 0.008347281249999838, + 0.007964187500000719, + 0.00781615624999965, + 0.008151906250001062, + 0.00906940624999919, + 0.011626875000001036, + 0.008376968749999492, + 0.008280937499998586, + 0.008080687499999684, + 0.008042687499999701, + 0.008923656249999468, + 0.00832943750000048, + 0.008115781249999898, + 0.007988250000000363, + 0.008249062500000903, + 0.008111375000000365, + 0.008146843749999633, + 0.008340781250000262, + 0.008412124999999548, + 0.00818468750000001, + 0.008178593749999408, + 0.008117312499999585, + 0.008295062500000228, + 0.008255500000000637, + 0.00818309375000048, + 0.008163124999999383, + 0.008088718749998947, + 0.008001625000000345, + 0.008143843750000102, + 0.008325281250000316, + 0.008073687499999593, + 0.008124656250000584, + 0.008187968750000607, + 0.008348562500000156, + 0.008214624999999032, + 0.00814581250000046, + 0.008233875000000168, + 0.00827681250000012, + 0.008213875000000925, + 0.008054000000001338, + 0.008241968749999273, + 0.008426906249999533, + 0.008258968750000761, + 0.008267781249999828, + 0.008293249999999475, + 0.010861312499999443, + 0.010758499999999671, + 0.012203156250000902, + 0.013231843749998973, + 0.012864343749999563, + 0.010733124999999788, + 0.008094375000000653, + 0.008329812499999534, + 0.008440937499999634, + 0.008303656249999847, + 0.007953656249998886, + 0.007828843749999592, + 0.00836800000000082, + 0.00845374999999926, + 0.008046687499998484, + 0.008085062499999296, + 0.008634687499998961, + 0.010463187499999194, + 0.009850468749998953, + 0.008514875000001254, + 0.0081929062499988, + 0.008198843749999796, + 0.008217593750000418, + 0.008744656250000205, + 0.008513531250001094, + 0.008780187499999315, + 0.010564562499999042, + 0.008660406249999753, + 0.008437250000000063, + 0.008141468749998992, + 0.008479687500001276, + 0.00840353124999993, + 0.008251187500000867, + 0.008645468750000163, + 0.00857046874999945, + 0.008260062499999776, + 0.008592093749999918, + 0.008542593750000549, + 0.008307874999999854, + 0.008256437500000047, + 0.008575625000000642, + 0.008836468749999327, + 0.008318937500000345, + 0.008313593749999626, + 0.008335312499999858, + 0.00856549999999956, + 0.008241343750000851, + 0.008323656250000866, + 0.008393968749999203, + 0.008386343749998915, + 0.008559062499999825, + 0.008365343749998644, + 0.011211187500000719, + 0.010952250000000774 + ], + "edit": [ + 7.523927000000015, + 5.8099410000000375, + 8.78541100000001, + 7.193050000000028, + 6.8208530000000565, + 7.775436000000013, + 8.040180999999961, + 5.234768000000031, + 5.025994999999966, + 4.663733999999977, + 4.579547999999932, + 4.659056999999962, + 7.201704000000063, + 6.7011079999999765, + 4.930678000000057 + ], + "sort": [ + 0.1093429999999671, + 0.1067920000000413, + 0.10082699999998113, + 0.12530800000001818, + 0.22918400000003203, + 0.13632400000005873, + 0.11404099999992923, + 0.12381499999992229, + 0.09920999999997093, + 0.10441800000000967, + 0.09908599999994294, + 0.09806300000002466, + 0.13693100000000413, + 0.1129320000000007, + 0.10265900000001693 + ], + "filter": [ + 0.030856999999969048, + 0.02493800000002011, + 0.02823399999999765, + 0.020658000000025822, + 0.027893999999946573, + 0.02325199999995675, + 0.02031499999998232, + 0.019945000000006985, + 0.027085999999940213, + 0.020632999999975254, + 0.024510000000077525, + 0.04276100000004135, + 0.05989199999999073, + 0.0500449999999546, + 0.02179500000011103 + ], + "multiFilter": [ + 0.1451560000000427, + 0.11875599999996211, + 0.10538599999995313, + 0.12399299999992763, + 0.1282690000000457, + 0.12281099999995604, + 0.11419900000009875, + 0.10906600000009803, + 0.10532399999999598, + 0.10376299999995808, + 0.12405699999999342, + 0.1265730000000076, + 0.09884999999997035, + 0.09410700000000816, + 0.09562500000004093 + ], + "distinctLow": [ + 0.09195499999998447, + 0.0982970000000023, + 0.09520599999996193, + 0.08545600000002196, + 0.08528100000000904, + 0.08471299999996518, + 0.08523200000001907, + 0.12311799999997675, + 0.13517400000000634, + 0.08360700000002907, + 0.08088999999995394, + 0.09622300000000905, + 0.07272899999998117, + 0.07129599999996117, + 0.07150300000000698 + ], + "distinctHigh": [ + 0.32864699999993263, + 0.2928229999999985, + 0.3095109999999295, + 0.28461699999991197, + 0.2815419999999449, + 0.27529100000003837, + 0.272151000000008, + 0.307713999999919, + 0.32961599999998725, + 0.3119570000000067, + 0.30485799999996743, + 0.28054100000008475, + 0.2817570000000842, + 0.2807300000000623, + 0.29483300000003965 + ], + "aggregate": [ + 0.0047026875000000246, + 0.004696687500000074, + 0.004552070312500156, + 0.004525609374999462, + 0.004550023437499995, + 0.004871726562500456, + 0.004465421874999542, + 0.004504656249999961, + 0.004443601562500454, + 0.004891351562499757, + 0.004475171874999795, + 0.0045960546875001285, + 0.004435171874999533, + 0.004428398437500647, + 0.004425023437499398, + 0.00643051562500041, + 0.005604648437500082, + 0.004476273437500566, + 0.004466898437499367, + 0.004481468749999884, + 0.004371953125000161, + 0.00448336718750042, + 0.004407695312500515, + 0.004373406250000045, + 0.004380007812499365, + 0.00432335937500028, + 0.0042998593750001035, + 0.004423195312499573, + 0.004322953125000417, + 0.004275968750000025, + 0.004264406249999908, + 0.004245382812499976, + 0.00432701562499993, + 0.0041917734375003235, + 0.004357812499999447, + 0.004332414062499623, + 0.004305742187499462, + 0.004320773437499703, + 0.004231648437500013, + 0.004307437499999622, + 0.004261765625000358, + 0.004263484374999571, + 0.004338468750000324, + 0.0043358906249997275, + 0.004383257812500041, + 0.004337898437499987, + 0.004414273437499894, + 0.004339148437500384, + 0.004364070312499635, + 0.004337609374999829, + 0.004550945312499444, + 0.004385218749999531, + 0.0044237499999999486, + 0.0044213437499998065, + 0.004353929687500369, + 0.004252710937500126, + 0.004422757812499789, + 0.004274257812499904, + 0.004331671874999721, + 0.004363320312499752, + 0.004496812500000225, + 0.0044248671874997925, + 0.004348945312500518, + 0.004323874999999866, + 0.004655414062500363, + 0.004312140624999294, + 0.004435656249999198, + 0.004314843750000463, + 0.004368804687500116, + 0.004308515624999565, + 0.0043237031250003, + 0.004244570312500251, + 0.004161273437500057, + 0.004162125000000572, + 0.004379624999999443, + 0.004260046875000256, + 0.004312539062500065, + 0.004291335937500307, + 0.00439621875000018, + 0.0044438593749998034, + 0.004379148437499758, + 0.004266492187499971, + 0.004262718750000616, + 0.0043289531249994795, + 0.00433030468749962, + 0.004210570312499939, + 0.006220367187499853, + 0.007090929687500136, + 0.004727882812499473, + 0.004268906250000093, + 0.004198312500000689, + 0.004262179687499312, + 0.004386757812500086, + 0.0041877187499999025, + 0.00426183593750018, + 0.0042016249999994315, + 0.004283562500000393, + 0.00440884375000028, + 0.004323648437500438, + 0.004384749999999826, + 0.004203156250000006, + 0.004310031250000179, + 0.004299890625000025, + 0.004315257812500306, + 0.0041685000000004635, + 0.004216960937499792, + 0.00412409374999978, + 0.004249671874999805, + 0.004209335937499503, + 0.004226789062499847, + 0.006903249999999694, + 0.005125921874999939, + 0.0042207812499999164, + 0.004279046874999359, + 0.0041526171874997075, + 0.004272414062500118, + 0.00419693749999972, + 0.004153585937499926, + 0.0042322265624994415, + 0.004067148437499668, + 0.004297242187500494, + 0.004197804687500195, + 0.0043693125000006106, + 0.004064710937499605, + 0.004277906250000463, + 0.004281999999999897, + 0.004175507812499646, + 0.004123960937500115, + 0.004320531250000315, + 0.004127609375000674, + 0.004362476562500106, + 0.00416471875000024, + 0.004229687500000523, + 0.004274703124999668, + 0.004252335937500185, + 0.004189421875000043, + 0.004126007812499388, + 0.004232351562500014, + 0.0043147656250006605, + 0.004213367187499983, + 0.004230289062499892, + 0.0041903515624994725, + 0.004339812500000484, + 0.004251843750000539, + 0.0043060703124995214, + 0.00417998437499989, + 0.004286585937499865, + 0.004261992187499786, + 0.004230820312500327, + 0.004277593749999475, + 0.004238695312499985, + 0.004158265625000546, + 0.00424084374999989, + 0.004215757812500165, + 0.004235351562499545, + 0.0041666015624999275, + 0.0041385703125005335, + 0.004126929687499725, + 0.004107273437500503, + 0.0043169843749995, + 0.004541687499999725, + 0.0041554140624997515, + 0.004031734374999374, + 0.00403032812500026, + 0.004096906250000032, + 0.004056101562500025, + 0.004073890625000409, + 0.003980632812499607, + 0.004117976562500125, + 0.0040279999999999205, + 0.004102234374999902, + 0.0040931484374997495, + 0.006875187500000379, + 0.004659820312499896, + 0.004131109374999831, + 0.004085484375000448, + 0.004163070312499961, + 0.004103812500000359, + 0.004076750000000295, + 0.00410316406250022, + 0.004040742187500612, + 0.004059773437499636, + 0.00403264062499975, + 0.004127156250000041, + 0.004182398437500012, + 0.004097773437500507, + 0.0038881640625003655, + 0.00402764843749992, + 0.003836320312499808, + 0.004036710937500132, + 0.003882867187499528, + 0.004005593750000536, + 0.003991117187499782, + 0.003934640625000263, + 0.004267203124999952, + 0.004055726562499196, + 0.0040412031249994484, + 0.0040100390624999704, + 0.003946953124999375, + 0.0039963593750007576 + ] + }, + "10000": { + "ingest": [ + 12.602490999999986, + 12.747703000000001, + 13.31287599999996, + 12.520909000000074, + 13.346452, + 14.044874999999934, + 12.83584200000007 + ], + "windowRead": [ + 0.006401624999998745, + 0.006643937500001584, + 0.007399937500000675, + 0.00791909374999733, + 0.0068943437499982, + 0.007718718750002296, + 0.006911875000000123, + 0.007005312500002248, + 0.007217656249999038, + 0.007016875000001477, + 0.0072717500000010205, + 0.00719587500000074, + 0.00707643750000031, + 0.007056687500000436, + 0.007047531249998684, + 0.007151062500000194, + 0.007185343749998907, + 0.006623000000001156, + 0.006643125000000083, + 0.007143343750001918, + 0.0069347812499991335, + 0.006820468749999975, + 0.006740562499999214, + 0.006958843749998778, + 0.012095187499998161, + 0.00737528125000253, + 0.00691284375000123, + 0.006961000000000439, + 0.006934343750000238, + 0.006889281250000323, + 0.006970562500001165, + 0.0071285312499966835, + 0.006467406249999641, + 0.006489718750000151, + 0.006344718750000311, + 0.0064011250000000075, + 0.006540906250002365, + 0.006933312499999289, + 0.006658781249999635, + 0.006754937500002001, + 0.006773468749997846, + 0.006841968749998983, + 0.0068443125000001714, + 0.00683946874999819, + 0.006884562499998026, + 0.006998624999997816, + 0.006789218750000714, + 0.007606812500000615, + 0.0071779687499997635, + 0.006893812499999541, + 0.007045187499997496, + 0.0070309375000014995, + 0.006824500000000455, + 0.006779781250003225, + 0.007016562500002266, + 0.007148312500000031, + 0.006907468750000589, + 0.007445812499998539, + 0.007169468749999908, + 0.006776031249998482, + 0.007022062499999038, + 0.0068005937500004165, + 0.006896250000000492, + 0.006857343749999245, + 0.007904062500003306, + 0.007063624999997131, + 0.009971218749999622, + 0.008484468749998086, + 0.006873499999997534, + 0.006810937500002723, + 0.006807562500000586, + 0.006944312499999938, + 0.007006187500000038, + 0.00879737500000033, + 0.006668406250000203, + 0.006588749999998811, + 0.007244781249998056, + 0.006996437499999786, + 0.006814625000000518, + 0.006934812500002607, + 0.007174500000001416, + 0.006857937499997746, + 0.0069967187500026284, + 0.00697912499999731, + 0.006873500000001087, + 0.007660875000002676, + 0.008759281250000583, + 0.006534874999999829, + 0.006648999999999461, + 0.008355562500000246, + 0.006984062500002608, + 0.007010218750000519, + 0.007028656250000154, + 0.007822531249999543, + 0.007173437500000546, + 0.007098062499999003, + 0.006937499999999375, + 0.0070009062499991614, + 0.00702940624999826, + 0.006819781250001711, + 0.006944531249999386, + 0.006847156250000097, + 0.0070144687500004466, + 0.006771187500000053, + 0.006794906250000565, + 0.0067265937500025075, + 0.006940249999999537, + 0.0073023750000018595, + 0.006857656249998456, + 0.04398543749999817, + 0.007911187499999528, + 0.007426531249997481, + 0.0071398125000001755, + 0.007252874999998937, + 0.007198812500000429, + 0.007106937499997912, + 0.007011656250000442, + 0.006982593749999211, + 0.007001406250001452, + 0.007256843750003128, + 0.006910406250000278, + 0.006957437500002328, + 0.006959156249997989, + 0.007083125000001189, + 0.008038531250001313, + 0.008633562500001801, + 0.007046124999998682, + 0.007084125000002217, + 0.006912156249999413, + 0.006962093749997678, + 0.0073566249999998945, + 0.009394343749999479, + 0.007340375000001842, + 0.006826999999997696, + 0.006848500000000257, + 0.006638625000000786, + 0.006755437500000738, + 0.006451999999999458, + 0.006516999999998774, + 0.006404281249999144, + 0.006956468750001221, + 0.007010000000001071, + 0.0068976250000005734, + 0.006731093750001804, + 0.006743750000001825, + 0.0070380312499978, + 0.006489843749999835, + 0.006471906249998938, + 0.006512968750001846, + 0.006465562500000743, + 0.00670328125000097, + 0.007861375000000947, + 0.006878281249999674, + 0.00671431250000154, + 0.006759406249997824, + 0.007863406249999372, + 0.006542906250000868, + 0.006425718750001863, + 0.006468156249997747, + 0.0068598125000001176, + 0.009555718750000608, + 0.013359125000000915, + 0.011594875000000116, + 0.009093156249999623, + 0.011870093749998034, + 0.01184793749999713, + 0.010318031250001525, + 0.006923874999998247, + 0.006922031250002902, + 0.006863687500000992, + 0.00685796875000122, + 0.006876468750000697, + 0.008112312499999774, + 0.006868468749999579, + 0.006449062499999769, + 0.009198406250000346, + 0.008917156249999891, + 0.010090687500003526, + 0.00899487499999907, + 0.008858531250002244, + 0.00994425000000021, + 0.010629687499999818, + 0.00904087500000017, + 0.011696249999999964, + 0.012239343750000131, + 0.011469468750000544, + 0.008618250000001382, + 0.009675937499999065, + 0.008116749999999229, + 0.008169406249997735, + 0.007016531249998792, + 0.007891843749998628, + 0.006536406249999516, + 0.007207593749999575, + 0.008350718749998265, + 0.008140687499999189, + 0.01042984374999989, + 0.007077812500000391, + 0.0074477812500006735, + 0.00785581250000078, + 0.00680253125000263, + 0.006870437499998161, + 0.007007718749999725, + 0.006856062499998927, + 0.00670787500000003, + 0.00668046874999817, + 0.007213718750001874, + 0.006778312499999828, + 0.0068712812499995835, + 0.006739812500001108, + 0.007940406250000365, + 0.007017374999996662, + 0.006860874999997435, + 0.006853124999999238, + 0.006831406250000782, + 0.007107468750000123, + 0.006615437499998933, + 0.006611312500002242, + 0.006779749999999751, + 0.0068028124999983675, + 0.0070671562500024265, + 0.006796249999997173, + 0.00674178124999969, + 0.0068275312499999075, + 0.006978500000002441, + 0.006871781250001874, + 0.006781249999999517, + 0.00685881249999909, + 0.006832906250000548, + 0.007045593750000023, + 0.0067905312499974, + 0.006759999999999877, + 0.006773375000001636, + 0.006818625000001077, + 0.0070723437499999875, + 0.0067169687499983866, + 0.00670309374999789, + 0.0066857187499991255, + 0.006990656250000171, + 0.006725843749997296, + 0.006876656250000224, + 0.00763712499999869, + 0.006765531250000123, + 0.006546562500002295, + 0.006417343750001692, + 0.0063942187499996805, + 0.0065070624999989946, + 0.006508812499998129, + 0.00741624999999857, + 0.0068512500000004195, + 0.008218093749999156, + 0.0066673124999994116, + 0.0069890000000008, + 0.006706593749999712, + 0.006451562500000563, + 0.006494656250001896, + 0.007266625000003302, + 0.007049593750000582, + 0.009377531249999294, + 0.007244562500002161, + 0.0067817812499981756, + 0.00644103124999873, + 0.006505749999998756, + 0.007040937500001121, + 0.00684971874999718, + 0.007634062499999317, + 0.007022187499998722, + 0.006905687500001534, + 0.007007906249999252, + 0.007190250000000731, + 0.008905718750000347, + 0.007042000000001991, + 0.006899406250003182, + 0.0070183125000014, + 0.007116187499999427, + 0.007240281249998759, + 0.006918750000000529, + 0.006867625000001709, + 0.0069995937499989225, + 0.008185624999999419, + 0.006920718749999111, + 0.006863593750001229, + 0.006853843750000976, + 0.0068542187500000296, + 0.007870031250000409, + 0.006573218750002496, + 0.006462625000001054, + 0.0069664375000009215, + 0.007808499999999441, + 0.006950312499999001, + 0.006899468749999471, + 0.007116374999998953, + 0.007012499999998312, + 0.007226500000001579, + 0.006569406249997911, + 0.006761968749998459, + 0.00711146874999713, + 0.007995718750002823, + 0.006901031249999079, + 0.01579315624999822 + ], + "edit": [ + 4.585095000000024, + 4.54867999999999, + 4.237121999999999, + 4.345990999999913, + 4.628979999999956, + 7.61530700000003, + 5.449203000000011, + 5.266369999999938, + 4.303743999999938, + 4.215661000000068, + 4.115984000000026, + 6.558830999999941, + 5.342893000000004, + 4.000791999999933, + 3.900588999999968 + ], + "sort": [ + 0.2269090000000915, + 0.22107200000004923, + 0.22638600000004772, + 0.22478899999998703, + 0.23554799999999432, + 0.2283429999999953, + 0.2240039999999226, + 0.2243710000000192, + 0.41651200000001154, + 0.2786109999999553, + 0.3777820000000247, + 0.23275999999998476, + 0.26333499999998367, + 0.24567600000000311, + 0.2658050000000003 + ], + "filter": [ + 0.07079199999998309, + 0.06257000000005064, + 0.06893300000001545, + 0.06236300000000483, + 0.06344300000000658, + 0.06885599999998249, + 0.0628710000000865, + 0.06285800000000563, + 0.06358299999999417, + 0.06727499999999509, + 0.06548099999997703, + 0.0649670000000242, + 0.0639449999999897, + 0.06910800000002837, + 0.06982499999992342 + ], + "multiFilter": [ + 0.45008800000005067, + 0.47244800000009946, + 0.4692850000000135, + 0.8981340000000273, + 1.2595099999999775, + 0.9854910000000245, + 0.9128519999999298, + 0.9745329999999512, + 0.4702789999998913, + 0.4458239999999023, + 0.42514299999993455, + 0.4329450000000179, + 0.4201470000000427, + 0.5737490000001344, + 0.4412179999999353 + ], + "distinctLow": [ + 0.4073150000001533, + 0.39063899999996465, + 0.39890300000001844, + 0.3713839999998072, + 0.37362199999984114, + 0.3899179999998523, + 0.3910280000000057, + 0.35280199999988326, + 0.357731000000058, + 0.3584339999999884, + 0.3632110000000921, + 0.3703140000000076, + 0.3693349999998645, + 0.37613900000019385, + 0.3679850000000897 + ], + "distinctHigh": [ + 2.1373879999998735, + 2.2687550000000556, + 2.131122000000005, + 2.4311669999999594, + 2.2066789999998946, + 2.4402950000001056, + 2.150333000000046, + 2.1676870000001145, + 2.251888999999892, + 2.5597980000000007, + 2.1809990000001562, + 2.2268289999999524, + 3.5024379999999837, + 2.379417000000103, + 2.1076510000000326 + ], + "aggregate": [ + 0.04664357812499986, + 0.02903989843750132, + 0.018022632812499495, + 0.01716368750000008, + 0.01821435937499949, + 0.01742177343749951, + 0.018126500000001045, + 0.021656523437501463, + 0.02061727343749986, + 0.02333500781249853, + 0.026017554687500777, + 0.024479640624999632, + 0.025992578125000776, + 0.03041405468749936, + 0.024115203124999596, + 0.024410664062500587, + 0.023773117187499082, + 0.024471828124999817, + 0.022402976562499788, + 0.021555398437500983, + 0.02052734374999865, + 0.019570601562499235, + 0.018539476562500212, + 0.018113835937500156, + 0.01884040624999983, + 0.020206312499999157, + 0.018367554687500842, + 0.018691242187498958, + 0.01823794531249945, + 0.018227695312500458, + 0.018642234374999234, + 0.02022905468749947, + 0.01922856250000038, + 0.01792507812499977, + 0.020289085937500673, + 0.03530794531249981, + 0.0226226406250003, + 0.023953648437499808, + 0.023115648437499914, + 0.023487507812500752, + 0.0233811796874992, + 0.0234072421875009, + 0.02316304687500015, + 0.023209507812499197, + 0.023186804687499674, + 0.02298120312500096, + 0.0225463515624984, + 0.02299880468750004, + 0.02315639843750006, + 0.023074953124998743, + 0.023068867187500786, + 0.03335211718749953, + 0.050534242187499245, + 0.028251398437500796, + 0.018329710937500465, + 0.01846553906250037, + 0.01808699999999952, + 0.024739625000000487, + 0.03918955468749985, + 0.02334595312499843, + 0.017528765625000275, + 0.01844785937499971, + 0.023011195312498955, + 0.022132554687500416, + 0.02203688281250038, + 0.022053562500000012, + 0.023148281250000124, + 0.02429667187499973, + 0.023825343750001338, + 0.026392140625000948, + 0.024365414062501145, + 0.02411399218749999, + 0.0236573671875, + 0.023603671875001453, + 0.02371765625000144, + 0.02337725781250022, + 0.02327740624999919, + 0.023002367187499928, + 0.022949789062501225, + 0.02294990625000004, + 0.022734093749999573, + 0.022439468749999136, + 0.023024945312499767, + 0.023043921875000706, + 0.023069734374999484, + 0.023016914062500504, + 0.02325792187500042, + 0.023731640624999883, + 0.02374651562499963, + 0.023599007812499906, + 0.02348775781250012, + 0.023107156250000926, + 0.026415539062499604, + 0.022996304687499247, + 0.02270668749999949, + 0.022610460937499965, + 0.023076031249999573, + 0.023017460937499123, + 0.02283174218749906, + 0.02265010937499845, + 0.02302113281250051, + 0.024517757812500207, + 0.022964132812500537, + 0.02287728906249953, + 0.022431585937500387, + 0.022497351562501322, + 0.02300071874999965, + 0.04040027343750019, + 0.0232560468750016, + 0.019485898437501703, + 0.018195484374999182, + 0.020162117187499717, + 0.018118078124999215, + 0.018042937500000633, + 0.01857730468750063, + 0.01826760937500005, + 0.018052765624998912, + 0.018165085937500436, + 0.018013249999999204, + 0.017068968749999414, + 0.0174065312499998, + 0.017457757812499253, + 0.01951467968750009, + 0.01837967187499956, + 0.021112351562500464, + 0.029666687500000677, + 0.017229335937500423, + 0.016892117187500943, + 0.016800242187498426, + 0.020833546875000053, + 0.02179532812500007, + 0.019309234375000983, + 0.019066429687500275, + 0.019258054687501414, + 0.0191321250000005, + 0.018922960937500122, + 0.018768234374999082, + 0.019394679687499305, + 0.018554085937498854, + 0.018874187499999806, + 0.019008476562499155, + 0.01882550000000016, + 0.01873825000000018, + 0.019046406250000203, + 0.0191776640625001, + 0.01882508593750032, + 0.021415085937499967, + 0.019050328124999183, + 0.020620679687500143, + 0.01854142187499974, + 0.01871459374999951, + 0.020994953124999327, + 0.02148892187499918, + 0.022345398437499497, + 0.042144296874999654, + 0.022436625000000987, + 0.023104375000000843, + 0.024343289062500162, + 0.02419491406249996, + 0.024594781250000253, + 0.025254078125000134, + 0.02242370312499986, + 0.021235429687500584, + 0.020661257812498945, + 0.020702835937500552, + 0.028258867187499703, + 0.02254802343749951, + 0.01978772656249994, + 0.017799203124999607, + 0.018406187500000115, + 0.02393039843749989, + 0.019927640625001075, + 0.03877033593750134, + 0.024386054687500547, + 0.01793429687499959, + 0.018855039062501078, + 0.024079890624999933, + 0.022166843749999998, + 0.020824250000000433, + 0.01917239062500009, + 0.018548656250001017, + 0.01840135937499987, + 0.018168703125001073, + 0.018363109374998743, + 0.018706906250001154, + 0.019617617187499548, + 0.018953929687500093, + 0.029799656249998918, + 0.018831242187498987, + 0.019811812499998638, + 0.03654885156249854, + 0.01837977343750019, + 0.017897882812500043, + 0.01847488281249987, + 0.025304976562498638, + 0.023704210937500747, + 0.021505835937499995, + 0.02033380468749968, + 0.019732921874998866, + 0.01891998437500142 + ] + }, + "100000": { + "ingest": [ + 127.40922300000011, + 134.9137559999997, + 128.5730999999996, + 126.93585100000018, + 118.90418799999998, + 120.36468099999956, + 120.66835300000002 + ], + "windowRead": [ + 0.007801249999999982, + 0.007574281250001036, + 0.007626062499994646, + 0.007578374999994253, + 0.007271937499993442, + 0.007587156250011162, + 0.007313468749998719, + 0.007437750000008236, + 0.007672499999998195, + 0.007556843749995323, + 0.007662187499988704, + 0.008049718750001489, + 0.007757281249993753, + 0.007521093750000318, + 0.007579750000004992, + 0.007513562500008675, + 0.007342250000007766, + 0.007170812499992962, + 0.007183812499988562, + 0.007140624999991019, + 0.007172281250007018, + 0.007194625000011001, + 0.007310624999988136, + 0.00720584375000044, + 0.007648750000001314, + 0.007007624999999962, + 0.006936218749999057, + 0.007619875000003162, + 0.007560281250007961, + 0.007325468749996844, + 0.007944468749997213, + 0.007364531250004802, + 0.009151531250012113, + 0.007289187500006733, + 0.007285249999995358, + 0.007395468750004852, + 0.007363968749999117, + 0.00739484375000643, + 0.008065281249997724, + 0.009126781249989335, + 0.007637125000002243, + 0.0074479687500002, + 0.007157500000005257, + 0.007437906250004289, + 0.007989750000007234, + 0.007304312500011179, + 0.007381531250004514, + 0.007587687499992057, + 0.007386906250005154, + 0.007426375000008534, + 0.007388218750008946, + 0.007106062500000121, + 0.008181874999991123, + 0.008003125000001887, + 0.007881906249991744, + 0.007069062499994061, + 0.0074366875000038135, + 0.007504281250007239, + 0.007003374999996481, + 0.007300125000000435, + 0.007042156250008702, + 0.007300250000000119, + 0.007069406249996746, + 0.007120875000012461, + 0.007199218750002956, + 0.007145000000008395, + 0.007347593750012038, + 0.007303843750008809, + 0.007917500000004907, + 0.008304281250005374, + 0.007174593749994074, + 0.007205031249995386, + 0.00740087499998765, + 0.007312374999997928, + 0.0074603125000010095, + 0.007462218750006855, + 0.007239062499991178, + 0.007503062500006763, + 0.007485093749991734, + 0.0074899062500008995, + 0.00741343749999146, + 0.007105625000008331, + 0.007542656249995616, + 0.007500906250001549, + 0.007390843750002318, + 0.007671250000001351, + 0.0072187187500105665, + 0.007384906249995993, + 0.008173249999998689, + 0.008222843750004927, + 0.0074433750000082455, + 0.007607187499999668, + 0.0074413124999921365, + 0.007342093750011713, + 0.007311718750003138, + 0.007923281250000969, + 0.008187812499997449, + 0.007346093750001614, + 0.008266562500011787, + 0.0075060312499886095, + 0.012065437499998666, + 0.008442531249997387, + 0.0075965312500017035, + 0.007484249999990311, + 0.00759818750000818, + 0.007535875000002079, + 0.00862090625000178, + 0.007160031249995313, + 0.007129000000006158, + 0.00705384375000051, + 0.007084843750007508, + 0.025210656249996077, + 0.007935031249999724, + 0.00745581249999816, + 0.008994062500008226, + 0.0455047499999921, + 0.007799187499998084, + 0.007506656250001242, + 0.007363156249994063, + 0.007237156249999543, + 0.0075256562499959045, + 0.007298531250000906, + 0.007195031250006423, + 0.007055499999992776, + 0.007578375000008464, + 0.0074026249999974425, + 0.007035718750003639, + 0.007296531250005955, + 0.007298312500012116, + 0.007095656250001525, + 0.007398906250003279, + 0.007347406250005406, + 0.007212812500000609, + 0.007667875000009872, + 0.007479000000003566, + 0.007453656250007157, + 0.00748853124999016, + 0.0072766562499992915, + 0.006997624999996788, + 0.006941343750000328, + 0.007119000000002984, + 0.007279843749998349, + 0.007340906249993395, + 0.007461593749994222, + 0.007456687499995951, + 0.007384187499994255, + 0.0074412499999994, + 0.007259031249986947, + 0.007243437500008554, + 0.006999468749995685, + 0.007112156250002499, + 0.006932468750008525, + 0.0068694062499901065, + 0.006983062499998027, + 0.007259781249999264, + 0.007233187500006011, + 0.007540249999991033, + 0.007357374999998001, + 0.007440906250010926, + 0.00731793749999099, + 0.007484593749992996, + 0.007234062500003802, + 0.007282875000001354, + 0.0071974062500004266, + 0.008796500000002538, + 0.007245156250007767, + 0.00756993750000845, + 0.007696437500001707, + 0.007133781250004745, + 0.00713343750000206, + 0.006941437500003644, + 0.007249343749990089, + 0.007490500000002953, + 0.0072344062500064865, + 0.007251437500002567, + 0.007517718750008839, + 0.007355718750005735, + 0.008636500000008596, + 0.007439718749992608, + 0.010568406250001772, + 0.007545593750009516, + 0.007088312500002303, + 0.007200125000011326, + 0.007522343749997162, + 0.008084843749998072, + 0.008219374999995921, + 0.00743093750000412, + 0.006873968749999904, + 0.007033750000005057, + 0.0067853437499962865, + 0.006504000000006727, + 0.006679593750007484, + 0.006999750000005633, + 0.006777562500005274, + 0.010778187499994374, + 0.007762624999998025, + 0.008094937500004562, + 0.00730181250000328, + 0.00740134375000423, + 0.007204687500006912, + 0.00774209374999657, + 0.007856312500010176, + 0.008032437499991829, + 0.007637937499993086, + 0.0077509374999920055, + 0.006633093749996988, + 0.006347468750007579, + 0.006582250000008116, + 0.006991031249995672, + 0.00663774999999589, + 0.006439468750002675, + 0.006620562500003757, + 0.006546437499991953, + 0.006744374999996694, + 0.006522937499994441, + 0.006265124999998761, + 0.008110156249998113, + 0.006839687499990532, + 0.006595937499994875, + 0.006645750000004114, + 0.007422750000003475, + 0.007526187500005221, + 0.007661593750000861, + 0.006572625000003995, + 0.006623906249998868, + 0.008009406249996687, + 0.009648656249993337, + 0.008839906249988871, + 0.007030999999997789, + 0.0069094374999991715, + 0.00791696874999559, + 0.007315593749993354, + 0.007267406249994224, + 0.007351749999997992, + 0.007452125000000365, + 0.007079843750005921, + 0.007147312499995451, + 0.007459218750000218, + 0.00747890625000025, + 0.007363781249992485, + 0.006965187500000525, + 0.0071692187499934334, + 0.00732868749999227, + 0.007799656250000453, + 0.007317437499992252, + 0.007332562499996698, + 0.00847678124999618, + 0.007849218750010323, + 0.007504124999996975, + 0.007538718749998452, + 0.007370124999994232, + 0.007633687500003816, + 0.007363781250006696, + 0.0074123124999943, + 0.007342031250004766, + 0.0077128749999957336, + 0.007243250000001922, + 0.006982749999991711, + 0.006925562500001092, + 0.007194999999995844, + 0.008088562499992236, + 0.007213781250001716, + 0.009073187500007407, + 0.00952168749999771, + 0.008712875000000508, + 0.007401968750002652, + 0.007226750000000948, + 0.007324062500003947, + 0.007512374999990357, + 0.007936593750002885, + 0.007960593750013345, + 0.00809453124999493, + 0.008125781250001296, + 0.007824125000013282, + 0.008098812499994779, + 0.008437499999999432, + 0.007866781249987298, + 0.008071593750003103, + 0.007639968749998616, + 0.008671687499997915, + 0.007765749999990135, + 0.00772103125000001, + 0.007680843749994892, + 0.007939500000006205, + 0.0073045000000036, + 0.007508156250011666, + 0.007281000000006088, + 0.012374749999992218, + 0.008047937499995328, + 0.00784971874999485, + 0.007242437499996868, + 0.0078900937500066, + 0.00759615625000265, + 0.007188281249995043, + 0.007218031250005197, + 0.0073375312499877055, + 0.007144499999995446, + 0.007135156250001273, + 0.007188031250009885, + 0.007327843750005059 + ], + "edit": [ + 4.181072999999742, + 4.278504999999768, + 4.2017149999996946, + 4.303602999999839, + 4.711992000000009, + 6.59666100000004, + 6.152402000000166, + 6.317739999999958, + 6.080901000000267, + 6.141505999999936, + 7.493556000000353, + 3.8430869999997412, + 3.9861739999996644, + 3.984425000000101, + 4.085056999999779 + ], + "sort": [ + 2.24297499999966, + 2.24254400000018, + 2.2622910000000047, + 2.3301879999999073, + 2.2508319999997184, + 2.2078520000000026, + 2.2193710000001374, + 2.2063530000000355, + 2.194977000000108, + 2.1900949999999284, + 2.1977109999997992, + 2.145817999999963, + 2.1487160000001495, + 2.1942390000003797, + 2.1998069999999643 + ], + "filter": [ + 0.5062060000000201, + 0.4772609999999986, + 0.4606739999999263, + 0.4558910000000651, + 0.48057599999992817, + 0.4571160000000418, + 0.47360799999978553, + 0.46645699999999124, + 0.48542500000030486, + 0.493724999999813, + 0.48096499999974185, + 0.4709499999999025, + 0.5000669999999445, + 0.4701110000000881, + 0.5857449999998607 + ], + "multiFilter": [ + 3.8216709999996965, + 6.241809000000103, + 5.0727499999998145, + 3.793098999999984, + 4.701740999999856, + 5.132876000000124, + 4.152788000000328, + 4.19426999999996, + 4.115467999999964, + 4.127112000000125, + 4.022230000000036, + 4.034078000000136, + 5.4875090000000455, + 3.874753999999939, + 4.009758000000147 + ], + "distinctLow": [ + 5.024319999999989, + 7.476996999999756, + 6.205737999999656, + 4.47186899999997, + 4.071586999999909, + 3.976560000000063, + 4.286173000000417, + 4.0994339999997464, + 4.115140000000338, + 4.2266960000001745, + 4.585253000000193, + 4.072607999999946, + 3.783263000000261, + 3.9610929999998916, + 3.966690999999628 + ], + "distinctHigh": [ + 21.72668900000008, + 22.2192170000003, + 24.59112799999957, + 25.38731400000006, + 28.54437800000005, + 25.86640299999999, + 21.38799300000028, + 28.99113299999999, + 18.236701999999696, + 21.29233699999986, + 19.866065000000162, + 19.13258399999995, + 19.66445500000009, + 20.094046000000162, + 17.280804999999873 + ], + "aggregate": [ + 0.17954999999983556, + 0.17911099999992075, + 0.17918999999983498, + 0.18104100000027756, + 0.17770900000004985, + 0.17519199999969715, + 0.17534799999975803, + 0.17541400000027352, + 0.1774120000000039, + 0.17748100000017075, + 0.1755179999995562, + 0.1753880000001118, + 0.17507100000011633, + 0.17529700000022785, + 0.19915400000036243, + 0.1763640000003761, + 0.17526200000020253, + 0.19812999999976455, + 0.18029100000012477, + 0.17596499999990556, + 0.1865109999998822, + 0.17673899999999776, + 0.17529400000012174, + 0.1752129999999852, + 0.1753350000003593, + 0.17776499999990847, + 0.1752240000000711, + 0.17525500000010652, + 0.17530100000021775, + 0.17552100000011706, + 0.17532699999992474, + 0.1801300000001902, + 0.1855000000000473, + 0.17570100000011735, + 0.17567400000007183, + 0.17546600000014223, + 0.17795599999999467, + 0.17803299999968658, + 0.19765000000006694, + 0.1872550000002775, + 0.18726600000036342, + 0.18364000000019587, + 0.18918699999994715, + 0.18691100000023653, + 0.1988299999998162, + 0.17607200000020384, + 0.18714500000032785, + 0.17867599999999584, + 0.1759970000002795, + 0.1759740000002239, + 0.17547600000034436, + 0.17530699999997523, + 0.1752699999997276, + 0.17998199999965436, + 0.1869040000001405, + 0.17523899999969217, + 0.17538799999965704, + 0.17576899999994566, + 0.18760100000008606, + 0.176010000000133, + 0.17548600000009174, + 0.17537099999981365, + 0.17539399999986927, + 0.17521499999975276, + 0.17863200000010693, + 0.1753670000002785, + 0.1753390000003492, + 0.17532200000005105, + 0.1752769999998236, + 0.17763899999999921, + 0.17829699999992954, + 0.17914699999982986, + 0.17930900000010297, + 0.1797959999998966, + 0.17926699999998164, + 0.18287800000007337, + 0.1876380000003337, + 0.1880660000001626, + 0.18852000000015323, + 0.18789400000014211, + 0.18751100000008591, + 0.1902460000001156, + 0.18736200000012104, + 0.19018099999993865, + 0.207260000000133, + 0.19258300000001327, + 0.19448000000011234, + 0.19194100000004255, + 0.19151899999997113, + 0.18679500000007465, + 0.1833230000002004, + 0.18551000000024942, + 0.18350499999996828, + 0.183212999999796, + 0.18795200000022305, + 0.1870520000002216, + 0.18317999999999302, + 0.18627200000037192, + 0.18328199999996286, + 0.18322900000021036, + 0.189879000000019, + 0.18353300000035233, + 0.18639200000006895, + 0.1835489999998572, + 0.1831080000001748, + 0.18416500000012093, + 0.1934249999999338, + 0.21450499999991735, + 0.18749799999977768, + 0.18745499999977255, + 0.18987400000014532, + 0.18896499999982552, + 0.18743799999992916, + 0.2057329999997819, + 0.19577299999991737, + 0.18777399999999034, + 0.18777100000033897, + 0.19429600000012215, + 0.19706399999995483, + 0.20144699999991644, + 0.2219449999997778, + 0.24881700000014462, + 0.20599199999969642, + 0.19930199999998877, + 0.18859900000006746, + 0.187460000000101, + 0.18780000000015207, + 0.18759799999997995, + 0.19052600000031816, + 0.1904140000001462, + 0.1886859999999615, + 0.18790099999978338, + 0.18794299999990471, + 0.19139099999983955, + 0.18764799999962634, + 0.1875279999999293, + 0.1880670000000464, + 0.18745499999977255, + 0.19371100000034858, + 0.19262399999979607, + 0.18746200000032331, + 0.18756000000030326, + 0.19312100000024657, + 0.19810400000005757, + 0.1874870000001465, + 0.18717500000002474, + 0.18773499999997512, + 0.18766899999991438, + 0.1874750000001768, + 0.18898399999989124, + 0.19327900000007503, + 0.18768900000031863, + 0.18777999999974782, + 0.18759600000021237, + 0.1910130000001118, + 0.18794000000025335, + 0.18748599999980797, + 0.18742400000019188, + 0.18770600000016202, + 0.190628000000288, + 0.18469000000004598, + 0.18312699999978577, + 0.1831899999997404, + 0.18319499999961408, + 0.18422000000009575, + 0.19209000000000742, + 0.18779899999981353, + 0.18736799999987852, + 0.18746399999963614, + 0.18756699999994453, + 0.19021599999996397, + 0.1874840000000404, + 0.18755200000032346, + 0.1875439999998889, + 0.18775899999991452, + 0.20703899999989517, + 0.1872720000001209, + 0.1876630000001569, + 0.1874520000001212, + 0.18766199999981836, + 0.19090400000004593, + 0.18762000000015178, + 0.18783200000007128, + 0.1947880000002442, + 0.18796599999996033, + 0.1955660000003263, + 0.19220499999983076, + 0.19271699999990233, + 0.18319999999994252, + 0.18318600000020524, + 0.1831619999998111, + 0.18757400000004054, + 0.18671600000016042, + 0.18327599999975064, + 0.18418899999960558, + 0.19082299999990937, + 0.18651600000021062, + 0.1835120000000643, + 0.18341800000007424, + 0.1909760000003189 + ] + }, + "500000": { + "ingest": [ + 650.7595979999996, + 622.9121439999999, + 649.2646219999997 + ], + "windowRead": [ + 0.010830156249994616, + 0.01060943749996568, + 0.01035140624998121, + 0.010612312499972631, + 0.010790656249980657, + 0.010113343750049353, + 0.010340000000041982, + 0.01025390625, + 0.01024540625002146, + 0.009900500000014745, + 0.010216687500019361, + 0.01004518749999761, + 0.010033374999977696, + 0.009825156250030886, + 0.010174374999962765, + 0.014101749999952062, + 0.010474437500022304, + 0.010189281250006843, + 0.010201562499958072, + 0.010261187499963853, + 0.009808343749966753, + 0.009331968750018405, + 0.010149124999998094, + 0.00937415624997584, + 0.00952684374999535, + 0.009760062499992728, + 0.009264781250010401, + 0.00961140625003054, + 0.01568212499995525, + 0.00972212499999614, + 0.010144656249963191, + 0.010379843750001783, + 0.0099149687500244, + 0.009902656250005748, + 0.010129218750023483, + 0.00986271875001421, + 0.009615031250007178, + 0.0100525624999932, + 0.009572187499998108, + 0.009710625000025175, + 0.01502846875001751, + 0.010742468749981526, + 0.010126687500019216, + 0.010546968749963526, + 0.009728031250006097, + 0.00959274999996751, + 0.009904749999975593, + 0.010424093749975327, + 0.00993043750003153, + 0.010533406249976451, + 0.009154093749998538, + 0.009185843750003642, + 0.009800031249994845, + 0.00917040625000709, + 0.00969453124997699, + 0.010758593749983447, + 0.008959312499996486, + 0.008935843750009553, + 0.009294281250049607, + 0.010950531249989126, + 0.008638749999988704, + 0.008803562500020234, + 0.00953765625001779, + 0.008952249999993, + 0.009000593749988184, + 0.009327187499991396, + 0.009218906249998327, + 0.008835062499997548, + 0.008699781250015803, + 0.00974406249997628, + 0.010688906249981756, + 0.008891499999947428, + 0.0090267187500217, + 0.010234249999996337, + 0.009318874999962645, + 0.008765593750013068, + 0.008841500000016822, + 0.00829834375002747, + 0.009029906250020758, + 0.00923993750001273, + 0.010928437500012933, + 0.009767968749997635, + 0.010001468750033382, + 0.012564968749984473, + 0.01078096874999801, + 0.015768874999992022, + 0.01006334375000506, + 0.01056484374998945, + 0.014075750000017706, + 0.014449062500034415, + 0.014606781249995038, + 0.014740375000030781, + 0.014627937499994914, + 0.014138718750018597, + 0.014992437499984135, + 0.015118343749975338, + 0.01755453124997075, + 0.017394437500001914, + 0.014708187499991254, + 0.01143043749999606, + 0.010715375000017957, + 0.010395593750047283, + 0.011951218750027692, + 0.010689218750030705, + 0.010070874999996704, + 0.010098937500004013, + 0.010023999999987154, + 0.00971784374996787, + 0.009814718750021711, + 0.009936843749983382, + 0.013190000000008695, + 0.009779531249989759, + 0.010273374999997031, + 0.010119718749990625, + 0.009828718750043208, + 0.012057531249979547, + 0.009883249999973032, + 0.009602343750032105, + 0.009789531249964512, + 0.009834124999997584, + 0.009664406250010416, + 0.00974812499998734, + 0.009811312500005442, + 0.009113875000025473, + 0.016140437499984728, + 0.01048078125000984, + 0.009777843750043758, + 0.009767187499960528, + 0.009687312499977452, + 0.00979028124999104, + 0.010074062499995762, + 0.013495343749980293, + 0.010561250000023392, + 0.011199531249985739, + 0.011318218750034248, + 0.011032624999984364, + 0.011578499999984615, + 0.010941656249997322, + 0.01105475000002798, + 0.0107327499999883, + 0.010100062499986961, + 0.010453374999997322, + 0.01641571875001091, + 0.011577656250040036, + 0.011082124999973075, + 0.013088937500015163, + 0.012342999999987114, + 0.010639187499975833, + 0.010058843749959578, + 0.010187687499978892, + 0.010355406250027954, + 0.0101399999999785, + 0.009989062499982992, + 0.010045093749965872, + 0.010467281250043925, + 0.009551093749962547, + 0.009985000000028776, + 0.00924906249997548, + 0.01139031249999789, + 0.011768125000003238, + 0.010242343750007876, + 0.00996453125003427, + 0.011642156249990876, + 0.010033781250001539, + 0.01103993750001564, + 0.011546593750040302, + 0.01118296875000624, + 0.011287999999979093, + 0.010978187500029435, + 0.014119187500000407, + 0.010748124999963693, + 0.01084509374999243, + 0.010669812499997988, + 0.010690000000010969, + 0.011137343749965112, + 0.010783187500010172, + 0.011304812499986383, + 0.010758124999995289, + 0.011220656249975036, + 0.011226281250003467, + 0.011825093750019278, + 0.011497531249972326, + 0.011783875000048738, + 0.011699000000021442, + 0.01754021875001399, + 0.01290443749996939, + 0.01259996874995295, + 0.012301874999991469, + 0.012294937499973457, + 0.012406906250021166, + 0.012477312499981963, + 0.01274281249999376, + 0.012092781249975815, + 0.012098624999964613, + 0.017278499999974883, + 0.018916031250000742, + 0.019345218750004278, + 0.020482812499949432, + 0.019541718750019754, + 0.019481968749971657, + 0.019289750000041295, + 0.012787124999988464, + 0.015793906249996326, + 0.014757999999972071, + 0.01636659374997862, + 0.016600468749970787, + 0.013558499999987816, + 0.012111062500025582, + 0.012259343750031348, + 0.0127307500000029, + 0.013569187499967938, + 0.012386843749993659, + 0.012173750000044947, + 0.018506468750047134, + 0.012289156250005817, + 0.01392406249999567, + 0.01206131250000908, + 0.011999468749991138, + 0.012143968749967371, + 0.01176965625001003, + 0.011824218750007276, + 0.011867093750026925, + 0.019549937500016767, + 0.012605062499972064, + 0.01201581250001027, + 0.012814156250044562, + 0.012114843749998272, + 0.01192924999998013, + 0.013568875000032676, + 0.011843687500004307, + 0.012338343750002423, + 0.011919781250014694, + 0.012048718749952059, + 0.011781406250008786, + 0.011413562500024454, + 0.011892343749991596, + 0.011643093750024036, + 0.011719218749988158, + 0.012152937499990912, + 0.012161624999976084, + 0.024855562500022188, + 0.015212625000003754, + 0.0154918124999881, + 0.017038312499948916, + 0.012965843750009753, + 0.011855062499989799, + 0.011993968750005024, + 0.012388031249997766, + 0.01185934375001807, + 0.012390343750041666, + 0.012258750000000873, + 0.012134624999987409, + 0.012229625000031774, + 0.012272156250048738, + 0.01292709374996548, + 0.012918124999998781, + 0.012865093750008327, + 0.01264346874995681, + 0.012749937500018405, + 0.012784156250006617, + 0.012204750000023523, + 0.012446968749998177, + 0.012468874999967738, + 0.012077562500053318, + 0.01174906250003005, + 0.011835718750035085, + 0.011758656249980959, + 0.012225999999998294, + 0.011527718750016902, + 0.018732468750044973, + 0.012194468750010401, + 0.012524343749987565, + 0.01226034374997198, + 0.012180000000000746, + 0.012474749999967116, + 0.01172456249997822, + 0.011571468749991709, + 0.011716156249974574, + 0.011551406250021046, + 0.011640656249994663, + 0.011296000000015738, + 0.011122437500034721, + 0.011203062499987482, + 0.011008406250027747, + 0.011334093750008378, + 0.011271031250032593, + 0.011455874999967364, + 0.011832156250022763, + 0.011719218750045002, + 0.011434187500015014, + 0.011917531249991953, + 0.011624968750027165, + 0.01165221875004363, + 0.012789031249951677, + 0.011744812500012358, + 0.011817124999993212, + 0.012119468749972384, + 0.011384062500042091, + 0.01161384375001262, + 0.017670437500044045 + ], + "edit": [ + 4.522651999999653, + 4.023106000000553, + 4.0216680000012275, + 5.571491000000606, + 4.16555900000094 + ], + "sort": [ + 11.219139000000723, + 11.852370999999039, + 11.581466999999975, + 11.555199000000357, + 11.871831000000384 + ], + "filter": [ + 2.4375569999992877, + 2.657777000000351, + 2.42902900000081, + 2.4554389999993873, + 2.4297779999997147 + ], + "multiFilter": [ + 26.229951999999685, + 24.941866000001028, + 20.12192199999845, + 22.26442500000121, + 22.999429999999847 + ], + "distinctLow": [ + 19.95322599999963, + 21.25253899999916, + 19.790632000000187, + 19.83896199999981, + 20.747385999999096 + ], + "distinctHigh": [ + 141.48920999999973, + 127.76068099999975, + 127.93355800000063, + 133.45357899999908, + 142.68812699999944 + ], + "aggregate": [ + 1.090517999999065, + 1.0897650000006252, + 1.0890049999998155, + 1.1014810000015132, + 1.0893920000016806, + 1.092077999999674, + 1.0892669999993814, + 1.089334999998755, + 1.1261500000000524, + 1.246166999999332, + 1.0642339999994874, + 1.0677989999985584, + 1.0610510000005888, + 1.0905560000010155, + 1.1108500000009371, + 1.095644999999422, + 1.0893900000010035, + 1.0904019999998127, + 1.0968899999988935, + 1.1155390000003536, + 1.0911510000005364, + 1.0933350000013888, + 1.137936000000991, + 1.3230750000002445, + 1.1496919999990496, + 1.0947180000002845, + 1.1017119999996794, + 1.0941469999997935, + 1.0898629999992409, + 1.089842999999746, + 1.0900409999994736, + 1.0925790000001143, + 1.0932119999997667, + 1.103890999998839, + 1.1676919999990787, + 1.091114999999263, + 1.3180950000005396, + 1.2840719999985595, + 1.1293430000005173, + 1.1258039999993343, + 1.1208629999982804, + 1.1243680000006862, + 1.1235510000005888, + 1.1212400000003981, + 1.1205929999996442, + 1.1201360000013665, + 1.1242540000002919, + 1.1045469999990019, + 1.0974980000009964, + 1.0912540000008448, + 1.0936149999997724, + 1.2524780000003375, + 1.1980770000009215, + 1.0989639999988867, + 1.099512999999206, + 1.0974150000001828, + 1.0948520000001736, + 1.0905769999990298, + 1.0926709999985178, + 1.0884710000009363, + 1.0943769999994402, + 1.0903779999989638, + 1.0936529999999038, + 1.0983160000014323, + 1.0931319999999687, + 1.0940690000006725, + 1.3906740000002173, + 1.1073410000008153, + 1.0928440000006958, + 1.2141219999994064, + 1.0968599999996513, + 1.095350999999937, + 1.093235000000277, + 1.0931829999990441, + 1.0906119999999646, + 1.116731999998592, + 1.1035350000001927, + 1.0979169999991427, + 1.1322130000007746, + 1.1134839999995165, + 1.195331000000806, + 1.0939920000000711, + 1.0962359999994078, + 1.1196359999994456, + 1.1225699999995413, + 1.1189770000000863, + 1.1214189999991504, + 1.0894630000002508, + 1.0906699999995908, + 1.0890660000004573, + 1.0951069999991887, + 1.0908540000000357, + 1.0755429999990156, + 1.0677439999999478, + 1.258454000000711, + 1.1203700000005483, + 1.2283660000011878, + 1.2116989999994985, + 1.1008490000003803, + 1.0923990000010235, + 1.1162789999998495, + 1.089415000000372, + 1.0902429999987362, + 1.0905640000000858, + 1.0913730000011128, + 1.0946949999997742, + 1.0964070000009087, + 1.186388000000079, + 1.4295409999995172, + 1.1903030000012222, + 1.1401590000004944, + 1.1227989999988495, + 1.1241269999991346, + 1.1204080000006797, + 1.1401509999996051, + 1.101991999999882, + 1.089998999999807, + 1.093641999999818, + 1.111786999999822, + 1.2688269999998738, + 1.1206050000000687, + 1.1229139999995823, + 1.1976080000004004, + 1.2355050000005576, + 1.1185229999991861, + 1.5015760000005685, + 1.1216009999989183, + 1.1225759999997535, + 1.1196389999986422, + 1.1227450000005774, + 1.1253230000002077, + 1.1084430000009888, + 1.0888839999988704, + 1.0905500000008033, + 1.0891069999997853, + 1.0941100000000006, + 1.1575580000007903, + 1.1509249999999156, + 1.0977849999999307, + 1.0894939999998314, + 1.093246000000363, + 1.0886169999994308, + 1.1109859999996843, + 1.104230999999345, + 1.1321910000006028, + 1.09088999999949, + 1.0944239999989804, + 1.1033320000005915, + 1.0924560000003112, + 1.1175480000001698, + 1.0899440000011964, + 1.2862649999988207, + 1.0994150000005902, + 1.0930609999995795, + 1.0931619999992108, + 1.089866999998776, + 1.0759340000004158, + 1.0643369999997958, + 1.0604380000004312, + 1.0627439999989292, + 1.0663779999995313, + 1.0660180000013497, + 1.4398099999998522, + 1.1787189999995462, + 1.1271930000002612, + 1.2098899999982677, + 1.1224959999999555, + 1.1256560000001627, + 1.1128680000001623, + 1.1089709999996558, + 1.0908570000010513, + 1.0889829999996437, + 1.096668000000136, + 1.093098999999711, + 1.0958870000013121, + 1.0904220000011264, + 1.1112059999995836, + 1.2230189999991126, + 1.6792380000006233, + 1.4784070000005158, + 1.1303500000012718, + 1.1524730000001, + 1.1213240000015503, + 1.1206899999997404, + 1.1225379999996221, + 1.124444000000949, + 1.121289999999135, + 1.121645000001081, + 1.1226979999992182, + 1.1238180000000284, + 1.1192689999988943, + 1.1199000000015076, + 1.1200079999998707, + 1.121913000000859, + 1.1206480000000738, + 1.097327999999834, + 1.090661000000182, + 1.0890419999996084, + 1.1161009999996168, + 1.090106999999989 + ] + }, + "1000000": { + "ingest": [ + 1359.7321929999998, + 1490.8312590000005, + 1276.6305429999993 + ], + "windowRead": [ + 0.011377156250091502, + 0.010958593749933243, + 0.010806000000002314, + 0.011302343750003274, + 0.010896531249954933, + 0.010608374999947046, + 0.010215281249998043, + 0.010350531249969208, + 0.01020931250002377, + 0.01057221874998504, + 0.010386749999952372, + 0.010422437499983062, + 0.010298531249986809, + 0.010575125000059415, + 0.011450999999965461, + 0.012296312499984197, + 0.014934906250005042, + 0.013092500000084328, + 0.016109906250107997, + 0.01375471875007861, + 0.014305062499943233, + 0.01374065624997911, + 0.014223843750073684, + 0.01292062499999247, + 0.012313437499983593, + 0.012244156250062588, + 0.012059781250059132, + 0.012382624999986547, + 0.012074874999939311, + 0.016331437500070933, + 0.017867718749926098, + 0.020435406249930566, + 0.018526156250004533, + 0.020484843749954962, + 0.018365593749990694, + 0.01385646875007751, + 0.01337181249994046, + 0.016557531249986823, + 0.021469062500045766, + 0.023204687499969623, + 0.023509249999960957, + 0.02238599999998314, + 0.022350718750089982, + 0.021467093750061395, + 0.021462406249952437, + 0.02001837499994963, + 0.021079343750102453, + 0.02116478124992227, + 0.02195700000004308, + 0.012879125000040403, + 0.024534906250096356, + 0.021637093749973246, + 0.02157878125001389, + 0.020316656249974585, + 0.020537750000016786, + 0.013813468749958702, + 0.01131209375000708, + 0.01097556249999343, + 0.01133500000003096, + 0.010610406249952575, + 0.010588781250021384, + 0.011974687500014625, + 0.010714875000076063, + 0.011232156250002845, + 0.01060062499993819, + 0.010793812499969135, + 0.011159281249888409, + 0.010566687500045191, + 0.009871812500023225, + 0.011667125000030865, + 0.011912687499943786, + 0.010572031250035252, + 0.009997375000011743, + 0.0098081874999707, + 0.00967865625000286, + 0.009580281250009648, + 0.010230531250044805, + 0.009296468749994347, + 0.010641968749951047, + 0.01038087499989615, + 0.010552468750006483, + 0.010413187500034837, + 0.01044000000001688, + 0.014322125000035157, + 0.010173937499985186, + 0.010403343749999294, + 0.010352218749972053, + 0.010171187500077394, + 0.01639528124997014, + 0.011530843749937958, + 0.011105343750045904, + 0.01130871875000139, + 0.010897187499949723, + 0.01068818750002265, + 0.010866281249946041, + 0.010444937499983098, + 0.01072268749999239, + 0.01147518750008203, + 0.01061193750001621, + 0.01031918750004479, + 0.010497843749931235, + 0.011015687500048443, + 0.010498531250050291, + 0.010322125000016058, + 0.010303562499984764, + 0.010241406249974716, + 0.010427593750023334, + 0.010202656250044129, + 0.011569062500029759, + 0.010757593749985972, + 0.014576031249930566, + 0.011093718749975778, + 0.012195968750006614, + 0.010975406249940534, + 0.011050812500002394, + 0.010669624999991356, + 0.010916218749912332, + 0.01310128124998755, + 0.011112718749927808, + 0.01106659375000163, + 0.01130884374993002, + 0.01085006250002607, + 0.010844062499927531, + 0.010661499999969237, + 0.010727843749918975, + 0.010513968749933156, + 0.010866281250059728, + 0.010243374999959087, + 0.010484375000032742, + 0.010676531249941945, + 0.011295593749991895, + 0.011031062500023836, + 0.010087593749972257, + 0.011105406250067063, + 0.016170468749919564, + 0.011017124999966654, + 0.012264062499980355, + 0.012205531249946944, + 0.011949187500022163, + 0.014216781249956512, + 0.010987406250023923, + 0.011450687500087042, + 0.012325687499924243, + 0.011866937500030872, + 0.01126618750004127, + 0.01142340624994631, + 0.011060843749987725, + 0.010968843750106316, + 0.011768250000045555, + 0.012696750000031898, + 0.012235124999961045, + 0.012026468750036656, + 0.011281343750056294, + 0.011503656249942651, + 0.011267781250012376, + 0.011869218750007349, + 0.01165046875007647, + 0.01104034374998264, + 0.011979531249949105, + 0.011026656250010092, + 0.011903187500024615, + 0.011572687500006396, + 0.011002343749964894, + 0.019546812500038868, + 0.019588281249980355, + 0.013564218749934298, + 0.011366124999995009, + 0.012444687499964857, + 0.010453968749970954, + 0.011679406249982094, + 0.010909812500017324, + 0.01020878124995761, + 0.011070312500010004, + 0.011267031249985848, + 0.011642437499972402, + 0.012367718750056156, + 0.012594562499998574, + 0.011747249999984888, + 0.011895499999923231, + 0.013425281249965337, + 0.015452031249992615, + 0.011548406249971777, + 0.011707000000001244, + 0.011494187499920372, + 0.011506000000053973, + 0.011018531249987973, + 0.011614499999950567, + 0.011218218749945663, + 0.014904812500049047, + 0.012677968750040236, + 0.011803937500076245, + 0.01111653124996792, + 0.01081084375005048, + 0.010440718750032829, + 0.011060874999998305, + 0.010021406250075415, + 0.010214000000019041, + 0.010316406250012733, + 0.010010125000007974, + 0.009738218750044325, + 0.010145968749952772, + 0.010430968750029024, + 0.010652749999962907, + 0.010229000000094857, + 0.010162250000007589, + 0.01020393750002313, + 0.012240281250001317, + 0.011856156250019012, + 0.012518218749960397, + 0.015144468750008855, + 0.011987062499997592, + 0.012258812500022032, + 0.012048000000049797, + 0.011882374999913736, + 0.011848187499936103, + 0.012371624999900632, + 0.01217806249997011, + 0.011713312499978201, + 0.01655025000002297, + 0.012358968750049826, + 0.012226437499975873, + 0.012543250000021544, + 0.01238234375000502, + 0.012431874999947468, + 0.011700812500066604, + 0.011572249999971973, + 0.01141106250008761, + 0.011140656249949643, + 0.014501281249977183, + 0.010410437500013359, + 0.010674281249976048, + 0.010418937499935055, + 0.010524343749921172, + 0.010532218750086031, + 0.010465343750070133, + 0.01038181250009984, + 0.010068812500094282, + 0.010406593749962667, + 0.01096881249998205, + 0.011016874999995707, + 0.011769249999929343, + 0.0112608749999481, + 0.011669968749970394, + 0.01147531250001066, + 0.011194343749934887, + 0.011041999999974905, + 0.011547124999992775, + 0.011774937500035776, + 0.011720250000053056, + 0.011630625000066175, + 0.01151443749995451, + 0.012685156249972351, + 0.011184812500005137, + 0.010769406250005886, + 0.011165312499997526, + 0.010518156249986532, + 0.010709718749922104, + 0.013615625000056752, + 0.010482968750011423, + 0.01068965624995144, + 0.010244437500091408, + 0.01019103125008769, + 0.010454187500045009, + 0.010614812500080006, + 0.01094137499990211, + 0.01087912499997401, + 0.010028718750049848, + 0.01048190624999279, + 0.010612343750040054, + 0.01001646874999551, + 0.01119884374998037, + 0.011520062499926098, + 0.011441906249956446, + 0.011257718750016465, + 0.017205624999974134, + 0.011572312499993131, + 0.011979343749999316, + 0.011204468750065644, + 0.011412999999947715, + 0.014569750000077875, + 0.011261187499940206, + 0.011333250000006956, + 0.010853218749957705, + 0.01107334375001301, + 0.010858781249908134, + 0.010421062499972322, + 0.010445156249943466, + 0.010539968750094886, + 0.010231062499997279, + 0.010209156249970874, + 0.011268406249996588, + 0.010337124999978187, + 0.0103059062499824, + 0.011464875000001484, + 0.01967506249991402, + 0.011011812499987172, + 0.010789281250026761, + 0.01058487500006322, + 0.014118843749997723, + 0.010875031250066058 + ], + "edit": [ + 4.88209199999983, + 3.957832000000053, + 3.681143999998312, + 3.9053469999998924, + 3.707510000000184 + ], + "sort": [ + 25.29826200000025, + 24.052887999998347, + 24.30091100000209, + 27.263663000001543, + 27.61630999999761 + ], + "filter": [ + 6.971805000001041, + 4.973041000001103, + 4.542116000000533, + 4.241376000001765, + 6.260682000000088 + ], + "multiFilter": [ + 41.46886400000221, + 49.55129300000044, + 54.322738999999274, + 47.17306000000099, + 42.99854300000152 + ], + "distinctLow": [ + 39.28194599999915, + 42.291809000002104, + 42.27210600000035, + 39.879297999999835, + 40.563562999999704 + ], + "distinctHigh": [ + 297.54474400000254, + 275.07936399999744, + 285.57956999999806, + 274.08862600000066, + 274.7925379999979 + ], + "aggregate": [ + 2.377986999999848, + 2.4504519999973127, + 2.3796499999989464, + 2.6255659999987984, + 2.3960449999976845, + 2.3803479999987758, + 2.7580640000014682, + 3.404158000001189, + 2.0912849999986065, + 1.9277409999995143, + 2.514630000001489, + 2.7359720000022207, + 2.043666999998095, + 2.051104000001942, + 2.2023239999980433, + 2.1736699999964912, + 3.356336000000738, + 2.654491000001144, + 2.287535999999818, + 2.2742419999995036, + 2.3780839999999444, + 2.230800999997882, + 2.2257989999998244, + 2.179442000000563, + 2.745300999999017, + 2.2921449999994365, + 2.622949000000517, + 2.700462000000698, + 2.196521000001667, + 2.1920390000013867, + 2.1844359999995504, + 2.196023000000423, + 2.280228999999963, + 2.8504439999996976, + 2.1998249999996915, + 2.2252650000009453, + 2.1893200000013167, + 2.3759920000011334, + 2.2106170000006387, + 2.5363429999997607, + 2.2448379999987083, + 2.6782879999991565, + 2.222787000002427, + 2.1861840000019583, + 3.0167030000011437, + 3.2619229999982053, + 2.3178270000025805, + 2.307327999998961, + 2.3128490000017337, + 2.2917579999993904, + 2.275803000000451, + 2.4676499999986845, + 2.426606000000902, + 2.4600199999986216, + 2.260007000000769, + 2.2473399999980757, + 2.2532869999995455, + 2.3784509999968577, + 2.2470609999982116, + 2.2632190000003902, + 2.247482000002492, + 2.2907669999985956, + 2.3096130000012636, + 2.3034110000007786, + 2.3976199999997334, + 2.2433899999996356, + 2.240420999998605, + 2.21867199999906, + 2.1802310000020952, + 2.1832479999975476, + 2.178306000001612, + 2.346571000001859, + 2.302243999998609, + 2.191742000002705, + 2.186847000000853, + 2.1898270000019693, + 2.185593999998673, + 2.178538000000117, + 2.1830669999981183, + 2.329866000000038, + 2.1980679999978747, + 2.295948999999382, + 2.1880550000023504, + 2.359123999998701, + 2.2204840000013064, + 2.222386000001279, + 2.401686000001064, + 2.2134640000003856, + 2.3569509999979346, + 2.235726999999315, + 2.1829109999998764, + 2.269871000000421, + 2.2528779999993276, + 2.453241999999591, + 2.238289999997505, + 2.3241609999968205, + 2.19015600000057, + 2.249187000001257, + 2.2721869999986666, + 2.1983949999994365, + 2.338919999998325, + 2.2495830000007118, + 2.2853519999989658, + 2.1869560000013735, + 2.1871289999980945, + 2.2282169999998587, + 2.223565000000235, + 2.248899000001984, + 2.3426169999984268, + 2.293062999997346, + 2.2526400000024296, + 2.2860099999998056, + 2.3633260000024165, + 2.3171650000003865, + 2.3551020000013523, + 2.2853719999984605, + 2.5641130000003614, + 2.2427539999989676, + 2.2462369999993825, + 2.3199210000020685, + 2.2054859999989276, + 2.3005789999988338, + 2.2776969999977155, + 2.258959999999206, + 2.5115899999982503, + 2.2728859999988344, + 2.4578349999974307, + 2.2656969999989087, + 2.2599479999989853, + 2.2713299999995797, + 2.347540000002482, + 2.2465569999985746, + 2.2442809999993187, + 2.247215999999753, + 2.2410300000010466, + 2.2018150000003516, + 2.1843690000023344, + 2.1833669999978156, + 2.1798199999975623, + 2.177918999997928, + 2.523646000001463, + 2.3169920000000275, + 2.3504089999987627, + 2.204362000000401, + 2.3023250000005646, + 2.224354999998468, + 2.2550819999996747, + 2.275426999996853, + 2.2701970000016445, + 2.2924149999998917, + 2.2481429999970715, + 2.2548730000016803, + 2.3095999999968626, + 2.270517999997537, + 2.3197609999988344, + 2.3064569999987725, + 2.253445999998803, + 2.276428000001033, + 2.209958999999799, + 2.1935649999977613, + 2.2443349999994098, + 2.3465999999971245, + 2.1938630000004196, + 2.241049000000203, + 2.2027950000010605, + 2.2765499999986787, + 2.2073880000025383, + 2.303082999998878, + 2.2641589999984717, + 2.2626390000004903, + 2.259382000000187, + 2.206865000000107, + 2.224122999999963, + 2.247607000001153, + 2.2453549999991083, + 2.1981720000003406, + 2.246820000000298, + 2.236497000001691, + 2.1828109999987646, + 2.1859160000021802, + 2.196487999997771, + 2.2024419999979727, + 2.1916029999993043, + 2.1820929999994405, + 2.192878000001656, + 2.7109090000012657, + 2.405337000000145, + 2.3177249999971536, + 2.295332999998209, + 2.245890000001964, + 2.2429269999993267, + 2.242901999998139, + 2.2858070000002044, + 2.244729999998526, + 2.2433019999989483, + 2.2448779999976978, + 2.2190520000003744, + 2.183640999999625, + 2.1962469999998575, + 2.190113000000565 + ] + } + } + }, + { + "repetition": 3, + "captureSha256": "ffb0031c6d4c55e9e6d7c1f2be2e07b351bbaf8a303957172940bc70e8b5eb7c", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:50:58.610Z", + "sheetwriteRows": [ + 1000, + 10000, + 100000, + 500000, + 1000000 + ], + "handsontableRows": [ + 1000, + 10000 + ] + }, + "sheetwrite": { + "1000": { + "ingest": [ + 1.393211000000008, + 1.3096310000000244, + 1.4881620000000453, + 2.8036769999999933, + 4.809280000000001, + 5.221906999999987, + 1.2654269999999883 + ], + "windowRead": [ + 0.01165581249999903, + 0.011567593750001492, + 0.011965812499999728, + 0.011792156249999408, + 0.012399343749999403, + 0.01162728125000001, + 0.011742062499999761, + 0.012326750000001496, + 0.011903656250000338, + 0.012143593750000292, + 0.012361218749999736, + 0.011949343750000452, + 0.012369124999999315, + 0.012397781249999795, + 0.011753656250000688, + 0.01201106249999917, + 0.011857468749999711, + 0.01206528124999906, + 0.01184181250000016, + 0.012054812500000622, + 0.011933687499999124, + 0.013467781250000144, + 0.01281840625000008, + 0.012422125000000506, + 0.01230712499999953, + 0.012524062499998934, + 0.012251718749999085, + 0.012303250000000432, + 0.012240312499999462, + 0.012251218750000348, + 0.01271159374999975, + 0.012105968749999363, + 0.012047562499999387, + 0.0123993750000011, + 0.01204306250000009, + 0.012262749999999656, + 0.0124950312499994, + 0.012306374999999647, + 0.012077843749999317, + 0.013421875000000583, + 0.012560906250000059, + 0.012012374999999409, + 0.012497375000000588, + 0.012391812500000654, + 0.012430281249999453, + 0.011915843749999766, + 0.011807968749998565, + 0.011633062499999625, + 0.012083187500000037, + 0.012899343750000014, + 0.01183378124999912, + 0.012760218749999552, + 0.02795943749999985, + 0.026109187499999464, + 0.021280093750000617, + 0.0249988124999998, + 0.021687843750001434, + 0.02163143749999996, + 0.017627499999999685, + 0.012060124999999644, + 0.010695187499999648, + 0.010596031249999527, + 0.012007031250000466, + 0.010685437500001171, + 0.011454906250000008, + 0.010761687499998729, + 0.01057228125000087, + 0.010594812500000828, + 0.012349468749999204, + 0.010524062500000042, + 0.010471750000000668, + 0.011153437500000862, + 0.010537031249999274, + 0.011505718750001392, + 0.011089281249999416, + 0.010548968749999332, + 0.01380721874999935, + 0.0105585937499999, + 0.010471281250000075, + 0.010898156249998792, + 0.010732312500000063, + 0.010665218750000705, + 0.010932343749999518, + 0.011136000000000479, + 0.010626656250000366, + 0.01094475000000017, + 0.010609875000000102, + 0.011035312499998895, + 0.011133499999999685, + 0.011060218749999962, + 0.011060906250000002, + 0.011830500000000299, + 0.01128437500000068, + 0.016275187499999788, + 0.00991828125000005, + 0.009549562500000164, + 0.009950906250001168, + 0.009573343750000518, + 0.010329812500000202, + 0.009694281250000714, + 0.00960865625000018, + 0.010267718750000654, + 0.009853093749999431, + 0.009569218750000275, + 0.009539249999999555, + 0.009767093749999844, + 0.009754687499999193, + 0.009936656249999842, + 0.00949918749999945, + 0.00966478124999881, + 0.009842343749999927, + 0.00950787500000061, + 0.009727343749998951, + 0.00972337500000009, + 0.009526874999998824, + 0.009752562500001005, + 0.009574031250000559, + 0.009534249999999744, + 0.009832375000000226, + 0.009571312500000317, + 0.009671218750000321, + 0.009614250000000268, + 0.00990268750000034, + 0.009351156249998382, + 0.00958040625000045, + 0.00976818749999886, + 0.015607468749999853, + 0.009620812500001463, + 0.009631062500000453, + 0.009685156249998883, + 0.00980353125000022, + 0.009784406249998767, + 0.01063081250000053, + 0.010675250000000247, + 0.009847781249998633, + 0.009752187500000176, + 0.010061999999999571, + 0.009794062499999256, + 0.009813468749999998, + 0.009712906249999875, + 0.0478621562499999, + 0.0075534062500004495, + 0.008607624999999786, + 0.008583968749999116, + 0.00761059374999995, + 0.0075721249999993745, + 0.007556687500001047, + 0.00764153125, + 0.007398781250000042, + 0.007374062500000278, + 0.0076883125000009045, + 0.007681437500000499, + 0.007564437499999244, + 0.007534906250000972, + 0.0075525937500007245, + 0.009510281249999863, + 0.007839093750000359, + 0.007391562499998727, + 0.007601531249999738, + 0.007795312499998985, + 0.007613968750000311, + 0.007778687500000103, + 0.007713781250000551, + 0.00860490625000132, + 0.008021437500000062, + 0.00789628124999986, + 0.00818928124999907, + 0.008079874999999959, + 0.007703437500000021, + 0.007771093749999736, + 0.007895218750000765, + 0.008218562499999749, + 0.008161624999999617, + 0.008199093749999165, + 0.008238156250000017, + 0.00834693749999893, + 0.008326562499998857, + 0.008185968750000328, + 0.008235499999999618, + 0.008384781250001083, + 0.007948406250001483, + 0.007938187499998861, + 0.008063968750001038, + 0.007949031249999905, + 0.007821937499999265, + 0.007862093749999133, + 0.007974687499999078, + 0.007858687499998851, + 0.007782093750000385, + 0.00782243749999978, + 0.007938031249999256, + 0.007933406250000274, + 0.008089968749999343, + 0.007988843749998864, + 0.008113249999999184, + 0.007877562499999158, + 0.008571218749999332, + 0.008130281250000593, + 0.008603656250000924, + 0.007933624999999722, + 0.00804831249999971, + 0.008274781249999918, + 0.008303718749999689, + 0.007990375000000327, + 0.008385406250001282, + 0.008040218749998829, + 0.012540156249999157, + 0.013751781249998984, + 0.016239218750000006, + 0.008923281250000414, + 0.008055187500000116, + 0.008148656250000386, + 0.008052437499999954, + 0.008144125000001168, + 0.008011187500001071, + 0.008234562500000209, + 0.007791437499999887, + 0.007261500000000254, + 0.007452156250000286, + 0.0077011562500004516, + 0.007604218750000058, + 0.007612812499999677, + 0.007501250000000681, + 0.007673593750000762, + 0.007027625000000981, + 0.009830624999999316, + 0.008866343750000283, + 0.007055593749999645, + 0.0068347499999994454, + 0.007420187500001063, + 0.007275062499999763, + 0.007462062500000144, + 0.007058312500001662, + 0.007019999999998916, + 0.007042468749999031, + 0.006868093750000526, + 0.0069877812500003245, + 0.0068507499999999055, + 0.006590906250000472, + 0.007410093749999902, + 0.010771937499999495, + 0.010794718750000598, + 0.010331343749999888, + 0.010700562500000288, + 0.01043990625000113, + 0.010190531250000134, + 0.010497687500000907, + 0.010138281249998826, + 0.010205468749999724, + 0.009736062500000031, + 0.006284968750000175, + 0.00624784374999976, + 0.006271374999998969, + 0.0060776874999994845, + 0.0063094687499987145, + 0.006214874999999509, + 0.006110468750000209, + 0.006066406249999545, + 0.006332468749999265, + 0.006351156250000045, + 0.0062203124999999915, + 0.006206343749999732, + 0.006211874999999978, + 0.006153937500000595, + 0.006581531249999273, + 0.0059008437500001065, + 0.005750593750001087, + 0.0057019062499996664, + 0.0056984687499994635, + 0.005891312499999302, + 0.0057344687499991664, + 0.0058182187499991045, + 0.007195531249999831, + 0.006067999999999074, + 0.005952843749998493, + 0.005922906249999471, + 0.005952687500000664, + 0.006677718749999784, + 0.005911593749999611, + 0.006739562500001739, + 0.006529531250000886, + 0.0061568437500003625, + 0.0059243437499993945, + 0.005959281250000004, + 0.006727437500000377, + 0.005964062500000367, + 0.006797531249999267, + 0.0059880312500002475, + 0.00602603125000023, + 0.006845843749999858, + 0.006080125000000436, + 0.0059957812500002206, + 0.0060494062499998336, + 0.005635187499999361, + 0.005768124999999458, + 0.005940937500000132, + 0.005795812499998831, + 0.008793281250000007, + 0.00683621874999929, + 0.005860781250000002 + ], + "edit": [ + 7.07074700000004, + 6.8390059999999835, + 8.290165000000002, + 7.518491999999981, + 7.6964060000000245, + 7.816230000000019, + 7.429742999999974, + 5.115007999999989, + 5.314231000000007, + 5.453979000000004, + 7.842096999999967, + 8.943841999999904, + 9.207679000000098, + 5.327899000000002, + 5.138109999999983 + ], + "sort": [ + 0.12423099999989518, + 0.11262199999998757, + 0.10845600000004652, + 0.11774700000000848, + 0.10592899999994643, + 0.12410700000009456, + 0.11155699999994795, + 0.11920699999996032, + 0.10761100000001989, + 0.10666900000001078, + 0.10509899999999561, + 0.11138600000003862, + 0.1179060000000618, + 0.137662999999975, + 0.1129720000000134 + ], + "filter": [ + 0.031497000000058506, + 0.027880999999979394, + 0.02970299999992676, + 0.04007300000000669, + 0.026217999999971653, + 0.02447699999993347, + 0.028120999999941887, + 0.026588000000060674, + 0.022099000000025626, + 0.02971500000001015, + 0.03056099999992057, + 0.0410069999999223, + 0.043632000000002336, + 0.03061000000002423, + 0.022206000000096537 + ], + "multiFilter": [ + 0.12766199999998662, + 0.11323600000002898, + 0.10863400000005186, + 0.11504400000001169, + 0.13156400000002577, + 0.1265529999999444, + 0.12738200000001143, + 0.1331000000000131, + 0.10280299999999443, + 0.10357899999996789, + 0.10497299999997267, + 0.11914000000001579, + 0.10382399999991776, + 0.0980450000000701, + 0.0969159999999647 + ], + "distinctLow": [ + 0.09170700000004217, + 0.09294699999998102, + 0.10929899999996451, + 0.08415600000000723, + 0.08413500000006024, + 0.0837980000000016, + 0.08492499999999836, + 0.09683900000004542, + 0.14609899999993559, + 0.11247800000001007, + 0.10778499999992164, + 0.0735140000000456, + 0.07271100000002662, + 0.0720770000000357, + 0.07212000000004082 + ], + "distinctHigh": [ + 0.3111509999999953, + 0.29578700000001845, + 0.2937540000000354, + 0.29530099999999493, + 0.3024149999999963, + 0.2873580000000402, + 0.24888800000007905, + 0.2646379999999908, + 0.2826469999999972, + 0.28813100000002123, + 0.29671300000006795, + 0.2713129999999637, + 0.2745240000000422, + 0.317813000000001, + 0.31891299999995226 + ], + "aggregate": [ + 0.004499070312499853, + 0.004554445312500377, + 0.004530421874999746, + 0.00446402343749952, + 0.0044041093750006866, + 0.00452656249999972, + 0.004546359375000364, + 0.004536289062500032, + 0.004620625000000267, + 0.004442632812500236, + 0.004492421875000652, + 0.004445945312499866, + 0.004497570312500088, + 0.00461869531249981, + 0.00439553125000014, + 0.00446769531250002, + 0.004434242187500104, + 0.004437882812499794, + 0.004402570312499243, + 0.004374867187499909, + 0.004369523437500078, + 0.004359398437499884, + 0.0044372890624995165, + 0.004438539062499913, + 0.004492359374999921, + 0.004440945312500055, + 0.0044223515624999266, + 0.004516968749999961, + 0.004465398437499601, + 0.005162945312500611, + 0.007552218749999895, + 0.007597101562499375, + 0.007647093750000167, + 0.007594242187500377, + 0.006788921875000575, + 0.004704773437500087, + 0.004804851562499657, + 0.0045413437499997045, + 0.004588742187499939, + 0.004842093749999776, + 0.004742218749999694, + 0.004710773437500038, + 0.004672937499999641, + 0.0047348515625005305, + 0.004612820312500432, + 0.004781023437500309, + 0.004754789062499931, + 0.004714164062499471, + 0.0047307968750001095, + 0.004763195312500024, + 0.004661921874999919, + 0.0046596640625002905, + 0.004744273437499835, + 0.004608906249999656, + 0.0046197499999998115, + 0.004543351562499964, + 0.004540023437499485, + 0.004385929687500401, + 0.0044534218750005294, + 0.004399789062500048, + 0.005410835937500025, + 0.005497968749999416, + 0.0068932109375001716, + 0.00453752343749958, + 0.004799023437500161, + 0.004509734375000463, + 0.00435257812499934, + 0.004186171875000255, + 0.004083718749999576, + 0.004063414062500215, + 0.003922437499999987, + 0.004519499999999788, + 0.004291914062499735, + 0.003938812500000388, + 0.0038911953124998178, + 0.003892484375000116, + 0.0038309687499999967, + 0.003870898437499548, + 0.00377656250000058, + 0.0037702109375006287, + 0.0037300078124999914, + 0.0037180937500007616, + 0.0038426015624999366, + 0.0037554921875004865, + 0.0037480781250005535, + 0.0038076328124994063, + 0.0037521093750001455, + 0.0037823125000002733, + 0.0037888124999998496, + 0.0037693750000000747, + 0.0038461015624999817, + 0.003735335937499862, + 0.0037943828124999968, + 0.0037847265624995075, + 0.003598671875000292, + 0.003830757812499641, + 0.0038258984375003635, + 0.003773015624999765, + 0.003879531249999957, + 0.003947554687500521, + 0.004151421875000061, + 0.003960898437499694, + 0.0041464296875002304, + 0.0043036406249994386, + 0.004921445312499273, + 0.0056197812500000666, + 0.00724103906249951, + 0.006280507812499891, + 0.004007546875000045, + 0.003967835937499942, + 0.003969968749999886, + 0.0041660156249996305, + 0.003909499999999788, + 0.0038385625000003643, + 0.0037575624999997004, + 0.0037434687499997565, + 0.0036951250000001323, + 0.0036792734375001857, + 0.004119351562500206, + 0.003705492187499715, + 0.0036589375000000146, + 0.0034513593750000737, + 0.0034809453124999834, + 0.003409492187500085, + 0.0034329296874995308, + 0.0033753593750001087, + 0.0037272187499999276, + 0.0032900468749996747, + 0.0033928281250004133, + 0.003520843750000502, + 0.0034742031250001304, + 0.0032898750000001087, + 0.0032650390624997527, + 0.003454695312499645, + 0.0032515781249999876, + 0.0032805312499997186, + 0.0034002734374993793, + 0.0034532343749997807, + 0.004639203125000435, + 0.005229085937499711, + 0.0045272968750005305, + 0.003304320312500053, + 0.0030789609375005966, + 0.003181132812500209, + 0.003287476562499947, + 0.0032843281249999023, + 0.0034955390625004412, + 0.003262835937499986, + 0.0036062578124997913, + 0.003376851562499894, + 0.0032297656249999918, + 0.0032635156250000463, + 0.003101406249999883, + 0.00314053906249967, + 0.003081320312499969, + 0.003253296875000089, + 0.003630085937500027, + 0.003118218750000068, + 0.0032186015625006448, + 0.0033019453125007203, + 0.003301773437500266, + 0.003183476562499621, + 0.0032138750000001437, + 0.0034531796874999188, + 0.0031068828125002668, + 0.0039643359374998965, + 0.004222999999999644, + 0.004279078125000169, + 0.004153335937499669, + 0.004204320312499732, + 0.00428974999999987, + 0.004842039062499914, + 0.00443744531250001, + 0.004191703125000501, + 0.004298164062499943, + 0.0031734999999999403, + 0.003187898437500003, + 0.0030963281249993813, + 0.002982578125000579, + 0.0031451718750004076, + 0.003066249999999826, + 0.003368875000000493, + 0.003395257812499608, + 0.003328093750000427, + 0.003362718750000049, + 0.003172515625000649, + 0.0034478593750000286, + 0.003113804687499666, + 0.0032126406250005957, + 0.0031314296875004644, + 0.003075554687500315, + 0.0032030781249998697, + 0.003030749999999749, + 0.003381406249999941, + 0.0030677187499996705, + 0.003005320312500004, + 0.003171648437500174, + 0.0034358593749992394, + 0.0033137109374994367, + 0.0034223124999996912 + ] + }, + "10000": { + "ingest": [ + 15.61102100000005, + 12.678406999999993, + 12.758038000000056, + 15.033836999999949, + 12.06921299999999, + 14.051380999999992, + 14.043120000000044 + ], + "windowRead": [ + 0.008483312500001006, + 0.008479374999996736, + 0.00861878125000004, + 0.0087398125, + 0.00877831249999872, + 0.008718875000003123, + 0.008726812500000847, + 0.00932196875000102, + 0.009017968749997607, + 0.00804009375000092, + 0.008135312499998548, + 0.008532062499998716, + 0.008487343749997933, + 0.008659812499999475, + 0.008517343749996797, + 0.008386937499999192, + 0.00859531250000245, + 0.008437624999999116, + 0.00853668750000125, + 0.008454750000002065, + 0.008550124999999298, + 0.008393906249999361, + 0.008501124999998666, + 0.008675687499998475, + 0.008487125000002038, + 0.011547531249998855, + 0.01023181250000249, + 0.008401531249997873, + 0.009005031249998297, + 0.008600906250002538, + 0.0085063437499997, + 0.008682343749999433, + 0.00861581250000043, + 0.00854053124999865, + 0.008422249999998854, + 0.00840221874999969, + 0.00851409375000145, + 0.00859674999999882, + 0.008075968749999163, + 0.008283437500001156, + 0.008501687500000799, + 0.008383593750000529, + 0.008460687499997732, + 0.00879415625000135, + 0.008541062500000862, + 0.008348624999999998, + 0.00907421875000125, + 0.009124218749999358, + 0.009904875000000146, + 0.008997406249999784, + 0.008919625000000764, + 0.008580124999998162, + 0.00843015625000021, + 0.00838715624999864, + 0.008610718750002633, + 0.008867062499998468, + 0.008632906249999905, + 0.008921968750001952, + 0.008572562500003045, + 0.008472499999999883, + 0.008711468750000506, + 0.008753437499997574, + 0.00858996875000173, + 0.008457124999999621, + 0.008594093749998422, + 0.008659593749996475, + 0.008592812500001656, + 0.008560593750001289, + 0.010169531249999864, + 0.014842999999999051, + 0.015279718749997784, + 0.015240437500001036, + 0.01624215624999792, + 0.015024718749998556, + 0.015662843750000377, + 0.015419968749998958, + 0.016216156249999614, + 0.015727968749999377, + 0.01587868749999899, + 0.016260062500002448, + 0.016597374999999914, + 0.015886312500001054, + 0.016271312499998913, + 0.016854906249999857, + 0.017010468749997898, + 0.016536656249996895, + 0.016902687500000013, + 0.0136551874999995, + 0.00997740624999821, + 0.01029690625000157, + 0.010147249999999275, + 0.009524968750000085, + 0.009539562500002319, + 0.009743624999998701, + 0.009835249999998297, + 0.009317218749998801, + 0.009154031250002248, + 0.009152124999999955, + 0.00944196875000003, + 0.009232937500001981, + 0.009305843750002651, + 0.009959468749997313, + 0.009194125000000497, + 0.009212843749999422, + 0.009313312499998005, + 0.00918128125000095, + 0.009305000000001229, + 0.009442312499999161, + 0.009424406249998185, + 0.009009062499998777, + 0.05823559375000187, + 0.00908393749999803, + 0.008288281250003138, + 0.008448937499998976, + 0.008342124999998646, + 0.008907593749999165, + 0.008892718750001194, + 0.011555375000000367, + 0.008475375000003282, + 0.00843878124999975, + 0.008618249999997829, + 0.008334187500000922, + 0.008042937499997294, + 0.007908656250002366, + 0.00866778124999712, + 0.00838687499999935, + 0.008574875000000759, + 0.008545937499999212, + 0.00838093750000013, + 0.008350968749997634, + 0.008356968750000249, + 0.00878099999999904, + 0.008424499999996726, + 0.008311218749998517, + 0.008342812500000463, + 0.008280937500000363, + 0.008034187499998069, + 0.007993562500001161, + 0.008558374999999785, + 0.008367624999998213, + 0.008355843749999536, + 0.008435968749999745, + 0.0085415624999996, + 0.00846140624999947, + 0.008015781250001908, + 0.007911874999997792, + 0.008286781250003372, + 0.008492499999999126, + 0.008140250000000293, + 0.008157656249998979, + 0.008168656249999628, + 0.007973499999998523, + 0.008080906249997355, + 0.00801315625000143, + 0.008240093750000455, + 0.00815281250000055, + 0.008071187500000576, + 0.008225500000001773, + 0.00806162499999985, + 0.008099312499997069, + 0.008151250000000942, + 0.00853134375000053, + 0.007819062500001195, + 0.007790406250002491, + 0.007713749999997077, + 0.007885500000000434, + 0.008209875000002143, + 0.0082063437500004, + 0.008127437500000667, + 0.008301687500001265, + 0.008196749999999753, + 0.008393375000000702, + 0.0079855000000002, + 0.008378187499999967, + 0.008312906249997809, + 0.008001812500001648, + 0.008060499999999138, + 0.010556125000000804, + 0.01045456250000143, + 0.007852343750002433, + 0.008276249999997987, + 0.008260843750001357, + 0.008249156250002443, + 0.008187937500000686, + 0.008507874999999387, + 0.008255437499997242, + 0.008150031250000467, + 0.008153906250001342, + 0.008437781249998721, + 0.008232656249997916, + 0.008276906249999882, + 0.008329968750000916, + 0.00803521875000257, + 0.00792659374999971, + 0.008074968750001688, + 0.008228031249998935, + 0.008209437499999694, + 0.00756471875000031, + 0.0074724062499988975, + 0.007836218750000512, + 0.00793596875000091, + 0.008169906250000025, + 0.008500843749999376, + 0.00806859375000002, + 0.007841968750000206, + 0.008156750000001267, + 0.008105718750002211, + 0.008441812499999202, + 0.008074687499998845, + 0.007861500000000632, + 0.008012562499999376, + 0.00918806249999804, + 0.008338937499999588, + 0.008229093749999805, + 0.008773312500000685, + 0.008278312499999885, + 0.007804718750001882, + 0.007753906250002274, + 0.00789965625000022, + 0.008137718749999578, + 0.008123468750000029, + 0.007930937499999402, + 0.007973437500002234, + 0.007628062500000254, + 0.007482187499999071, + 0.007696406249998233, + 0.00756881249999708, + 0.007445656249998933, + 0.007438406250003027, + 0.007523781249997086, + 0.007601093750000842, + 0.007558937500000695, + 0.008096937499999513, + 0.00785309375000054, + 0.008053968749997864, + 0.007550812499999893, + 0.007862593750001423, + 0.007944437499997292, + 0.00814340624999943, + 0.008046937499997853, + 0.007942593750001947, + 0.008058687500000161, + 0.008141343750001084, + 0.007897499999998558, + 0.008108718750001742, + 0.008090281249998554, + 0.008225156249999088, + 0.007978093750001136, + 0.00804090624999887, + 0.007847781249999741, + 0.00825287500000016, + 0.008139468750002266, + 0.00816843750000018, + 0.008110718750000245, + 0.008463875000000343, + 0.007732812499998687, + 0.007694187500000282, + 0.007707687500001725, + 0.00799565625000298, + 0.008082437500000594, + 0.008201968749997235, + 0.00811303124999796, + 0.007880937499997742, + 0.0076455625000022565, + 0.007646437500000047, + 0.00788318750000272, + 0.008053250000003231, + 0.007833156250001139, + 0.007844718750000368, + 0.008226718749998696, + 0.008721781249999339, + 0.00832768749999957, + 0.008072281249997815, + 0.008086531250000917, + 0.007989906249999734, + 0.007928249999999082, + 0.007885593750000197, + 0.008393656249999992, + 0.008273968750000193, + 0.00828221875000068, + 0.008210999999999302, + 0.008452718750000088, + 0.00833737499999998, + 0.008167124999999942, + 0.008381968750001079, + 0.008614125000001138, + 0.008453031249999299, + 0.00844093750000141, + 0.009976874999999552, + 0.009606406250000532, + 0.010519250000001534, + 0.010527781250001311, + 0.010334500000002578, + 0.008018499999998596, + 0.008081281249999961, + 0.008111093750002851, + 0.008099500000000148, + 0.007989625000000444, + 0.009169593749998484, + 0.00847290625000241 + ], + "edit": [ + 4.739397000000054, + 4.373200999999995, + 4.155067000000031, + 5.405685999999946, + 7.0164270000000215, + 7.594106000000011, + 4.199992000000066, + 4.230583000000024, + 4.025325000000066, + 4.633005000000026, + 4.198374000000058, + 5.368123000000082, + 6.1348259999999755, + 6.010849000000007, + 5.0848980000000665 + ], + "sort": [ + 0.2908030000000963, + 0.2805120000000443, + 0.29657299999996667, + 0.3570789999999988, + 0.2661960000000363, + 0.26569899999992685, + 0.2608420000000251, + 0.26565500000003794, + 0.2659320000000207, + 0.30417499999998654, + 0.35091699999998127, + 0.2604000000000042, + 0.32479000000000724, + 0.2729580000000169, + 0.2812979999999925 + ], + "filter": [ + 0.07733999999993557, + 0.07776400000000194, + 0.07839000000001306, + 0.10983700000008412, + 0.09948599999995622, + 0.11179600000002665, + 0.0811669999999367, + 0.07600300000001425, + 0.07986600000003818, + 0.07837700000004588, + 0.07508499999994456, + 0.07596599999999398, + 0.08187099999997827, + 0.07854299999996783, + 0.08204299999999876 + ], + "multiFilter": [ + 0.5453509999999824, + 0.5347539999999071, + 0.5465070000000196, + 0.5485919999999851, + 0.5392440000000533, + 0.586543000000006, + 0.5850880000000416, + 0.5874059999999872, + 0.6043620000000374, + 0.6287820000000011, + 0.6491559999999481, + 0.6405959999999595, + 0.6520639999999958, + 0.7194470000000592, + 0.569560000000024 + ], + "distinctLow": [ + 0.5993460000000823, + 0.5393639999999778, + 0.5519349999999577, + 0.6213079999999991, + 0.8019560000000183, + 0.5317159999999603, + 0.5394430000000057, + 0.507748000000106, + 0.544620000000009, + 0.5275060000000167, + 0.5257490000000189, + 0.49517200000002504, + 0.49664000000007036, + 0.5050260000000435, + 0.4614920000000211 + ], + "distinctHigh": [ + 2.241926999999805, + 2.172644999999875, + 2.1479170000000067, + 2.086806999999908, + 2.0922709999999825, + 2.196525999999949, + 2.1663210000001527, + 1.9654729999999745, + 2.052175000000034, + 2.263389999999845, + 2.1774780000000646, + 2.1990900000000693, + 2.035478000000012, + 2.0189929999999094, + 2.122252000000117 + ], + "aggregate": [ + 0.023428749999999, + 0.0235465937499999, + 0.023087773437501014, + 0.023079351562499184, + 0.023128898437498435, + 0.024632187499999958, + 0.023504757812499832, + 0.0333720624999998, + 0.025221476562499845, + 0.02170898437500135, + 0.021981382812500172, + 0.02182732031250012, + 0.022248523437500722, + 0.022481609374999323, + 0.03696296875000016, + 0.020738492187501123, + 0.019527359374999165, + 0.019282062500000308, + 0.019778968749999848, + 0.02029015624999886, + 0.020693445312499392, + 0.02440277343750097, + 0.02376871093749955, + 0.023632132812499762, + 0.023820671874998922, + 0.02381570312500081, + 0.02362402343749892, + 0.023858507812500207, + 0.025568757812498788, + 0.02397956249999922, + 0.022360828124998733, + 0.021726570312498694, + 0.022182789062499708, + 0.02074359374999979, + 0.024494390624999696, + 0.026150046874999333, + 0.022594890625001085, + 0.022410453124999563, + 0.02259138281250017, + 0.023520156250000923, + 0.022514828124998942, + 0.026035445312500016, + 0.023155359375000018, + 0.029917343750000214, + 0.03196973437500006, + 0.02374749218749983, + 0.025009226562499265, + 0.02392510156249905, + 0.02263466406250103, + 0.020248359375001357, + 0.020582515624999687, + 0.02094549999999984, + 0.021797945312499678, + 0.022294273437500678, + 0.02243387499999905, + 0.024729421874999602, + 0.022570156249999584, + 0.020964624999999515, + 0.020039054687499558, + 0.019679515625000477, + 0.02033328906250098, + 0.020834078125000488, + 0.022129406250000372, + 0.023357570312500187, + 0.021656179687500554, + 0.020650382812499757, + 0.023681132812498618, + 0.0201842421875007, + 0.018165601562499134, + 0.018098093749999933, + 0.019809476562500095, + 0.02309784374999957, + 0.018006968749999075, + 0.02052643749999916, + 0.02133403124999944, + 0.01817039062499859, + 0.01721128125000071, + 0.019631874999999965, + 0.018784945312500412, + 0.01851679687499974, + 0.018961281250000184, + 0.0186202734375005, + 0.019029515625000215, + 0.0188583984374997, + 0.01887603125000048, + 0.019000484374998905, + 0.018939453125000227, + 0.02869685156250057, + 0.04026700000000005, + 0.03803642968749976, + 0.03897839062500097, + 0.01967324218749944, + 0.019209468750000624, + 0.018098164062500643, + 0.017995414062498938, + 0.018768429687499477, + 0.017967070312499445, + 0.018013078124999637, + 0.021184374999998923, + 0.01701476562500126, + 0.017792273437500228, + 0.016600031250000313, + 0.017556585937500202, + 0.020816023437499, + 0.019794851562499716, + 0.022648382812500145, + 0.01943981249999993, + 0.01905237500000112, + 0.01941978124999899, + 0.01897787500000092, + 0.019299312499999388, + 0.021685375000000562, + 0.021987867187501564, + 0.019437648437500954, + 0.019094656250000952, + 0.020610835937500127, + 0.019075289062499223, + 0.018211890625000393, + 0.018199414062500807, + 0.019391375000001432, + 0.021396421875000016, + 0.021403257812499632, + 0.022701898437500034, + 0.022383578124999914, + 0.02346680468749973, + 0.021240945312499093, + 0.019849726562499725, + 0.018426999999999083, + 0.032350437499999884, + 0.02437679687499994, + 0.017297734374999152, + 0.01747942187500051, + 0.01853378906250036, + 0.020726539062501104, + 0.021244421875000086, + 0.019172812499999026, + 0.01884064062499924, + 0.019146414062499062, + 0.022462039062499883, + 0.023928664062500715, + 0.021001210937500403, + 0.019942726562499402, + 0.020109921875000936, + 0.022337796875000038, + 0.01776971874999944, + 0.01818219531249987, + 0.01899086718750098, + 0.018222062500001357, + 0.017991124999999997, + 0.018281078124999794, + 0.019201351562498914, + 0.019299000000000177, + 0.03188850781249997, + 0.0183139062500004, + 0.019820679687498455, + 0.018292203125000128, + 0.018040000000000944, + 0.017940515625001652, + 0.024503929687499593, + 0.02205982812500018, + 0.019387781249999847, + 0.01866178906250049, + 0.01839572656250077, + 0.01945899218749858, + 0.03441806249999857, + 0.01890019531249898, + 0.019376304687499513, + 0.018220234375000643, + 0.018824874999999963, + 0.018620359374999396, + 0.020273124999999226, + 0.023360507812499876, + 0.022952882812498743, + 0.022915570312500577, + 0.02701349218749982, + 0.023297640624999616, + 0.02315480468750053, + 0.02337428124999974, + 0.02337198437500021, + 0.02237003124999859, + 0.02572791406250019, + 0.024632445312500195, + 0.022946843750000667, + 0.024073406250000318, + 0.023050531250000006, + 0.023577234374998923, + 0.023425960937499823, + 0.02304364062499964, + 0.025012968749999587, + 0.022998554687498896, + 0.02296578906249991, + 0.022990046874999948, + 0.02295592187500084, + 0.02270471093750004, + 0.02469370312499919, + 0.02260635937500055, + 0.022440914062499928, + 0.023058039062499702, + 0.023137554687499673, + 0.024040382812501093 + ] + }, + "100000": { + "ingest": [ + 156.82615499999997, + 128.58881699999984, + 137.0022909999998, + 157.29251900000008, + 146.08890199999996, + 128.65018299999974, + 125.56446700000015 + ], + "windowRead": [ + 0.007371031250002602, + 0.007474906249996138, + 0.007746875000009368, + 0.007274531250004657, + 0.007887718749998385, + 0.007562500000005912, + 0.007170499999986646, + 0.006954187499999875, + 0.007267968749999909, + 0.007452281250010628, + 0.00750356249999129, + 0.007472406249988239, + 0.007527593749998118, + 0.007439187499997502, + 0.007188468750001675, + 0.007251093749999882, + 0.007263281250004638, + 0.00753337499999418, + 0.007435000000000969, + 0.0074401562499986085, + 0.00727578124998729, + 0.007644250000012676, + 0.007322687499993208, + 0.007023437499995566, + 0.007483968750008785, + 0.007244187499992449, + 0.007320968749993995, + 0.008129187500003354, + 0.007227062500007264, + 0.007078781250001498, + 0.007352031249993729, + 0.007185249999992038, + 0.007237156249999543, + 0.007165531250009849, + 0.007327093750006952, + 0.007457312499994373, + 0.007840375000000677, + 0.0075628437500085965, + 0.007536250000001132, + 0.009328374999995503, + 0.008472937500002331, + 0.007919843750002542, + 0.00805574999999692, + 0.007541781250012036, + 0.0070742812499986485, + 0.008062124999995035, + 0.0072790625000038744, + 0.0074098437499969805, + 0.007461906250000538, + 0.0073730312499975525, + 0.007543343750000986, + 0.007357968750000055, + 0.009077906249999046, + 0.007612562500000308, + 0.00793693750000557, + 0.007832843750009033, + 0.00834025000000338, + 0.007421500000006631, + 0.007400249999989228, + 0.007757843749999438, + 0.0074379375000006576, + 0.007672499999998195, + 0.0075400937499949805, + 0.007027937499998416, + 0.007100468750010691, + 0.007047249999999394, + 0.008461156250007207, + 0.007507437499995717, + 0.007190718749995995, + 0.007496812499994121, + 0.007425843749999217, + 0.007348624999991671, + 0.007267624999997224, + 0.007038937499999065, + 0.0071956250000084765, + 0.0074684999999874435, + 0.007457343750004952, + 0.007464468750001174, + 0.007048062500004448, + 0.007370375000007812, + 0.007413968750000777, + 0.007285500000008938, + 0.007573531249988719, + 0.007392093749999162, + 0.00722043750000978, + 0.007571437500004663, + 0.007046312499994656, + 0.00704240624999386, + 0.007387312500000576, + 0.009282749999997009, + 0.007549937500002102, + 0.007520062500006475, + 0.007871249999993779, + 0.007429031249998275, + 0.0074209062500045775, + 0.007397124999997118, + 0.02845143749999579, + 0.008027218750001452, + 0.007932499999995457, + 0.00797187499999552, + 0.03851709375000212, + 0.008646624999997243, + 0.008389968749995091, + 0.007998624999999038, + 0.008242312500001958, + 0.008443624999998178, + 0.0082189687500005, + 0.007395562500008168, + 0.007562250000006543, + 0.007845500000001948, + 0.0073293437500012715, + 0.007247281250002402, + 0.007133968750011377, + 0.0071287499999925785, + 0.007441718750001769, + 0.007321250000003943, + 0.007137593750002225, + 0.00714396875000034, + 0.007274124999995024, + 0.0069938750000062555, + 0.007085937500008299, + 0.007311843750002822, + 0.0074327499999924385, + 0.006925593749997461, + 0.007118312499997614, + 0.006915218749995233, + 0.007130156249999686, + 0.007449375000007308, + 0.007343125000005557, + 0.007248781249998615, + 0.008000906250003936, + 0.007554874999996741, + 0.007305031249998706, + 0.007485593749990471, + 0.007417125000003466, + 0.007455125000007001, + 0.0073573437500016325, + 0.007292812499997581, + 0.007020562500002825, + 0.006996125000000575, + 0.007058968750001782, + 0.00819093750000377, + 0.007016312499999344, + 0.0084991874999929, + 0.006951031249997186, + 0.006980343750001339, + 0.007079875000002289, + 0.00672093750000613, + 0.007369406249992494, + 0.006941843749999066, + 0.006848843750006495, + 0.006904125000005479, + 0.00779209374999823, + 0.007083937499999138, + 0.007060312500001942, + 0.007177218750001657, + 0.007717937500004268, + 0.007825812499987705, + 0.0075474062499978345, + 0.00723296875000301, + 0.008627218749992949, + 0.008112343749999695, + 0.00819965624999952, + 0.00790284375000283, + 0.007803062500002511, + 0.007963343749992191, + 0.008417281249990083, + 0.008045687500001009, + 0.007813687500004107, + 0.007402031249995389, + 0.007314687499999195, + 0.007212874999993346, + 0.00761453124999889, + 0.007483156250003731, + 0.00732556250000016, + 0.007557968749992483, + 0.007522656249989268, + 0.007650593750000212, + 0.007155281250007306, + 0.0071506875000011405, + 0.007311624999999822, + 0.007423937499993372, + 0.007263406249990112, + 0.007336781249989599, + 0.007643187499994042, + 0.007702749999992875, + 0.007415843749996043, + 0.007555187500003058, + 0.008778468749994772, + 0.007779406250008947, + 0.007496343750005963, + 0.007495750000003909, + 0.007629531250003652, + 0.007546312499997043, + 0.007213218749996031, + 0.007253687499996886, + 0.007144406250006341, + 0.007290531249992682, + 0.00732175000000268, + 0.007008124999998699, + 0.006851093750000814, + 0.007133406250005692, + 0.007139843749996544, + 0.006947343749999391, + 0.007460437500000694, + 0.00717759375000071, + 0.008148593749993438, + 0.007288468750004995, + 0.008305781250001587, + 0.007220281249999516, + 0.007851718750004011, + 0.007748249999991685, + 0.0075440312500063555, + 0.007469468750002761, + 0.007709125000005201, + 0.007622968749998904, + 0.007330437499987852, + 0.0074494375000000446, + 0.007471593750011607, + 0.007340906249993395, + 0.007472687499998187, + 0.007538968749997821, + 0.007881124999997269, + 0.007414812500002199, + 0.00752487500000143, + 0.0074349687500046, + 0.0076026875000110294, + 0.007476749999995036, + 0.0071839375000024575, + 0.008268531249996158, + 0.007587812499991742, + 0.007836437500003512, + 0.007317968749987358, + 0.007531937499990704, + 0.007393593749995375, + 0.0074681562499989695, + 0.007304093750008178, + 0.007160468750001314, + 0.0079589062500105, + 0.007547656249997203, + 0.007850218750007798, + 0.007042406250008071, + 0.00696371875000068, + 0.007379406249995668, + 0.0072077500000062855, + 0.007610718750001411, + 0.007513968750004096, + 0.007316406249998408, + 0.007443781250003667, + 0.0074547812500043165, + 0.007550750000007156, + 0.007220718749991306, + 0.01034809375001089, + 0.011948156249999897, + 0.011722000000006005, + 0.009260937499988131, + 0.007533000000009338, + 0.007574625000003721, + 0.007194343750001053, + 0.007580468749992519, + 0.007401437500007546, + 0.007305531250011654, + 0.007657125000008591, + 0.007484375000004206, + 0.0073636562499928004, + 0.007478812499996934, + 0.007508749999999509, + 0.007573281250003561, + 0.007708312500000147, + 0.00806381249999788, + 0.0074855312499977344, + 0.008122656249994975, + 0.0072009687499985375, + 0.007014812500003131, + 0.007445687500009512, + 0.00746906250000734, + 0.007381750000007514, + 0.007382875000004674, + 0.007654812499993113, + 0.007710781249997467, + 0.007373281250011132, + 0.007468218750005917, + 0.013095187499999383, + 0.012188499999993496, + 0.012143062500001633, + 0.012462624999997729, + 0.012072875000001204, + 0.01189046874999633, + 0.012512187499993388, + 0.012029875000010293, + 0.012762937499999794, + 0.009984812500007934, + 0.007764062500001501, + 0.007671406249997403, + 0.00777909375000263, + 0.008459187500008625, + 0.009219156249997695, + 0.009634312499997577, + 0.009669187500009002, + 0.009607906250010956 + ], + "edit": [ + 4.279016000000411, + 4.393224999999802, + 4.442992000000231, + 4.64752499999986, + 5.128664999999728, + 11.54772899999989, + 11.105853000000025, + 8.416779000000133, + 6.763089000000036, + 8.929149999999936, + 4.305354999999963, + 4.480200999999852, + 4.442431999999826, + 4.4656740000000354, + 4.169254000000365 + ], + "sort": [ + 3.1806369999999333, + 2.668521000000055, + 2.2526920000000246, + 2.2101230000002943, + 2.1701710000002095, + 2.2189220000000205, + 2.6486650000001646, + 2.1797959999998966, + 2.348566000000119, + 2.1928139999999985, + 2.211203999999725, + 2.176969000000099, + 2.1808890000002066, + 2.1657139999997526, + 2.2265360000001237 + ], + "filter": [ + 0.7719040000001769, + 0.7476160000001073, + 0.7779980000000251, + 0.9133820000001833, + 0.9053360000002613, + 0.765769999999975, + 0.7587290000001303, + 0.7407929999999396, + 0.7469220000002679, + 0.698214999999891, + 0.6816120000003139, + 0.7146600000000944, + 0.713919999999689, + 0.7211379999998826, + 0.6872180000000299 + ], + "multiFilter": [ + 4.334690999999566, + 4.489356000000043, + 5.390024000000267, + 4.8117700000002515, + 4.835262000000057, + 4.650546999999733, + 4.0845979999999145, + 3.8290859999997338, + 3.9082429999998567, + 3.8132689999997638, + 5.48379100000011, + 4.154934000000139, + 3.9015380000000732, + 4.249505000000227, + 4.230985000000146 + ], + "distinctLow": [ + 4.282734999999775, + 4.37930200000028, + 4.535541999999623, + 4.276314000000184, + 4.250780000000304, + 3.772530000000188, + 3.9508700000001227, + 4.2590839999998025, + 4.3528949999999895, + 4.529265000000123, + 4.616391999999905, + 4.551710000000185, + 4.737660999999662, + 4.662312999999813, + 4.717950000000201 + ], + "distinctHigh": [ + 27.79515500000025, + 26.358318999999938, + 26.734395999999833, + 26.049501999999848, + 26.513760999999704, + 21.19220899999982, + 25.726114000000052, + 25.80108799999971, + 20.45307899999989, + 23.165150999999696, + 23.15322900000001, + 22.932616000000053, + 22.247450999999728, + 26.076316000000133, + 25.858597000000373 + ], + "aggregate": [ + 0.22462999999970634, + 0.21979899999996633, + 0.2184149999998226, + 0.22128999999995358, + 0.21807500000022628, + 0.2181479999999283, + 0.21804000000020096, + 0.22168099999998958, + 0.21797399999968547, + 0.2181300000002011, + 0.2179470000000947, + 0.21816600000011022, + 0.22186800000008589, + 0.21806800000013027, + 0.21795800000018062, + 0.21778199999971548, + 0.2214910000002419, + 0.21808000000009997, + 0.21795399999973597, + 0.21832199999971635, + 0.21805200000017066, + 0.23766200000000026, + 0.21808700000019599, + 0.21786500000007436, + 0.21771699999999328, + 0.21831999999994878, + 0.22129500000028202, + 0.21849999999994907, + 0.21785099999988233, + 0.21728299999995215, + 0.2155969999998888, + 0.21245400000043446, + 0.21247799999991912, + 0.2124389999999039, + 0.21252099999992424, + 0.21568400000023757, + 0.21191399999997884, + 0.2120799999997871, + 0.21210599999994884, + 0.21291599999995015, + 0.22514899999987392, + 0.2118809999997211, + 0.21279599999979837, + 0.2124180000000706, + 0.21562600000015664, + 0.21197299999994357, + 0.21205800000007002, + 0.21460100000012972, + 0.21177799999986746, + 0.2144029999999475, + 0.21207000000003973, + 0.2928870000000643, + 0.34701600000016697, + 0.31658599999991566, + 0.23407700000007026, + 0.2244380000001911, + 0.21225200000026234, + 0.21691599999985556, + 0.21214000000009037, + 0.21236099999987346, + 0.2122719999997571, + 0.2171579999999267, + 0.21229200000016135, + 0.2120230000000447, + 0.21629799999982424, + 0.21485299999994822, + 0.21450300000014977, + 0.21404700000039156, + 0.2120549999999639, + 0.21799899999996342, + 0.21191599999974642, + 0.21429400000033638, + 0.212203000000045, + 0.21236300000009578, + 0.21229700000003504, + 0.21620600000005652, + 0.21208800000022165, + 0.21209300000009534, + 0.21228699999983291, + 0.2121900000001915, + 0.21481999999969048, + 0.21186600000010003, + 0.21214099999997416, + 0.2122389999999541, + 0.21208599999999933, + 0.21404699999993682, + 0.21202200000016092, + 0.21219299999984287, + 0.21240199999965625, + 0.21603099999992992, + 0.21211200000016106, + 0.21224500000016633, + 0.2124559999997473, + 0.21238799999991897, + 0.2149939999999333, + 0.21212999999988824, + 0.21219699999983277, + 0.21243600000025253, + 0.21233200000006036, + 0.2149720000002162, + 0.2120689999997012, + 0.21264500000006592, + 0.21394000000009328, + 0.22259200000007695, + 0.21774699999969016, + 0.21811699999989287, + 0.2181639999998879, + 0.2181150000001253, + 0.2210610000001907, + 0.22063900000011927, + 0.21766600000000835, + 0.2236889999999221, + 0.21775800000023082, + 0.22010899999986577, + 0.217736000000059, + 0.220611999999619, + 0.2178780000003826, + 0.220227999999679, + 0.2179270000001452, + 0.21809299999995346, + 0.2163250000003245, + 0.21210800000017116, + 0.21365100000002712, + 0.21200099999987287, + 0.2122020000001612, + 0.24486300000035044, + 0.2519740000002457, + 0.33102599999983795, + 0.22279200000002675, + 0.21218499999986307, + 0.2211379999998826, + 0.2120350000000144, + 0.21265700000003562, + 0.21241699999973207, + 0.21231399999987843, + 0.2154489999998077, + 0.211891999999807, + 0.21204600000010032, + 0.2122260000001006, + 0.21244100000012622, + 0.21464400000013484, + 0.21225800000001982, + 0.2160009999997783, + 0.21467399999983172, + 0.22062099999993734, + 0.21822100000008504, + 0.2181110000001354, + 0.2235329999998612, + 0.21972099999993588, + 0.21392100000002756, + 0.21214000000009037, + 0.21204700000043886, + 0.22210500000028333, + 0.22629000000006272, + 0.21782100000018545, + 0.21834500000022672, + 0.21807099999978163, + 0.2179599999999482, + 0.2201260000001639, + 0.2178369999996903, + 0.22279000000025917, + 0.21691699999973935, + 0.21258499999976266, + 0.21489800000017567, + 0.21232099999997445, + 0.21647000000029948, + 0.21237100000007558, + 0.21966599999996106, + 0.21818800000028205, + 0.2179599999999482, + 0.2238480000000891, + 0.21847799999977724, + 0.22080400000004374, + 0.21816099999978178, + 0.21817399999963527, + 0.21808999999984735, + 0.22547300000042014, + 0.21815799999967567, + 0.2179799999998977, + 0.21793099999968035, + 0.21811999999999898, + 0.22053199999982098, + 0.21837400000003981, + 0.2183469999999943, + 0.21812799999997878, + 0.22069999999985157, + 0.21797800000013012, + 0.21791599999960454, + 0.21692699999994147, + 0.21269500000016706, + 0.21489900000005946, + 0.2134129999999459, + 0.21212299999979223, + 0.21788999999989755, + 0.21218900000030771, + 0.21472399999993286, + 0.21250800000007075, + 0.21222800000032294, + 0.24173700000028475, + 0.2583270000000084 + ] + }, + "500000": { + "ingest": [ + 721.8376439999993, + 666.2929699999995, + 693.2675049999998 + ], + "windowRead": [ + 0.010653374999947118, + 0.0104225312500148, + 0.010522968749967276, + 0.010637406249998094, + 0.010677531249996264, + 0.01024715624998862, + 0.010528968750008971, + 0.010289000000000215, + 0.010411093750008149, + 0.010109906250022505, + 0.010607031250003729, + 0.009820937500023774, + 0.009871531250041699, + 0.009682937499974287, + 0.011667656249983338, + 0.010018624999986514, + 0.010227124999971693, + 0.009915781250015243, + 0.010296687499987911, + 0.00992212500000278, + 0.010058281249996526, + 0.013047687500034044, + 0.009949406250029824, + 0.009972093750036493, + 0.01055203124997206, + 0.009870656249972853, + 0.010115187499991407, + 0.01091281250000975, + 0.014861249999967185, + 0.0105834062499639, + 0.012959343750026164, + 0.010769937500015203, + 0.010552000000018324, + 0.010183156250036518, + 0.009892562499999258, + 0.011949125000001004, + 0.016827124999963416, + 0.010699156250041142, + 0.009669437500008371, + 0.009776249999958964, + 0.01029162500003622, + 0.009795031250007469, + 0.009642750000011802, + 0.010641999999961627, + 0.012068593749972933, + 0.011392531250010052, + 0.01183174999999892, + 0.009959468750025735, + 0.010461812499954704, + 0.011315875000036613, + 0.01012100000002647, + 0.010247375000005832, + 0.010399687500012078, + 0.010021468749982887, + 0.010277343750033197, + 0.010122125000009419, + 0.009890687499989781, + 0.009920999999962987, + 0.010054812500015942, + 0.00980681249995996, + 0.009908312500044758, + 0.009982062500000666, + 0.010191593749993899, + 0.010393124999950487, + 0.010270406250015185, + 0.016204843750017517, + 0.010307593749985244, + 0.010133312500045122, + 0.01005565624996052, + 0.009976750000021184, + 0.009938499999975647, + 0.009800250000012056, + 0.009673750000047221, + 0.010217187500018099, + 0.009617312499983655, + 0.009639406250016691, + 0.00964078125002743, + 0.011858437499995489, + 0.00959474999996246, + 0.009232312500046191, + 0.009760562499991465, + 0.009757937500012304, + 0.009822624999969776, + 0.009928406249969157, + 0.009723281249989668, + 0.013428187499982869, + 0.009244000000023789, + 0.009319375000018226, + 0.009158593749987176, + 0.00924328125000784, + 0.009056718750002801, + 0.0096903437500373, + 0.010110968749984295, + 0.017583468750046904, + 0.010275812500026404, + 0.009948968749995402, + 0.01012837500002206, + 0.010015937499986194, + 0.009939312500023334, + 0.009711250000009386, + 0.009878968750001604, + 0.009706031250004798, + 0.009665374999997312, + 0.009613250000029439, + 0.009778093749957861, + 0.009525624999980664, + 0.009388093750033022, + 0.009572656249986267, + 0.009556718749990978, + 0.010280281250004464, + 0.010057343750020209, + 0.009948281250046875, + 0.010383812500037948, + 0.010012625000001663, + 0.009863781249976, + 0.009837218750021748, + 0.010877156249989639, + 0.010583406250020744, + 0.009739281250006115, + 0.010850156250000964, + 0.010033625000005486, + 0.009700968750053107, + 0.016175031250043048, + 0.009368312499987042, + 0.00951068749998285, + 0.010156093749969841, + 0.011986406250002801, + 0.009921937499996147, + 0.012668312500011325, + 0.011974687500014625, + 0.010216812500004835, + 0.01012209374999884, + 0.009732312499977525, + 0.010118531250043361, + 0.00987118749998217, + 0.010048374999996668, + 0.009679375000018808, + 0.010098874999982854, + 0.009522656249998818, + 0.01068009375001111, + 0.010605499999996937, + 0.011731124999982967, + 0.011223406249996515, + 0.010886437499948443, + 0.01091078125000422, + 0.01096440625002515, + 0.011396437499968215, + 0.011511750000011034, + 0.01146043749997716, + 0.011283250000019507, + 0.011000781250004366, + 0.011005937499987795, + 0.016626093750005566, + 0.017971250000016425, + 0.02090534375003017, + 0.013484781249985645, + 0.010224656249988584, + 0.010014124999997875, + 0.010795343749975927, + 0.01029574999995475, + 0.010354218750023847, + 0.010445468749992415, + 0.010343062499998723, + 0.01237093750000895, + 0.010276937500009353, + 0.010370343749968924, + 0.010551562499983902, + 0.01031421875001115, + 0.01018346874997178, + 0.010242906250027772, + 0.010142906249996031, + 0.010136999999986074, + 0.010468406250026874, + 0.010316124999974363, + 0.0112107812500426, + 0.010138656250035183, + 0.010452187499993215, + 0.009897625000007793, + 0.010056687499968575, + 0.009940093750003598, + 0.01005056249999825, + 0.01629065625002113, + 0.009843906250011969, + 0.009724750000032145, + 0.009875156249961492, + 0.010254312500023843, + 0.009803281249958218, + 0.010156406249961947, + 0.010549218749986267, + 0.010269906250016447, + 0.01096775000002026, + 0.010930781250010568, + 0.010556281249989752, + 0.010842031250035689, + 0.012075593750012104, + 0.010572375000037937, + 0.011542187500026557, + 0.012469562500029951, + 0.010852937499976179, + 0.011001937499997894, + 0.010965656249993572, + 0.010753062500043598, + 0.010866781250001623, + 0.012495843750002678, + 0.010623499999951491, + 0.010512968749992524, + 0.011449468749958669, + 0.010851718749961492, + 0.010788187499997548, + 0.010867843750020256, + 0.018511125000031825, + 0.010899250000022676, + 0.011083125000027394, + 0.0108493750000207, + 0.01063362499996856, + 0.010621156249953856, + 0.010340281250023509, + 0.010463874999970812, + 0.010642468749949785, + 0.01020837499999061, + 0.010242625000046246, + 0.01011356250000972, + 0.018732218750017182, + 0.010926656250035194, + 0.010525187499979438, + 0.010309218750023774, + 0.012116124999977274, + 0.010310062499968353, + 0.010606906249961412, + 0.010529343750022235, + 0.010809249999965687, + 0.010689562499976546, + 0.01465446874999543, + 0.010988124999983029, + 0.010259656250013904, + 0.011913906250015316, + 0.010501125000018874, + 0.017691437499991025, + 0.012171249999994416, + 0.011046437499999229, + 0.011383031249977194, + 0.01114512500004139, + 0.010970781249966421, + 0.011027031249966512, + 0.010937937500045791, + 0.01181621874997063, + 0.010733937499992408, + 0.010672124999985044, + 0.01055474999998296, + 0.010278999999968619, + 0.010159187500050848, + 0.010429531249997126, + 0.010233375000041178, + 0.010648375000016586, + 0.010998749999998836, + 0.010894562500027405, + 0.010882250000008753, + 0.010899062500016043, + 0.010609156249984153, + 0.010806812499993157, + 0.010878968750034801, + 0.010693218749963762, + 0.010622499999954016, + 0.010738500000002205, + 0.010352874999966843, + 0.010790281249967393, + 0.010338593750020664, + 0.01679281250000031, + 0.012056062499993914, + 0.009962718750045951, + 0.009957062500006941, + 0.010330218750027598, + 0.010139437500015447, + 0.010335312500046712, + 0.010653062500011856, + 0.010932468750013413, + 0.011465406250010801, + 0.01304662500001541, + 0.010463593749989286, + 0.011101812499987318, + 0.010483906250044583, + 0.010283062499979678, + 0.010274156250034139, + 0.010620218749977539, + 0.01025346875002242, + 0.010142624999957661, + 0.010499624999965818, + 0.010323156250024113, + 0.011885687500011954, + 0.010146437499997774, + 0.010467937499981872, + 0.010388937500010798, + 0.010203124999975444, + 0.010129062499970587, + 0.010220468749992051, + 0.010509906250035783, + 0.016738937500008433, + 0.010163250000005064, + 0.010049093750012617, + 0.010103093749989966 + ], + "edit": [ + 4.5313290000012785, + 4.692485999999917, + 3.914725999999064, + 4.172796000000744, + 4.750611999999819 + ], + "sort": [ + 12.574020999998538, + 13.419168000000354, + 14.78117199999906, + 12.3594379999995, + 12.752116000001479 + ], + "filter": [ + 2.281480999999985, + 2.2383110000009765, + 3.262745999998515, + 2.6862209999999322, + 2.4039840000004915 + ], + "multiFilter": [ + 21.432504000000336, + 24.519243000000642, + 24.895033999999214, + 19.615170000000944, + 26.316385000000082 + ], + "distinctLow": [ + 24.76415100000122, + 25.702258999999685, + 25.736958000001323, + 24.573365000000194, + 22.814195000000836 + ], + "distinctHigh": [ + 138.84071500000027, + 134.16067300000032, + 142.33601199999976, + 148.61332299999958, + 136.1175860000003 + ], + "aggregate": [ + 0.9769699999997101, + 0.9379140000000916, + 0.9375239999990299, + 0.9397460000000137, + 0.9387699999988399, + 0.9439839999995456, + 0.9386539999995875, + 0.9346800000002986, + 0.937143000001015, + 0.9384340000015072, + 1.0492269999995187, + 0.9242580000009184, + 0.929033000000345, + 0.9272569999993721, + 0.9295340000007855, + 0.9397619999999733, + 0.9205300000012357, + 0.916957999999795, + 0.9162469999992027, + 0.9159300000010262, + 0.9165769999999611, + 0.9174000000002707, + 0.913630999999441, + 0.9206730000005336, + 0.9387129999995523, + 0.9323440000007395, + 0.925916000000143, + 1.0429760000006354, + 0.9974879999990662, + 0.940176000000065, + 0.918045999998867, + 0.9196320000010019, + 0.9384090000003198, + 0.9250730000003387, + 0.929387999998653, + 0.916957999999795, + 0.916905999998562, + 0.9669970000013564, + 0.9645199999995384, + 0.9618090000003576, + 0.9621800000004441, + 0.9628410000004806, + 0.9445990000003803, + 0.9447129999989556, + 0.9386389999999665, + 0.9433399999998073, + 0.945648999999321, + 0.9566059999997378, + 0.9882930000003398, + 1.0211849999996048, + 0.9421259999999165, + 0.9599120000002586, + 0.9507379999995464, + 0.9377130000011675, + 0.9502280000015162, + 1.0018870000003517, + 0.9618699999991804, + 0.9456030000001192, + 0.9454719999994268, + 0.9453219999995781, + 0.9496900000012829, + 0.9396230000002106, + 0.9351369999985764, + 1.0342660000005708, + 0.9354309999998804, + 0.9387700000006589, + 0.9397250000001804, + 0.9439839999995456, + 1.0553470000013476, + 0.9574419999989914, + 0.965463999998974, + 0.9780960000007326, + 0.9579860000012559, + 0.9482989999996789, + 1.4513430000006338, + 1.6104680000007647, + 0.9554219999990892, + 0.9601330000004964, + 0.9613399999998364, + 0.9726129999999102, + 0.9611279999990074, + 0.9615859999994427, + 0.9652690000002622, + 0.9671529999995983, + 1.0551120000000083, + 0.965874999999869, + 0.9542380000002595, + 0.9390789999997651, + 0.9934329999996407, + 0.94961400000102, + 0.9536250000001019, + 0.9456270000009681, + 1.3145760000006703, + 1.7529070000000502, + 0.950542000000496, + 0.9463279999999941, + 0.9448609999999462, + 0.9499619999987772, + 0.9426019999991695, + 1.0395280000011553, + 0.942481999998563, + 0.9498739999999088, + 0.9455789999992703, + 0.9271809999991092, + 0.9249110000000655, + 1.063981999999669, + 1.5971239999998943, + 1.3226059999997233, + 1.1015409999999974, + 1.2277630000007775, + 1.2216559999997116, + 1.1131879999993544, + 0.8859419999989768, + 0.8813569999983883, + 0.9258849999987433, + 1.009927000000971, + 0.9999279999992723, + 0.9849269999995158, + 1.1366020000004937, + 1.1666629999999714, + 1.0620129999988421, + 1.0004619999999704, + 0.9851909999997588, + 0.9607790000009118, + 0.9496199999994133, + 0.919212000000698, + 0.9275999999990745, + 0.9999280000010913, + 0.9441439999991417, + 0.9389069999997446, + 0.9397319999989122, + 0.9873820000011619, + 0.984904999999344, + 0.96368799999982, + 1.006628000001001, + 1.0122489999994286, + 1.10052099999848, + 1.0290919999988546, + 1.0330749999993714, + 0.9664100000009057, + 0.9596359999995911, + 0.9391269999996439, + 0.9347219999999652, + 0.9311209999996208, + 0.9435599999997066, + 0.9240549999994982, + 0.9111339999999473, + 0.9470570000012231, + 0.9859870000000228, + 0.8932920000006561, + 0.8930720000007568, + 0.9096000000008644, + 0.9475039999997534, + 0.9311620000007679, + 0.9237709999997605, + 0.8789649999998801, + 1.3523719999993773, + 1.9961869999988266, + 1.3384440000008908, + 1.1498040000005858, + 0.9777930000000197, + 0.9753349999991769, + 0.9320929999994405, + 1.0478480000001582, + 0.9181019999996352, + 0.9290229999987787, + 0.894322000000102, + 0.8829769999993005, + 0.9909999999999854, + 0.8995599999998376, + 0.9135690000002796, + 1.9398389999987558, + 1.9473640000014711, + 2.058601999999155, + 2.1885480000000825, + 0.9621920000008686, + 0.9133029999993596, + 0.8945659999990312, + 0.8955089999999473, + 0.8728510000000824, + 0.8808460000000196, + 0.8789710000000923, + 0.8798460000016348, + 0.8934879999997065, + 0.910823000000164, + 1.058592999999746, + 1.2822980000000825, + 1.1312070000003587, + 1.0457449999994424, + 1.0362100000002101, + 1.061228000000483, + 1.0841600000003382, + 1.0709460000016406, + 1.0627350000013394, + 1.061573999999382, + 1.0607589999999618, + 1.0606150000003254, + 1.064262999998391, + 1.0655099999985396, + 1.068210999999792 + ] + }, + "1000000": { + "ingest": [ + 1387.7165650000006, + 1400.1395229999998, + 1386.1778019999983 + ], + "windowRead": [ + 0.014378218750039196, + 0.013955656250004722, + 0.014012249999950654, + 0.015032562499982305, + 0.013508437500036052, + 0.014395687500041277, + 0.01346140625003045, + 0.017931593750063257, + 0.014026281250039574, + 0.013497718750045351, + 0.013574843750006949, + 0.013217437499974949, + 0.013405781250071414, + 0.01542693749991031, + 0.014935093750068518, + 0.015537531250060965, + 0.014524656250046064, + 0.014511593750057727, + 0.015183781249902495, + 0.013951499999961925, + 0.013519874999929016, + 0.01322140624995427, + 0.01347434374997647, + 0.013195406249906227, + 0.013046562499994252, + 0.013553968749988599, + 0.014116687500063563, + 0.013633843749971675, + 0.01451350000002094, + 0.014615999999932683, + 0.01399275000005673, + 0.012883218750062042, + 0.012720937500034779, + 0.012714781249997031, + 0.012225062499965134, + 0.012425874999962616, + 0.011984999999981483, + 0.015591687499977525, + 0.01192384374996891, + 0.011691281250023167, + 0.01209434375005003, + 0.011774875000014617, + 0.011677843750021566, + 0.011605656250026186, + 0.011743281250005566, + 0.01145093750005799, + 0.013297312499958025, + 0.01294687500001146, + 0.01301421875007236, + 0.01282415624996247, + 0.012741531249957916, + 0.013198312499980602, + 0.015013156250006432, + 0.012763749999976426, + 0.014079249999895183, + 0.01358287499999733, + 0.013597531249956774, + 0.012804250000044703, + 0.012803093749994332, + 0.012845999999967717, + 0.0132131875000141, + 0.012394218749932406, + 0.01326584374999129, + 0.012341718750008113, + 0.012202906249967782, + 0.012981000000081622, + 0.015193187500017302, + 0.01408324999999877, + 0.012073687499992047, + 0.015825749999976324, + 0.016961531249990003, + 0.01639515625004151, + 0.012143937500013635, + 0.011947156250016633, + 0.012015937499995744, + 0.012053781249960593, + 0.011664406250019965, + 0.011635031249966232, + 0.01324568749998889, + 0.015164718750042994, + 0.01743724999994356, + 0.013075500000013562, + 0.013157374999991589, + 0.0129388125000105, + 0.01271821875002388, + 0.012334718750025786, + 0.012914156249962616, + 0.012320281249913023, + 0.019057124999903863, + 0.012318687500055603, + 0.012467781250052212, + 0.015144374999977117, + 0.012618843749919506, + 0.016059781249964544, + 0.012135999999941305, + 0.012089406249970125, + 0.012326218749990403, + 0.012005124999973305, + 0.01299078124998232, + 0.011482874999956039, + 0.01176059374995475, + 0.012423781250049615, + 0.011564687500026594, + 0.012666531250033586, + 0.011810031249979147, + 0.01144365624998045, + 0.012183156250102911, + 0.01112850000004073, + 0.01130062499998985, + 0.011241375000054177, + 0.012514687500015498, + 0.012430624999979045, + 0.012475718750010856, + 0.012652031250013351, + 0.012690124999949148, + 0.012212656249971587, + 0.012492343750068358, + 0.012575593749943437, + 0.012452156250105872, + 0.01206553124995935, + 0.011918625000021166, + 0.012330937499996253, + 0.014809812500061525, + 0.011974031249906147, + 0.011521937499992418, + 0.011400625000078435, + 0.011743249999994987, + 0.011352093750019776, + 0.011805500000036773, + 0.013930312500065156, + 0.011426499999970474, + 0.012132531250017564, + 0.011042562499937958, + 0.013803812499986634, + 0.011355781250017571, + 0.011342718750029235, + 0.011876031250039887, + 0.011116468749946762, + 0.011027781250049884, + 0.011322124999992411, + 0.01092087500001071, + 0.01236215624999204, + 0.012593000000038046, + 0.012756656249962361, + 0.013435312499950669, + 0.013224874999991698, + 0.012427406250026252, + 0.012067656249996617, + 0.01195603125006528, + 0.012911468749962296, + 0.01194334374997652, + 0.015143781250003485, + 0.011739687499925822, + 0.011792749999926855, + 0.012004437499967935, + 0.012039843750017099, + 0.011508562500011976, + 0.011570656250000866, + 0.01173096874993007, + 0.011324093749976782, + 0.011361468750010317, + 0.011051781250102977, + 0.0112379999999348, + 0.011192468749982254, + 0.010766125000031934, + 0.011001093749996471, + 0.01105840625007204, + 0.010939093749925632, + 0.010861031249987718, + 0.011282187500000873, + 0.011705062500027452, + 0.01376440624994757, + 0.01222871874995235, + 0.011861124999995809, + 0.012436656249974476, + 0.012909749999948872, + 0.01245656250000593, + 0.013203343750092245, + 0.012330468749951251, + 0.012148749999937536, + 0.012258093750006083, + 0.014638062500011984, + 0.01502465625003424, + 0.015181093749902175, + 0.015165468750069522, + 0.01677068750007038, + 0.014766843749953296, + 0.012774625000020023, + 0.011765531250034655, + 0.011785781249955107, + 0.012192000000027292, + 0.01151503125004183, + 0.011966093749947504, + 0.011375843750101922, + 0.011681093750098626, + 0.011214531249947868, + 0.011355218750054519, + 0.011739781250071246, + 0.011381906249994245, + 0.01122437499998341, + 0.0112525312500793, + 0.011260343750109314, + 0.011290906249996624, + 0.011871250000012878, + 0.011056062500074404, + 0.010835281249910622, + 0.012363906250016043, + 0.012112218749962267, + 0.012648499999954765, + 0.011654906249987107, + 0.016567718749911364, + 0.01368940625002324, + 0.011874718750050306, + 0.012184500000103071, + 0.012074312499976259, + 0.012220656250065076, + 0.011756437499911954, + 0.011972781250051412, + 0.013825781250034197, + 0.011573875000067346, + 0.011691374999941218, + 0.011932531250067768, + 0.011498374999973748, + 0.01162312499991458, + 0.011242781249961808, + 0.011413000000061402, + 0.011553187499998785, + 0.012321624999913183, + 0.011094062499978463, + 0.01110634375004338, + 0.011400593750067856, + 0.011552000000051521, + 0.011180062499988708, + 0.011473093749941654, + 0.010937968749999527, + 0.011114031250031076, + 0.010988937499973872, + 0.012016656250011692, + 0.011971187499966618, + 0.01530140624993237, + 0.013498218749987245, + 0.012111437500038846, + 0.011933124999927713, + 0.012012406249937158, + 0.012116843750050066, + 0.012550031250043503, + 0.011567968750000546, + 0.011982593749962689, + 0.011732687499943495, + 0.011932531249954081, + 0.01178071875006026, + 0.011854656250079643, + 0.013744968749961117, + 0.01317684374998862, + 0.011443687499991029, + 0.011528156249937638, + 0.011247593749999396, + 0.011417499999993197, + 0.011233250000032058, + 0.011288250000006883, + 0.010959156250009983, + 0.011052812499997344, + 0.013029531249912907, + 0.01114884374999292, + 0.011058062499955668, + 0.013388531249916014, + 0.01344321875001242, + 0.011997312500056978, + 0.014332875000036438, + 0.010879687499937063, + 0.01332312500005628, + 0.012070249999965199, + 0.011896624999963024, + 0.012973281250083346, + 0.012651968749992193, + 0.012377781250052067, + 0.011746687500021835, + 0.01155165624993515, + 0.012974499999927502, + 0.011899062499992397, + 0.011851281250073953, + 0.012742124999931548, + 0.015850000000000364, + 0.016872499999976753, + 0.016628875000037624, + 0.01687074999995275, + 0.017659624999964763, + 0.017469062500026666, + 0.016116531249963373, + 0.011921562499992433, + 0.01202984374992866, + 0.014712000000031367, + 0.012455437499966138, + 0.011997749999977714, + 0.02561665625000842, + 0.011608374999923399, + 0.011469687500039072, + 0.0114294999999629, + 0.011430312500010587, + 0.011003250000044318 + ], + "edit": [ + 4.321128999999928, + 4.130042000000685, + 4.234333000000333, + 4.367909000000509, + 4.7764399999978195 + ], + "sort": [ + 27.28657299999759, + 26.965824999999313, + 27.065623999998934, + 27.35489900000175, + 27.406095000002097 + ], + "filter": [ + 5.034035999997286, + 4.940698000002158, + 5.015240000000631, + 5.153682000000117, + 5.034856999998738 + ], + "multiFilter": [ + 47.050397999999404, + 44.81297600000107, + 44.2557229999984, + 43.98063999999795, + 45.43235999999888 + ], + "distinctLow": [ + 47.30886400000236, + 43.2275269999991, + 49.280438000001595, + 43.19040800000221, + 47.715830000001006 + ], + "distinctHigh": [ + 300.05163399999947, + 301.21281499999895, + 279.4682309999989, + 295.1736029999993, + 326.1748550000011 + ], + "aggregate": [ + 2.0523270000012417, + 1.971958000001905, + 1.9727600000005623, + 1.9757929999977932, + 1.9764719999984663, + 1.9967340000002878, + 1.998182999999699, + 1.9789090000012948, + 1.9795279999998456, + 1.97403900000063, + 2.0055449999999837, + 2.1177569999999832, + 2.117278999998234, + 2.111500999999407, + 2.243461000001844, + 2.1690049999997427, + 2.187687999998161, + 2.2280730000020412, + 2.346001999998407, + 2.530055999999604, + 2.4977149999976973, + 2.321566000002349, + 2.320200999998633, + 2.3095390000016778, + 2.373485999996774, + 2.3891899999980524, + 2.3696970000019064, + 2.510551999999734, + 2.4729709999992338, + 2.4348470000004454, + 2.4790539999994508, + 2.375606000001426, + 2.352826999998797, + 2.3321859999996377, + 2.497941000001447, + 2.3842420000000857, + 2.374273000001267, + 2.3896679999998014, + 2.32959800000026, + 2.4452329999985523, + 4.008080999999947, + 2.1426360000004934, + 2.052783000002819, + 2.1323630000006233, + 2.0826600000000326, + 1.9841949999972712, + 1.9845969999987574, + 2.061422999999195, + 1.991969999999128, + 2.0101920000015525, + 2.02678300000116, + 1.9894070000009378, + 1.9720699999998033, + 2.0363800000013725, + 2.4656289999984438, + 2.295532000000094, + 2.3992770000004384, + 2.4397030000000086, + 2.4870589999991353, + 2.4591419999997015, + 2.45255200000247, + 2.4598780000014813, + 2.453864999999496, + 2.4465320000017527, + 2.3785620000016934, + 2.3753170000018144, + 2.4296740000027057, + 2.3811959999984538, + 2.393595000001369, + 2.4107289999992645, + 2.4395069999991392, + 2.4065389999996114, + 2.401615999999194, + 2.402341000000888, + 2.391515999999683, + 2.574311000000307, + 2.5138260000021546, + 2.4643060000016703, + 2.4534769999991113, + 2.448092999999062, + 2.433861000001343, + 2.4656099999992875, + 2.4534889999995357, + 2.494507999999769, + 2.5271969999994326, + 2.535614999997051, + 2.487137000000075, + 2.45139200000267, + 2.4715289999985544, + 2.4466680000005, + 2.3940419999998994, + 2.3850020000027143, + 2.37318100000266, + 2.384831999999733, + 2.3328760000003967, + 2.318254000001616, + 2.473335999999108, + 2.7439810000032594, + 2.328262999999424, + 2.3312590000023192, + 2.339866999998776, + 2.316421999999875, + 2.3133449999986624, + 2.6771630000002915, + 2.312756999999692, + 2.930950000001758, + 2.5166250000002037, + 2.3810169999997015, + 2.405762999998842, + 2.385223000001133, + 2.4085309999973106, + 2.3958500000007916, + 2.4018689999975322, + 2.442459999998391, + 2.3897910000014235, + 2.442682999997487, + 2.4541989999997895, + 2.3771339999984775, + 2.3911389999993844, + 2.4002480000017385, + 2.393166999998357, + 2.3826630000003206, + 2.3898260000023583, + 2.416866999999911, + 2.41674200000125, + 2.744431999999506, + 2.387196000003314, + 2.0810119999987364, + 1.9867340000018885, + 1.8872320000009495, + 1.9362639999999374, + 1.9114059999992605, + 1.9250749999991967, + 1.9075420000008307, + 1.883826000001136, + 1.9551470000005793, + 1.9727060000004712, + 1.9121139999988372, + 1.8802709999981744, + 1.9135880000030738, + 1.885454999999638, + 1.8780980000010459, + 1.8847570000034466, + 1.8876230000023497, + 2.0353400000021793, + 1.8930180000024848, + 2.294079999999667, + 1.9048950000033074, + 1.9012609999990673, + 1.9026339999982156, + 1.8784100000011676, + 1.9024769999996352, + 2.0920700000024226, + 1.9754900000007183, + 1.92628600000171, + 1.8842299999996612, + 1.88086900000053, + 1.8864460000004328, + 1.8807999999989988, + 1.8825120000001334, + 2.069019999999, + 1.9507029999986116, + 1.9132750000026135, + 1.886396000001696, + 1.9282119999988936, + 1.8759860000027402, + 1.9136269999980868, + 1.9887369999996736, + 1.9138030000030994, + 1.879331000000093, + 1.943091999997705, + 1.8831049999971583, + 1.8875420000003942, + 1.9149279999983264, + 1.8774550000016461, + 2.0377689999986615, + 1.9328869999990275, + 1.8939580000005662, + 1.912919000002148, + 1.896294999998645, + 1.9113200000028883, + 1.9128359999995155, + 1.8855020000009972, + 1.8876199999976961, + 1.9072640000013052, + 1.948257999996713, + 1.9590669999997772, + 2.010465999999724, + 2.024858000000677, + 1.9325000000026193, + 1.9366479999989679, + 1.9541760000029171, + 2.11859899999763, + 2.1410560000003898, + 1.993575000000419, + 1.9491569999991043, + 2.0003770000002987, + 2.092561999997997, + 5.209896000000299, + 4.8271849999982805 + ] + } + } + } + ], + "formula": [ + { + "repetition": 1, + "captureSha256": "eee2ca5b0353574ea226e27a70e2d4bb5befe035c5ec7ec9b570d9f12fd40a47", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:30:10.702Z" + }, + "source": { + "protocol": "formula-benchmark-v2", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "files": { + "bench/package.json": "203206a590058cdc8c6a2c9f6741ff4c1407080734cc967fd7b97754dae7e8c1", + "bench/src/formula-bench.ts": "814dda4c759a694f671987b344dd57900d08a3a2896fe8733468aab78f984272", + "bench/src/formula-dataset.ts": "2e7d91f025d2447abb33efa7fa7d8b90a0e8787a9b9c54fe1064b82520ac079d", + "bench/src/gate-protocol.ts": "b681b1d0639c7018ab1af84bf38e7f48cd4a4544659bfbd337ca9e7512bab61b", + "bench/src/protocol-meta.ts": "229884d4d408527d6bb9a0983c92dbffe47b0f2b64ca32316494f22056da7aa6", + "bench/src/stats.ts": "4659c44455c7beb012ce355e9c5863c7e2d7273faf377b43337ba7e4de4c000f", + "bun.lock": "55ea174bc73aca5c016c4e85b7ac718e8605e54fd45b2ef4a736f0ee9480ee0b", + "packages/wasm/pkg/sheetwrite_wasm.js": "560c5416f6175a4a69d566fba895c9375dda064b3ef00c99e8a3410b5925d76f", + "packages/wasm/pkg/sheetwrite_wasm_bg.wasm": "a500b0d54b9076b2c991478c243e86af420ebb70fda57ce27695d1cef95e3b0a" + }, + "digest": "64d37c180555afb407f39e621c4abeb2cb5b7656922446fcf2d42a106ac5aa31" + }, + "workloads": [ + { + "id": "independent-parse-load", + "size": 1000, + "samplesMs": [ + 3.184661999999996, + 2.505310999999999, + 4.067582000000009, + 2.9468439999999987, + 1.0096570000000042 + ], + "allocationSamples": [ + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-first-recompute", + "size": 1000, + "samplesMs": [ + 1.5901920000000018, + 0.8738819999999947, + 0.9684950000000043, + 1.273147999999992, + 0.9120939999999962 + ], + "allocationSamples": [ + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-parse-load", + "size": 10000, + "samplesMs": [ + 9.734458999999987, + 10.696695000000005, + 14.109003999999999, + 8.203930000000014, + 10.363591000000014 + ], + "allocationSamples": [ + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-first-recompute", + "size": 10000, + "samplesMs": [ + 8.177315999999962, + 8.17656999999997, + 8.277089999999987, + 6.753875999999991, + 8.506621999999993 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-parse-load", + "size": 100000, + "samplesMs": [ + 83.61615999999992, + 84.40058700000009, + 86.57299499999999, + 113.43352099999993, + 93.87091299999997 + ], + "allocationSamples": [ + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "independent-first-recompute", + "size": 100000, + "samplesMs": [ + 132.30897900000036, + 129.38116800000034, + 127.7393149999998, + 129.42870799999992, + 128.3956559999997 + ], + "allocationSamples": [ + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "linear-chain", + "size": 8, + "samplesMs": [ + 0.06346399999983987, + 0.026076000000102795, + 0.019015000000308646, + 0.025631999999859545, + 0.036185999999815976 + ], + "allocationSamples": [ + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 8 + }, + { + "id": "linear-chain", + "size": 16, + "samplesMs": [ + 0.03884699999980512, + 0.03917400000000271, + 0.029606999999941763, + 0.025450999999975465, + 0.0268700000001445 + ], + "allocationSamples": [ + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 16 + }, + { + "id": "linear-chain", + "size": 32, + "samplesMs": [ + 0.051111000000219065, + 0.047070999999959895, + 0.04259300000012445, + 0.07605800000010277, + 0.05058199999984936 + ], + "allocationSamples": [ + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 32 + }, + { + "id": "linear-chain", + "size": 64, + "samplesMs": [ + 0.09333599999990838, + 0.07885299999998097, + 0.07481199999983801, + 0.0799090000000433, + 0.13924200000019482 + ], + "allocationSamples": [ + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 64 + }, + { + "id": "wide-fan-out-edit", + "size": 1000, + "samplesMs": [ + 0.6355070000004162, + 0.82463400000006, + 0.3778179999999338, + 0.4120060000000194, + 0.35829299999977593 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "wide-fan-out-edit", + "size": 100000, + "samplesMs": [ + 66.52878499999952, + 73.7001650000002, + 70.46255699999983, + 67.26817899999969, + 73.66944899999999 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "diamond-edit", + "size": 32, + "samplesMs": [ + 0.1004400000001624, + 0.08971999999994296, + 0.09599199999956909, + 0.10253499999998894, + 0.09622599999966042 + ], + "allocationSamples": [ + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 21474836477 + }, + { + "id": "shared-range-edit", + "size": 1000, + "samplesMs": [ + 0.635537000000113, + 0.6193429999993896, + 0.8718650000000707, + 0.5983370000003561, + 0.5935840000001917 + ], + "allocationSamples": [ + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 101 + }, + { + "id": "distinct-range-edit", + "size": 1000, + "samplesMs": [ + 0.02531100000032893, + 0.023727999999209715, + 0.018649000000550586, + 0.01860099999976228, + 0.013982999999825552 + ], + "allocationSamples": [ + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "11:10" + }, + { + "id": "cross-sheet-range-edit", + "size": 1000, + "samplesMs": [ + 0.6351029999996172, + 0.6172809999998208, + 0.621169000000009, + 1.4715630000000601, + 0.7829170000004524 + ], + "allocationSamples": [ + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100 + }, + { + "id": "scalar-edit-affects-0", + "size": 1000, + "samplesMs": [ + 0.004039999999804422, + 0.008405999999922642, + 0.004034999999930733, + 0.0037069999998493586, + 0.003517000000101689 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1001 + }, + { + "id": "scalar-edit-affects-1", + "size": 1, + "samplesMs": [ + 0.0039249999999810825, + 0.004065999999511405, + 0.003365999999914493, + 0.0036460000001170556, + 0.004750000000058208 + ], + "allocationSamples": [ + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 11 + }, + { + "id": "scalar-edit-affects-1000", + "size": 1000, + "samplesMs": [ + 0.4687309999999343, + 0.4598339999993186, + 0.48179499999969266, + 0.48420700000042416, + 0.4756580000002941 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "scalar-edit-affects-100000", + "size": 100000, + "samplesMs": [ + 70.48336599999948, + 66.3363589999999, + 80.74835199999961, + 67.74821999999949, + 67.94675800000005 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "topology-remove-add", + "size": 10000, + "samplesMs": [ + 10.619862999999896, + 10.910552999999709, + 10.474680999999691, + 11.779422999999952, + 12.751052999999956 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "2:10000" + }, + { + "id": "cycles", + "size": 1000, + "samplesMs": [ + 1.8887880000002042, + 1.7463550000002215, + 1.6036379999995916, + 1.6534560000000056, + 1.8638070000006337 + ], + "allocationSamples": [ + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#CYCLE!" + }, + { + "id": "removed-sheet-ref", + "size": 1000, + "samplesMs": [ + 0.6520809999992707, + 1.1023489999997764, + 0.5847610000000714, + 0.5607749999999214, + 0.5631909999992786 + ], + "allocationSamples": [ + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#REF!" + }, + { + "id": "error-propagation", + "size": 1000, + "samplesMs": [ + 1.0941240000001926, + 1.0844639999995707, + 0.9720479999996314, + 0.9315670000005412, + 0.927972000000409 + ], + "allocationSamples": [ + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#DIV/0!" + }, + { + "id": "criteria-range-edit", + "size": 100000, + "samplesMs": [ + 5.483829000000696, + 5.566885999999613, + 5.5311710000005405, + 6.863201000000117, + 8.397947999999815 + ], + "allocationSamples": [ + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 50001 + }, + { + "id": "lookup-range-edit", + "size": 100000, + "samplesMs": [ + 5.886857999999847, + 6.127354000000196, + 5.884408999999323, + 6.050614000000678, + 5.884748999999829 + ], + "allocationSamples": [ + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 199998 + }, + { + "id": "spill-filter-resize", + "size": 100000, + "samplesMs": [ + 40.00689799999964, + 34.93549499999972, + 32.6136660000011, + 39.28378300000077, + 42.13158800000019 + ], + "allocationSamples": [ + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + } + ], + "output": "99999:0" + }, + { + "id": "sumproduct-vector-edit", + "size": 100000, + "samplesMs": [ + 6.2137800000000425, + 8.614090999999462, + 5.8741899999986344, + 7.153044999999111, + 8.44154300000082 + ], + "allocationSamples": [ + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100004 + }, + { + "id": "sumproduct-matrix-edit", + "size": 100000, + "samplesMs": [ + 6.1036349999994854, + 6.739402999999584, + 8.589045000000624, + 7.589724999999817, + 8.090502999999444 + ], + "allocationSamples": [ + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 200004 + }, + { + "id": "criteria-multi-range-edit", + "size": 100000, + "samplesMs": [ + 17.220632000000478, + 16.804607000000033, + 16.96805200000017, + 13.577582999998413, + 18.41237799999908 + ], + "allocationSamples": [ + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + } + ], + "output": 74999 + }, + { + "id": "unicode-text-date-edit", + "size": 1000, + "samplesMs": [ + 1.5413829999997688, + 1.4530240000003687, + 1.644970999999714, + 1.7530029999998078, + 1.8491419999991194 + ], + "allocationSamples": [ + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 173864 + }, + { + "id": "percentile-covariance", + "size": 100000, + "samplesMs": [ + 9.352138000000195, + 9.795302000000447, + 9.555184999999256, + 10.454690000000483, + 11.039134999999078 + ], + "allocationSamples": [ + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1666756666.6 + }, + { + "id": "let-reuse-edit", + "size": 100000, + "samplesMs": [ + 4.875433999999586, + 4.948059000000285, + 5.143912999999884, + 4.943563999999242, + 4.322316000001592 + ], + "allocationSamples": [ + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 300003 + }, + { + "id": "iterative-finance", + "size": 1000, + "samplesMs": [ + 4.3141019999984564, + 3.8061950000010256, + 3.851345000000947, + 4.744507999999769, + 4.400565999998435 + ], + "allocationSamples": [ + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 0.16807260450028427 + }, + { + "id": "incremental-dependency-closure-edit", + "size": 100000, + "samplesMs": [ + 0.027938999999605585, + 0.02082700000028126, + 0.019384000001082313, + 0.022579000000405358, + 0.021855999999388587 + ], + "allocationSamples": [ + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "12:100001" + }, + { + "id": "spill-sequence-admission", + "size": 100000, + "samplesMs": [ + 12.305113999998866, + 12.882730999999694, + 12.985632999998415, + 11.89314800000102, + 12.804161000000022 + ], + "allocationSamples": [ + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + } + ], + "output": "1:100000:0" + } + ] + }, + { + "repetition": 2, + "captureSha256": "e3db8981f792938ca86ec2c8720380802e380e31a32760dab69a420fdb1a97f3", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:40:34.352Z" + }, + "source": { + "protocol": "formula-benchmark-v2", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "files": { + "bench/package.json": "203206a590058cdc8c6a2c9f6741ff4c1407080734cc967fd7b97754dae7e8c1", + "bench/src/formula-bench.ts": "814dda4c759a694f671987b344dd57900d08a3a2896fe8733468aab78f984272", + "bench/src/formula-dataset.ts": "2e7d91f025d2447abb33efa7fa7d8b90a0e8787a9b9c54fe1064b82520ac079d", + "bench/src/gate-protocol.ts": "b681b1d0639c7018ab1af84bf38e7f48cd4a4544659bfbd337ca9e7512bab61b", + "bench/src/protocol-meta.ts": "229884d4d408527d6bb9a0983c92dbffe47b0f2b64ca32316494f22056da7aa6", + "bench/src/stats.ts": "4659c44455c7beb012ce355e9c5863c7e2d7273faf377b43337ba7e4de4c000f", + "bun.lock": "55ea174bc73aca5c016c4e85b7ac718e8605e54fd45b2ef4a736f0ee9480ee0b", + "packages/wasm/pkg/sheetwrite_wasm.js": "560c5416f6175a4a69d566fba895c9375dda064b3ef00c99e8a3410b5925d76f", + "packages/wasm/pkg/sheetwrite_wasm_bg.wasm": "a500b0d54b9076b2c991478c243e86af420ebb70fda57ce27695d1cef95e3b0a" + }, + "digest": "64d37c180555afb407f39e621c4abeb2cb5b7656922446fcf2d42a106ac5aa31" + }, + "workloads": [ + { + "id": "independent-parse-load", + "size": 1000, + "samplesMs": [ + 2.554682999999997, + 1.883968000000003, + 3.1851940000000027, + 1.0021449999999987, + 0.9885030000000015 + ], + "allocationSamples": [ + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-first-recompute", + "size": 1000, + "samplesMs": [ + 0.7330000000000041, + 0.7618060000000071, + 0.7695620000000076, + 0.6709850000000017, + 0.6918880000000058 + ], + "allocationSamples": [ + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-parse-load", + "size": 10000, + "samplesMs": [ + 9.121112999999994, + 8.832573999999994, + 10.105974000000003, + 9.856472999999994, + 9.148796000000004 + ], + "allocationSamples": [ + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-first-recompute", + "size": 10000, + "samplesMs": [ + 6.548215000000027, + 6.4823109999999815, + 6.894183999999996, + 7.859989999999982, + 7.8851249999999595 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-parse-load", + "size": 100000, + "samplesMs": [ + 100.94757400000003, + 94.60669199999995, + 86.26972799999999, + 100.07364099999995, + 92.36457200000018 + ], + "allocationSamples": [ + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "independent-first-recompute", + "size": 100000, + "samplesMs": [ + 131.8837599999997, + 130.45632699999987, + 127.53615300000001, + 131.04125299999987, + 133.7474269999998 + ], + "allocationSamples": [ + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "linear-chain", + "size": 8, + "samplesMs": [ + 0.050200000000131695, + 0.01912799999990966, + 0.016048999999838998, + 0.01844200000005003, + 0.016143999999712833 + ], + "allocationSamples": [ + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 8 + }, + { + "id": "linear-chain", + "size": 16, + "samplesMs": [ + 0.030663000000004104, + 0.026037999999971362, + 0.02792600000020684, + 0.025274999999965075, + 0.027294999999867287 + ], + "allocationSamples": [ + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 16 + }, + { + "id": "linear-chain", + "size": 32, + "samplesMs": [ + 0.0458929999999782, + 0.04766800000015792, + 0.06423399999994217, + 0.04250000000001819, + 0.04150300000037532 + ], + "allocationSamples": [ + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 32 + }, + { + "id": "linear-chain", + "size": 64, + "samplesMs": [ + 0.08743100000037884, + 0.07679900000039197, + 0.07171299999981784, + 0.07783100000006016, + 0.09957699999995384 + ], + "allocationSamples": [ + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 64 + }, + { + "id": "wide-fan-out-edit", + "size": 1000, + "samplesMs": [ + 0.43636400000013964, + 0.4117919999998776, + 0.4418780000000879, + 0.38165200000003097, + 0.35627900000008594 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "wide-fan-out-edit", + "size": 100000, + "samplesMs": [ + 70.83952800000043, + 75.15028200000052, + 75.8491670000003, + 69.54357900000014, + 74.89785500000016 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "diamond-edit", + "size": 32, + "samplesMs": [ + 0.12061500000072556, + 0.1041319999994812, + 0.18473699999958626, + 0.1888359999993554, + 0.1930080000001908 + ], + "allocationSamples": [ + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 21474836477 + }, + { + "id": "shared-range-edit", + "size": 1000, + "samplesMs": [ + 0.5975969999999506, + 0.5719269999999597, + 0.6791610000000219, + 0.583201999999801, + 0.5819960000007995 + ], + "allocationSamples": [ + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 101 + }, + { + "id": "distinct-range-edit", + "size": 1000, + "samplesMs": [ + 0.04161300000032497, + 0.017144999999800348, + 0.013746999999966647, + 0.025220000000444998, + 0.022001000000273052 + ], + "allocationSamples": [ + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "11:10" + }, + { + "id": "cross-sheet-range-edit", + "size": 1000, + "samplesMs": [ + 0.6999880000003031, + 0.5744490000006408, + 0.6110630000002857, + 0.99884800000018, + 0.5715810000001511 + ], + "allocationSamples": [ + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100 + }, + { + "id": "scalar-edit-affects-0", + "size": 1000, + "samplesMs": [ + 0.002803999999741791, + 0.0029160000003685127, + 0.002741999999670952, + 0.0027880000006916816, + 0.003650000000561704 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1001 + }, + { + "id": "scalar-edit-affects-1", + "size": 1, + "samplesMs": [ + 0.003626000000622298, + 0.0037970000003042514, + 0.009272000000237313, + 0.00794300000052317, + 0.008976000000075146 + ], + "allocationSamples": [ + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 11 + }, + { + "id": "scalar-edit-affects-1000", + "size": 1000, + "samplesMs": [ + 1.0005790000004708, + 0.9443999999994048, + 0.6358089999994263, + 0.35095000000001164, + 0.34947700000066106 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "scalar-edit-affects-100000", + "size": 100000, + "samplesMs": [ + 74.10298800000055, + 75.35015099999964, + 79.26116000000002, + 69.67338999999993, + 69.6707980000001 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "topology-remove-add", + "size": 10000, + "samplesMs": [ + 10.241758999999547, + 12.860011000000668, + 12.896425000000818, + 12.04649900000004, + 11.029618000000482 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "2:10000" + }, + { + "id": "cycles", + "size": 1000, + "samplesMs": [ + 1.6691039999996065, + 1.6231180000004315, + 1.7066439999998693, + 1.690335000000232, + 1.9658710000003339 + ], + "allocationSamples": [ + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#CYCLE!" + }, + { + "id": "removed-sheet-ref", + "size": 1000, + "samplesMs": [ + 0.4741180000000895, + 0.4673430000002554, + 0.4987600000004022, + 0.8035469999995257, + 0.4691130000001067 + ], + "allocationSamples": [ + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#REF!" + }, + { + "id": "error-propagation", + "size": 1000, + "samplesMs": [ + 0.8219610000005559, + 0.8648400000001857, + 0.8295589999997901, + 0.8182810000007521, + 0.8608970000004774 + ], + "allocationSamples": [ + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#DIV/0!" + }, + { + "id": "criteria-range-edit", + "size": 100000, + "samplesMs": [ + 5.702999000000091, + 8.313807000000452, + 6.106228000000556, + 7.0537279999998646, + 5.683962000000065 + ], + "allocationSamples": [ + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 50001 + }, + { + "id": "lookup-range-edit", + "size": 100000, + "samplesMs": [ + 5.997030999999879, + 6.128319000000374, + 6.414714999999887, + 6.362393999999767, + 6.230336999999963 + ], + "allocationSamples": [ + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 199998 + }, + { + "id": "spill-filter-resize", + "size": 100000, + "samplesMs": [ + 33.35022300000037, + 37.74797799999942, + 34.93533800000114, + 36.449657000001025, + 37.87211099999877 + ], + "allocationSamples": [ + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + } + ], + "output": "99999:0" + }, + { + "id": "sumproduct-vector-edit", + "size": 100000, + "samplesMs": [ + 7.032022000001234, + 7.42722700000013, + 6.688819000000876, + 6.3005190000003495, + 6.50001500000144 + ], + "allocationSamples": [ + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100004 + }, + { + "id": "sumproduct-matrix-edit", + "size": 100000, + "samplesMs": [ + 8.642257999999856, + 7.943674000000101, + 11.108688999998776, + 6.396197000000029, + 6.379010999999082 + ], + "allocationSamples": [ + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 200004 + }, + { + "id": "criteria-multi-range-edit", + "size": 100000, + "samplesMs": [ + 18.594954000000143, + 17.687127999999575, + 17.973116000001028, + 16.854692999999315, + 18.330708000001323 + ], + "allocationSamples": [ + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + } + ], + "output": 74999 + }, + { + "id": "unicode-text-date-edit", + "size": 1000, + "samplesMs": [ + 1.4129979999997886, + 1.4033639999997831, + 1.6745110000010754, + 1.973454999999376, + 1.697768999998516 + ], + "allocationSamples": [ + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 173864 + }, + { + "id": "percentile-covariance", + "size": 100000, + "samplesMs": [ + 10.014291999999841, + 10.797787999999855, + 11.075222999999824, + 10.95066499999848, + 9.651627999999619 + ], + "allocationSamples": [ + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1666756666.6 + }, + { + "id": "let-reuse-edit", + "size": 100000, + "samplesMs": [ + 5.069704999999885, + 5.256192000000738, + 5.168253000001641, + 4.973778999999922, + 4.159053999999742 + ], + "allocationSamples": [ + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 300003 + }, + { + "id": "iterative-finance", + "size": 1000, + "samplesMs": [ + 3.776384999999209, + 3.9686689999998634, + 4.4457039999997505, + 4.743264000000636, + 4.96289600000091 + ], + "allocationSamples": [ + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 0.16807260450028427 + }, + { + "id": "incremental-dependency-closure-edit", + "size": 100000, + "samplesMs": [ + 0.04433000000062748, + 0.02651500000138185, + 0.024297999998452724, + 0.02102500000000873, + 0.022105000000010477 + ], + "allocationSamples": [ + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "12:100001" + }, + { + "id": "spill-sequence-admission", + "size": 100000, + "samplesMs": [ + 12.780620999999883, + 12.60599700000057, + 12.756499999999505, + 12.746071999999913, + 12.631881999999678 + ], + "allocationSamples": [ + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + } + ], + "output": "1:100000:0" + } + ] + }, + { + "repetition": 3, + "captureSha256": "e8c25703ca71134e61599caab5c6764b77db8f3fc87348b5421296c1590256e5", + "meta": { + "bun": "1.3.14", + "platform": "linux", + "arch": "x64", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:51:08.892Z" + }, + "source": { + "protocol": "formula-benchmark-v2", + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "files": { + "bench/package.json": "203206a590058cdc8c6a2c9f6741ff4c1407080734cc967fd7b97754dae7e8c1", + "bench/src/formula-bench.ts": "814dda4c759a694f671987b344dd57900d08a3a2896fe8733468aab78f984272", + "bench/src/formula-dataset.ts": "2e7d91f025d2447abb33efa7fa7d8b90a0e8787a9b9c54fe1064b82520ac079d", + "bench/src/gate-protocol.ts": "b681b1d0639c7018ab1af84bf38e7f48cd4a4544659bfbd337ca9e7512bab61b", + "bench/src/protocol-meta.ts": "229884d4d408527d6bb9a0983c92dbffe47b0f2b64ca32316494f22056da7aa6", + "bench/src/stats.ts": "4659c44455c7beb012ce355e9c5863c7e2d7273faf377b43337ba7e4de4c000f", + "bun.lock": "55ea174bc73aca5c016c4e85b7ac718e8605e54fd45b2ef4a736f0ee9480ee0b", + "packages/wasm/pkg/sheetwrite_wasm.js": "560c5416f6175a4a69d566fba895c9375dda064b3ef00c99e8a3410b5925d76f", + "packages/wasm/pkg/sheetwrite_wasm_bg.wasm": "a500b0d54b9076b2c991478c243e86af420ebb70fda57ce27695d1cef95e3b0a" + }, + "digest": "64d37c180555afb407f39e621c4abeb2cb5b7656922446fcf2d42a106ac5aa31" + }, + "workloads": [ + { + "id": "independent-parse-load", + "size": 1000, + "samplesMs": [ + 2.563711000000005, + 2.372068999999996, + 3.1740780000000015, + 1.1950450000000004, + 1.8812439999999953 + ], + "allocationSamples": [ + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 368893, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-first-recompute", + "size": 1000, + "samplesMs": [ + 0.7783919999999966, + 1.1416190000000057, + 0.6777599999999921, + 0.858159999999998, + 0.7683609999999987 + ], + "allocationSamples": [ + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 461717, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1000 + }, + { + "id": "independent-parse-load", + "size": 10000, + "samplesMs": [ + 9.741163, + 7.98792499999999, + 8.033248999999984, + 12.543051999999989, + 9.693139000000002 + ], + "allocationSamples": [ + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3300558, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-first-recompute", + "size": 10000, + "samplesMs": [ + 7.483092999999997, + 6.987244999999973, + 6.549859000000026, + 6.472709000000009, + 6.606029000000035 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 10000 + }, + { + "id": "independent-parse-load", + "size": 100000, + "samplesMs": [ + 80.459792, + 79.66594699999996, + 78.1154140000001, + 77.93466899999999, + 80.6857950000001 + ], + "allocationSamples": [ + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30047871, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "independent-first-recompute", + "size": 100000, + "samplesMs": [ + 126.59004099999993, + 133.02181800000017, + 133.2428829999999, + 128.44256600000017, + 122.34410799999978 + ], + "allocationSamples": [ + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 36682903, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100000 + }, + { + "id": "linear-chain", + "size": 8, + "samplesMs": [ + 0.0434770000001663, + 0.027708999999958905, + 0.017041000000062922, + 0.016401999999743566, + 0.01513699999986784 + ], + "allocationSamples": [ + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4535, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 8 + }, + { + "id": "linear-chain", + "size": 16, + "samplesMs": [ + 0.0268620000001647, + 0.024544000000332744, + 0.026044999999612628, + 0.023624999999810825, + 0.022747999999864987 + ], + "allocationSamples": [ + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 8909, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 16 + }, + { + "id": "linear-chain", + "size": 32, + "samplesMs": [ + 0.046644000000014785, + 0.041529000000082306, + 0.04307300000027681, + 0.03972599999997328, + 0.03949499999998807 + ], + "allocationSamples": [ + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 15953, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 32 + }, + { + "id": "linear-chain", + "size": 64, + "samplesMs": [ + 0.08304299999963405, + 0.07745000000022628, + 0.08116399999971691, + 0.08617000000003827, + 0.07817299999987881 + ], + "allocationSamples": [ + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 30041, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 64 + }, + { + "id": "wide-fan-out-edit", + "size": 1000, + "samplesMs": [ + 0.47326499999962834, + 0.4047730000002048, + 0.3704909999996744, + 0.383256000000074, + 0.4430099999999584 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "wide-fan-out-edit", + "size": 100000, + "samplesMs": [ + 75.5824419999999, + 68.25997800000005, + 68.1955109999999, + 72.48148899999978, + 71.69057299999986 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "diamond-edit", + "size": 32, + "samplesMs": [ + 0.1627680000001419, + 0.09594899999956397, + 0.09064399999988382, + 0.20237900000029185, + 0.12806100000034348 + ], + "allocationSamples": [ + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 37570, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 21474836477 + }, + { + "id": "shared-range-edit", + "size": 1000, + "samplesMs": [ + 0.8171760000004724, + 0.9639489999999569, + 0.6371049999997922, + 0.585041999999703, + 0.5527149999998073 + ], + "allocationSamples": [ + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 519472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 101 + }, + { + "id": "distinct-range-edit", + "size": 1000, + "samplesMs": [ + 0.02300699999977951, + 0.015274999999746797, + 0.01908999999977823, + 0.01592599999912636, + 0.015237000000524858 + ], + "allocationSamples": [ + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 853574, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "11:10" + }, + { + "id": "cross-sheet-range-edit", + "size": 1000, + "samplesMs": [ + 0.6158570000006875, + 0.650920999999471, + 0.6351949999998396, + 0.6071969999993598, + 1.049090000000433 + ], + "allocationSamples": [ + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 616857, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100 + }, + { + "id": "scalar-edit-affects-0", + "size": 1000, + "samplesMs": [ + 0.003109999999651336, + 0.003975999999966007, + 0.0029020000001764856, + 0.0032320000000254367, + 0.002743000000009488 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1001 + }, + { + "id": "scalar-edit-affects-1", + "size": 1, + "samplesMs": [ + 0.004702000000179396, + 0.004941999999573454, + 0.008264000000053784, + 0.007008999999925436, + 0.008567999999286258 + ], + "allocationSamples": [ + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2703, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 11 + }, + { + "id": "scalar-edit-affects-1000", + "size": 1000, + "samplesMs": [ + 1.0535049999998591, + 0.78287999999975, + 0.3505569999997533, + 0.48187199999938457, + 0.44151200000032986 + ], + "allocationSamples": [ + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 396280, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1010 + }, + { + "id": "scalar-edit-affects-100000", + "size": 100000, + "samplesMs": [ + 78.20457700000043, + 69.45859699999983, + 69.43887799999993, + 66.87576100000024, + 65.02913399999943 + ], + "allocationSamples": [ + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 32088669, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 100010 + }, + { + "id": "topology-remove-add", + "size": 10000, + "samplesMs": [ + 10.97537999999986, + 9.969935999999507, + 10.577661000000262, + 10.187230000000454, + 10.48160100000041 + ], + "allocationSamples": [ + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 4009958, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "2:10000" + }, + { + "id": "cycles", + "size": 1000, + "samplesMs": [ + 1.565349999999853, + 2.934721000000536, + 1.464097000000038, + 1.5861949999998615, + 1.5412200000000666 + ], + "allocationSamples": [ + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 699362, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#CYCLE!" + }, + { + "id": "removed-sheet-ref", + "size": 1000, + "samplesMs": [ + 0.5366370000001552, + 0.6176749999995081, + 0.6059809999997015, + 0.6113569999997708, + 0.5786900000002788 + ], + "allocationSamples": [ + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 213178, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#REF!" + }, + { + "id": "error-propagation", + "size": 1000, + "samplesMs": [ + 0.8455690000000686, + 0.8160769999994955, + 0.8070239999997284, + 0.8200269999997545, + 1.1043419999996331 + ], + "allocationSamples": [ + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 283487, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "#DIV/0!" + }, + { + "id": "criteria-range-edit", + "size": 100000, + "samplesMs": [ + 5.494927000000644, + 5.597318000000087, + 5.637633000000278, + 5.487255999999434, + 5.386543999999958 + ], + "allocationSamples": [ + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 3902997, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 50001 + }, + { + "id": "lookup-range-edit", + "size": 100000, + "samplesMs": [ + 5.842254999999568, + 6.010479999999916, + 6.298066999999719, + 5.793982000000142, + 6.630991999999424 + ], + "allocationSamples": [ + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + }, + { + "retainedBytes": 5203155, + "peakTransientBytes": 3200000, + "transientAllocations": 2 + } + ], + "output": 199998 + }, + { + "id": "spill-filter-resize", + "size": 100000, + "samplesMs": [ + 40.81898000000001, + 40.02780100000018, + 38.119370999999774, + 37.14726300000075, + 33.99642900000072 + ], + "allocationSamples": [ + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + }, + { + "retainedBytes": 5852724, + "peakTransientBytes": 4800000, + "transientAllocations": 3 + } + ], + "output": "99999:0" + }, + { + "id": "sumproduct-vector-edit", + "size": 100000, + "samplesMs": [ + 6.391025000000809, + 6.456900000001042, + 6.231928999999582, + 6.305112000000008, + 6.183999999999287 + ], + "allocationSamples": [ + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3902984, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1100004 + }, + { + "id": "sumproduct-matrix-edit", + "size": 100000, + "samplesMs": [ + 6.459582999999839, + 6.4485399999994115, + 6.3764589999991586, + 6.414884999998321, + 6.493954999999914 + ], + "allocationSamples": [ + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2732982, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 200004 + }, + { + "id": "criteria-multi-range-edit", + "size": 100000, + "samplesMs": [ + 14.175210000001243, + 15.0486149999997, + 20.762494999999035, + 19.27265200000147, + 16.015000999999756 + ], + "allocationSamples": [ + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + }, + { + "retainedBytes": 5203622, + "peakTransientBytes": 4800000, + "transientAllocations": 5 + } + ], + "output": 74999 + }, + { + "id": "unicode-text-date-edit", + "size": 1000, + "samplesMs": [ + 1.4483259999997244, + 1.612331999998787, + 1.7525939999995899, + 1.4159789999994246, + 2.241113000000041 + ], + "allocationSamples": [ + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 1191522, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 173864 + }, + { + "id": "percentile-covariance", + "size": 100000, + "samplesMs": [ + 11.685789999999542, + 11.428093000000445, + 9.960697000000437, + 10.33149500000036, + 11.701654000000417 + ], + "allocationSamples": [ + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 3903305, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 1666756666.6 + }, + { + "id": "let-reuse-edit", + "size": 100000, + "samplesMs": [ + 4.057268000000477, + 4.032449999998789, + 4.614192999999432, + 4.2126270000007935, + 5.26034399999844 + ], + "allocationSamples": [ + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 2603271, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 300003 + }, + { + "id": "iterative-finance", + "size": 1000, + "samplesMs": [ + 4.0022790000002715, + 4.173952999999528, + 3.985674999999901, + 3.9626719999996567, + 4.019866999999067 + ], + "allocationSamples": [ + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 872472, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": 0.16807260450028427 + }, + { + "id": "incremental-dependency-closure-edit", + "size": 100000, + "samplesMs": [ + 0.035218999999415246, + 0.022277999998550513, + 0.021864000000277883, + 0.028847999999925378, + 0.023573999998916406 + ], + "allocationSamples": [ + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + }, + { + "retainedBytes": 72063761, + "peakTransientBytes": 0, + "transientAllocations": 0 + } + ], + "output": "12:100001" + }, + { + "id": "spill-sequence-admission", + "size": 100000, + "samplesMs": [ + 15.368232999999236, + 15.465616999999838, + 15.477748000001156, + 13.990895000000819, + 12.147453999999925 + ], + "allocationSamples": [ + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + }, + { + "retainedBytes": 3252343, + "peakTransientBytes": 1600000, + "transientAllocations": 1 + } + ], + "output": "1:100000:0" + } + ] + } + ], + "render": [ + { + "pass": 1, + "captureSha256": "6236b170acc209874718a5b1eb747fee4deb292e1f9d93b6ecc54d783fd7b9af", + "gate": "pass: complete matched comparison found no statistically detected regression", + "metadata": { + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T12:11:22.975Z", + "bunVersion": "1.3.14", + "nodeVersion": "24.3.0", + "browserVersion": "149.0.7827.55", + "os": "linux 7.1.3-2-cachyos", + "arch": "x64", + "cpu": "12th Gen Intel(R) Core(TM) i9-12900H", + "engineVersions": { + "sheetwrite": "0.3.1", + "handsontable": "18.0.0" + }, + "datasetSeed": 1592639710, + "datasetHashes": { + "100000": "fnv1a32:178eac66" + }, + "viewport": { + "width": 640, + "height": 480 + }, + "measuredSamples": 3, + "warmupSamples": 1, + "minimumSampleDurationMs": 100, + "rounds": 10, + "orderSeed": 1371602926, + "engineOrder": [ + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ] + ], + "launchAttempts": [ + { + "round": 1, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 1, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 2, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 2, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 3, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 3, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 4, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 4, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 5, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 5, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 6, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 6, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 7, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 7, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 8, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 8, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 9, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 9, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 10, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 10, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + } + ] + }, + "results": [ + { + "round": 1, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3210526315746585, + 1.2670886075990628, + 1.254999999993015 + ] + }, + { + "round": 1, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1882352941203862, + 1.2562499999883585, + 1.2382716049273488 + ] + }, + { + "round": 1, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.47619047619491106, + 0.4309012875452542, + 0.4385964912331761 + ] + }, + { + "round": 1, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3167721518990289, + 0.3824427480860933, + 0.2886889460191351 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5291005291042248, + 0.5158974358943315, + 0.48454106280328213 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.6236024844729173, + 0.5661016949149912, + 0.5572222222250679 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4538461538484716, + 0.4744075829366231, + 0.484057971013143 + ] + }, + { + "round": 1, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.789763779535259, + 0.8245901639275558, + 0.8564102564098585 + ] + }, + { + "round": 1, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.9085714285794113, + 2.8305555555788384, + 2.6025641025641026 + ] + }, + { + "round": 1, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.712820512833647, + 3.251612903219798, + 2.582051282050088 + ] + }, + { + "round": 1, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6348101265810996, + 0.6499999999915335, + 0.6414012738835707 + ] + }, + { + "round": 1, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6493506493506493, + 0.7246376811695434, + 0.7201388888772473 + ] + }, + { + "round": 1, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.8889763779538559, + 0.7775193798471272, + 0.7343065693369475 + ] + }, + { + "round": 1, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3250000000003024, + 0.31281250000029104, + 0.3499999999992489 + ] + }, + { + "round": 2, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.6145161290412708, + 1.4342857143043408, + 1.335999999999379 + ] + }, + { + "round": 2, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.3373333333153277, + 1.209638554196109, + 1.1043956044083973 + ] + }, + { + "round": 2, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4629629629661967, + 0.4559090909145942, + 0.5240837696242434 + ] + }, + { + "round": 2, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3533333333386552, + 0.27988826815369305, + 0.25087719298385663 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5710227272647899, + 0.49800995024921957, + 0.5510989011004362 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5387096774065867, + 0.564971751420322, + 0.5541436464129561 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.46129032258107433, + 0.44577777778212396, + 0.4093877551031812 + ] + }, + { + "round": 2, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8257812499978172, + 0.7936507936507936, + 0.8154471544700304 + ] + }, + { + "round": 2, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.786111111093002, + 3.1499999999869033, + 2.792105263141964 + ] + }, + { + "round": 2, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.0702702702727875, + 2.599999999979702, + 2.5574999999895227 + ] + }, + { + "round": 2, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6464516129089339, + 0.645806451601487, + 0.6588235294090256 + ] + }, + { + "round": 2, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6585526315673058, + 0.6649006622510388, + 0.64838709675767 + ] + }, + { + "round": 2, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.8302158273374595, + 0.8375, + 0.7859375000007276 + ] + }, + { + "round": 2, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3412969283276451, + 0.39961538461502644, + 0.3804195804197432 + ] + }, + { + "round": 3, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.463768115942029, + 1.2317073170760102, + 1.2772151898575028 + ] + }, + { + "round": 3, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1627906976744187, + 1.240740740755113, + 1.168604651157376 + ] + }, + { + "round": 3, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4626728110584057, + 0.4763033175443727, + 0.4462222222207735 + ] + }, + { + "round": 3, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3401360544273123, + 0.38550185873848297, + 0.24296116504198825 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.6147239263772256, + 0.6655629139072847, + 0.5191709844557173 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.57861271676489, + 0.5603351955335879, + 0.5305263157786899 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.5060606060756577, + 0.49359605911192417, + 0.4513513513438001 + ] + }, + { + "round": 3, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7664122137433017, + 0.7944444444414879, + 0.785156249994543 + ] + }, + { + "round": 3, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.414285714294584, + 2.3113636363572865, + 2.786111111105937 + ] + }, + { + "round": 3, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.9388888889031173, + 2.3558139534786258, + 2.8599999999893564 + ] + }, + { + "round": 3, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6635761589462567, + 0.6999999999941385, + 0.7451851851824257 + ] + }, + { + "round": 3, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6506493506505602, + 0.556666666674169, + 0.5363636363526796 + ] + }, + { + "round": 3, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.741481481483896, + 0.8564102564178184, + 0.7178571428538167 + ] + }, + { + "round": 3, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3416382252554959, + 0.34622356495496415, + 0.3215434083601286 + ] + }, + { + "round": 4, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.354054054056571, + 1.39726027398855, + 1.6557377049027653 + ] + }, + { + "round": 4, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.644262295067463, + 1.4225352112774436, + 1.5594202898665452 + ] + }, + { + "round": 4, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.45799086758118446, + 0.43947368421542804, + 0.4493273542588368 + ] + }, + { + "round": 4, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3724907063169329, + 0.3263843648176616, + 0.26595744681470296 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.47582938388912493, + 0.4708920187719096, + 0.5086294416241292 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.8991071428546482, + 0.5324468085160875, + 0.5127551020384405 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.386486486488644, + 0.4259574468108885, + 0.457534246576193 + ] + }, + { + "round": 4, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8178861788492953, + 0.7485074626730144, + 0.8504201680864012 + ] + }, + { + "round": 4, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.582051282044118, + 2.279545454530638, + 2.5692307692534553 + ] + }, + { + "round": 4, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.891428571427241, + 2.385714285707633, + 2.414285714283497 + ] + }, + { + "round": 4, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.690344827582032, + 0.6442307692218142, + 0.5859649122777063 + ] + }, + { + "round": 4, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.614723926371512, + 0.6197530864206154, + 0.6153374233003135 + ] + }, + { + "round": 4, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6622516556291391, + 0.7149999999990021, + 0.7275362318816959 + ] + }, + { + "round": 4, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.2600000000002419, + 0.3067484662583829, + 0.23980815347721823 + ] + }, + { + "round": 5, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.4867647058837226, + 1.269620253147463, + 1.3346666666710127 + ] + }, + { + "round": 5, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1894117646878037, + 1.3947368421083268, + 1.24938271603731 + ] + }, + { + "round": 5, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.49215686273322823, + 0.461467889906548, + 0.48038277512139965 + ] + }, + { + "round": 5, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3387878787859033, + 0.27679558010586636, + 0.28117977528050647 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5831395348961746, + 0.5464480874393278, + 0.5143589743520491 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.6631578947248942, + 0.560893854753286, + 0.6525974025943788 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.5486338797821841, + 0.43146551724880583, + 0.47619047619491106 + ] + }, + { + "round": 5, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.9259259259345493, + 0.8289256198197018, + 0.7944444444433357 + ] + }, + { + "round": 5, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.689473684227682, + 2.7891891891690523, + 2.7270270269930466 + ] + }, + { + "round": 5, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.2810810810785638, + 2.497560975596127, + 2.6615384615217454 + ] + }, + { + "round": 5, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6477419354877765, + 0.6262499999982538, + 0.7099290780181474 + ] + }, + { + "round": 5, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.5923529411693487, + 0.6931034482726506, + 0.7275362318850703 + ] + }, + { + "round": 5, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.8023255813881293, + 0.7422222222184279, + 0.8555555555543616 + ] + }, + { + "round": 5, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3142118863045486, + 0.3264094955489614, + 0.30611620795135513 + ] + }, + { + "round": 6, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.5029850746365958, + 1.2456790123215336, + 1.5765625000130967 + ] + }, + { + "round": 6, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.187058823511881, + 1.172093023245526, + 1.177647058824625 + ] + }, + { + "round": 6, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.45636363635897975, + 0.42595744679999004, + 0.4354978354982387 + ] + }, + { + "round": 6, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.305965909080855, + 0.26272965878983984, + 0.28276836158021085 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5524861878465902, + 0.5356382978621851, + 0.5681818181857868 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.6281249999883585, + 0.6141104294512809, + 0.58941176470013 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.5306878306831494, + 0.5363636363576599, + 0.45917431193023683 + ] + }, + { + "round": 6, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.84453781513192, + 0.7984126984263726, + 0.8470588235552383 + ] + }, + { + "round": 6, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.822222222231277, + 2.5923076923041104, + 2.525 + ] + }, + { + "round": 6, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.7861111110865346, + 3.084848484849896, + 2.580000000016298 + ] + }, + { + "round": 6, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.7289855072453645, + 0.7063380281791799, + 0.6931034482710449 + ] + }, + { + "round": 6, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6147239263772256, + 0.6673333333386108, + 0.7437037036909412 + ] + }, + { + "round": 6, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.764885496179296, + 1.0438775510280107, + 0.7671328671244005 + ] + }, + { + "round": 6, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3141065830719543, + 0.30150602409666605, + 0.35448504983373236 + ] + }, + { + "round": 7, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.1505747126661583, + 1.0849462365581384, + 1.0329896907355713 + ] + }, + { + "round": 7, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.0849462365556348, + 1.1870588235310553, + 1.1303370786448836 + ] + }, + { + "round": 7, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4040322580596342, + 0.3864864864814523, + 0.3853846153889138 + ] + }, + { + "round": 7, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3180722891562057, + 0.27322404371902775, + 0.2606770833317569 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5335106382882123, + 0.421428571435615, + 0.4467248908370148 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.4950738916244688, + 0.5888235294164214, + 0.5687499999978833 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.3906614785988594, + 0.39488188976487953, + 0.44185022027067644 + ] + }, + { + "round": 7, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.858974358970379, + 0.7723076922980209, + 0.7260869565146529 + ] + }, + { + "round": 7, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.5075000000011642, + 2.224444444436166, + 2.6605263157857975 + ] + }, + { + "round": 7, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.1972222222183415, + 2.369767441879958, + 3.0176470588468125 + ] + }, + { + "round": 7, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5586956521754315, + 0.634161490680916, + 0.6159509202405422 + ] + }, + { + "round": 7, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6256249999860302, + 0.677702702699871, + 0.631446540869667 + ] + }, + { + "round": 7, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7141843971644416, + 0.7905511810979623, + 0.8516949152483179 + ] + }, + { + "round": 7, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.29411764705882354, + 0.31705882352886394, + 0.2616187989548841 + ] + }, + { + "round": 8, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3648648648680113, + 1.1574712643619285, + 1.2810126582095753 + ] + }, + { + "round": 8, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.0224489795889857, + 1.1709302325386468, + 1.0319587628923588 + ] + }, + { + "round": 8, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.41535269709678824, + 0.4040322580671449, + 0.41024590163686325 + ] + }, + { + "round": 8, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3753521126804834, + 0.27559241706006654, + 0.3051136363627103 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.513333333340975, + 0.5164948453653854, + 0.5164948453605848 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 1.1233333333266071, + 0.5871345029193472, + 0.58941176470013 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.46221198156703486, + 0.4464285714306503, + 0.4241525423703163 + ] + }, + { + "round": 8, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.6763513513519807, + 0.7374999999763745, + 0.7127659574534136 + ] + }, + { + "round": 8, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.3255813953596665, + 2.324999999990475, + 2.708108108081679 + ] + }, + { + "round": 8, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.0945945945820093, + 2.571794871790096, + 2.4682926829370513 + ] + }, + { + "round": 8, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.70440251571302, + 0.7178571428637952, + 0.5853801169500779 + ] + }, + { + "round": 8, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6274999999950523, + 0.7367647058854345, + 0.5923076922985995 + ] + }, + { + "round": 8, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6958333333378606, + 0.8196721311532663, + 0.7751937984496124 + ] + }, + { + "round": 8, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3144846796661273, + 0.24428223844259578, + 0.37960526315758836 + ] + }, + { + "round": 9, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.2612499999813735, + 1.1155555555493468, + 1.414084507073735 + ] + }, + { + "round": 9, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1732558139253322, + 1.1292134831565317, + 1.223170731693688 + ] + }, + { + "round": 9, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.43565217390170563, + 0.43232758621813666, + 0.4131687242794521 + ] + }, + { + "round": 9, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.2854700854745961, + 0.3048780487904257, + 0.3070552147327825 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5251308900586948, + 0.4794258373236934, + 0.4995024875617257 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5324468085235183, + 0.5661016949136757, + 0.5397849462285478 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.37773584906222685, + 0.4407894736801258, + 0.6308176100646503 + ] + }, + { + "round": 9, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.797619047600569, + 0.7541353383619702, + 0.7968253968320491 + ] + }, + { + "round": 9, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.7621621621797816, + 2.52750000001397, + 3.0257142856983203 + ] + }, + { + "round": 9, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.216216216241387, + 2.6051282051664133, + 2.799999999994826 + ] + }, + { + "round": 9, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5698863636273679, + 0.6189349112541762, + 0.5731428571391318 + ] + }, + { + "round": 9, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.5865497076012499, + 0.614723926378654, + 0.7105633802744756 + ] + }, + { + "round": 9, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7767441860371262, + 0.7687022900670938, + 0.7157142857089639 + ] + }, + { + "round": 9, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3314569536411506, + 0.2932551319648094, + 0.28498583569431485 + ] + }, + { + "round": 10, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3702702702438407, + 1.2512500000011642, + 1.2734177215260607 + ] + }, + { + "round": 10, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1776470588410601, + 1.3386666666592162, + 1.0547368421170273 + ] + }, + { + "round": 10, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.40772357721419294, + 0.3940944881985096, + 0.44336283186747305 + ] + }, + { + "round": 10, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.30397727274050174, + 0.2749999999951387, + 0.3447457627124958 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.4448888888810244, + 0.5117346938813523, + 0.46948356807948977 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5821229050341765, + 0.590588235296309, + 0.5764367815867152 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.48502415459117165, + 0.40321285139776797, + 0.43608695652497853 + ] + }, + { + "round": 10, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7929133858209051, + 0.7775193798543467, + 0.7913385826661655 + ] + }, + { + "round": 10, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.6368421052558055, + 2.24888888888268, + 2.7648648648598306 + ] + }, + { + "round": 10, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.0945945945568383, + 2.6315789473684212, + 2.582051282067998 + ] + }, + { + "round": 10, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5888235293931382, + 0.586046511618702, + 0.6011976047954383 + ] + }, + { + "round": 10, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.700699300707116, + 0.6470967742103723, + 0.7761538461495477 + ] + }, + { + "round": 10, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.8202797202523667, + 0.800800000011921, + 0.7208633093605582 + ] + }, + { + "round": 10, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.30864197530864196, + 0.3218649517672909, + 0.29850746268656714 + ] + } + ] + }, + { + "pass": 2, + "captureSha256": "c54dff624c74e5ce33349fcd4f35387eaf7ac3b08922d66ab4da7a7c0e1dc7ea", + "gate": "pass: complete matched comparison found no statistically detected regression", + "metadata": { + "commit": "dac694a6239066d179c2a43fbc51105870f5b137", + "dirty": false, + "timestamp": "2026-07-27T13:22:35.058Z", + "bunVersion": "1.3.14", + "nodeVersion": "24.3.0", + "browserVersion": "149.0.7827.55", + "os": "linux 7.1.3-2-cachyos", + "arch": "x64", + "cpu": "12th Gen Intel(R) Core(TM) i9-12900H", + "engineVersions": { + "sheetwrite": "0.3.1", + "handsontable": "18.0.0" + }, + "datasetSeed": 1592639710, + "datasetHashes": { + "100000": "fnv1a32:178eac66" + }, + "viewport": { + "width": 640, + "height": 480 + }, + "measuredSamples": 3, + "warmupSamples": 1, + "minimumSampleDurationMs": 100, + "rounds": 10, + "orderSeed": 1371602926, + "engineOrder": [ + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ], + [ + "handsontable", + "sheetwrite" + ], + [ + "sheetwrite", + "handsontable" + ] + ], + "launchAttempts": [ + { + "round": 1, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 1, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 2, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 2, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 3, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 3, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 4, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 4, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 5, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 5, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 6, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 6, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 7, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 7, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 8, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 8, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 9, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 9, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 10, + "engine": "sheetwrite", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + }, + { + "round": 10, + "engine": "handsontable", + "rows": 100000, + "attempt": 1, + "success": true, + "errorClass": null, + "message": null + } + ] + }, + "results": [ + { + "round": 1, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.4083333333126373, + 1.104347826042415, + 1.1528735631948401 + ] + }, + { + "round": 1, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1166666666563185, + 1.113333333335403, + 1.1144444443906347 + ] + }, + { + "round": 1, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.45681818180124867, + 0.4513513513605807, + 0.4438053097501727 + ] + }, + { + "round": 1, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3077611940481992, + 0.28437499997512944, + 0.2540609136904557 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.4554545454596254, + 0.4524886878080902, + 0.46175115208746653 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5387096774153491, + 0.5672222222408487, + 0.5030150753937325 + ] + }, + { + "round": 1, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.5076142132357897, + 0.43004291845573506, + 0.4622119815745455 + ] + }, + { + "round": 1, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7049295774424894, + 0.7127659575062546, + 0.6885135135160306 + ] + }, + { + "round": 1, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.3928571428349685, + 2.2488888889344203, + 2.6499999999558845 + ] + }, + { + "round": 1, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.1333333333022892, + 2.6763157895521115, + 2.4756097560521306 + ] + }, + { + "round": 1, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5583333333436814, + 0.5748571428656578, + 0.5917159763423825 + ] + }, + { + "round": 1, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6147239263586562, + 0.5894117647398482, + 0.590588235236047 + ] + }, + { + "round": 1, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6568627451345617, + 0.7360294117551187, + 0.816260162597083 + ] + }, + { + "round": 1, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.35477031801922687, + 0.32722063037302657, + 0.2443902439006218 + ] + }, + { + "round": 2, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3413333333656192, + 1.0659574468303075, + 1.2746835442707887 + ] + }, + { + "round": 2, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.2444444444766383, + 1.1988095238117413, + 1.088043478216328 + ] + }, + { + "round": 2, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4056680162063977, + 0.41193415633874175, + 0.4069105691155343 + ] + }, + { + "round": 2, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3488888888782452, + 0.26315789475399803, + 0.26622340423946683 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.45454545455815437, + 0.4559090909082443, + 0.45799086758756336 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.6407643312256143, + 0.569886363640597, + 0.4850241546001699 + ] + }, + { + "round": 2, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4882075471566322, + 0.4219409283014792, + 0.43333333334784746 + ] + }, + { + "round": 2, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7702290076719782, + 0.7648854961704094, + 0.7027972027972028 + ] + }, + { + "round": 2, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.7162162162162162, + 2.7081081080376297, + 2.6205128205653567 + ] + }, + { + "round": 2, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.0028571428997175, + 2.380952380952381, + 2.42857142852708 + ] + }, + { + "round": 2, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5999999999732315, + 0.6314465408769887, + 0.5888235293931382 + ] + }, + { + "round": 2, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.5427027027047163, + 0.5392473118319627, + 0.5693181818139486 + ] + }, + { + "round": 2, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7178571428371859, + 0.7944444444710537, + 0.7215827338786113 + ] + }, + { + "round": 2, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3089506172856753, + 0.33003300330033003, + 0.3448504983382516 + ] + }, + { + "round": 3, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3794520547843143, + 1.2512499999953435, + 1.2096385541540313 + ] + }, + { + "round": 3, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.3944444443720083, + 1.4225352112282539, + 1.249382716074678 + ] + }, + { + "round": 3, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.44622222220318186, + 0.4462222222280171, + 0.4422907488757031 + ] + }, + { + "round": 3, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3272727272573816, + 0.27322274880148295, + 0.30909090908508835 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.4579908675620477, + 0.47452830187624917, + 0.5340425531538402 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5928994082741043, + 0.5742857143016799, + 0.5634831460716014 + ] + }, + { + "round": 3, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4488789237400876, + 0.4835748792162552, + 0.45454545457508755 + ] + }, + { + "round": 3, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8348484848569514, + 0.8072580645281461, + 0.7367647059316582 + ] + }, + { + "round": 3, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.6710526315789473, + 2.6473684212143875, + 2.559999999962747 + ] + }, + { + "round": 3, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.997368421013418, + 2.623076923072147, + 2.891428571407284 + ] + }, + { + "round": 3, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5486338797529213, + 0.5672316384412306, + 0.6903448275900607 + ] + }, + { + "round": 3, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6850340135877027, + 0.5917159763644256, + 0.5905882352634387 + ] + }, + { + "round": 3, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7541353383514666, + 0.6863013698515317, + 0.8791666666821887 + ] + }, + { + "round": 3, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.31878980891601105, + 0.3301639344268402, + 0.30333333333502666 + ] + }, + { + "round": 4, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3554054054154738, + 1.1720930233077949, + 1.4112676056101918 + ] + }, + { + "round": 4, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.2871794872320232, + 1.1348314606846217, + 1.1292134831460674 + ] + }, + { + "round": 4, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.42735042735838735, + 0.4132231405035646, + 0.3976190476271782 + ] + }, + { + "round": 4, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.29411764706156274, + 0.3191082801990164, + 0.27154471544261144 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.49359605909127907, + 0.491176470584583, + 0.4766666666826322 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5791907514569301, + 0.6176829268281325, + 0.543243243238209 + ] + }, + { + "round": 4, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.5009999999962748, + 0.4841346153452133, + 0.45917431194625724 + ] + }, + { + "round": 4, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7648854961704094, + 0.7598484848400183, + 0.782812500037835 + ] + }, + { + "round": 4, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.6128205127823048, + 2.5350000000325963, + 2.886111111199069 + ] + }, + { + "round": 4, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.0000000000776104, + 2.492682926765666, + 2.4975609756869876 + ] + }, + { + "round": 4, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.5970238095171572, + 0.6185185184736771, + 0.6005988024275549 + ] + }, + { + "round": 4, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.746268656765069, + 0.6777027027077369, + 0.5603351955348886 + ] + }, + { + "round": 4, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7000000000299587, + 0.8297520661187813, + 0.7253623188513777 + ] + }, + { + "round": 4, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3857692307685144, + 0.31152647975368014, + 0.3458966565315575 + ] + }, + { + "round": 5, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.5615384615814456, + 1.1697674418777921, + 1.301298701385786 + ] + }, + { + "round": 5, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.2156626505732357, + 1.2072289156873364, + 1.19404761901214 + ] + }, + { + "round": 5, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4509009008950277, + 0.411522633783182, + 0.3898832685375724 + ] + }, + { + "round": 5, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3298295454508413, + 0.31305637983853984, + 0.30674846628052327 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5340425532132863, + 0.5552486187742395, + 0.48829268296135636 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.563157894756449, + 0.5218750000397753, + 0.4776190476092909 + ] + }, + { + "round": 5, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4497757847817623, + 0.415352697113212, + 0.45090090091600343 + ] + }, + { + "round": 5, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7507462686330858, + 0.792913385762239, + 0.7889763779688891 + ] + }, + { + "round": 5, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.7459459459107065, + 2.3976190475791337, + 2.6538461538700338 + ] + }, + { + "round": 5, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.34687500007567, + 2.68157894745175, + 2.4829268292637496 + ] + }, + { + "round": 5, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6335443037892161, + 0.5603351955244827, + 0.618518518536915 + ] + }, + { + "round": 5, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6179012345770994, + 0.6458064516285255, + 0.6382165604988765 + ] + }, + { + "round": 5, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.794488189001311, + 0.7548872180058992, + 0.7583333332670119 + ] + }, + { + "round": 5, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3006006005994819, + 0.31878980891601105, + 0.3218649517732801 + ] + }, + { + "round": 6, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.230487804905307, + 1.3426666667064031, + 1.3025974025466032 + ] + }, + { + "round": 6, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.2884615384495983, + 1.1709302325603055, + 1.4285714285714286 + ] + }, + { + "round": 6, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.47809523809257715, + 0.47089201877846826, + 0.4205882352925524 + ] + }, + { + "round": 6, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3039772727325643, + 0.28117977525892385, + 0.2609374999762319 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5028846153917794, + 0.48550724637231246, + 0.5112244897921171 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5710227273256433, + 0.5347593582937504, + 0.4897560975491637 + ] + }, + { + "round": 6, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.38429118773161336, + 0.43478260870375063, + 0.37773584904816915 + ] + }, + { + "round": 6, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7548872180479137, + 0.6783783784186518, + 0.7223021583229625 + ] + }, + { + "round": 6, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.6421052630941726, + 2.5923076923220205, + 3.1944444444703146 + ] + }, + { + "round": 6, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.655263157781998, + 2.9823529410778598, + 2.5450000000419095 + ] + }, + { + "round": 6, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6060240963664669, + 0.6490322580500957, + 0.5737142856791615 + ] + }, + { + "round": 6, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6005988024108245, + 0.615950920236257, + 0.6191358024334926 + ] + }, + { + "round": 6, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7106382979066871, + 0.7767441860551751, + 0.8128000000119209 + ] + }, + { + "round": 6, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.31928374655493447, + 0.2811797752824685, + 0.31746031746031744 + ] + }, + { + "round": 7, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.2708860759422937, + 1.2132530121065408, + 1.154022988510029 + ] + }, + { + "round": 7, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.1586206896637363, + 1.1465909090845592, + 1.1122222223112153 + ] + }, + { + "round": 7, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.46388888890268626, + 0.43333333331156215, + 0.4554545454511588 + ] + }, + { + "round": 7, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.29545454543073324, + 0.26368421052190427, + 0.29000000005018794 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.48365384612071255, + 0.5329787233854307, + 0.45339366515499974 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5786127167554691, + 0.5731428571258272, + 0.5554945055129272 + ] + }, + { + "round": 7, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.420168067234717, + 0.3925781249672582, + 0.4170833333317811 + ] + }, + { + "round": 7, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8096774193278004, + 0.7976190476190477, + 0.753383458697034 + ] + }, + { + "round": 7, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.55, + 2.522499999939464, + 2.7916666666149266 + ] + }, + { + "round": 7, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.8578947369793526, + 2.4463414633419456, + 2.607692307744844 + ] + }, + { + "round": 7, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.541621621637731, + 0.588823529404095, + 0.5672316384043986 + ] + }, + { + "round": 7, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6585526316132593, + 0.6347826086968091, + 0.6011976047982267 + ] + }, + { + "round": 7, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.694444444463847, + 0.7422222222373993, + 0.7556390977373585 + ] + }, + { + "round": 7, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3428571428576972, + 0.25839793281653745, + 0.32042682926715693 + ] + }, + { + "round": 8, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.435714285700981, + 1.230487804905307, + 1.2144578314016024 + ] + }, + { + "round": 8, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.2072289157322194, + 1.2734177215142717, + 1.1488636363488198 + ] + }, + { + "round": 8, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4205882353082049, + 0.4040322580464905, + 0.4205882353082049 + ] + }, + { + "round": 8, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.2949852507539467, + 0.4065040650482221, + 0.2881313131397797 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5397849462836259, + 0.4682242991141627, + 0.4887804877739854 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5278947368803385, + 0.5312169312583234, + 0.5627027026654497 + ] + }, + { + "round": 8, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.43333333333172064, + 0.468224299066291, + 0.457990867591816 + ] + }, + { + "round": 8, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7548872180619186, + 0.8096774193278004, + 0.7648854961988466 + ] + }, + { + "round": 8, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.3674418604607848, + 2.5424999998882414, + 2.8194444444444446 + ] + }, + { + "round": 8, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.180000000074506, + 2.5249999999767168, + 2.4463414634328062 + ] + }, + { + "round": 8, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.7843749999956344, + 0.60969696966649, + 0.6072727272682118 + ] + }, + { + "round": 8, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.6763513513614197, + 0.5387096774253634, + 0.6718120805344125 + ] + }, + { + "round": 8, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6686666666716338, + 0.7859374999970896, + 0.6986111111214591 + ] + }, + { + "round": 8, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3162576687133705, + 0.26881720430107525, + 0.3172011661829302 + ] + }, + { + "round": 9, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.4985074627338284, + 1.2574999999953433, + 1.3302631579143436 + ] + }, + { + "round": 9, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.2132530121177614, + 1.0934782609262543, + 1.2537499999860302 + ] + }, + { + "round": 9, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.4241525423555177, + 0.42362869198862385, + 0.45844748856491285 + ] + }, + { + "round": 9, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.3285245901614916, + 0.3500000000019538, + 0.22321428573715302 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.5086294416158559, + 0.4587155963473637, + 0.5170103093061942 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.5306878306868451, + 0.6042168674743679, + 0.5521978021824507 + ] + }, + { + "round": 9, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4559090909209441, + 0.4735849056797067, + 0.46175115205742384 + ] + }, + { + "round": 9, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.8080645161305344, + 0.8305785124043911, + 0.8080645161155131 + ] + }, + { + "round": 9, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.6605263157796704, + 2.372093023212497, + 2.9441176471300423 + ] + }, + { + "round": 9, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 3.022222222191178, + 2.4560975609801527, + 2.445238095109484 + ] + }, + { + "round": 9, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6616883116967782, + 0.6506493506566077, + 0.6829931972497681 + ] + }, + { + "round": 9, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.5770114942282524, + 0.7120567376243202, + 0.6519480519565185 + ] + }, + { + "round": 9, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.6951388888992369, + 0.8024000000357628, + 0.7382352941066903 + ] + }, + { + "round": 9, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.2961538461554994, + 0.3937007874015748, + 0.2832080200501253 + ] + }, + { + "round": 10, + "scenarioId": "scroll-down.top-left", + "status": "success", + "perOperationMs": [ + 1.3794520548225877, + 1.075268817204301, + 1.2358024690622165 + ] + }, + { + "round": 10, + "scenarioId": "scroll-down.middle", + "status": "success", + "perOperationMs": [ + 1.143181818188168, + 1.2774999999790453, + 1.1800000000525923 + ] + }, + { + "round": 10, + "scenarioId": "scroll-smooth.same-window", + "status": "success", + "perOperationMs": [ + 0.462962962975898, + 0.38875968990731957, + 0.4052631578781465 + ] + }, + { + "round": 10, + "scenarioId": "scroll-right.top-left", + "status": "success", + "perOperationMs": [ + 0.273497267771268, + 0.2908355794982568, + 0.25626598465044403 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.top-left", + "status": "success", + "perOperationMs": [ + 0.46822429907064295, + 0.6917241379297498, + 0.45590909087861126 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.middle", + "status": "success", + "perOperationMs": [ + 0.521354166669577, + 0.5076142131979695, + 0.5138461538662131 + ] + }, + { + "round": 10, + "scenarioId": "edit-open.bottom-right", + "status": "success", + "perOperationMs": [ + 0.4660465116287733, + 0.4575342465591825, + 0.4259574468029623 + ] + }, + { + "round": 10, + "scenarioId": "edit-commit.middle", + "status": "success", + "perOperationMs": [ + 0.7533834586760267, + 0.8262295081722931, + 0.8032000000178814 + ] + }, + { + "round": 10, + "scenarioId": "altering.insert-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.4439024388926422, + 2.5425000000745057, + 3.1055555555503815 + ] + }, + { + "round": 10, + "scenarioId": "altering.remove-5-rows-top", + "status": "success", + "perOperationMs": [ + 2.8472222222480923, + 2.5050000000046566, + 2.7270270271629498 + ] + }, + { + "round": 10, + "scenarioId": "arrow-down.top-left", + "status": "success", + "perOperationMs": [ + 0.6783783784060663, + 0.7633587786330636, + 0.829752066134175 + ] + }, + { + "round": 10, + "scenarioId": "arrow-right.middle", + "status": "success", + "perOperationMs": [ + 0.8383333333147068, + 0.8112903225701302, + 0.6373417721471831 + ] + }, + { + "round": 10, + "scenarioId": "formatted-paint.top-left", + "status": "success", + "perOperationMs": [ + 0.7461538461290977, + 0.746268656765069, + 0.6924137931252862 + ] + }, + { + "round": 10, + "scenarioId": "merge-heavy.paint", + "status": "success", + "perOperationMs": [ + 0.3307246376827791, + 0.2712737127386417, + 0.3222543352601156 + ] + } + ] + } + ] +} diff --git a/bench/schema/wasm-profile-build.schema.json b/bench/schema/wasm-profile-build.schema.json new file mode 100644 index 00000000..50cf9dd3 --- /dev/null +++ b/bench/schema/wasm-profile-build.schema.json @@ -0,0 +1,95 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://sheetwrite.dev/schemas/wasm-profile-build-v1.json", + "title": "Sheetwrite fixed-Rust WASM post-link build capture", + "type": "object", + "additionalProperties": false, + "required": [ + "schemaVersion", + "protocol", + "provenance", + "rustProfile", + "postLink", + "variants", + "completion" + ], + "properties": { + "schemaVersion": { "const": 1 }, + "protocol": { "const": "wasm-post-link-build-capture-v1" }, + "provenance": { + "type": "object", + "additionalProperties": false, + "required": [ + "commit", + "dirty", + "timestamp", + "host", + "rustc", + "cargo", + "wasmPack", + "wasmOptVersion", + "wasmOptSha256", + "bun" + ], + "properties": { + "commit": { "type": "string", "pattern": "^[0-9a-f]{40}$" }, + "dirty": { "const": false }, + "timestamp": { "type": "string", "format": "date-time" }, + "host": { "type": "string", "minLength": 1 }, + "rustc": { "type": "string", "minLength": 1 }, + "cargo": { "type": "string", "minLength": 1 }, + "wasmPack": { "type": "string", "minLength": 1 }, + "wasmOptVersion": { "type": "string", "minLength": 1 }, + "wasmOptSha256": { "$ref": "#/$defs/sha256" }, + "bun": { "type": "string", "minLength": 1 } + } + }, + "rustProfile": { + "const": { "optLevel": 3, "lto": "fat", "codegenUnits": 1 } + }, + "postLink": { + "type": "object", + "additionalProperties": false, + "required": ["inputWasmSha256", "compression"], + "properties": { + "inputWasmSha256": { "$ref": "#/$defs/sha256" }, + "compression": { "const": { "gzipLevel": 9, "brotliQuality": 11, "brotliMode": "generic" } } + } + }, + "variants": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "object", + "additionalProperties": false, + "required": ["wasmOpt", "inputWasmSha256", "artifactPath", "artifact"], + "properties": { + "wasmOpt": { "enum": ["-O3", "-Os", "-Oz"] }, + "inputWasmSha256": { "$ref": "#/$defs/sha256" }, + "artifactPath": { "type": "string", "minLength": 1 }, + "artifact": { + "type": "object", + "additionalProperties": false, + "required": ["rawBytes", "gzipBytes", "brotliBytes", "sha256"], + "properties": { + "rawBytes": { "type": "integer", "minimum": 1 }, + "gzipBytes": { "type": "integer", "minimum": 1 }, + "brotliBytes": { "type": "integer", "minimum": 1 }, + "sha256": { "$ref": "#/$defs/sha256" } + } + } + } + } + }, + "completion": { + "const": { + "status": "gates-required", + "required": ["formulaGate", "renderGate", "storeOnlyProbe"] + } + } + }, + "$defs": { + "sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" } + } +} diff --git a/bench/schema/wasm-profile-gates.schema.json b/bench/schema/wasm-profile-gates.schema.json new file mode 100644 index 00000000..86c9a4b3 --- /dev/null +++ b/bench/schema/wasm-profile-gates.schema.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://sheetwrite.dev/schemas/wasm-profile-gates-v1.json", + "title": "Sheetwrite WASM profile gate captures", + "type": "object", + "additionalProperties": false, + "required": ["schemaVersion", "protocol", "gate", "captures"], + "properties": { + "schemaVersion": { "const": 1 }, + "protocol": { "const": "wasm-post-link-gate-capture-v1" }, + "gate": { "enum": ["formula", "render"] }, + "captures": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "wasmOpt", + "status", + "commands", + "exitCode", + "artifactPath", + "evidenceSha256", + "wasmSha256", + "commit", + "runnerFingerprint" + ], + "properties": { + "wasmOpt": { "enum": ["-O3", "-Os", "-Oz"] }, + "status": { "enum": ["passed", "failed"] }, + "commands": { + "type": "array", + "minItems": 1, + "items": { + "type": "array", + "minItems": 1, + "items": { "type": "string", "minLength": 1 } + } + }, + "exitCode": { "type": "integer", "minimum": 0 }, + "artifactPath": { "type": "string", "minLength": 1 }, + "evidenceSha256": { "$ref": "#/$defs/sha256" }, + "wasmSha256": { "$ref": "#/$defs/sha256" }, + "commit": { "type": "string", "pattern": "^[0-9a-f]{40}$" }, + "runnerFingerprint": { "$ref": "#/$defs/sha256" } + }, + "allOf": [ + { + "if": { "properties": { "status": { "const": "passed" } } }, + "then": { "properties": { "exitCode": { "const": 0 } } } + }, + { + "if": { "properties": { "status": { "const": "failed" } } }, + "then": { "properties": { "exitCode": { "minimum": 1 } } } + } + ] + } + } + }, + "$defs": { + "sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" } + } +} diff --git a/bench/schema/wasm-profile-matrix.schema.json b/bench/schema/wasm-profile-matrix.schema.json new file mode 100644 index 00000000..3bc659e3 --- /dev/null +++ b/bench/schema/wasm-profile-matrix.schema.json @@ -0,0 +1,270 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://sheetwrite.dev/schemas/wasm-profile-matrix-v1.json", + "title": "Sheetwrite controlled WASM post-link profile matrix", + "type": "object", + "additionalProperties": false, + "required": [ + "schemaVersion", + "protocol", + "provenance", + "rustProfile", + "postLink", + "decisionPolicy", + "captureOrder", + "variants", + "storeOnlyProbe" + ], + "properties": { + "schemaVersion": { "const": 1 }, + "protocol": { "const": "wasm-post-link-profile-matrix-v1" }, + "provenance": { + "type": "object", + "additionalProperties": false, + "required": [ + "commit", + "dirty", + "timestamp", + "host", + "rustc", + "cargo", + "wasmPack", + "wasmOptVersion", + "wasmOptSha256", + "bun" + ], + "properties": { + "commit": { "$ref": "#/$defs/commit" }, + "dirty": { "const": false }, + "timestamp": { "type": "string", "format": "date-time" }, + "host": { "type": "string", "minLength": 1 }, + "rustc": { "type": "string", "minLength": 1 }, + "cargo": { "type": "string", "minLength": 1 }, + "wasmPack": { "type": "string", "minLength": 1 }, + "wasmOptVersion": { "type": "string", "minLength": 1 }, + "wasmOptSha256": { "$ref": "#/$defs/sha256" }, + "bun": { "type": "string", "minLength": 1 } + } + }, + "rustProfile": { + "type": "object", + "additionalProperties": false, + "required": ["optLevel", "lto", "codegenUnits"], + "properties": { + "optLevel": { "const": 3 }, + "lto": { "const": "fat" }, + "codegenUnits": { "const": 1 } + } + }, + "postLink": { + "type": "object", + "additionalProperties": false, + "required": ["inputWasmSha256", "compression"], + "properties": { + "inputWasmSha256": { "$ref": "#/$defs/sha256" }, + "compression": { + "type": "object", + "additionalProperties": false, + "required": ["gzipLevel", "brotliQuality", "brotliMode"], + "properties": { + "gzipLevel": { "const": 9 }, + "brotliQuality": { "const": 11 }, + "brotliMode": { "const": "generic" } + } + } + } + }, + "decisionPolicy": { + "const": { + "sizeMetric": "brotliBytes", + "requireFormulaGate": true, + "requireRenderGate": true + } + }, + "captureOrder": { + "type": "object", + "additionalProperties": false, + "required": ["formula", "render"], + "properties": { + "formula": { "$ref": "#/$defs/profileOrder" }, + "render": { "$ref": "#/$defs/profileOrder" } + } + }, + "variants": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": { "$ref": "#/$defs/variant" } + }, + "storeOnlyProbe": { "$ref": "#/$defs/storeOnlyProbe" } + }, + "$defs": { + "sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" }, + "commit": { "type": "string", "pattern": "^[0-9a-f]{40}$" }, + "profile": { "enum": ["-O3", "-Os", "-Oz"] }, + "profileOrder": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": true, + "items": { "$ref": "#/$defs/profile" }, + "allOf": [ + { "contains": { "const": "-O3" } }, + { "contains": { "const": "-Os" } }, + { "contains": { "const": "-Oz" } } + ] + }, + "gate": { + "type": "object", + "additionalProperties": false, + "required": [ + "status", + "commands", + "exitCode", + "artifactPath", + "evidenceSha256", + "wasmSha256", + "commit", + "runnerFingerprint" + ], + "properties": { + "status": { "enum": ["passed", "failed"] }, + "commands": { + "type": "array", + "minItems": 1, + "items": { + "type": "array", + "minItems": 1, + "items": { "type": "string", "minLength": 1 } + } + }, + "exitCode": { "type": "integer", "minimum": 0 }, + "artifactPath": { "type": "string", "minLength": 1 }, + "evidenceSha256": { "$ref": "#/$defs/sha256" }, + "wasmSha256": { "$ref": "#/$defs/sha256" }, + "commit": { "$ref": "#/$defs/commit" }, + "runnerFingerprint": { "$ref": "#/$defs/sha256" } + }, + "allOf": [ + { + "if": { "properties": { "status": { "const": "passed" } } }, + "then": { "properties": { "exitCode": { "const": 0 } } } + }, + { + "if": { "properties": { "status": { "const": "failed" } } }, + "then": { "properties": { "exitCode": { "minimum": 1 } } } + } + ] + }, + "variant": { + "type": "object", + "additionalProperties": false, + "required": ["wasmOpt", "inputWasmSha256", "artifact", "formulaGate", "renderGate"], + "properties": { + "wasmOpt": { "$ref": "#/$defs/profile" }, + "inputWasmSha256": { "$ref": "#/$defs/sha256" }, + "artifact": { + "type": "object", + "additionalProperties": false, + "required": ["rawBytes", "gzipBytes", "brotliBytes", "sha256"], + "properties": { + "rawBytes": { "type": "integer", "minimum": 1 }, + "gzipBytes": { "type": "integer", "minimum": 1 }, + "brotliBytes": { "type": "integer", "minimum": 1 }, + "sha256": { "$ref": "#/$defs/sha256" } + } + }, + "formulaGate": { "$ref": "#/$defs/gate" }, + "renderGate": { "$ref": "#/$defs/gate" } + } + }, + "blocker": { + "type": "object", + "additionalProperties": false, + "required": ["id", "kind", "owner", "dependency", "reason"], + "properties": { + "id": { "enum": ["formula-entry-ast", "dependency-index"] }, + "kind": { "const": "dependency-cycle" }, + "owner": { "type": "string", "minLength": 1 }, + "dependency": { "type": "string", "minLength": 1 }, + "reason": { "type": "string", "minLength": 1 } + } + }, + "storeOnlyProbe": { + "type": "object", + "additionalProperties": false, + "required": [ + "provenance", + "command", + "outcome", + "exitCode", + "stdoutSha256", + "stderrSha256", + "blockers" + ], + "properties": { + "provenance": { + "type": "object", + "additionalProperties": false, + "required": ["commit", "dirty", "timestamp"], + "properties": { + "commit": { "$ref": "#/$defs/commit" }, + "dirty": { "const": false }, + "timestamp": { "type": "string", "format": "date-time" } + } + }, + "command": { + "const": [ + "cargo", + "check", + "--target", + "wasm32-unknown-unknown", + "--no-default-features", + "--message-format=json" + ] + }, + "outcome": { "enum": ["compiled", "blocked", "failed"] }, + "exitCode": { "type": "integer", "minimum": 0 }, + "stdoutSha256": { "$ref": "#/$defs/sha256" }, + "stderrSha256": { "$ref": "#/$defs/sha256" }, + "blockers": { "type": "array", "items": { "$ref": "#/$defs/blocker" } } + }, + "allOf": [ + { + "if": { "properties": { "outcome": { "const": "compiled" } } }, + "then": { + "properties": { + "exitCode": { "const": 0 }, + "blockers": { "maxItems": 0 } + } + } + }, + { + "if": { "properties": { "outcome": { "const": "blocked" } } }, + "then": { + "properties": { + "exitCode": { "minimum": 1 }, + "blockers": { + "minItems": 2, + "maxItems": 2, + "allOf": [ + { "contains": { "properties": { "id": { "const": "formula-entry-ast" } } } }, + { "contains": { "properties": { "id": { "const": "dependency-index" } } } } + ] + } + } + } + }, + { + "if": { "properties": { "outcome": { "const": "failed" } } }, + "then": { + "properties": { + "exitCode": { "minimum": 1 }, + "blockers": { "maxItems": 0 } + } + } + } + ] + } + } +} diff --git a/bench/schema/wasm-store-only-probe.schema.json b/bench/schema/wasm-store-only-probe.schema.json new file mode 100644 index 00000000..ea2a74a9 --- /dev/null +++ b/bench/schema/wasm-store-only-probe.schema.json @@ -0,0 +1,86 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://sheetwrite.dev/schemas/wasm-store-only-probe-v1.json", + "title": "Sheetwrite store-only compile probe", + "type": "object", + "additionalProperties": false, + "required": [ + "provenance", + "command", + "outcome", + "exitCode", + "stdoutSha256", + "stderrSha256", + "blockers" + ], + "properties": { + "provenance": { + "type": "object", + "additionalProperties": false, + "required": ["commit", "dirty", "timestamp"], + "properties": { + "commit": { "type": "string", "pattern": "^[0-9a-f]{40}$" }, + "dirty": { "const": false }, + "timestamp": { "type": "string", "format": "date-time" } + } + }, + "command": { + "const": [ + "cargo", + "check", + "--target", + "wasm32-unknown-unknown", + "--no-default-features", + "--message-format=json" + ] + }, + "outcome": { "enum": ["compiled", "blocked", "failed"] }, + "exitCode": { "type": "integer", "minimum": 0 }, + "stdoutSha256": { "$ref": "#/$defs/sha256" }, + "stderrSha256": { "$ref": "#/$defs/sha256" }, + "blockers": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "required": ["id", "kind", "owner", "dependency", "reason"], + "properties": { + "id": { "enum": ["formula-entry-ast", "dependency-index"] }, + "kind": { "const": "dependency-cycle" }, + "owner": { "type": "string", "minLength": 1 }, + "dependency": { "type": "string", "minLength": 1 }, + "reason": { "type": "string", "minLength": 1 } + } + } + } + }, + "allOf": [ + { + "if": { "properties": { "outcome": { "const": "compiled" } } }, + "then": { "properties": { "exitCode": { "const": 0 }, "blockers": { "maxItems": 0 } } } + }, + { + "if": { "properties": { "outcome": { "const": "blocked" } } }, + "then": { + "properties": { + "exitCode": { "minimum": 1 }, + "blockers": { + "minItems": 2, + "maxItems": 2, + "allOf": [ + { "contains": { "properties": { "id": { "const": "formula-entry-ast" } } } }, + { "contains": { "properties": { "id": { "const": "dependency-index" } } } } + ] + } + } + } + }, + { + "if": { "properties": { "outcome": { "const": "failed" } } }, + "then": { "properties": { "exitCode": { "minimum": 1 }, "blockers": { "maxItems": 0 } } } + } + ], + "$defs": { + "sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" } + } +} diff --git a/bench/src/billion-cell-bench.ts b/bench/src/billion-cell-bench.ts index db50e2ca..2455db61 100644 --- a/bench/src/billion-cell-bench.ts +++ b/bench/src/billion-cell-bench.ts @@ -1,4 +1,5 @@ import ts from "typescript"; +import typeScriptManifest from "../../node_modules/typescript/package.json" with { type: "json" }; import { DatasourceController } from "../../packages/core/src/datasource-controller.js"; import { initSheetwrite } from "../../packages/core/src/grid.js"; import { @@ -1495,7 +1496,7 @@ export function validateBillionCellBenchmark( const toolchain = record(artifact.toolchain, "toolchain"); exact(toolchain.runtime, "bun", "toolchain.runtime"); exact(toolchain.bunVersion, Bun.version, "toolchain.bunVersion"); - exact(toolchain.typescriptVersion, ts.version, "toolchain.typescriptVersion"); + exact(toolchain.typescriptVersion, typeScriptManifest.version, "toolchain.typescriptVersion"); exact(toolchain.platform, process.platform, "toolchain.platform"); exact(toolchain.architecture, process.arch, "toolchain.architecture"); exact( diff --git a/bench/src/render-bench.ts b/bench/src/render-bench.ts index 906ce53b..efcc2716 100644 --- a/bench/src/render-bench.ts +++ b/bench/src/render-bench.ts @@ -1,6 +1,7 @@ import { type Column, createGrid, + type DocumentOp, type Grid, initSheetwrite, type Workbook, @@ -18,11 +19,13 @@ import { getNumberFormatResourceStatsForTest, resetNumberFormatResourcesForTest, } from "../../packages/core/src/number-format.js"; +import type { InstrumentedVisibleWindowView } from "../../packages/core/src/store/window-reader.js"; import "handsontable/styles/handsontable.css"; import "handsontable/styles/ht-theme-main.css"; import { COLUMNS, type ColumnarDataset, datasetChecksum, makeColumnar, toAoA } from "./dataset.js"; import { createHandsontable } from "./handsontable-runtime.js"; import { + ALL_RENDER_SCENARIOS, type BrowserCombinationResult, type EngineId, type FailedScenario, @@ -32,27 +35,38 @@ import { RENDER_SCENARIOS, RENDER_VIEWPORT, type RenderResourceMetrics, + type ScenarioId, type ScenarioResult, + WINDOW_TRANSFER_SCENARIO_IDS, } from "./render-protocol.js"; import { type CellSelection, + type GeometryObservation, + measureUnresizedMillionRowGeometry, type RenderBenchAdapter, runRenderScenario, type ScrollObservation, + type WindowReadDiagnosticMode, + type WindowTransferCounters, } from "./render-scenarios.js"; const SHEET = "bench"; const SHEETWRITE_ROW_HEIGHT = 28; const HANDSONTABLE_ROW_HEIGHT = 23; +const FORMULA_DENSE_ROWS = 64; +const TRANSACTION_CHUNK_SIZE = 8_000; +const LONG_TEXT_SUFFIX = "x".repeat(192); interface PageConfiguration { readonly engine: EngineId; readonly rows: number; + readonly scenarios: readonly ScenarioId[]; readonly measuredSamples: number; readonly warmupSamples: number; readonly minimumSampleDurationMs: number; readonly runId: string; readonly round: number; + readonly windowTransferDiagnostic: boolean; } declare global { @@ -92,6 +106,13 @@ function makeWorkbook(rowCount: number): Workbook { })); return { activeSheet: SHEET, sheets: [{ id: SHEET, name: "Bench", rowCount, columns }] }; } +function datasetValueAt(dataset: ColumnarDataset, row: number, col: number): string | number { + if (col === 0) return dataset.id[row]!; + if (col === 1) return dataset.date[row]!; + if (col === 2) return dataset.customer[row]!; + if (col === 3) return dataset.city[row]!; + return dataset.amount[row]!; +} class SheetwriteAdapter implements RenderBenchAdapter { readonly id = "sheetwrite" as const; @@ -100,8 +121,23 @@ class SheetwriteAdapter implements RenderBenchAdapter { private grid!: Grid; private host!: HTMLElement; private readonly data: { rowCount: number; columns: Record> }; - - constructor(dataset: ColumnarDataset) { + private readonly dataset: ColumnarDataset; + private formulaDenseRows = 0; + private textHeavyRows = 0; + private windowReadDiagnosticMode: WindowReadDiagnosticMode = "baseline"; + private priorDecodedView: InstrumentedVisibleWindowView | undefined; + private windowTransferCountersState = { + logicalFrames: 0, + windowReadRequests: 0, + logicalWindowReads: 0, + copiedBytes: 0, + outputAllocationEvents: 0, + }; + constructor( + dataset: ColumnarDataset, + private readonly windowTransferDiagnostic: boolean, + ) { + this.dataset = dataset; this.initialRowCount = dataset.rowCount; this.data = { rowCount: dataset.rowCount, @@ -121,6 +157,47 @@ class SheetwriteAdapter implements RenderBenchAdapter { workbook: makeWorkbook(this.initialRowCount), data: this.data, }); + if (this.windowTransferDiagnostic) this.installWindowTransferDiagnostic(); + } + + private installWindowTransferDiagnostic(): void { + const originalRead = this.grid.store.getVisibleWindow.bind(this.grid.store); + this.grid.store.getVisibleWindow = ((...args) => { + this.windowTransferCountersState.windowReadRequests++; + if (this.windowReadDiagnosticMode === "reuse-decoded-view-upper-bound") { + if (!this.priorDecodedView) { + throw new Error("window-transfer upper bound has no prior decoded view"); + } + return this.priorDecodedView; + } + const view = originalRead(...args) as InstrumentedVisibleWindowView; + const copiedBytes = view.ffiOutputBytes; + const outputAllocationEvents = view.ffiOutputAllocationEvents; + if ( + typeof copiedBytes !== "number" || + !Number.isSafeInteger(copiedBytes) || + copiedBytes < 0 || + typeof outputAllocationEvents !== "number" || + !Number.isSafeInteger(outputAllocationEvents) || + outputAllocationEvents <= 0 + ) { + throw new Error("visible-window read omitted exact output transfer counters"); + } + this.windowTransferCountersState.logicalWindowReads++; + this.windowTransferCountersState.copiedBytes += copiedBytes; + this.windowTransferCountersState.outputAllocationEvents += outputAllocationEvents; + this.priorDecodedView = view; + return view; + }) as typeof this.grid.store.getVisibleWindow; + + const renderer = Reflect.get(this.grid, "renderer") as { + paint(view: InstrumentedVisibleWindowView): void; + }; + const originalPaint = renderer.paint.bind(renderer); + renderer.paint = (view): void => { + this.windowTransferCountersState.logicalFrames++; + originalPaint(view); + }; } isMountedAndAccessible(): boolean { @@ -190,6 +267,7 @@ class SheetwriteAdapter implements RenderBenchAdapter { maximumTop: Math.max(0, element.scrollHeight - element.clientHeight), maximumLeft: Math.max(0, element.scrollWidth - element.clientWidth), firstVisibleRow: Math.floor(element.scrollTop / SHEETWRITE_ROW_HEIGHT), + devicePixelRatio: window.devicePixelRatio, }; } @@ -261,6 +339,79 @@ class SheetwriteAdapter implements RenderBenchAdapter { return getNumberFormatResourceStatsForTest(); } + private applyPatches(patches: readonly DocumentOp[]): void { + for (let start = 0; start < patches.length; start += TRANSACTION_CHUNK_SIZE) { + this.grid.store.applyTransaction({ + patches: patches.slice(start, start + TRANSACTION_CHUNK_SIZE), + }); + } + this.grid.refresh(); + } + + installFormulaDense(): void { + this.formulaDenseRows = Math.min(FORMULA_DENSE_ROWS, this.initialRowCount - 1); + const patches: DocumentOp[] = []; + for (let row = 1; row <= this.formulaDenseRows; row++) { + for (let col = 1; col < this.colCount; col++) { + patches.push({ + op: "set", + addr: { sheet: SHEET, row, col }, + value: { kind: "formula", src: `=A${row + 1}+${col}` }, + }); + } + } + this.applyPatches(patches); + } + + clearFormulaDense(): void { + const patches: DocumentOp[] = []; + for (let row = 1; row <= this.formulaDenseRows; row++) { + for (let col = 1; col < this.colCount; col++) { + patches.push({ + op: "set", + addr: { sheet: SHEET, row, col }, + value: { kind: "literal", value: datasetValueAt(this.dataset, row, col) }, + }); + } + } + this.formulaDenseRows = 0; + this.applyPatches(patches); + } + + installTextHeavy(rowCount: number): void { + this.textHeavyRows = Math.min(rowCount, this.initialRowCount - 1); + const patches: DocumentOp[] = []; + for (let row = 1; row <= this.textHeavyRows; row++) { + for (let col = 1; col < this.colCount; col++) { + patches.push({ + op: "set", + addr: { sheet: SHEET, row, col }, + value: { kind: "literal", value: `diagnostic-long-${row}-${col}-${LONG_TEXT_SUFFIX}` }, + }); + } + } + this.applyPatches(patches); + } + + clearTextHeavy(): void { + const patches: DocumentOp[] = []; + for (let row = 1; row <= this.textHeavyRows; row++) { + for (let col = 1; col < this.colCount; col++) { + patches.push({ + op: "set", + addr: { sheet: SHEET, row, col }, + value: { kind: "literal", value: datasetValueAt(this.dataset, row, col) }, + }); + } + } + this.textHeavyRows = 0; + this.applyPatches(patches); + } + + measureUnresizedMillionRowGeometry(): GeometryObservation { + return measureUnresizedMillionRowGeometry(); + } + installMergeHeavy(): void { const count = Math.min(2_000, Math.floor(this.initialRowCount / 2)); this.grid.store.applyTransaction({ @@ -292,6 +443,33 @@ class SheetwriteAdapter implements RenderBenchAdapter { return getMergeIndexResourceStatsForTest(); } + setWindowReadDiagnosticMode(mode: WindowReadDiagnosticMode): void { + if (!this.windowTransferDiagnostic) { + throw new Error("window-transfer mode requires benchmark diagnostic configuration"); + } + if (mode === "reuse-decoded-view-upper-bound" && !this.priorDecodedView) { + this.windowReadDiagnosticMode = "baseline"; + this.grid.store.getVisibleWindow( + SHEET, + { start: 0, end: Math.min(32, this.initialRowCount) }, + Array.from({ length: this.colCount }, (_, column) => column), + ); + } + this.windowReadDiagnosticMode = mode; + } + + resetWindowTransferCounters(): void { + this.windowTransferCountersState.logicalFrames = 0; + this.windowTransferCountersState.windowReadRequests = 0; + this.windowTransferCountersState.logicalWindowReads = 0; + this.windowTransferCountersState.copiedBytes = 0; + this.windowTransferCountersState.outputAllocationEvents = 0; + } + + windowTransferCounters(): WindowTransferCounters { + return { ...this.windowTransferCountersState }; + } + destroy(): void { this.grid.destroy(); } @@ -304,8 +482,12 @@ class HandsontableAdapter implements RenderBenchAdapter { private hot!: HotInstance; private host!: HTMLElement; private readonly data: CellValue[][]; + private readonly dataset: ColumnarDataset; + private formulaDenseRows = 0; + private textHeavyRows = 0; constructor(dataset: ColumnarDataset) { + this.dataset = dataset; this.initialRowCount = dataset.rowCount; this.data = toAoA(dataset); } @@ -411,6 +593,7 @@ class HandsontableAdapter implements RenderBenchAdapter { maximumTop: Math.max(0, element.scrollHeight - element.clientHeight), maximumLeft: Math.max(0, element.scrollWidth - element.clientWidth), firstVisibleRow: Math.floor(element.scrollTop / HANDSONTABLE_ROW_HEIGHT), + devicePixelRatio: window.devicePixelRatio, }; } @@ -477,6 +660,50 @@ class HandsontableAdapter implements RenderBenchAdapter { return getNumberFormatResourceStatsForTest(); } + installFormulaDense(): void { + this.formulaDenseRows = Math.min(FORMULA_DENSE_ROWS, this.initialRowCount - 1); + for (let row = 1; row <= this.formulaDenseRows; row++) { + for (let col = 1; col < this.colCount; col++) { + this.data[row]![col] = `=A${row + 1}+${col}`; + } + } + this.hot.render(); + } + + clearFormulaDense(): void { + for (let row = 1; row <= this.formulaDenseRows; row++) { + for (let col = 1; col < this.colCount; col++) { + this.data[row]![col] = datasetValueAt(this.dataset, row, col); + } + } + this.formulaDenseRows = 0; + this.hot.render(); + } + + installTextHeavy(rowCount: number): void { + this.textHeavyRows = Math.min(rowCount, this.initialRowCount - 1); + for (let row = 1; row <= this.textHeavyRows; row++) { + for (let col = 1; col < this.colCount; col++) { + this.data[row]![col] = `diagnostic-long-${row}-${col}-${LONG_TEXT_SUFFIX}`; + } + } + this.hot.render(); + } + + clearTextHeavy(): void { + for (let row = 1; row <= this.textHeavyRows; row++) { + for (let col = 1; col < this.colCount; col++) { + this.data[row]![col] = datasetValueAt(this.dataset, row, col); + } + } + this.textHeavyRows = 0; + this.hot.render(); + } + + measureUnresizedMillionRowGeometry(): GeometryObservation { + return measureUnresizedMillionRowGeometry(); + } + installMergeHeavy(): void { const count = Math.min(2_000, Math.floor(this.initialRowCount / 2)); this.hot.updateSettings({ @@ -501,6 +728,24 @@ class HandsontableAdapter implements RenderBenchAdapter { return getMergeIndexResourceStatsForTest(); } + setWindowReadDiagnosticMode(_mode: WindowReadDiagnosticMode): void { + throw new Error("window-transfer diagnostics support only sheetwrite"); + } + + resetWindowTransferCounters(): void { + throw new Error("window-transfer diagnostics support only sheetwrite"); + } + + windowTransferCounters(): WindowTransferCounters { + return { + logicalFrames: 0, + windowReadRequests: 0, + logicalWindowReads: 0, + copiedBytes: 0, + outputAllocationEvents: 0, + }; + } + destroy(): void { this.hot.destroy(); } @@ -544,6 +789,7 @@ function teardownFailures(results: readonly ScenarioResult[], error: unknown): S rows: result.rows, scenarioId: result.scenarioId, group: result.group, + ...(result.dataValidity === undefined ? {} : { dataValidity: result.dataValidity }), status: "failed", stage: "teardown", errorClass: normalized.name || "Error", @@ -579,7 +825,7 @@ async function run(configuration: PageConfiguration): Promise { let adapter: RenderBenchAdapter = configuration.engine === "sheetwrite" - ? new SheetwriteAdapter(dataset) + ? new SheetwriteAdapter(dataset, configuration.windowTransferDiagnostic) : new HandsontableAdapter(dataset); window.__benchStage = "mount"; setStatus(`mounting ${configuration.engine}`); @@ -598,9 +844,9 @@ async function run(configuration: PageConfiguration): Promise { window.__benchResults = output; const results: ScenarioResult[] = []; - for (const scenario of RENDER_SCENARIOS) { - setStatus(`running ${scenario.id}`); - const result = runRenderScenario(adapter, dataset, scenario.id, { + for (const scenarioId of configuration.scenarios) { + setStatus(`running ${scenarioId}`); + const result = runRenderScenario(adapter, dataset, scenarioId, { runId: configuration.runId, round: configuration.round, warmupSamples: configuration.warmupSamples, @@ -620,7 +866,7 @@ async function run(configuration: PageConfiguration): Promise { // rolled back). Rebuild the fixture so later scenarios validate against // the canonical document instead of cascading the wreckage into // spurious failures. - setStatus(`rebuilding ${configuration.engine} after ${scenario.id} failure`); + setStatus(`rebuilding ${configuration.engine} after ${scenarioId} failure`); try { adapter.destroy(); } catch { @@ -630,7 +876,7 @@ async function run(configuration: PageConfiguration): Promise { host.replaceChildren(); adapter = configuration.engine === "sheetwrite" - ? new SheetwriteAdapter(dataset) + ? new SheetwriteAdapter(dataset, configuration.windowTransferDiagnostic) : new HandsontableAdapter(dataset); adapter.mount(host); await settle(); @@ -665,8 +911,46 @@ function readConfiguration(params: URLSearchParams): PageConfiguration { const engine = params.get("engine") === "handsontable" ? "handsontable" : "sheetwrite"; const runId = params.get("runId"); if (!runId) throw new Error("render benchmark requires a runId"); + const requestedScenarios = + params.get("scenarios")?.split(",") ?? RENDER_SCENARIOS.map((scenario) => scenario.id); + if ( + requestedScenarios.length === 0 || + new Set(requestedScenarios).size !== requestedScenarios.length + ) { + throw new Error("render benchmark scenarios must be non-empty and unique"); + } + for (const scenarioId of requestedScenarios) { + if (!ALL_RENDER_SCENARIOS.some((scenario) => scenario.id === scenarioId)) { + throw new Error(`unknown render benchmark scenario: ${scenarioId}`); + } + } + const diagnostic = params.get("diagnostic"); + if (diagnostic !== null && diagnostic !== "window-transfer") { + throw new Error("unknown render benchmark diagnostic configuration"); + } + const windowTransferDiagnostic = diagnostic === "window-transfer"; + const requestedWindowTransferScenarios = requestedScenarios.filter((scenario) => + WINDOW_TRANSFER_SCENARIO_IDS.includes( + scenario as (typeof WINDOW_TRANSFER_SCENARIO_IDS)[number], + ), + ); + if ( + requestedWindowTransferScenarios.length > 0 && + (!windowTransferDiagnostic || + engine !== "sheetwrite" || + requestedWindowTransferScenarios.length !== WINDOW_TRANSFER_SCENARIO_IDS.length || + !WINDOW_TRANSFER_SCENARIO_IDS.every((scenario) => requestedScenarios.includes(scenario))) + ) { + throw new Error( + "window-transfer scenarios require the complete sheetwrite benchmark diagnostic pair", + ); + } + if (windowTransferDiagnostic && requestedWindowTransferScenarios.length === 0) { + throw new Error("window-transfer diagnostic configuration requires its scenario pair"); + } return { engine, + scenarios: requestedScenarios as ScenarioId[], rows: positiveInteger(params.get("rows"), 100_000), measuredSamples: positiveInteger(params.get("samples"), 3), warmupSamples: nonNegativeInteger(params.get("warmups"), 1), @@ -676,6 +960,7 @@ function readConfiguration(params: URLSearchParams): PageConfiguration { ), runId, round: positiveInteger(params.get("round"), 1), + windowTransferDiagnostic, }; } diff --git a/bench/src/render-driver.ts b/bench/src/render-driver.ts index a5a8432f..9352cd5f 100644 --- a/bench/src/render-driver.ts +++ b/bench/src/render-driver.ts @@ -9,6 +9,7 @@ import { validateRenderGateArtifact } from "./render-gate.js"; import { type BrowserCombinationResult, type BrowserLaunchAttempt, + DIAGNOSTIC_RENDER_SCENARIOS, ENGINE_IDS, type EngineId, type FailedScenario, @@ -24,9 +25,13 @@ import { type RenderBenchmarkArtifact, type RenderRunConfig, renderBenchmarkMarkdown, + type ScenarioId, type ScenarioResult, + scenarioDataValidity, scenarioGroup, summarizeCompleteness, + WINDOW_TRANSFER_ORDER_SEED, + WINDOW_TRANSFER_SCENARIO_IDS, } from "./render-protocol.js"; import { counterbalancedOrder } from "./stats.js"; @@ -34,11 +39,15 @@ const BENCH_ROOT = fileURLToPath(new URL("..", import.meta.url)); const REPOSITORY_ROOT = resolve(BENCH_ROOT, ".."); const DEFAULT_JSON_PATH = resolve(BENCH_ROOT, "results/render-results.json"); const DEFAULT_MARKDOWN_PATH = resolve(BENCH_ROOT, "results/render-results.md"); +const DIAGNOSTIC_JSON_PATH = resolve(BENCH_ROOT, "results/render-diagnostics.json"); +const DIAGNOSTIC_MARKDOWN_PATH = resolve(BENCH_ROOT, "results/render-diagnostics.md"); interface DriverConfiguration { readonly smoke: boolean; readonly engines: readonly EngineId[]; readonly rows: readonly number[]; + readonly scenarios: readonly ScenarioId[]; + readonly diagnostic: boolean; readonly rounds: number; readonly measuredSamples: number; readonly warmupSamples: number; @@ -55,12 +64,14 @@ interface CombinationConfiguration { readonly round: number; readonly engine: EngineId; readonly rows: number; + readonly scenarios?: readonly ScenarioId[]; readonly measuredSamples: number; readonly warmupSamples: number; readonly minimumSampleDurationMs: number; readonly timeoutMs: number; readonly datasetHash: string; readonly browserExecutable?: string; + readonly windowTransferDiagnostic?: boolean; } interface CombinationOutput { @@ -105,10 +116,20 @@ function nonNegativeIntegerArgument( function parseConfiguration(args: readonly string[]): DriverConfiguration { const smoke = args.includes("--smoke"); + const scenarioSet = argumentValue(args, "--scenario-set") ?? "gate"; + if (scenarioSet !== "gate" && scenarioSet !== "diagnostic") { + throw new TypeError("--scenario-set must be gate or diagnostic"); + } + const diagnostic = scenarioSet === "diagnostic"; + const scenarios = diagnostic + ? DIAGNOSTIC_RENDER_SCENARIOS.map((scenario) => scenario.id) + : RENDER_SCENARIOS.map((scenario) => scenario.id); const engineArg = argumentValue(args, "--engine"); const engines: readonly EngineId[] = engineArg === undefined - ? ENGINE_IDS + ? diagnostic + ? ["sheetwrite"] + : ENGINE_IDS : [ ENGINE_IDS.includes(engineArg as EngineId) ? (engineArg as EngineId) @@ -116,6 +137,9 @@ function parseConfiguration(args: readonly string[]): DriverConfiguration { throw new TypeError(`--engine must be one of: ${ENGINE_IDS.join(", ")}`); })(), ]; + if (diagnostic && engines.some((engine) => engine !== "sheetwrite")) { + throw new TypeError("the diagnostic scenario set currently supports only sheetwrite"); + } const rowsArg = argumentValue(args, "--rows"); const rows = rowsArg ? rowsArg.split(",").map((entry) => { @@ -131,18 +155,23 @@ function parseConfiguration(args: readonly string[]): DriverConfiguration { const compactSamples = args.includes("--compact-samples"); const outputArg = argumentValue(args, "--output"); const markdownArg = argumentValue(args, "--markdown-output"); - const outputPath = outputArg ?? (smoke ? undefined : DEFAULT_JSON_PATH); + const outputPath = + outputArg ?? (smoke ? undefined : diagnostic ? DIAGNOSTIC_JSON_PATH : DEFAULT_JSON_PATH); const markdownPath = markdownArg ?? (outputPath === undefined ? undefined : outputArg === undefined - ? DEFAULT_MARKDOWN_PATH + ? diagnostic + ? DIAGNOSTIC_MARKDOWN_PATH + : DEFAULT_MARKDOWN_PATH : outputPath.replace(/\.json$/u, ".md")); return { smoke, engines, rows, + scenarios, + diagnostic, rounds: positiveIntegerArgument(args, "--rounds", smoke ? 1 : 2), measuredSamples: positiveIntegerArgument(args, "--samples", smoke ? 1 : 3), warmupSamples: nonNegativeIntegerArgument(args, "--warmups", 1), @@ -164,7 +193,7 @@ function normalizedError(error: unknown): Error { function failureForScenario( configuration: CombinationConfiguration, - scenarioId: (typeof RENDER_SCENARIOS)[number]["id"], + scenarioId: ScenarioId, stage: FailureStage, error: unknown, diagnostics: RuntimeDiagnostics, @@ -173,6 +202,7 @@ function failureForScenario( partialSamples: FailedScenario["partialSamples"] = [], ): FailedScenario { const failure = normalizedError(error); + const dataValidity = scenarioDataValidity(scenarioId); return { runId: configuration.runId, round: configuration.round, @@ -180,6 +210,7 @@ function failureForScenario( rows: configuration.rows, scenarioId, group: scenarioGroup(scenarioId), + ...(dataValidity === undefined ? {} : { dataValidity }), status: "failed", stage, errorClass: failure.name || "Error", @@ -194,6 +225,10 @@ function failureForScenario( }; } +function combinationScenarios(configuration: CombinationConfiguration): readonly ScenarioId[] { + return configuration.scenarios ?? RENDER_SCENARIOS.map((scenario) => scenario.id); +} + export function createCombinationFailures( configuration: CombinationConfiguration, stage: FailureStage, @@ -202,8 +237,8 @@ export function createCombinationFailures( timeout = false, crash = false, ): FailedScenario[] { - return RENDER_SCENARIOS.map((scenario) => - failureForScenario(configuration, scenario.id, stage, error, diagnostics, timeout, crash), + return combinationScenarios(configuration).map((scenarioId) => + failureForScenario(configuration, scenarioId, stage, error, diagnostics, timeout, crash), ); } @@ -295,20 +330,20 @@ function normalizeBrowserOutput( } const normalized: ScenarioResult[] = []; - for (const scenario of RENDER_SCENARIOS) { + for (const scenarioId of combinationScenarios(configuration)) { const matches = input.results.filter( (entry) => entry !== null && typeof entry === "object" && !Array.isArray(entry) && "scenarioId" in entry && - entry.scenarioId === scenario.id, + entry.scenarioId === scenarioId, ); if (matches.length !== 1) { normalized.push( failureForScenario( configuration, - scenario.id, + scenarioId, "validate", new Error( matches.length === 0 @@ -338,15 +373,7 @@ function normalizeBrowserOutput( ); } catch (error) { normalized.push( - failureForScenario( - configuration, - scenario.id, - "validate", - error, - diagnostics, - false, - false, - ), + failureForScenario(configuration, scenarioId, "validate", error, diagnostics, false, false), ); } } @@ -420,6 +447,11 @@ async function runCombination( if (!browser) throw new Error("browser launch attempts completed without a browser"); page = await browser.newPage({ viewport: { width: RENDER_VIEWPORT.width + 480, height: RENDER_VIEWPORT.height + 180 }, + deviceScaleFactor: combinationScenarios(configuration).includes( + "scroll-fractional.same-window", + ) + ? 1.25 + : 1, }); page.on("console", (message) => { if (message.type() === "error") consoleErrors.push(message.text()); @@ -446,9 +478,13 @@ async function runCombination( url.searchParams.set("round", String(configuration.round)); url.searchParams.set("engine", configuration.engine); url.searchParams.set("rows", String(configuration.rows)); + url.searchParams.set("scenarios", combinationScenarios(configuration).join(",")); url.searchParams.set("samples", String(configuration.measuredSamples)); url.searchParams.set("warmups", String(configuration.warmupSamples)); url.searchParams.set("minimumSampleMs", String(configuration.minimumSampleDurationMs)); + if (configuration.windowTransferDiagnostic) { + url.searchParams.set("diagnostic", "window-transfer"); + } await page.goto(url.href, { waitUntil: "load", timeout: configuration.timeoutMs }); stage = "mount"; await page.waitForFunction(() => window.__benchDone === true, undefined, { @@ -469,12 +505,12 @@ async function runCombination( if (state.result) { const partial = normalizeBrowserOutput(state.result, configuration, diagnostics); const byScenario = new Map(partial.map((result) => [result.scenarioId, result])); - const completed = RENDER_SCENARIOS.map((scenario) => { - const result = byScenario.get(scenario.id); + const completed = combinationScenarios(configuration).map((scenarioId) => { + const result = byScenario.get(scenarioId); if (result && result.status === "success") return result; return failureForScenario( configuration, - scenario.id, + scenarioId, observedStage, state.error ? new Error(state.error) : normalized, diagnostics, @@ -577,6 +613,13 @@ async function runDriver(args: readonly string[]): Promise { configuration.rounds, RENDER_ORDER_SEED, ); + const windowTransferScenarioOrder = configuration.diagnostic + ? counterbalancedOrder( + WINDOW_TRANSFER_SCENARIO_IDS, + configuration.rounds, + WINDOW_TRANSFER_ORDER_SEED, + ) + : undefined; const datasetHashes: Record = {}; for (const rows of configuration.rows) { datasetHashes[String(rows)] = datasetChecksum(makeColumnar(rows, DEFAULT_SEED)); @@ -603,6 +646,18 @@ async function runDriver(args: readonly string[]): Promise { try { for (let roundIndex = 0; roundIndex < engineOrder.length; roundIndex++) { const round = roundIndex + 1; + const scenarios = + windowTransferScenarioOrder === undefined + ? configuration.scenarios + : [ + ...configuration.scenarios.filter( + (scenario) => + !WINDOW_TRANSFER_SCENARIO_IDS.includes( + scenario as (typeof WINDOW_TRANSFER_SCENARIO_IDS)[number], + ), + ), + ...windowTransferScenarioOrder[roundIndex]!, + ]; for (const engine of engineOrder[roundIndex]!) { for (const rows of configuration.rows) { process.stderr.write( @@ -613,12 +668,14 @@ async function runDriver(args: readonly string[]): Promise { round, engine, rows, + scenarios, measuredSamples: configuration.measuredSamples, warmupSamples: configuration.warmupSamples, minimumSampleDurationMs: configuration.minimumSampleDurationMs, timeoutMs: configuration.timeoutMs, datasetHash: datasetHashes[String(rows)]!, browserExecutable: configuration.browserExecutable, + windowTransferDiagnostic: configuration.diagnostic, }); results.push(...output.results); launchAttempts.push(...output.launchAttempts); @@ -633,7 +690,7 @@ async function runDriver(args: readonly string[]): Promise { const config: RenderRunConfig = { engines: configuration.engines, rows: configuration.rows, - scenarios: RENDER_SCENARIOS.map((scenario) => scenario.id), + scenarios: configuration.scenarios, }; const timestamp = new Date().toISOString(); const artifact: RenderBenchmarkArtifact = { @@ -663,15 +720,18 @@ async function runDriver(args: readonly string[]): Promise { orderSeed: RENDER_ORDER_SEED, engineOrder, launchAttempts, + ...(windowTransferScenarioOrder === undefined ? {} : { windowTransferScenarioOrder }), }, config, results, completeness: summarizeCompleteness(config, configuration.rounds, results), - reproductionCommands: [ - "bun run --filter '@sheetwrite/bench' bench:render", - "bun run --filter '@sheetwrite/bench' bench:render:smoke -- --engine sheetwrite", - "bun run --filter '@sheetwrite/bench' bench:render:smoke -- --engine handsontable", - ], + reproductionCommands: configuration.diagnostic + ? ["bun run --filter '@sheetwrite/bench' bench:render:diagnostic"] + : [ + "bun run --filter '@sheetwrite/bench' bench:render", + "bun run --filter '@sheetwrite/bench' bench:render:smoke -- --engine sheetwrite", + "bun run --filter '@sheetwrite/bench' bench:render:smoke -- --engine handsontable", + ], }; const json = stableJson(artifact); const parsed = parseRenderArtifactJson(json, { expectedRunId: runId }); diff --git a/bench/src/render-protocol.ts b/bench/src/render-protocol.ts index a83e7139..1e790088 100644 --- a/bench/src/render-protocol.ts +++ b/bench/src/render-protocol.ts @@ -1,11 +1,21 @@ import type { AggregateSample } from "./stats.js"; -import { summarizeFinite } from "./stats.js"; +import { counterbalancedOrder, summarizeFinite } from "./stats.js"; export const RENDER_PROTOCOL_VERSION = 1; export const RENDER_MINIMUM_SAMPLE_MS = 100; export const RENDER_MAX_LAUNCH_ATTEMPTS = 2; export const RENDER_VIEWPORT = { width: 640, height: 480 } as const; export const RENDER_ORDER_SEED = 0x51c0ffee; +export const WINDOW_TRANSFER_ORDER_SEED = 0x57494e44; +export const WINDOW_TRANSFER_BASELINE_SCENARIO_ID = "window-transfer.scroll.baseline" as const; +export const WINDOW_TRANSFER_UPPER_BOUND_SCENARIO_ID = + "window-transfer.scroll.reuse-decoded-view-upper-bound" as const; +export const WINDOW_TRANSFER_SCENARIO_IDS = [ + WINDOW_TRANSFER_BASELINE_SCENARIO_ID, + WINDOW_TRANSFER_UPPER_BOUND_SCENARIO_ID, +] as const; +export type WindowTransferScenarioId = (typeof WINDOW_TRANSFER_SCENARIO_IDS)[number]; +export type RenderDataValidity = "product-valid" | "pixel-data-invalid"; export const ENGINE_IDS = ["sheetwrite", "handsontable"] as const; export type EngineId = (typeof ENGINE_IDS)[number]; @@ -16,7 +26,9 @@ export type ScenarioGroup = | "altering" | "arrow-keys-navigation" | "formatting" - | "merges"; + | "merges" + | "formulae" + | "geometry"; export const RENDER_SCENARIOS = [ { id: "scroll-down.top-left", group: "view-scrolling" }, @@ -35,7 +47,24 @@ export const RENDER_SCENARIOS = [ { id: "merge-heavy.paint", group: "merges" }, ] as const satisfies readonly { readonly id: string; readonly group: ScenarioGroup }[]; -export type ScenarioId = (typeof RENDER_SCENARIOS)[number]["id"]; +export const DIAGNOSTIC_RENDER_SCENARIOS = [ + { id: "formula-dense.paint", group: "formulae" }, + { id: "text-heavy.long-scroll", group: "view-scrolling" }, + { id: "scroll-fractional.same-window", group: "view-scrolling" }, + { id: "geometry-unresized.1m", group: "geometry" }, + { id: WINDOW_TRANSFER_BASELINE_SCENARIO_ID, group: "view-scrolling" }, + { id: WINDOW_TRANSFER_UPPER_BOUND_SCENARIO_ID, group: "view-scrolling" }, +] as const satisfies readonly { readonly id: string; readonly group: ScenarioGroup }[]; + +export const ALL_RENDER_SCENARIOS = [...RENDER_SCENARIOS, ...DIAGNOSTIC_RENDER_SCENARIOS] as const; + +export type ScenarioId = (typeof ALL_RENDER_SCENARIOS)[number]["id"]; + +export function scenarioDataValidity(scenarioId: ScenarioId): RenderDataValidity | undefined { + if (scenarioId === WINDOW_TRANSFER_BASELINE_SCENARIO_ID) return "product-valid"; + if (scenarioId === WINDOW_TRANSFER_UPPER_BOUND_SCENARIO_ID) return "pixel-data-invalid"; + return undefined; +} export type FailureStage = | "build" | "launch" @@ -52,6 +81,8 @@ export interface ScenarioIdentity { readonly rows: number; readonly scenarioId: ScenarioId; readonly group: ScenarioGroup; + /** Required only for the controlled visible-window transfer diagnostic pair. */ + readonly dataValidity?: RenderDataValidity; } export interface ValidationObservation { @@ -81,8 +112,61 @@ export interface MergeIndexResourceMetrics { readonly candidatesExamined: number; } +export interface WindowTransferMetrics { + /** Timed paint calls completed by the coordinator. */ + readonly logicalFrames: number; + /** Visible-window reads requested by the coordinator. */ + readonly windowReadRequests: number; + /** Requests that performed a fresh WASM window read and decode. */ + readonly logicalWindowReads: number; + /** Exact copied WASM-to-JS output payload bytes. */ + readonly copiedBytes: number; + /** Exact consuming output-accessor return allocations. */ + readonly outputAllocationEvents: number; + readonly copiedBytesPerLogicalFrame: number; + readonly outputAllocationEventsPerLogicalFrame: number; + readonly copiedBytesPerLogicalRead: number | null; + readonly outputAllocationEventsPerLogicalRead: number | null; +} + +export function createWindowTransferMetrics(input: { + readonly logicalFrames: number; + readonly windowReadRequests: number; + readonly logicalWindowReads: number; + readonly copiedBytes: number; + readonly outputAllocationEvents: number; +}): WindowTransferMetrics { + if ( + !Number.isSafeInteger(input.logicalFrames) || + input.logicalFrames <= 0 || + !Number.isSafeInteger(input.windowReadRequests) || + input.windowReadRequests < 0 || + !Number.isSafeInteger(input.logicalWindowReads) || + input.logicalWindowReads < 0 || + input.logicalWindowReads > input.windowReadRequests || + !Number.isSafeInteger(input.copiedBytes) || + input.copiedBytes < 0 || + !Number.isSafeInteger(input.outputAllocationEvents) || + input.outputAllocationEvents < 0 + ) { + throw new RangeError("invalid visible-window transfer counters"); + } + return { + ...input, + copiedBytesPerLogicalFrame: input.copiedBytes / input.logicalFrames, + outputAllocationEventsPerLogicalFrame: input.outputAllocationEvents / input.logicalFrames, + copiedBytesPerLogicalRead: + input.logicalWindowReads === 0 ? null : input.copiedBytes / input.logicalWindowReads, + outputAllocationEventsPerLogicalRead: + input.logicalWindowReads === 0 + ? null + : input.outputAllocationEvents / input.logicalWindowReads, + }; +} + export interface MeasuredSample extends AggregateSample { readonly index: number; + readonly windowTransfer?: WindowTransferMetrics; } export interface SuccessfulScenario extends ScenarioIdentity { @@ -96,6 +180,7 @@ export interface SuccessfulScenario extends ScenarioIdentity { readonly memory: MemoryDelta; readonly resources?: RenderResourceMetrics; readonly mergeResources?: MergeIndexResourceMetrics; + readonly windowTransfer?: WindowTransferMetrics; } export interface FailedScenario extends ScenarioIdentity { @@ -145,6 +230,8 @@ export interface RenderRunMetadata { readonly orderSeed: number; readonly engineOrder: readonly (readonly EngineId[])[]; readonly launchAttempts: readonly BrowserLaunchAttempt[]; + /** Present only when the controlled window-transfer diagnostic pair is configured. */ + readonly windowTransferScenarioOrder?: readonly (readonly WindowTransferScenarioId[])[]; } export interface RenderRunConfig { @@ -185,7 +272,7 @@ export interface BrowserCombinationResult { } const SCENARIO_GROUPS = new Map( - RENDER_SCENARIOS.map((scenario) => [scenario.id, scenario.group]), + ALL_RENDER_SCENARIOS.map((scenario) => [scenario.id, scenario.group]), ); export function scenarioGroup(scenarioId: ScenarioId): ScenarioGroup { @@ -366,6 +453,53 @@ function parseMergeResources(value: unknown, path: string): MergeIndexResourceMe }; } +function parseWindowTransferMetrics(value: unknown, path: string): WindowTransferMetrics { + const input = record(value, path); + const counters = { + logicalFrames: integer(input.logicalFrames, `${path}.logicalFrames`, 1), + windowReadRequests: integer(input.windowReadRequests, `${path}.windowReadRequests`, 0), + logicalWindowReads: integer(input.logicalWindowReads, `${path}.logicalWindowReads`, 0), + copiedBytes: integer(input.copiedBytes, `${path}.copiedBytes`, 0), + outputAllocationEvents: integer( + input.outputAllocationEvents, + `${path}.outputAllocationEvents`, + 0, + ), + }; + const expected = createWindowTransferMetrics(counters); + const observed = { + copiedBytesPerLogicalFrame: finite( + input.copiedBytesPerLogicalFrame, + `${path}.copiedBytesPerLogicalFrame`, + 0, + ), + outputAllocationEventsPerLogicalFrame: finite( + input.outputAllocationEventsPerLogicalFrame, + `${path}.outputAllocationEventsPerLogicalFrame`, + 0, + ), + copiedBytesPerLogicalRead: nullableFinite( + input.copiedBytesPerLogicalRead, + `${path}.copiedBytesPerLogicalRead`, + ), + outputAllocationEventsPerLogicalRead: nullableFinite( + input.outputAllocationEventsPerLogicalRead, + `${path}.outputAllocationEventsPerLogicalRead`, + ), + }; + for (const field of [ + "copiedBytesPerLogicalFrame", + "outputAllocationEventsPerLogicalFrame", + "copiedBytesPerLogicalRead", + "outputAllocationEventsPerLogicalRead", + ] as const) { + if (observed[field] !== expected[field]) { + throw new TypeError(`${path}.${field} does not match its exact counters`); + } + } + return expected; +} + function parseSample(value: unknown, path: string): MeasuredSample { const input = record(value, path); const durationMs = finite(input.durationMs, `${path}.durationMs`, 0); @@ -380,23 +514,47 @@ function parseSample(value: unknown, path: string): MeasuredSample { durationMs, operationCount, perOperationMs, + ...(input.windowTransfer === undefined + ? {} + : { + windowTransfer: parseWindowTransferMetrics( + input.windowTransfer, + `${path}.windowTransfer`, + ), + }), }; } function parseIdentity(value: Record, path: string): ScenarioIdentity { const scenarioId = enumValue( value.scenarioId, - RENDER_SCENARIOS.map((scenario) => scenario.id), + ALL_RENDER_SCENARIOS.map((scenario) => scenario.id), `${path}.scenarioId`, ); const group = enumValue( value.group, - ["view-scrolling", "editing", "altering", "arrow-keys-navigation", "formatting", "merges"], + ALL_RENDER_SCENARIOS.map((scenario) => scenario.group), `${path}.group`, ); if (group !== scenarioGroup(scenarioId)) { throw new TypeError(`${path}.group does not match scenario ${scenarioId}`); } + const expectedDataValidity = scenarioDataValidity(scenarioId); + const dataValidity = + value.dataValidity === undefined + ? undefined + : enumValue( + value.dataValidity, + ["product-valid", "pixel-data-invalid"], + `${path}.dataValidity`, + ); + if (dataValidity !== expectedDataValidity) { + throw new TypeError( + expectedDataValidity === undefined + ? `${path}.dataValidity is reserved for window-transfer diagnostics` + : `${path}.dataValidity must be ${expectedDataValidity} for ${scenarioId}`, + ); + } return { runId: text(value.runId, `${path}.runId`), round: integer(value.round, `${path}.round`, 1), @@ -404,6 +562,7 @@ function parseIdentity(value: Record, path: string): ScenarioId rows: integer(value.rows, `${path}.rows`, 1), scenarioId, group, + ...(dataValidity === undefined ? {} : { dataValidity }), }; } @@ -464,6 +623,74 @@ export function parseScenarioResult( } const summary = summarizeFinite(rawSamples.map((sample) => sample.perOperationMs)); const operationCount = rawSamples.reduce((total, sample) => total + sample.operationCount, 0); + const isWindowTransferDiagnostic = identity.dataValidity !== undefined; + let windowTransfer: WindowTransferMetrics | undefined; + if (isWindowTransferDiagnostic) { + if (identity.engine !== "sheetwrite") { + throw new TypeError(`${path} window-transfer diagnostics require the sheetwrite engine`); + } + const sampleMetrics = rawSamples.map((sample, index) => { + const metrics = sample.windowTransfer; + if (!metrics) { + throw new TypeError(`${path}.rawSamples[${index}].windowTransfer is required`); + } + if ( + metrics.logicalFrames !== sample.operationCount || + metrics.windowReadRequests !== metrics.logicalFrames + ) { + throw new TypeError( + `${path}.rawSamples[${index}].windowTransfer must account for every timed frame`, + ); + } + if (identity.dataValidity === "product-valid") { + if ( + metrics.logicalWindowReads !== metrics.logicalFrames || + metrics.copiedBytes <= 0 || + metrics.outputAllocationEvents <= 0 + ) { + throw new TypeError( + `${path}.rawSamples[${index}].windowTransfer is missing baseline read counters`, + ); + } + } else if ( + metrics.logicalWindowReads !== 0 || + metrics.copiedBytes !== 0 || + metrics.outputAllocationEvents !== 0 + ) { + throw new TypeError( + `${path}.rawSamples[${index}].windowTransfer upper bound performed a fresh read`, + ); + } + return metrics; + }); + const expectedWindowTransfer = createWindowTransferMetrics({ + logicalFrames: sampleMetrics.reduce((sum, metrics) => sum + metrics.logicalFrames, 0), + windowReadRequests: sampleMetrics.reduce( + (sum, metrics) => sum + metrics.windowReadRequests, + 0, + ), + logicalWindowReads: sampleMetrics.reduce( + (sum, metrics) => sum + metrics.logicalWindowReads, + 0, + ), + copiedBytes: sampleMetrics.reduce((sum, metrics) => sum + metrics.copiedBytes, 0), + outputAllocationEvents: sampleMetrics.reduce( + (sum, metrics) => sum + metrics.outputAllocationEvents, + 0, + ), + }); + windowTransfer = parseWindowTransferMetrics(input.windowTransfer, `${path}.windowTransfer`); + for (const field of Object.keys(expectedWindowTransfer) as (keyof WindowTransferMetrics)[]) { + if (windowTransfer[field] !== expectedWindowTransfer[field]) { + throw new TypeError(`${path}.windowTransfer does not match its raw samples`); + } + } + } else if ( + input.windowTransfer !== undefined || + rawSamples.some((sample) => sample.windowTransfer !== undefined) + ) { + throw new TypeError(`${path}.windowTransfer is reserved for the controlled diagnostic pair`); + } const medianMs = finite(input.medianMs, `${path}.medianMs`, 0); const p95Ms = finite(input.p95Ms, `${path}.p95Ms`, 0); const madMs = finite(input.madMs, `${path}.madMs`, 0); @@ -493,6 +720,7 @@ export function parseScenarioResult( : { mergeResources: parseMergeResources(input.mergeResources, `${path}.mergeResources`), }), + ...(windowTransfer === undefined ? {} : { windowTransfer }), }; } @@ -526,6 +754,19 @@ function parseMetadata(value: unknown, path: string): RenderRunMetadata { enumValue(engine, ENGINE_IDS, `${path}.engineOrder[${round}][${index}]`), ), ); + const windowTransferScenarioOrder = + input.windowTransferScenarioOrder === undefined + ? undefined + : array(input.windowTransferScenarioOrder, `${path}.windowTransferScenarioOrder`).map( + (entry, round) => + array(entry, `${path}.windowTransferScenarioOrder[${round}]`).map((scenario, index) => + enumValue( + scenario, + WINDOW_TRANSFER_SCENARIO_IDS, + `${path}.windowTransferScenarioOrder[${round}][${index}]`, + ), + ), + ); const metadata: RenderRunMetadata = { commit: text(input.commit, `${path}.commit`), dirty: bool(input.dirty, `${path}.dirty`), @@ -564,6 +805,7 @@ function parseMetadata(value: unknown, path: string): RenderRunMetadata { launchAttempts: array(input.launchAttempts, `${path}.launchAttempts`).map((entry, index) => parseLaunchAttempt(entry, `${path}.launchAttempts[${index}]`), ), + ...(windowTransferScenarioOrder === undefined ? {} : { windowTransferScenarioOrder }), }; if (!Number.isFinite(Date.parse(metadata.timestamp))) { throw new TypeError(`${path}.timestamp must be an ISO timestamp`); @@ -585,7 +827,7 @@ function parseConfig(value: unknown, path: string): RenderRunConfig { const scenarios = array(input.scenarios, `${path}.scenarios`).map((scenario, index) => enumValue( scenario, - RENDER_SCENARIOS.map((entry) => entry.id), + ALL_RENDER_SCENARIOS.map((entry) => entry.id), `${path}.scenarios[${index}]`, ), ); @@ -619,6 +861,74 @@ function equalStringArrays(left: readonly string[], right: readonly string[]): b return left.length === right.length && left.every((value, index) => value === right[index]); } +export interface WindowTransferComparison { + readonly rows: number; + readonly baselineRepetitionMediansMs: readonly number[]; + readonly upperBoundRepetitionMediansMs: readonly number[]; + readonly baselineMedianMs: number; + readonly upperBoundMedianMs: number; + readonly estimatedWindowTransferCostMs: number; + readonly crossVariantSpreadMs: number; + readonly maximumWithinVariantSpreadMs: number; + /** True only when the cross-variant effect exceeds both repetition-median spreads. */ + readonly resolved: boolean; +} + +export function summarizeWindowTransferComparisons( + artifact: Pick, +): WindowTransferComparison[] { + if ( + !WINDOW_TRANSFER_SCENARIO_IDS.every((scenario) => artifact.config.scenarios.includes(scenario)) + ) { + return []; + } + return artifact.config.rows.map((rows) => { + const repetitionMedians = (scenarioId: WindowTransferScenarioId): number[] => { + const matching = artifact.results + .filter( + (result): result is SuccessfulScenario => + result.rows === rows && + result.engine === "sheetwrite" && + result.scenarioId === scenarioId && + result.status === "success", + ) + .sort((left, right) => left.round - right.round); + if ( + matching.length !== artifact.metadata.rounds || + matching.some((result, index) => result.round !== index + 1) + ) { + throw new TypeError( + `window-transfer comparison for ${rows} rows requires one successful result per repetition`, + ); + } + return matching.map((result) => result.medianMs); + }; + const baselineRepetitionMediansMs = repetitionMedians(WINDOW_TRANSFER_BASELINE_SCENARIO_ID); + const upperBoundRepetitionMediansMs = repetitionMedians( + WINDOW_TRANSFER_UPPER_BOUND_SCENARIO_ID, + ); + const baselineMedianMs = summarizeFinite(baselineRepetitionMediansMs).median; + const upperBoundMedianMs = summarizeFinite(upperBoundRepetitionMediansMs).median; + const maximumWithinVariantSpreadMs = Math.max( + Math.max(...baselineRepetitionMediansMs) - Math.min(...baselineRepetitionMediansMs), + Math.max(...upperBoundRepetitionMediansMs) - Math.min(...upperBoundRepetitionMediansMs), + ); + const estimatedWindowTransferCostMs = baselineMedianMs - upperBoundMedianMs; + const crossVariantSpreadMs = Math.abs(estimatedWindowTransferCostMs); + return { + rows, + baselineRepetitionMediansMs, + upperBoundRepetitionMediansMs, + baselineMedianMs, + upperBoundMedianMs, + estimatedWindowTransferCostMs, + crossVariantSpreadMs, + maximumWithinVariantSpreadMs, + resolved: crossVariantSpreadMs > maximumWithinVariantSpreadMs, + }; + }); +} + export function parseRenderArtifact( value: unknown, options: ParseRenderOptions = {}, @@ -642,6 +952,46 @@ export function parseRenderArtifact( } } const config = parseConfig(input.config, "artifact.config"); + const configuredWindowTransferScenarios = config.scenarios.filter((scenario) => + WINDOW_TRANSFER_SCENARIO_IDS.includes(scenario as WindowTransferScenarioId), + ); + if (configuredWindowTransferScenarios.length === 0) { + if (metadata.windowTransferScenarioOrder !== undefined) { + throw new TypeError( + "artifact.metadata.windowTransferScenarioOrder is reserved for the diagnostic pair", + ); + } + } else { + if ( + configuredWindowTransferScenarios.length !== WINDOW_TRANSFER_SCENARIO_IDS.length || + !WINDOW_TRANSFER_SCENARIO_IDS.every((scenario) => + configuredWindowTransferScenarios.includes(scenario), + ) + ) { + throw new TypeError("window-transfer baseline and upper-bound scenarios must run together"); + } + if (config.engines.length !== 1 || config.engines[0] !== "sheetwrite") { + throw new TypeError("window-transfer diagnostics support only the sheetwrite engine"); + } + const expectedOrder = counterbalancedOrder( + WINDOW_TRANSFER_SCENARIO_IDS, + metadata.rounds, + WINDOW_TRANSFER_ORDER_SEED, + ); + if ( + metadata.windowTransferScenarioOrder === undefined || + metadata.windowTransferScenarioOrder.length !== expectedOrder.length || + metadata.windowTransferScenarioOrder.some( + (order, round) => + order.length !== expectedOrder[round]!.length || + order.some((scenario, index) => scenario !== expectedOrder[round]![index]), + ) + ) { + throw new TypeError( + "artifact.metadata.windowTransferScenarioOrder is not the required counterbalance", + ); + } + } for (const engine of config.engines) { for (const order of metadata.engineOrder) { if (!order.includes(engine) || order.length !== config.engines.length) { @@ -724,7 +1074,7 @@ export function parseRenderArtifact( if (!completeness.complete) { throw new TypeError("render artifact matrix is incomplete or duplicated"); } - return { + const artifact: RenderBenchmarkArtifact = { protocolVersion: RENDER_PROTOCOL_VERSION, runId, metadata, @@ -733,6 +1083,10 @@ export function parseRenderArtifact( completeness, reproductionCommands: stringArray(input.reproductionCommands, "artifact.reproductionCommands"), }; + if (completeness.successful && configuredWindowTransferScenarios.length > 0) { + summarizeWindowTransferComparisons(artifact); + } + return artifact; } export function parseRenderArtifactJson( @@ -818,7 +1172,12 @@ export function renderBenchmarkMarkdown(value: RenderBenchmarkArtifact): string if (result.status === "failed") { return `**FAILED (${result.stage})** — ${escapeMarkdown(result.errorClass)}: ${escapeMarkdown(result.message)}`; } - return `median ${formatMs(result.medianMs)} ms; p95 ${formatMs(result.p95Ms)}; MAD ${formatMs(result.madMs)}; ${result.rawSamples.length} samples / ${result.operationCount} ops`; + const transfer = result.windowTransfer; + const transferEvidence = + transfer === undefined + ? "" + : `; validity ${result.dataValidity}; copied/frame ${transfer.copiedBytesPerLogicalFrame.toFixed(3)} B; allocations/frame ${transfer.outputAllocationEventsPerLogicalFrame.toFixed(3)}; copied/read ${transfer.copiedBytesPerLogicalRead === null ? "n/a" : `${transfer.copiedBytesPerLogicalRead.toFixed(3)} B`}; allocations/read ${transfer.outputAllocationEventsPerLogicalRead === null ? "n/a" : transfer.outputAllocationEventsPerLogicalRead.toFixed(3)}`; + return `median ${formatMs(result.medianMs)} ms; p95 ${formatMs(result.p95Ms)}; MAD ${formatMs(result.madMs)}; ${result.rawSamples.length} samples / ${result.operationCount} ops${transferEvidence}`; }); const identityLabel = `r${round}-${rows}-${scenarioId}`; lines.push( @@ -828,6 +1187,30 @@ export function renderBenchmarkMarkdown(value: RenderBenchmarkArtifact): string } } + if ( + artifact.completeness.successful && + WINDOW_TRANSFER_SCENARIO_IDS.every((scenario) => artifact.config.scenarios.includes(scenario)) + ) { + lines.push( + "", + "## Visible-window transfer diagnostic", + "", + "> The reuse upper bound deliberately paints a prior decoded view. Its pixels/data are invalid and it is not a product-valid rendering result.", + "", + `Counterbalanced scenario order: ${artifact.metadata.windowTransferScenarioOrder + ?.map((order, index) => `round ${index + 1}: ${order.join(" → ")}`) + .join("; ")}`, + "", + "| rows | baseline repetition medians | upper-bound repetition medians | estimated transfer cost | cross-variant spread | maximum within-variant spread | resolution |", + "|---:|:--|:--|---:|---:|---:|:--|", + ); + for (const comparison of summarizeWindowTransferComparisons(artifact)) { + lines.push( + `| ${comparison.rows.toLocaleString("en-US")} | ${comparison.baselineRepetitionMediansMs.map(formatMs).join(", ")} ms | ${comparison.upperBoundRepetitionMediansMs.map(formatMs).join(", ")} ms | ${formatMs(comparison.estimatedWindowTransferCostMs)} ms | ${formatMs(comparison.crossVariantSpreadMs)} ms | ${formatMs(comparison.maximumWithinVariantSpreadMs)} ms | ${comparison.resolved ? "resolved" : "unresolved"} |`, + ); + } + } + lines.push("", "## Reproduce", ""); for (const command of artifact.reproductionCommands) lines.push(`- \`${command}\``); lines.push( diff --git a/bench/src/render-scenarios.ts b/bench/src/render-scenarios.ts index e7afbb03..728c32f1 100644 --- a/bench/src/render-scenarios.ts +++ b/bench/src/render-scenarios.ts @@ -1,23 +1,33 @@ +import { OffsetIndex } from "../../packages/core/src/fenwick.js"; import type { ColumnarDataset } from "./dataset.js"; import { logicalValueChecksum } from "./dataset.js"; import { + ALL_RENDER_SCENARIOS, + createWindowTransferMetrics, type FailedScenario, type MeasuredSample, type MemoryDelta, type MergeIndexResourceMetrics, - RENDER_SCENARIOS, type RenderResourceMetrics, type ScenarioId, type ScenarioIdentity, type ScenarioResult, + scenarioDataValidity, scenarioGroup, type ValidationObservation, + WINDOW_TRANSFER_BASELINE_SCENARIO_ID, + WINDOW_TRANSFER_UPPER_BOUND_SCENARIO_ID, + type WindowTransferMetrics, } from "./render-protocol.js"; import { summarizeFinite } from "./stats.js"; const SCROLL_STEP = 50; const EDIT_VALUE = "Benchmark edit"; const ALTER_COUNT = 5; +const FRACTIONAL_SCROLL_STEP = 1; +const LONG_SCROLL_STEP_PX = 448; +const LONG_SCROLL_ROW_STRIDE = 16; +const LONG_SCROLL_MAX_STEPS = 1_100; export interface CellSelection { readonly row: number; @@ -30,6 +40,40 @@ export interface ScrollObservation { readonly maximumTop: number; readonly maximumLeft: number; readonly firstVisibleRow: number; + readonly devicePixelRatio: number; +} +export interface GeometryObservation { + readonly count: number; + readonly backingStoreBytes: number; + readonly totalHeight: number; + readonly middleRow: number; + readonly middleTop: number; + readonly lastRow: number; + readonly lastTop: number; +} +export function measureUnresizedMillionRowGeometry(): GeometryObservation { + const index = new OffsetIndex(1_000_000, 28); + const middle = index.rowAtOffset(14_000_005); + const last = index.rowAtOffset(index.totalHeight - 1); + return { + count: index.count, + backingStoreBytes: index.backingStoreBytes, + totalHeight: index.totalHeight, + middleRow: middle.row, + middleTop: middle.top, + lastRow: last.row, + lastTop: last.top, + }; +} + +export type WindowReadDiagnosticMode = "baseline" | "reuse-decoded-view-upper-bound"; + +export interface WindowTransferCounters { + readonly logicalFrames: number; + readonly windowReadRequests: number; + readonly logicalWindowReads: number; + readonly copiedBytes: number; + readonly outputAllocationEvents: number; } /** Repository-owned structural surface shared by both browser engines. */ @@ -58,10 +102,18 @@ export interface RenderBenchAdapter { repaint(): void; formattedSentinels(): readonly [string, string]; formatResources(): RenderResourceMetrics; + installFormulaDense(): void; + clearFormulaDense(): void; + installTextHeavy(rowCount: number): void; + clearTextHeavy(): void; + measureUnresizedMillionRowGeometry(): GeometryObservation; installMergeHeavy(): void; clearMergeHeavy(): void; resetMergeResources(): void; mergeResources(): MergeIndexResourceMetrics; + setWindowReadDiagnosticMode(mode: WindowReadDiagnosticMode): void; + resetWindowTransferCounters(): void; + windowTransferCounters(): WindowTransferCounters; destroy(): void; } @@ -79,6 +131,8 @@ export class ScenarioValidationError extends Error { } interface ScenarioActions { + readonly setup?: () => void; + readonly measureWindowTransfer?: boolean; readonly prepare: () => void; readonly action: () => void; readonly cleanup: () => void; @@ -210,6 +264,208 @@ function scenarioActions( const lastRow = dataset.rowCount - 1; const lastCol = adapter.colCount - 1; + if ( + scenarioId === WINDOW_TRANSFER_BASELINE_SCENARIO_ID || + scenarioId === WINDOW_TRANSFER_UPPER_BOUND_SCENARIO_ID + ) { + const upperBound = scenarioId === WINDOW_TRANSFER_UPPER_BOUND_SCENARIO_ID; + const prepare = (): void => adapter.prepareScroll("top", false); + const action = (): void => adapter.scrollBy("top", SCROLL_STEP); + return { + setup: () => { + adapter.setWindowReadDiagnosticMode("baseline"); + prepare(); + adapter.setWindowReadDiagnosticMode( + upperBound ? "reuse-decoded-view-upper-bound" : "baseline", + ); + }, + measureWindowTransfer: true, + prepare, + action, + cleanup: () => {}, + validateEffect: (observations) => { + try { + prepare(); + adapter.resetWindowTransferCounters(); + action(); + const counters = adapter.windowTransferCounters(); + checkpoint( + observations, + `${scenarioId} completes one coordinator paint`, + 1, + counters.logicalFrames, + ); + checkpoint( + observations, + `${scenarioId} requests one visible window`, + 1, + counters.windowReadRequests, + ); + if (upperBound) { + checkpoint( + observations, + `${scenarioId} deliberately reuses pixel-data-invalid decoded data`, + JSON.stringify({ + logicalWindowReads: 0, + copiedBytes: 0, + outputAllocationEvents: 0, + }), + JSON.stringify({ + logicalWindowReads: counters.logicalWindowReads, + copiedBytes: counters.copiedBytes, + outputAllocationEvents: counters.outputAllocationEvents, + }), + ); + } else { + checkpoint( + observations, + `${scenarioId} accounts for a fresh decoded window`, + true, + counters.logicalWindowReads === 1 && + counters.copiedBytes > 0 && + counters.outputAllocationEvents > 0, + ); + } + } finally { + adapter.setWindowReadDiagnosticMode("baseline"); + } + }, + }; + } + + if (scenarioId === "formula-dense.paint") { + const prepare = (): void => adapter.prepareScroll("top", false); + const action = (): void => adapter.repaint(); + return { + setup: () => adapter.installFormulaDense(), + prepare, + action, + cleanup: () => {}, + validateEffect: (observations) => { + try { + prepare(); + action(); + checkpoint( + observations, + "formula-dense.paint resolves first visible formula", + Number(dataset.id[1]) + 1, + adapter.cellValue(1, 1), + ); + checkpoint( + observations, + "formula-dense.paint resolves last visible formula column", + Number(dataset.id[1]) + 4, + adapter.cellValue(1, 4), + ); + } finally { + adapter.clearFormulaDense(); + } + }, + }; + } + + if (scenarioId === "text-heavy.long-scroll") { + const steps = Math.min( + LONG_SCROLL_MAX_STEPS, + Math.max(1, Math.floor(dataset.rowCount / LONG_SCROLL_ROW_STRIDE) - 1), + ); + const installedRows = Math.min(dataset.rowCount - 1, steps * LONG_SCROLL_ROW_STRIDE + 64); + const prepare = (): void => adapter.prepareScroll("top", false); + const action = (): void => { + for (let step = 0; step < steps; step++) { + adapter.scrollBy("top", LONG_SCROLL_STEP_PX); + } + }; + return { + setup: () => adapter.installTextHeavy(installedRows), + prepare, + action, + cleanup: () => {}, + validateEffect: (observations) => { + try { + prepare(); + const before = adapter.scrollObservation(); + action(); + const after = adapter.scrollObservation(); + checkpoint( + observations, + "text-heavy.long-scroll advances through multiple row windows", + true, + after.firstVisibleRow > before.firstVisibleRow, + ); + const observedRow = Math.min(installedRows, Math.max(1, after.firstVisibleRow)); + checkpoint( + observations, + "text-heavy.long-scroll retains unique long text", + true, + String(adapter.cellValue(observedRow, 2)).startsWith("diagnostic-long-"), + ); + } finally { + adapter.clearTextHeavy(); + } + }, + }; + } + + if (scenarioId === "scroll-fractional.same-window") { + const prepare = (): void => adapter.prepareScroll("top", false); + const action = (): void => adapter.scrollBy("top", FRACTIONAL_SCROLL_STEP); + return { + prepare, + action, + cleanup: () => {}, + validateEffect: (observations) => { + prepare(); + const before = adapter.scrollObservation(); + action(); + const after = adapter.scrollObservation(); + const deviceDelta = (after.top - before.top) * after.devicePixelRatio; + checkpoint( + observations, + "scroll-fractional.same-window uses a fractional device-pixel delta", + true, + after.top === Math.min(before.maximumTop, before.top + FRACTIONAL_SCROLL_STEP) && + !Number.isInteger(deviceDelta), + ); + checkpoint( + observations, + "scroll-fractional.same-window keeps the logical row window", + before.firstVisibleRow, + after.firstVisibleRow, + ); + }, + }; + } + + if (scenarioId === "geometry-unresized.1m") { + let observed: GeometryObservation | undefined; + const action = (): void => { + observed = adapter.measureUnresizedMillionRowGeometry(); + }; + return { + prepare: () => {}, + action, + cleanup: () => {}, + validateEffect: (observations) => { + action(); + checkpoint( + observations, + "geometry-unresized.1m builds exact uniform geometry", + JSON.stringify({ + count: 1_000_000, + backingStoreBytes: 0, + totalHeight: 28_000_000, + middleRow: 500_000, + middleTop: 14_000_000, + lastRow: 999_999, + lastTop: 27_999_972, + }), + JSON.stringify(observed), + ); + }, + }; + } + if (scenarioId === "formatted-paint.top-left") { const originalDate = dataset.date[0]!; const originalAmount = dataset.amount[0]!; @@ -529,11 +785,23 @@ function scenarioActions( }; } -function aggregateSample(actions: ScenarioActions, minimumDurationMs: number): MeasuredSample { +function aggregateSample( + adapter: RenderBenchAdapter, + actions: ScenarioActions, + minimumDurationMs: number, +): MeasuredSample { let durationMs = 0; let operationCount = 0; + const transferCounters = { + logicalFrames: 0, + windowReadRequests: 0, + logicalWindowReads: 0, + copiedBytes: 0, + outputAllocationEvents: 0, + }; do { actions.prepare(); + if (actions.measureWindowTransfer) adapter.resetWindowTransferCounters(); const started = performance.now(); let operationError: unknown; try { @@ -542,6 +810,18 @@ function aggregateSample(actions: ScenarioActions, minimumDurationMs: number): M operationError = error; } const elapsed = performance.now() - started; + if (actions.measureWindowTransfer && operationError === undefined) { + try { + const observed = adapter.windowTransferCounters(); + transferCounters.logicalFrames += observed.logicalFrames; + transferCounters.windowReadRequests += observed.windowReadRequests; + transferCounters.logicalWindowReads += observed.logicalWindowReads; + transferCounters.copiedBytes += observed.copiedBytes; + transferCounters.outputAllocationEvents += observed.outputAllocationEvents; + } catch (error) { + operationError = error; + } + } try { actions.cleanup(); } catch (cleanupError) { @@ -565,6 +845,9 @@ function aggregateSample(actions: ScenarioActions, minimumDurationMs: number): M durationMs, operationCount, perOperationMs: durationMs / operationCount, + ...(actions.measureWindowTransfer + ? { windowTransfer: createWindowTransferMetrics(transferCounters) } + : {}), }; } @@ -599,9 +882,10 @@ export function runRenderScenario( scenarioId: ScenarioId, options: ScenarioRunOptions, ): ScenarioResult { - if (!RENDER_SCENARIOS.some((scenario) => scenario.id === scenarioId)) { + if (!ALL_RENDER_SCENARIOS.some((scenario) => scenario.id === scenarioId)) { throw new RangeError(`unknown render scenario: ${scenarioId}`); } + const dataValidity = scenarioDataValidity(scenarioId); const identity: ScenarioIdentity = { runId: options.runId, round: options.round, @@ -609,6 +893,7 @@ export function runRenderScenario( rows: dataset.rowCount, scenarioId, group: scenarioGroup(scenarioId), + ...(dataValidity === undefined ? {} : { dataValidity }), }; const actions = scenarioActions(scenarioId, adapter, dataset); const validation: ValidationObservation[] = []; @@ -619,15 +904,19 @@ export function runRenderScenario( try { options.onStage?.("validate"); validateCanonicalState(adapter, dataset, validation); + actions.setup?.(); stage = "warmup"; options.onStage?.("warmup"); for (let index = 0; index < options.warmupSamples; index++) { - aggregateSample(actions, options.minimumSampleDurationMs); + aggregateSample(adapter, actions, options.minimumSampleDurationMs); } stage = "measure"; options.onStage?.("measure"); for (let index = 0; index < options.measuredSamples; index++) { - rawSamples.push({ ...aggregateSample(actions, options.minimumSampleDurationMs), index }); + rawSamples.push({ + ...aggregateSample(adapter, actions, options.minimumSampleDurationMs), + index, + }); } stage = "validate"; options.onStage?.("validate"); @@ -635,6 +924,25 @@ export function runRenderScenario( validateCanonicalState(adapter, dataset, validation); const afterBytes = usedJsHeapBytes(); const summary = summarizeFinite(rawSamples.map((sample) => sample.perOperationMs)); + let windowTransfer: WindowTransferMetrics | undefined; + if (actions.measureWindowTransfer) { + const metrics = rawSamples.map((sample) => { + if (!sample.windowTransfer) { + throw new ScenarioValidationError("window-transfer sample counters are missing"); + } + return sample.windowTransfer; + }); + windowTransfer = createWindowTransferMetrics({ + logicalFrames: metrics.reduce((sum, entry) => sum + entry.logicalFrames, 0), + windowReadRequests: metrics.reduce((sum, entry) => sum + entry.windowReadRequests, 0), + logicalWindowReads: metrics.reduce((sum, entry) => sum + entry.logicalWindowReads, 0), + copiedBytes: metrics.reduce((sum, entry) => sum + entry.copiedBytes, 0), + outputAllocationEvents: metrics.reduce( + (sum, entry) => sum + entry.outputAllocationEvents, + 0, + ), + }); + } return { ...identity, status: "success", @@ -647,6 +955,7 @@ export function runRenderScenario( memory: memoryDelta(beforeBytes, afterBytes), resources: adapter.formatResources(), mergeResources: adapter.mergeResources(), + ...(windowTransfer === undefined ? {} : { windowTransfer }), }; } catch (error) { return failedScenario( diff --git a/bench/src/wasm-profile-matrix.ts b/bench/src/wasm-profile-matrix.ts new file mode 100644 index 00000000..23fe51e1 --- /dev/null +++ b/bench/src/wasm-profile-matrix.ts @@ -0,0 +1,483 @@ +export const WASM_PROFILE_MATRIX_SCHEMA_VERSION = 1 as const; +export const WASM_PROFILE_MATRIX_PROTOCOL = "wasm-post-link-profile-matrix-v1" as const; +export const WASM_OPT_PROFILES = ["-O3", "-Os", "-Oz"] as const; +export type WasmOptProfile = (typeof WASM_OPT_PROFILES)[number]; + +const SHA256 = /^[0-9a-f]{64}$/u; +const COMMIT = /^[0-9a-f]{40}$/u; +const STORE_ONLY_COMMAND = [ + "cargo", + "check", + "--target", + "wasm32-unknown-unknown", + "--no-default-features", + "--message-format=json", +] as const; +const BLOCKER_IDS = ["formula-entry-ast", "dependency-index"] as const; + +type GateStatus = "passed" | "failed"; + +export interface MatrixGateEvidence { + readonly status: GateStatus; + readonly commands: readonly (readonly string[])[]; + readonly exitCode: number; + readonly artifactPath: string; + readonly evidenceSha256: string; + readonly wasmSha256: string; + readonly commit: string; + readonly runnerFingerprint: string; +} + +export interface WasmProfileVariant { + readonly wasmOpt: WasmOptProfile; + readonly inputWasmSha256: string; + readonly artifact: { + readonly rawBytes: number; + readonly gzipBytes: number; + readonly brotliBytes: number; + readonly sha256: string; + }; + readonly formulaGate: MatrixGateEvidence; + readonly renderGate: MatrixGateEvidence; +} + +export interface StoreOnlyBlocker { + readonly id: (typeof BLOCKER_IDS)[number]; + readonly kind: "dependency-cycle"; + readonly owner: string; + readonly dependency: string; + readonly reason: string; +} + +export interface StoreOnlyProbe { + readonly provenance: { + readonly commit: string; + readonly dirty: false; + readonly timestamp: string; + }; + readonly command: readonly string[]; + readonly outcome: "compiled" | "blocked" | "failed"; + readonly exitCode: number; + readonly stdoutSha256: string; + readonly stderrSha256: string; + readonly blockers: readonly StoreOnlyBlocker[]; +} + +export interface WasmProfileMatrixEvidence { + readonly schemaVersion: typeof WASM_PROFILE_MATRIX_SCHEMA_VERSION; + readonly protocol: typeof WASM_PROFILE_MATRIX_PROTOCOL; + readonly provenance: { + readonly commit: string; + readonly dirty: false; + readonly timestamp: string; + readonly host: string; + readonly rustc: string; + readonly cargo: string; + readonly wasmPack: string; + readonly wasmOptVersion: string; + readonly wasmOptSha256: string; + readonly bun: string; + }; + readonly rustProfile: { + readonly optLevel: 3; + readonly lto: "fat"; + readonly codegenUnits: 1; + }; + readonly postLink: { + readonly inputWasmSha256: string; + readonly compression: { + readonly gzipLevel: 9; + readonly brotliQuality: 11; + readonly brotliMode: "generic"; + }; + }; + readonly decisionPolicy: { + readonly sizeMetric: "brotliBytes"; + readonly requireFormulaGate: true; + readonly requireRenderGate: true; + }; + readonly captureOrder: { + readonly formula: readonly WasmOptProfile[]; + readonly render: readonly WasmOptProfile[]; + }; + readonly variants: readonly WasmProfileVariant[]; + readonly storeOnlyProbe: StoreOnlyProbe; +} + +export type WasmProfileDecision = + | { + readonly status: "recommended"; + readonly wasmOpt: WasmOptProfile; + readonly baseline: "-O3"; + readonly savedBytes: { readonly raw: number; readonly gzip: number; readonly brotli: number }; + } + | { readonly status: "blocked"; readonly failures: readonly string[] }; + +function record(value: unknown, label: string): Record { + if (typeof value !== "object" || value === null || Array.isArray(value)) { + throw new Error(`${label} must be an object`); + } + return value as Record; +} + +function string(value: unknown, label: string): string { + if (typeof value !== "string" || value.length === 0) throw new Error(`${label} must be a string`); + return value; +} + +function integer(value: unknown, label: string, minimum = 0): number { + if (!Number.isInteger(value) || (value as number) < minimum) { + throw new Error(`${label} must be an integer >= ${minimum}`); + } + return value as number; +} + +function literal( + value: unknown, + expected: T, + label: string, +): T { + if (value !== expected) throw new Error(`${label} must be ${JSON.stringify(expected)}`); + return expected; +} + +function hash(value: unknown, label: string): string { + const parsed = string(value, label); + if (!SHA256.test(parsed)) throw new Error(`${label} must be a lowercase SHA-256`); + return parsed; +} + +function commit(value: unknown, label: string): string { + const parsed = string(value, label); + if (!COMMIT.test(parsed)) throw new Error(`${label} must be a full lowercase commit hash`); + return parsed; +} + +function stringArray(value: unknown, label: string): string[] { + if (!Array.isArray(value) || value.length === 0) + throw new Error(`${label} must be a non-empty array`); + return value.map((entry, index) => string(entry, `${label}[${index}]`)); +} + +function canonicalTimestamp(value: unknown, label: string): string { + const parsed = string(value, label); + const milliseconds = Date.parse(parsed); + if (!Number.isFinite(milliseconds) || new Date(milliseconds).toISOString() !== parsed) { + throw new Error(`${label} must be a canonical ISO timestamp`); + } + return parsed; +} + +export function assertCleanMatrixCapture(status: string): void { + if (status.trim().length > 0) { + throw new Error("controlled matrix capture requires a completely clean tree"); + } +} + +function profile(value: unknown, label: string): WasmOptProfile { + if (!WASM_OPT_PROFILES.includes(value as WasmOptProfile)) { + throw new Error(`${label} must be one of ${WASM_OPT_PROFILES.join(", ")}`); + } + return value as WasmOptProfile; +} + +function exactProfiles(value: unknown, label: string): WasmOptProfile[] { + if (!Array.isArray(value)) throw new Error(`${label} must be an array`); + const parsed = value.map((entry, index) => profile(entry, `${label}[${index}]`)); + if ( + parsed.length !== WASM_OPT_PROFILES.length || + new Set(parsed).size !== WASM_OPT_PROFILES.length + ) { + throw new Error(`${label} must contain -O3, -Os, and -Oz exactly once`); + } + return parsed; +} + +function commandList(value: unknown, label: string): string[][] { + if (!Array.isArray(value) || value.length === 0) { + throw new Error(`${label} must be a non-empty array`); + } + return value.map((entry, index) => stringArray(entry, `${label}[${index}]`)); +} + +function parseGate( + value: unknown, + label: string, + kind: "formula" | "render", + expectedCommit: string, + expectedWasmSha256: string, +): MatrixGateEvidence { + const gate = record(value, label); + const status = gate.status; + if (status !== "passed" && status !== "failed") { + throw new Error(`${label}.status must be passed or failed`); + } + const exitCode = integer(gate.exitCode, `${label}.exitCode`); + if ((status === "passed") !== (exitCode === 0)) { + throw new Error(`${label} status and exitCode disagree`); + } + const parsed: MatrixGateEvidence = { + status, + commands: commandList(gate.commands, `${label}.commands`), + exitCode, + artifactPath: string(gate.artifactPath, `${label}.artifactPath`), + evidenceSha256: hash(gate.evidenceSha256, `${label}.evidenceSha256`), + wasmSha256: hash(gate.wasmSha256, `${label}.wasmSha256`), + commit: commit(gate.commit, `${label}.commit`), + runnerFingerprint: hash(gate.runnerFingerprint, `${label}.runnerFingerprint`), + }; + const runsFormula = parsed.commands.some( + (command) => + command.includes("bench:formula") || + command.some((token) => token.endsWith("/formula-bench.ts") || token === "formula-bench.ts"), + ); + const runsRender = parsed.commands.some( + (command) => + command.includes("bench:render") || + command.some((token) => token.endsWith("/render-driver.ts") || token === "render-driver.ts"), + ); + const runsRenderCheck = parsed.commands.some( + (command) => + command.includes("bench:check") || + command.some((token) => token.endsWith("/check.ts") || token === "check.ts"), + ); + const commandLines = parsed.commands.map((command) => command.join(" ")); + if (kind === "formula") { + if ( + !runsFormula || + commandLines.some((command) => /(?:--preliminary|--smoke|bench:formula:smoke)/u.test(command)) + ) { + throw new Error(`${label} must run the gating formula benchmark`); + } + } else if ( + !runsRender || + !runsRenderCheck || + commandLines.some((command) => + /(?:--report-only|--smoke|--scenario-set\s+diagnostic|bench:render:(?:smoke|diagnostic))/u.test( + command, + ), + ) + ) { + throw new Error(`${label} must run the render capture and fail-closed check`); + } + if (parsed.commit !== expectedCommit) throw new Error(`${label} commit is incomparable`); + if (parsed.wasmSha256 !== expectedWasmSha256) { + throw new Error(`${label} was not run against its variant artifact`); + } + return parsed; +} + +function parseStoreOnlyProbe(value: unknown, expectedCommit: string): StoreOnlyProbe { + const probe = record(value, "storeOnlyProbe"); + const provenanceRaw = record(probe.provenance, "storeOnlyProbe.provenance"); + const provenance = { + commit: commit(provenanceRaw.commit, "storeOnlyProbe.provenance.commit"), + dirty: literal(provenanceRaw.dirty, false, "storeOnlyProbe.provenance.dirty"), + timestamp: canonicalTimestamp(provenanceRaw.timestamp, "storeOnlyProbe.provenance.timestamp"), + } as const; + if (provenance.commit !== expectedCommit) { + throw new Error("storeOnlyProbe commit does not match matrix provenance"); + } + const command = stringArray(probe.command, "storeOnlyProbe.command"); + if (JSON.stringify(command) !== JSON.stringify(STORE_ONLY_COMMAND)) { + throw new Error("storeOnlyProbe.command must be the controlled --no-default-features check"); + } + const outcome = probe.outcome; + if (outcome !== "compiled" && outcome !== "blocked" && outcome !== "failed") { + throw new Error("storeOnlyProbe.outcome must be compiled, blocked, or failed"); + } + const exitCode = integer(probe.exitCode, "storeOnlyProbe.exitCode"); + if ((outcome === "compiled") !== (exitCode === 0)) { + throw new Error("storeOnlyProbe outcome and exitCode disagree"); + } + if (!Array.isArray(probe.blockers)) throw new Error("storeOnlyProbe.blockers must be an array"); + const blockers = probe.blockers.map((raw, index): StoreOnlyBlocker => { + const blocker = record(raw, `storeOnlyProbe.blockers[${index}]`); + const id = blocker.id; + if (!BLOCKER_IDS.includes(id as StoreOnlyBlocker["id"])) { + throw new Error(`storeOnlyProbe.blockers[${index}].id is unknown`); + } + return { + id: id as StoreOnlyBlocker["id"], + kind: literal(blocker.kind, "dependency-cycle", `storeOnlyProbe.blockers[${index}].kind`), + owner: string(blocker.owner, `storeOnlyProbe.blockers[${index}].owner`), + dependency: string(blocker.dependency, `storeOnlyProbe.blockers[${index}].dependency`), + reason: string(blocker.reason, `storeOnlyProbe.blockers[${index}].reason`), + }; + }); + if (outcome === "blocked") { + if ( + blockers.length !== BLOCKER_IDS.length || + new Set(blockers.map(({ id }) => id)).size !== BLOCKER_IDS.length + ) { + throw new Error("blocked store-only probe must report both dependency-cycle blockers"); + } + } else if (blockers.length > 0) { + throw new Error(`${outcome} store-only probe cannot claim dependency-cycle blockers`); + } + return { + provenance, + command, + outcome, + exitCode, + stdoutSha256: hash(probe.stdoutSha256, "storeOnlyProbe.stdoutSha256"), + stderrSha256: hash(probe.stderrSha256, "storeOnlyProbe.stderrSha256"), + blockers, + }; +} + +export function parseWasmProfileMatrix(value: unknown): WasmProfileMatrixEvidence { + const root = record(value, "matrix"); + literal(root.schemaVersion, WASM_PROFILE_MATRIX_SCHEMA_VERSION, "schemaVersion"); + literal(root.protocol, WASM_PROFILE_MATRIX_PROTOCOL, "protocol"); + const provenanceRaw = record(root.provenance, "provenance"); + const provenance = { + commit: commit(provenanceRaw.commit, "provenance.commit"), + dirty: literal(provenanceRaw.dirty, false, "provenance.dirty"), + timestamp: string(provenanceRaw.timestamp, "provenance.timestamp"), + host: string(provenanceRaw.host, "provenance.host"), + rustc: string(provenanceRaw.rustc, "provenance.rustc"), + cargo: string(provenanceRaw.cargo, "provenance.cargo"), + wasmPack: string(provenanceRaw.wasmPack, "provenance.wasmPack"), + wasmOptVersion: string(provenanceRaw.wasmOptVersion, "provenance.wasmOptVersion"), + wasmOptSha256: hash(provenanceRaw.wasmOptSha256, "provenance.wasmOptSha256"), + bun: string(provenanceRaw.bun, "provenance.bun"), + } as const; + const provenanceTimestamp = canonicalTimestamp(provenance.timestamp, "provenance.timestamp"); + const normalizedProvenance = { ...provenance, timestamp: provenanceTimestamp }; + const rustRaw = record(root.rustProfile, "rustProfile"); + const rustProfile = { + optLevel: literal(rustRaw.optLevel, 3, "rustProfile.optLevel"), + lto: literal(rustRaw.lto, "fat", "rustProfile.lto"), + codegenUnits: literal(rustRaw.codegenUnits, 1, "rustProfile.codegenUnits"), + } as const; + const postLinkRaw = record(root.postLink, "postLink"); + const compressionRaw = record(postLinkRaw.compression, "postLink.compression"); + const postLink = { + inputWasmSha256: hash(postLinkRaw.inputWasmSha256, "postLink.inputWasmSha256"), + compression: { + gzipLevel: literal(compressionRaw.gzipLevel, 9, "postLink.compression.gzipLevel"), + brotliQuality: literal( + compressionRaw.brotliQuality, + 11, + "postLink.compression.brotliQuality", + ), + brotliMode: literal(compressionRaw.brotliMode, "generic", "postLink.compression.brotliMode"), + }, + } as const; + const policyRaw = record(root.decisionPolicy, "decisionPolicy"); + const decisionPolicy = { + sizeMetric: literal(policyRaw.sizeMetric, "brotliBytes", "decisionPolicy.sizeMetric"), + requireFormulaGate: literal( + policyRaw.requireFormulaGate, + true, + "decisionPolicy.requireFormulaGate", + ), + requireRenderGate: literal( + policyRaw.requireRenderGate, + true, + "decisionPolicy.requireRenderGate", + ), + } as const; + const orderRaw = record(root.captureOrder, "captureOrder"); + const captureOrder = { + formula: exactProfiles(orderRaw.formula, "captureOrder.formula"), + render: exactProfiles(orderRaw.render, "captureOrder.render"), + }; + + if (!Array.isArray(root.variants)) throw new Error("variants must be an array"); + const modes = new Set(); + const variants = root.variants.map((raw, index): WasmProfileVariant => { + const variant = record(raw, `variants[${index}]`); + const wasmOpt = profile(variant.wasmOpt, `variants[${index}].wasmOpt`); + if (modes.has(wasmOpt)) throw new Error(`duplicate ${wasmOpt} variant`); + modes.add(wasmOpt); + const inputWasmSha256 = hash(variant.inputWasmSha256, `variants[${index}].inputWasmSha256`); + if (inputWasmSha256 !== postLink.inputWasmSha256) { + throw new Error(`${wasmOpt} did not use the shared pre-post-link artifact`); + } + const artifactRaw = record(variant.artifact, `variants[${index}].artifact`); + const artifact = { + rawBytes: integer(artifactRaw.rawBytes, `variants[${index}].artifact.rawBytes`, 1), + gzipBytes: integer(artifactRaw.gzipBytes, `variants[${index}].artifact.gzipBytes`, 1), + brotliBytes: integer(artifactRaw.brotliBytes, `variants[${index}].artifact.brotliBytes`, 1), + sha256: hash(artifactRaw.sha256, `variants[${index}].artifact.sha256`), + }; + if (artifact.gzipBytes >= artifact.rawBytes || artifact.brotliBytes >= artifact.rawBytes) { + throw new Error(`${wasmOpt} compressed sizes must be smaller than raw size`); + } + return { + wasmOpt, + inputWasmSha256, + artifact, + formulaGate: parseGate( + variant.formulaGate, + `variants[${index}].formulaGate`, + "formula", + provenance.commit, + artifact.sha256, + ), + renderGate: parseGate( + variant.renderGate, + `variants[${index}].renderGate`, + "render", + provenance.commit, + artifact.sha256, + ), + }; + }); + if (variants.length !== WASM_OPT_PROFILES.length || modes.size !== WASM_OPT_PROFILES.length) { + throw new Error("variants must contain -O3, -Os, and -Oz exactly once"); + } + for (const gate of ["formulaGate", "renderGate"] as const) { + const fingerprints = new Set(variants.map((variant) => variant[gate].runnerFingerprint)); + const evidenceHashes = new Set(variants.map((variant) => variant[gate].evidenceSha256)); + const artifactPaths = new Set(variants.map((variant) => variant[gate].artifactPath)); + if (evidenceHashes.size !== variants.length || artifactPaths.size !== variants.length) { + throw new Error(`${gate} evidence was reused across variants`); + } + if (fingerprints.size !== 1) throw new Error(`${gate} runner provenance is incomparable`); + } + + return { + schemaVersion: WASM_PROFILE_MATRIX_SCHEMA_VERSION, + protocol: WASM_PROFILE_MATRIX_PROTOCOL, + provenance: normalizedProvenance, + rustProfile, + postLink, + decisionPolicy, + captureOrder, + variants, + storeOnlyProbe: parseStoreOnlyProbe(root.storeOnlyProbe, normalizedProvenance.commit), + }; +} + +export function decideWasmProfile(value: unknown): WasmProfileDecision { + const evidence = parseWasmProfileMatrix(value); + const failures: string[] = []; + for (const variant of evidence.variants) { + if (variant.formulaGate.status !== "passed") + failures.push(`${variant.wasmOpt} formula gate failed`); + if (variant.renderGate.status !== "passed") + failures.push(`${variant.wasmOpt} render gate failed`); + } + if (evidence.storeOnlyProbe.outcome === "failed") { + failures.push("store-only compile probe failed without a classified outcome"); + } + if (failures.length > 0) return { status: "blocked", failures }; + + const baseline = evidence.variants.find(({ wasmOpt }) => wasmOpt === "-O3")!; + const selected = evidence.variants.reduce((best, candidate) => + candidate.artifact.brotliBytes < best.artifact.brotliBytes ? candidate : best, + ); + return { + status: "recommended", + wasmOpt: selected.wasmOpt, + baseline: "-O3", + savedBytes: { + raw: baseline.artifact.rawBytes - selected.artifact.rawBytes, + gzip: baseline.artifact.gzipBytes - selected.artifact.gzipBytes, + brotli: baseline.artifact.brotliBytes - selected.artifact.brotliBytes, + }, + }; +} diff --git a/bench/test/render-driver.test.ts b/bench/test/render-driver.test.ts index c34af829..4800eb74 100644 --- a/bench/test/render-driver.test.ts +++ b/bench/test/render-driver.test.ts @@ -1,6 +1,10 @@ import { describe, expect, test } from "bun:test"; import { createCombinationFailures } from "../src/render-driver.js"; -import { RENDER_SCENARIOS } from "../src/render-protocol.js"; +import { + DIAGNOSTIC_RENDER_SCENARIOS, + RENDER_SCENARIOS, + WINDOW_TRANSFER_UPPER_BOUND_SCENARIO_ID, +} from "../src/render-protocol.js"; const configuration = { runId: "launch-fixture", @@ -28,6 +32,20 @@ describe("isolated browser failure envelopes", () => { expect(new Set(results.map((result) => result.scenarioId)).size).toBe(RENDER_SCENARIOS.length); }); + test("failure output keeps the requested diagnostic scenario list", () => { + const scenarios = DIAGNOSTIC_RENDER_SCENARIOS.map((scenario) => scenario.id); + const results = createCombinationFailures( + { ...configuration, scenarios }, + "launch", + new Error("browser executable does not exist"), + ); + expect(results.map((result) => result.scenarioId)).toEqual(scenarios); + expect( + results.find((result) => result.scenarioId === WINDOW_TRANSFER_UPPER_BOUND_SCENARIO_ID) + ?.dataValidity, + ).toBe("pixel-data-invalid"); + }); + test("timeouts retain timeout/crash diagnostics in every cell", () => { const results = createCombinationFailures( configuration, diff --git a/bench/test/render-protocol.test.ts b/bench/test/render-protocol.test.ts index 3de2e65f..f09eb6d1 100644 --- a/bench/test/render-protocol.test.ts +++ b/bench/test/render-protocol.test.ts @@ -1,5 +1,6 @@ import { describe, expect, test } from "bun:test"; import { + createWindowTransferMetrics, type FailedScenario, parseRenderArtifact, parseRenderArtifactJson, @@ -11,7 +12,13 @@ import { type ScenarioResult, scenarioGroup, summarizeCompleteness, + summarizeWindowTransferComparisons, + WINDOW_TRANSFER_BASELINE_SCENARIO_ID, + WINDOW_TRANSFER_ORDER_SEED, + WINDOW_TRANSFER_SCENARIO_IDS, + WINDOW_TRANSFER_UPPER_BOUND_SCENARIO_ID, } from "../src/render-protocol.js"; +import { counterbalancedOrder } from "../src/stats.js"; const RUN_ID = "00000000-0000-4000-8000-000000000051"; const TIMESTAMP = "2026-07-14T12:00:00.000Z"; @@ -158,6 +165,109 @@ function completeArtifact(): RenderBenchmarkArtifact { return artifactWithResults(results); } +function windowTransferArtifact(): RenderBenchmarkArtifact { + const config: RenderRunConfig = { + engines: ["sheetwrite"], + rows: [200], + scenarios: [...WINDOW_TRANSFER_SCENARIO_IDS], + }; + const results: ScenarioResult[] = []; + for (let round = 1; round <= 2; round++) { + for (const scenarioId of WINDOW_TRANSFER_SCENARIO_IDS) { + const baseline = scenarioId === WINDOW_TRANSFER_BASELINE_SCENARIO_ID; + const perOperationMs = baseline ? (round === 1 ? 5 : 5.2) : round === 1 ? 3 : 3.1; + const sampleCounters = { + logicalFrames: 100, + windowReadRequests: 100, + logicalWindowReads: baseline ? 100 : 0, + copiedBytes: baseline ? 102_400 : 0, + outputAllocationEvents: baseline ? 700 : 0, + }; + const rawSamples = [0, 1].map((index) => ({ + index, + durationMs: perOperationMs * 100, + operationCount: 100, + perOperationMs, + windowTransfer: createWindowTransferMetrics(sampleCounters), + })); + results.push({ + runId: RUN_ID, + round, + engine: "sheetwrite", + rows: 200, + scenarioId, + group: scenarioGroup(scenarioId), + dataValidity: baseline ? "product-valid" : "pixel-data-invalid", + status: "success", + operationCount: 200, + rawSamples, + medianMs: perOperationMs, + p95Ms: perOperationMs, + madMs: 0, + validation: [ + { + checkpoint: "controlled window transfer", + expected: "accounted", + observed: "accounted", + passed: true, + }, + ], + memory: { beforeBytes: null, afterBytes: null, deltaBytes: null }, + windowTransfer: createWindowTransferMetrics({ + logicalFrames: 200, + windowReadRequests: 200, + logicalWindowReads: baseline ? 200 : 0, + copiedBytes: baseline ? 204_800 : 0, + outputAllocationEvents: baseline ? 1_400 : 0, + }), + }); + } + } + return { + protocolVersion: RENDER_PROTOCOL_VERSION, + runId: RUN_ID, + metadata: { + commit: "4ba3902", + dirty: false, + timestamp: TIMESTAMP, + bunVersion: "1.3.14", + nodeVersion: "24.3.0", + browserVersion: "Chromium 140", + os: "linux 6.0", + arch: "x64", + cpu: "test cpu", + engineVersions: { sheetwrite: "0.1.0", handsontable: "18.0.0" }, + datasetSeed: 0x5eedc0de, + datasetHashes: { "200": "fnv1a32:12345678" }, + viewport: { width: 640, height: 480 }, + measuredSamples: 2, + warmupSamples: 1, + minimumSampleDurationMs: 100, + rounds: 2, + orderSeed: 0x51c0ffee, + engineOrder: [["sheetwrite"], ["sheetwrite"]], + launchAttempts: [1, 2].map((round) => ({ + round, + engine: "sheetwrite" as const, + rows: 200, + attempt: 1, + success: true, + errorClass: null, + message: null, + })), + windowTransferScenarioOrder: counterbalancedOrder( + WINDOW_TRANSFER_SCENARIO_IDS, + 2, + WINDOW_TRANSFER_ORDER_SEED, + ), + }, + config, + results, + completeness: summarizeCompleteness(config, 2, results), + reproductionCommands: ["bun run --filter '@sheetwrite/bench' bench:render:diagnostic"], + }; +} + describe("render artifact validation", () => { test("accepts a complete finite matrix", () => { const parsed = parseRenderArtifactJson(JSON.stringify(completeArtifact()), { @@ -237,6 +347,40 @@ describe("render artifact validation", () => { expect(() => parseRenderArtifact(invalid)).toThrow("finite number"); expect(() => parseRenderArtifactJson(JSON.stringify(invalid))).toThrow("finite number"); }); + test("fails closed on transfer counters, invalid labels, and order drift", () => { + const parsed = parseRenderArtifact(windowTransferArtifact()); + const [comparison] = summarizeWindowTransferComparisons(parsed); + expect(comparison).toMatchObject({ rows: 200, resolved: true }); + expect(comparison?.estimatedWindowTransferCostMs).toBeCloseTo(2.05); + expect(comparison?.maximumWithinVariantSpreadMs).toBeCloseTo(0.2); + + const missingCounters = structuredClone(windowTransferArtifact()); + const baseline = missingCounters.results.find( + (result) => result.scenarioId === WINDOW_TRANSFER_BASELINE_SCENARIO_ID, + ); + if (baseline?.status !== "success") throw new Error("missing baseline fixture"); + Reflect.deleteProperty(baseline.rawSamples[0]!, "windowTransfer"); + expect(() => parseRenderArtifact(missingCounters)).toThrow( + "rawSamples[0].windowTransfer is required", + ); + + const falselyValid = structuredClone(windowTransferArtifact()); + const upperBound = falselyValid.results.find( + (result) => result.scenarioId === WINDOW_TRANSFER_UPPER_BOUND_SCENARIO_ID, + ); + if (!upperBound) throw new Error("missing upper-bound fixture"); + Reflect.set(upperBound, "dataValidity", "product-valid"); + expect(() => parseRenderArtifact(falselyValid)).toThrow("must be pixel-data-invalid"); + + const wrongOrder = structuredClone(windowTransferArtifact()); + const firstOrder = wrongOrder.metadata.windowTransferScenarioOrder?.[0]; + if (!firstOrder) throw new Error("missing counterbalance fixture"); + Reflect.set(wrongOrder.metadata, "windowTransferScenarioOrder", [ + [...firstOrder].reverse(), + [...firstOrder].reverse(), + ]); + expect(() => parseRenderArtifact(wrongOrder)).toThrow("required counterbalance"); + }); }); describe("derived Markdown evidence", () => { @@ -250,4 +394,11 @@ describe("derived Markdown evidence", () => { expect(markdown).toContain("(./render-results.json)"); expect(markdown).toContain("Comparative headline ratios are intentionally omitted"); }); + test("labels the stale-view comparison and reports exact per-frame/read counters", () => { + const markdown = renderBenchmarkMarkdown(windowTransferArtifact()); + expect(markdown).toContain("pixels/data are invalid"); + expect(markdown).toContain("copied/frame"); + expect(markdown).toContain("allocations/read"); + expect(markdown).toContain("maximum within-variant spread"); + }); }); diff --git a/bench/test/render-scenarios.test.ts b/bench/test/render-scenarios.test.ts index 476e5095..44415942 100644 --- a/bench/test/render-scenarios.test.ts +++ b/bench/test/render-scenarios.test.ts @@ -1,7 +1,13 @@ import { describe, expect, test } from "bun:test"; import { makeColumnar, toAoA } from "../src/dataset.js"; +import { + DIAGNOSTIC_RENDER_SCENARIOS, + WINDOW_TRANSFER_BASELINE_SCENARIO_ID, + WINDOW_TRANSFER_UPPER_BOUND_SCENARIO_ID, +} from "../src/render-protocol.js"; import { type CellSelection, + measureUnresizedMillionRowGeometry, type RenderBenchAdapter, runRenderScenario, type ScrollObservation, @@ -18,6 +24,7 @@ class FakeAdapter implements RenderBenchAdapter { readonly initialRowCount: number; readonly colCount = 5; readonly values: unknown[][]; + private readonly originalValues: unknown[][]; corruptNavigation = false; private mounted = true; private selected: CellSelection | null = null; @@ -25,11 +32,20 @@ class FakeAdapter implements RenderBenchAdapter { private top = 0; private left = 0; private readonly evidence: FakeEvidence; + private windowReadMode: "baseline" | "reuse-decoded-view-upper-bound" = "baseline"; + private transferCounters = { + logicalFrames: 0, + windowReadRequests: 0, + logicalWindowReads: 0, + copiedBytes: 0, + outputAllocationEvents: 0, + }; constructor(rows = 200, evidence: FakeEvidence = {}) { const dataset = makeColumnar(rows); this.initialRowCount = rows; - this.values = toAoA(dataset); + this.originalValues = toAoA(dataset); + this.values = this.originalValues.map((row) => [...row]); this.evidence = evidence; } @@ -71,8 +87,14 @@ class FakeAdapter implements RenderBenchAdapter { scrollBy(axis: "top" | "left", pixels: number): void { if (axis === "top") this.top = Math.min(1_000, this.top + pixels); else this.left = Math.min(500, this.left + pixels); + this.transferCounters.logicalFrames++; + this.transferCounters.windowReadRequests++; + if (this.windowReadMode === "baseline") { + this.transferCounters.logicalWindowReads++; + this.transferCounters.copiedBytes += 1_024; + this.transferCounters.outputAllocationEvents += 7; + } } - scrollObservation(): ScrollObservation { return { top: this.top, @@ -80,6 +102,7 @@ class FakeAdapter implements RenderBenchAdapter { maximumTop: 1_000, maximumLeft: 500, firstVisibleRow: Math.floor(this.top / 25), + devicePixelRatio: 1.25, }; } @@ -138,6 +161,50 @@ class FakeAdapter implements RenderBenchAdapter { }; } + installFormulaDense(): void { + for (let row = 1; row <= Math.min(64, this.initialRowCount - 1); row++) { + for (let col = 1; col < this.colCount; col++) { + this.values[row]![col] = Number(this.values[row]![0]) + col; + } + } + } + + clearFormulaDense(): void { + for (let row = 1; row <= Math.min(64, this.initialRowCount - 1); row++) { + for (let col = 1; col < this.colCount; col++) { + this.values[row]![col] = this.originalValues[row]![col]; + } + } + } + + installTextHeavy(rowCount: number): void { + for (let row = 1; row <= Math.min(rowCount, this.initialRowCount - 1); row++) { + for (let col = 1; col < this.colCount; col++) { + this.values[row]![col] = `diagnostic-long-${row}-${col}`; + } + } + } + + clearTextHeavy(): void { + for (let row = 1; row < this.initialRowCount; row++) { + for (let col = 1; col < this.colCount; col++) { + this.values[row]![col] = this.originalValues[row]![col]; + } + } + } + + measureUnresizedMillionRowGeometry() { + return { + count: 1_000_000, + backingStoreBytes: 0, + totalHeight: 28_000_000, + middleRow: 500_000, + middleTop: 14_000_000, + lastRow: 999_999, + lastTop: 27_999_972, + }; + } + installMergeHeavy(): void {} clearMergeHeavy(): void {} @@ -151,6 +218,22 @@ class FakeAdapter implements RenderBenchAdapter { }; } + setWindowReadDiagnosticMode(mode: "baseline" | "reuse-decoded-view-upper-bound"): void { + this.windowReadMode = mode; + } + + resetWindowTransferCounters(): void { + this.transferCounters.logicalFrames = 0; + this.transferCounters.windowReadRequests = 0; + this.transferCounters.logicalWindowReads = 0; + this.transferCounters.copiedBytes = 0; + this.transferCounters.outputAllocationEvents = 0; + } + + windowTransferCounters() { + return { ...this.transferCounters }; + } + destroy(): void { this.mounted = false; } @@ -221,6 +304,63 @@ describe("scenario correctness checkpoints", () => { ); }); + test("measures real million-row uniform OffsetIndex geometry", () => { + expect(measureUnresizedMillionRowGeometry()).toEqual({ + count: 1_000_000, + backingStoreBytes: 0, + totalHeight: 28_000_000, + middleRow: 500_000, + middleTop: 14_000_000, + lastRow: 999_999, + lastTop: 27_999_972, + }); + }); + + test("records each measured-only diagnostic scenario without promoting it to the gate", () => { + for (const scenario of DIAGNOSTIC_RENDER_SCENARIOS) { + const result = runRenderScenario(new FakeAdapter(), dataset, scenario.id, options); + expect(result.status).toBe("success"); + if (result.status !== "success") throw new Error(result.message); + expect(result.validation.every((observation) => observation.passed)).toBe(true); + } + }); + test("separates exact transfer counters from the pixel-data-invalid upper bound", () => { + const baseline = runRenderScenario( + new FakeAdapter(), + dataset, + WINDOW_TRANSFER_BASELINE_SCENARIO_ID, + options, + ); + const upperBound = runRenderScenario( + new FakeAdapter(), + dataset, + WINDOW_TRANSFER_UPPER_BOUND_SCENARIO_ID, + options, + ); + expect(baseline.status).toBe("success"); + expect(upperBound.status).toBe("success"); + if (baseline.status !== "success" || upperBound.status !== "success") { + throw new Error("expected successful transfer diagnostic pair"); + } + expect(baseline.dataValidity).toBe("product-valid"); + expect(baseline.windowTransfer).toMatchObject({ + copiedBytesPerLogicalFrame: 1_024, + outputAllocationEventsPerLogicalFrame: 7, + copiedBytesPerLogicalRead: 1_024, + outputAllocationEventsPerLogicalRead: 7, + }); + expect(upperBound.dataValidity).toBe("pixel-data-invalid"); + expect(upperBound.windowTransfer).toMatchObject({ + logicalWindowReads: 0, + copiedBytes: 0, + outputAllocationEvents: 0, + copiedBytesPerLogicalRead: null, + outputAllocationEventsPerLogicalRead: null, + }); + expect(upperBound.windowTransfer?.logicalFrames).toBe(upperBound.operationCount); + expect(upperBound.windowTransfer?.windowReadRequests).toBe(upperBound.operationCount); + }); + test("rejects corrupt formatter and merge-index evidence", () => { for (const [adapter, scenario, checkpoint] of [ [ diff --git a/bench/test/wasm-profile-matrix.test.ts b/bench/test/wasm-profile-matrix.test.ts new file mode 100644 index 00000000..6e2f3e37 --- /dev/null +++ b/bench/test/wasm-profile-matrix.test.ts @@ -0,0 +1,279 @@ +import { describe, expect, it } from "bun:test"; +import { + assertCleanMatrixCapture, + decideWasmProfile, + parseWasmProfileMatrix, +} from "../src/wasm-profile-matrix.js"; + +const HASH = { + input: "a".repeat(64), + runner: "b".repeat(64), + tool: "c".repeat(64), + evidence: "d".repeat(64), + stdout: "e".repeat(64), + stderr: "f".repeat(64), +} as const; +const COMMIT = "1".repeat(40); + +function gate(wasmSha256: string, kind: "formula" | "render") { + return { + status: "passed", + commands: + kind === "formula" + ? [["bun", "run", "bench:formula"]] + : [ + ["bun", "run", "bench:render"], + ["bun", "run", "bench:check"], + ], + exitCode: 0, + artifactPath: `bench/results/candidate-${wasmSha256.slice(0, 8)}.json`, + evidenceSha256: wasmSha256, + wasmSha256, + commit: COMMIT, + runnerFingerprint: HASH.runner, + }; +} + +function fixture() { + const variants = [ + { wasmOpt: "-O3", rawBytes: 1_000, gzipBytes: 500, brotliBytes: 400, hash: "2" }, + { wasmOpt: "-Os", rawBytes: 950, gzipBytes: 480, brotliBytes: 390, hash: "3" }, + { wasmOpt: "-Oz", rawBytes: 900, gzipBytes: 470, brotliBytes: 380, hash: "4" }, + ].map(({ wasmOpt, rawBytes, gzipBytes, brotliBytes, hash }) => { + const artifactSha256 = hash.repeat(64); + return { + wasmOpt, + inputWasmSha256: HASH.input, + artifact: { rawBytes, gzipBytes, brotliBytes, sha256: artifactSha256 }, + formulaGate: gate(artifactSha256, "formula"), + renderGate: gate(artifactSha256, "render"), + }; + }); + return { + schemaVersion: 1, + protocol: "wasm-post-link-profile-matrix-v1", + provenance: { + commit: COMMIT, + dirty: false, + timestamp: "2026-08-09T12:00:00.000Z", + host: "controlled-host", + rustc: "rustc 1.90.0", + cargo: "cargo 1.90.0", + wasmPack: "wasm-pack 0.13.1", + wasmOptVersion: "wasm-opt version 123", + wasmOptSha256: HASH.tool, + bun: "1.3.14", + }, + rustProfile: { optLevel: 3, lto: "fat", codegenUnits: 1 }, + postLink: { + inputWasmSha256: HASH.input, + compression: { gzipLevel: 9, brotliQuality: 11, brotliMode: "generic" }, + }, + decisionPolicy: { + sizeMetric: "brotliBytes", + requireFormulaGate: true, + requireRenderGate: true, + }, + captureOrder: { + formula: ["-O3", "-Oz", "-Os"], + render: ["-Os", "-O3", "-Oz"], + }, + variants, + storeOnlyProbe: { + provenance: { + commit: COMMIT, + dirty: false, + timestamp: "2026-08-09T12:01:00.000Z", + }, + command: [ + "cargo", + "check", + "--target", + "wasm32-unknown-unknown", + "--no-default-features", + "--message-format=json", + ], + outcome: "blocked", + exitCode: 101, + stdoutSha256: HASH.stdout, + stderrSha256: HASH.stderr, + blockers: [ + { + id: "formula-entry-ast", + kind: "dependency-cycle", + owner: "types::FormulaEntry::ast", + dependency: "calc::Ast", + reason: "stored syntax crosses the boundary", + }, + { + id: "dependency-index", + kind: "dependency-cycle", + owner: "store::CellStore::dep_index", + dependency: "eval::DepIndex", + reason: "dependency state crosses the boundary", + }, + ], + }, + }; +} + +describe("WASM post-link matrix evidence", () => { + it("keeps Rust opt-level separate and selects by the declared Brotli policy", () => { + const parsed = parseWasmProfileMatrix(fixture()); + expect(parsed.rustProfile.optLevel).toBe(3); + expect(parsed.variants.map(({ wasmOpt }) => wasmOpt)).toEqual(["-O3", "-Os", "-Oz"]); + expect(decideWasmProfile(parsed)).toEqual({ + status: "recommended", + wasmOpt: "-Oz", + baseline: "-O3", + savedBytes: { raw: 100, gzip: 30, brotli: 20 }, + }); + }); + + it("treats tracked and untracked worktree entries as dirty capture inputs", () => { + expect(() => assertCleanMatrixCapture(" M packages/wasm/Cargo.toml")).toThrow( + "requires a completely clean tree", + ); + expect(() => assertCleanMatrixCapture("?? local-input.wasm")).toThrow( + "requires a completely clean tree", + ); + expect(() => assertCleanMatrixCapture("")).not.toThrow(); + }); + + it("rejects a matrix that changes the Rust optimization knob", () => { + const evidence = fixture(); + evidence.rustProfile.optLevel = 2; + expect(() => parseWasmProfileMatrix(evidence)).toThrow("rustProfile.optLevel must be 3"); + }); + + it("rejects variants that do not share one pre-post-link artifact", () => { + const evidence = fixture(); + evidence.variants[1]!.inputWasmSha256 = "9".repeat(64); + expect(() => parseWasmProfileMatrix(evidence)).toThrow( + "-Os did not use the shared pre-post-link artifact", + ); + }); + + it("rejects incomplete profiles and size evidence", () => { + const missingProfile = fixture(); + missingProfile.variants.pop(); + expect(() => parseWasmProfileMatrix(missingProfile)).toThrow( + "variants must contain -O3, -Os, and -Oz exactly once", + ); + + const missingSize = fixture(); + Reflect.deleteProperty(missingSize.variants[2]!.artifact, "gzipBytes"); + expect(() => parseWasmProfileMatrix(missingSize)).toThrow("artifact.gzipBytes"); + }); + + it("rejects non-gating and report-only benchmark commands", () => { + const preliminary = fixture(); + preliminary.variants[0]!.formulaGate.commands = [ + ["bun", "run", "bench:formula", "--preliminary"], + ]; + expect(() => parseWasmProfileMatrix(preliminary)).toThrow( + "must run the gating formula benchmark", + ); + + const reportOnly = fixture(); + reportOnly.variants[0]!.renderGate.commands[1]!.push("--report-only"); + expect(() => parseWasmProfileMatrix(reportOnly)).toThrow( + "must run the render capture and fail-closed check", + ); + }); + + it("rejects attempts to opt out of either required performance gate", () => { + const evidence = fixture(); + evidence.decisionPolicy.requireRenderGate = false; + expect(() => parseWasmProfileMatrix(evidence)).toThrow( + "decisionPolicy.requireRenderGate must be true", + ); + }); + + it("rejects dirty or unmatched runner provenance", () => { + const dirty = fixture(); + dirty.provenance.dirty = true; + expect(() => parseWasmProfileMatrix(dirty)).toThrow("provenance.dirty must be false"); + + const unmatched = fixture(); + unmatched.variants[2]!.renderGate.runnerFingerprint = "9".repeat(64); + expect(() => parseWasmProfileMatrix(unmatched)).toThrow( + "renderGate runner provenance is incomparable", + ); + }); + + it("blocks the decision when any formula or render gate fails", () => { + const formulaFailure = fixture(); + formulaFailure.variants[2]!.formulaGate.status = "failed"; + formulaFailure.variants[2]!.formulaGate.exitCode = 1; + expect(decideWasmProfile(formulaFailure)).toEqual({ + status: "blocked", + failures: ["-Oz formula gate failed"], + }); + + const renderFailure = fixture(); + renderFailure.variants[1]!.renderGate.status = "failed"; + renderFailure.variants[1]!.renderGate.exitCode = 1; + expect(decideWasmProfile(renderFailure)).toEqual({ + status: "blocked", + failures: ["-Os render gate failed"], + }); + }); + + it("requires both structural blockers when the store-only probe is blocked", () => { + const parsed = parseWasmProfileMatrix(fixture()); + expect(parsed.storeOnlyProbe.outcome).toBe("blocked"); + expect(parsed.storeOnlyProbe.blockers.map(({ id }) => id)).toEqual([ + "formula-entry-ast", + "dependency-index", + ]); + + const incomplete = fixture(); + incomplete.storeOnlyProbe.blockers.pop(); + expect(() => parseWasmProfileMatrix(incomplete)).toThrow( + "must report both dependency-cycle blockers", + ); + }); + + it("binds the store-only probe to the clean matrix commit", () => { + const mismatched = fixture(); + mismatched.storeOnlyProbe.provenance.commit = "9".repeat(40); + expect(() => parseWasmProfileMatrix(mismatched)).toThrow( + "storeOnlyProbe commit does not match matrix provenance", + ); + + const dirty = fixture(); + dirty.storeOnlyProbe.provenance.dirty = true; + expect(() => parseWasmProfileMatrix(dirty)).toThrow( + "storeOnlyProbe.provenance.dirty must be false", + ); + }); + + it("does not let a successful probe retain blocker claims", () => { + const evidence = fixture(); + evidence.storeOnlyProbe.outcome = "compiled"; + evidence.storeOnlyProbe.exitCode = 0; + expect(() => parseWasmProfileMatrix(evidence)).toThrow( + "compiled store-only probe cannot claim dependency-cycle blockers", + ); + }); + + it("blocks a recommendation when the compile probe failure is unclassified", () => { + const evidence = fixture(); + evidence.storeOnlyProbe.outcome = "failed"; + evidence.storeOnlyProbe.blockers = []; + expect(decideWasmProfile(evidence)).toEqual({ + status: "blocked", + failures: ["store-only compile probe failed without a classified outcome"], + }); + }); + + it("rejects build-only captures as recommendation evidence", () => { + const evidence = fixture(); + evidence.protocol = "wasm-post-link-build-capture-v1"; + Reflect.deleteProperty(evidence, "captureOrder"); + expect(() => decideWasmProfile(evidence)).toThrow( + 'protocol must be "wasm-post-link-profile-matrix-v1"', + ); + }); +}); diff --git a/bun.lock b/bun.lock index 15ae109d..72b10327 100644 --- a/bun.lock +++ b/bun.lock @@ -14,6 +14,7 @@ "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "fake-indexeddb": "6.2.5", + "knip": "6.32.1", "react": "^19.2.7", "react-dom": "^19.2.7", "svelte": "5.56.5", @@ -24,7 +25,7 @@ }, "bench": { "name": "@sheetwrite/bench", - "version": "0.0.1", + "version": "0.0.2", "dependencies": { "@sheetwrite/core": "workspace:*", "@sheetwrite/wasm": "workspace:*", @@ -39,7 +40,7 @@ }, "docs": { "name": "@sheetwrite/docs-start", - "version": "0.0.1", + "version": "0.0.2", "dependencies": { "@base-ui/react": "^1.6.0", "@floating-ui/dom": "^1.8.0", @@ -95,14 +96,14 @@ }, "packages/core": { "name": "@sheetwrite/core", - "version": "0.3.1", + "version": "0.4.0", "dependencies": { "@sheetwrite/wasm": "workspace:*", }, }, "packages/react": { "name": "@sheetwrite/react", - "version": "0.3.1", + "version": "0.4.0", "dependencies": { "@sheetwrite/core": "workspace:*", }, @@ -112,7 +113,7 @@ }, "packages/svelte": { "name": "@sheetwrite/svelte", - "version": "0.3.1", + "version": "0.4.0", "dependencies": { "@sheetwrite/core": "workspace:*", }, @@ -126,7 +127,7 @@ }, "packages/vue": { "name": "@sheetwrite/vue", - "version": "0.3.1", + "version": "0.4.0", "dependencies": { "@sheetwrite/core": "workspace:*", }, @@ -136,11 +137,11 @@ }, "packages/wasm": { "name": "@sheetwrite/wasm", - "version": "0.3.1", + "version": "0.4.0", }, "packages/xlsx": { "name": "@sheetwrite/xlsx", - "version": "0.3.1", + "version": "0.4.0", "dependencies": { "@sheetwrite/core": "workspace:*", "fflate": "0.8.3", @@ -151,6 +152,7 @@ "@biomejs/biome", ], "overrides": { + "nanoid": "3.3.18", "postcss": "^8.5.18", }, "packages": { @@ -246,9 +248,9 @@ "@ctrl/tinycolor": ["@ctrl/tinycolor@4.2.0", "", {}, "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A=="], - "@emnapi/core": ["@emnapi/core@1.11.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" } }, "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ=="], + "@emnapi/core": ["@emnapi/core@1.11.2", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" } }, "sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA=="], - "@emnapi/runtime": ["@emnapi/runtime@1.11.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw=="], + "@emnapi/runtime": ["@emnapi/runtime@1.11.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA=="], "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA=="], @@ -364,7 +366,85 @@ "@oozcitak/util": ["@oozcitak/util@10.0.0", "", {}, "sha512-hAX0pT/73190NLqBPPWSdBVGtbY6VOhWYK3qqHqtXQ1gK7kS2yz4+ivsN07hpJ6I3aeMtKP6J6npsEKOAzuTLA=="], - "@oxc-project/types": ["@oxc-project/types@0.139.0", "", {}, "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw=="], + "@oxc-parser/binding-android-arm-eabi": ["@oxc-parser/binding-android-arm-eabi@0.142.0", "", { "os": "android", "cpu": "arm" }, "sha512-ZiRGDutGsv1G6bL/ozy/koC0Sv39T1DqyoC4KD1DOy9ZoACm1O5UWhEK2c02Qdk+4lfLVkvFa/mQ0fm/4h1BtQ=="], + + "@oxc-parser/binding-android-arm64": ["@oxc-parser/binding-android-arm64@0.142.0", "", { "os": "android", "cpu": "arm64" }, "sha512-WZkvGRLNQTz8lR9zP5nLjUdlroRCopBu3g9zF1p/laE6DzT1UbQo8Rdz5MWhaJUPYg/6gp+jo7HUgsyKaN1FtQ=="], + + "@oxc-parser/binding-darwin-arm64": ["@oxc-parser/binding-darwin-arm64@0.142.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-l4khS8LQOOVYsGRVARo1gSaCT/aBSceUVXgtovWc2+drnxVuDr082WA3OCHVdVzIz5JIrP/y9CWsSKxBDNmYGg=="], + + "@oxc-parser/binding-darwin-x64": ["@oxc-parser/binding-darwin-x64@0.142.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-QBsNF3nqlXmcH2B1YOPqQYmCJoy4HuIjUxGbBO/k5JAJUl68ghU2psRY2zPk+RyBaWqKP/qfL4oaFgEMCdwskA=="], + + "@oxc-parser/binding-freebsd-x64": ["@oxc-parser/binding-freebsd-x64@0.142.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-b7Q7m4Cqc6XqNhri3R+QhU+GVy646Pn+bkdhrDdWym/Fdi0ZUa+d73H9dm5H91JtbtAQ/z1d8XKMW3oOV8a4tQ=="], + + "@oxc-parser/binding-linux-arm-gnueabihf": ["@oxc-parser/binding-linux-arm-gnueabihf@0.142.0", "", { "os": "linux", "cpu": "arm" }, "sha512-3riVS5IhdH3uCZj1Y9ftDQlR0dvLsIlw/edrRqk8JhgNd5K0XSs+UBtgh50N13CAlW9/TXj6sVGXaKNBocd0Yg=="], + + "@oxc-parser/binding-linux-arm-musleabihf": ["@oxc-parser/binding-linux-arm-musleabihf@0.142.0", "", { "os": "linux", "cpu": "arm" }, "sha512-NmXUOpgpTSkhl795TiXmWppTwmSJ92RC1qvD6e4XOF+slgmo3e6Ah+kEu+6AN8s7NAOEwqGmir58MgSQSWmBSA=="], + + "@oxc-parser/binding-linux-arm64-gnu": ["@oxc-parser/binding-linux-arm64-gnu@0.142.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-gc0EXsKtXgerujmU2Bql3u1L1HsSQ2774R83idq/FoNMPVV/RY/1ErFsvnit7KoiP/sLvzQixeUo4Ut0ic0wmw=="], + + "@oxc-parser/binding-linux-arm64-musl": ["@oxc-parser/binding-linux-arm64-musl@0.142.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-F2XvmWSE0uWpie+jHKKIFgdVOe9ypGhkEZxKx5DuW215K6cbAC274yYaPkcM7EqY4Df3Weyhpcz3lsURyH2LVg=="], + + "@oxc-parser/binding-linux-ppc64-gnu": ["@oxc-parser/binding-linux-ppc64-gnu@0.142.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-wLMbT21U/QxknQsk+VvNF0b9D2/aGWhcaQQQ+VYlE8FwD5+GoWZIPPXNzyHmkYyhm0KB3itL+TBavjMatqNnYA=="], + + "@oxc-parser/binding-linux-riscv64-gnu": ["@oxc-parser/binding-linux-riscv64-gnu@0.142.0", "", { "os": "linux", "cpu": "none" }, "sha512-+G8F/4ckwT7FCJV4H2bt09xEzJbjNCfuL4Sp1AYNaFtFMVtgIGMuJlteT82U+K0UIZ/DzAR/LDlMFnEuajG7Kw=="], + + "@oxc-parser/binding-linux-riscv64-musl": ["@oxc-parser/binding-linux-riscv64-musl@0.142.0", "", { "os": "linux", "cpu": "none" }, "sha512-hTsHtTLxMAfCo+rpF5K3qZJKW2NpPN/CHd4mYB3y7XlSdspHkd2gehDIofP64AacA9nWQw2tY3O7wR6UY8IVOA=="], + + "@oxc-parser/binding-linux-s390x-gnu": ["@oxc-parser/binding-linux-s390x-gnu@0.142.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-6y7qYY3TCUDYjqswImdTGl92y+KA/80twALegQPN27kfY+bG7Ib1+L3jbmrCZQx6wrVnai9IPsEZp07I0hx7JQ=="], + + "@oxc-parser/binding-linux-x64-gnu": ["@oxc-parser/binding-linux-x64-gnu@0.142.0", "", { "os": "linux", "cpu": "x64" }, "sha512-i69kAWU+2LgoH5bR+zWiiu+UzAw7Oxkwv7COeJTeY19pn4e70nKQcr9Pm6cL2Z0Z54d+gl9qADlK/0yyuCPiBA=="], + + "@oxc-parser/binding-linux-x64-musl": ["@oxc-parser/binding-linux-x64-musl@0.142.0", "", { "os": "linux", "cpu": "x64" }, "sha512-4SQs678MmjYVrmhAgCWD4o0vpaFszXw9xLX5p2Z9MMFcltxiLkA88wQjh80YHjPrXtpyZ2CWI5m+1yNKM0m2Pw=="], + + "@oxc-parser/binding-openharmony-arm64": ["@oxc-parser/binding-openharmony-arm64@0.142.0", "", { "os": "none", "cpu": "arm64" }, "sha512-YHpx9N7Ln3a++Tc8rv+H7mrK1zyJQOAwCFg8LZ3lTs1T5afGWeZrLPhPT9HLnIwSjCyJqPWVMIrMxbjcmBr2oQ=="], + + "@oxc-parser/binding-wasm32-wasi": ["@oxc-parser/binding-wasm32-wasi@0.142.0", "", { "dependencies": { "@emnapi/core": "1.11.2", "@emnapi/runtime": "1.11.2", "@napi-rs/wasm-runtime": "^1.1.6" }, "cpu": "none" }, "sha512-3pLDyY3+oogW73RM5uehNgAiR/Xfb7fvO2Q1Z1gIqZ2+50XDVQmBVlRkHXZTU4gKnQHpwETNsYQVsJ3joVB2iA=="], + + "@oxc-parser/binding-win32-arm64-msvc": ["@oxc-parser/binding-win32-arm64-msvc@0.142.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-Had/VeVY28Oyb0K+Q4FV8KCzoBycIh93oDK6pCbya9lkzdq+ikMHMgBubsdqqlybjJmQRawCQRrnBRHyQwYvcQ=="], + + "@oxc-parser/binding-win32-ia32-msvc": ["@oxc-parser/binding-win32-ia32-msvc@0.142.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-GGi3+YphVHavvgs6gum2UXoNCqzHAmPt/nXkn8ZQZstV2Q1qZD1Mn8fz/nWrDkefHQtrG/+1/XrbMxsBTo6Svw=="], + + "@oxc-parser/binding-win32-x64-msvc": ["@oxc-parser/binding-win32-x64-msvc@0.142.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Ny/Wv4Us1LGC/ljwNTp+Hx3r/pH15EFfeDF0p+n898gt+TtRd6C9SccHcuUhDiNTb8s5tt7jdeAMDRQZ4Vq6hg=="], + + "@oxc-project/types": ["@oxc-project/types@0.142.0", "", {}, "sha512-7W+2q5AKQVU36fkaryontrHn3YDt1RyUYXatw9i5H8ocYe2sPKSFB6eS8WNPeRKiN1qAWWZUPm7gwFzJGrccqQ=="], + + "@oxc-resolver/binding-android-arm-eabi": ["@oxc-resolver/binding-android-arm-eabi@11.24.2", "", { "os": "android", "cpu": "arm" }, "sha512-y09e0L0SRI2OA2tUIrjBgoV3eH5hvUKXNkJqXmNo5V2WxIjyC7I7aJfRLMEVpA8yi95f90gFDvO0VMgrDw+vwA=="], + + "@oxc-resolver/binding-android-arm64": ["@oxc-resolver/binding-android-arm64@11.24.2", "", { "os": "android", "cpu": "arm64" }, "sha512-cl4icWaZFnLdg8m6qtnh5rBMuGbxc/ptStFHLeCNwr+2cZjkjNwQu/jYRS0CHlnPecOJMpuS5M6/BH+0J/YkEg=="], + + "@oxc-resolver/binding-darwin-arm64": ["@oxc-resolver/binding-darwin-arm64@11.24.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-At29QEMF6HajbQvgY8K6OXnHD1x9rad74xBEfmCB6ZqCGsdq75aK7tOYcTbOanMy8qdIBrfL3SMr3p/lfSlb9w=="], + + "@oxc-resolver/binding-darwin-x64": ["@oxc-resolver/binding-darwin-x64@11.24.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-A5Kqr1EUj4oIL5CF4WRssq/o5P0Y11cwoFouMRmQ7YnC/A8V93nv1nb7aSU8HwcgmXropjLNkVTl4MN87cu28Q=="], + + "@oxc-resolver/binding-freebsd-x64": ["@oxc-resolver/binding-freebsd-x64@11.24.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-R5xkRBRRz7ceH/P5Jrc6G7FmdUdgpLYyESFAUDVTNQ9K0sGPxcp4ljiwEwEqsvNcQ4sYbMRrWcHHBCu7ksAJVw=="], + + "@oxc-resolver/binding-linux-arm-gnueabihf": ["@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2", "", { "os": "linux", "cpu": "arm" }, "sha512-k/RuYL4L/R58IBn3wT5ma3Wh4k62bp1eYCFRWCmMsasUOqL+H6sW0VGFadEzKWXFFlz+2uIMoeMk9ySSZJHgbg=="], + + "@oxc-resolver/binding-linux-arm-musleabihf": ["@oxc-resolver/binding-linux-arm-musleabihf@11.24.2", "", { "os": "linux", "cpu": "arm" }, "sha512-bnHAak3ujYfH5pKk4NieFNbvYvernfoQDgwLddbZ3OtMYrem87/qjlA+u+aKG0oZcqSLGCful/6/CEA+aeAgaA=="], + + "@oxc-resolver/binding-linux-arm64-gnu": ["@oxc-resolver/binding-linux-arm64-gnu@11.24.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-vDT3KHgzYp47gmtNOqL2VNhCyl5Zv643eyxm//A68J8DeUGXrvD1pZFiaT4jSfe+RInfnn1R2yVHye4enx6RnA=="], + + "@oxc-resolver/binding-linux-arm64-musl": ["@oxc-resolver/binding-linux-arm64-musl@11.24.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-+kMlQvbzfyEYtu5FcjE4p+ttBLpKW4d/AsAsuE69BxV6V4twZJeIQZFfD8gh/wqglY0MkPSezWXQH0jBV13MUw=="], + + "@oxc-resolver/binding-linux-ppc64-gnu": ["@oxc-resolver/binding-linux-ppc64-gnu@11.24.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-shjfMhmZ3gq9fv/w7bi3PnZlgOPG+2QAOFf0BJF0EgBSIGZ6PMLN2zbGEblTUYB/NKVDRyYhE2ff3dJ1QqNPkA=="], + + "@oxc-resolver/binding-linux-riscv64-gnu": ["@oxc-resolver/binding-linux-riscv64-gnu@11.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-zGelwFR5oRo+b69k8Lrzun86DyUHzfKN6cnjbR9l7Z7NIRznOE/2ZvPa1IUKqAL2PzAXOdwkfVqNvO1H2RlpAw=="], + + "@oxc-resolver/binding-linux-riscv64-musl": ["@oxc-resolver/binding-linux-riscv64-musl@11.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-qxZ1SWCXJY0eyhAlP6Lmo9F2Nrtx7EkYj9oCgL8apDPCwXwCEDA2U697bbT81JIc2IrVjxO4KX6WU2N+oN9Z4w=="], + + "@oxc-resolver/binding-linux-s390x-gnu": ["@oxc-resolver/binding-linux-s390x-gnu@11.24.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-sGCecF3cx2DFlH4t/z7ApnOnXqN48p5p5mlHDEnHTAukQa2P+qMVE4CwyWE9W+q/m3QJ7kKfGrIjax31f44oFQ=="], + + "@oxc-resolver/binding-linux-x64-gnu": ["@oxc-resolver/binding-linux-x64-gnu@11.24.2", "", { "os": "linux", "cpu": "x64" }, "sha512-k/VlMMcSzMlahb3/fENM4rTlsJ0s3fFROA0KXPBmKggqmTSaE383sl8F3KCOXPLmVsYfW6hCitMhXCEtNeZxxg=="], + + "@oxc-resolver/binding-linux-x64-musl": ["@oxc-resolver/binding-linux-x64-musl@11.24.2", "", { "os": "linux", "cpu": "x64" }, "sha512-8hbnZyNi97b/8wapYaIF9+t9GmZKBW2vunaOc3h9HGJptH7b7XpvZqOTBSm/MpTjr7H497BlgOaSfLUdhmy2bw=="], + + "@oxc-resolver/binding-openharmony-arm64": ["@oxc-resolver/binding-openharmony-arm64@11.24.2", "", { "os": "none", "cpu": "arm64" }, "sha512-MvyGik3a6pVgZ0t/kWlbmFxFLmXQJwgLsY2eYFHLpy0wGwRbfzeIGgDwQ3kXqE30z+kSXennRkCrT7TUvkptNg=="], + + "@oxc-resolver/binding-wasm32-wasi": ["@oxc-resolver/binding-wasm32-wasi@11.24.2", "", { "dependencies": { "@emnapi/core": "1.11.2", "@emnapi/runtime": "1.11.2", "@napi-rs/wasm-runtime": "^1.1.6" }, "cpu": "none" }, "sha512-vHcssMPwO08RTvj/c0iOBz90attxyG3wQJ0dTcyEQK43LRpcdLWZlV5feBhv6Isn6ahbQIzHbCgfa81+RiML0Q=="], + + "@oxc-resolver/binding-win32-arm64-msvc": ["@oxc-resolver/binding-win32-arm64-msvc@11.24.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-uokJqro2iBqkFvJdKQLP7d8/BUmFwESQFVmIJUQKj1Xn1a/LysJoe1vmeECLF5b3jsV8CAL5sEMJXX6SdK9Nhg=="], + + "@oxc-resolver/binding-win32-x64-msvc": ["@oxc-resolver/binding-win32-x64-msvc@11.24.2", "", { "os": "win32", "cpu": "x64" }, "sha512-UqGPmo56KDfLlfXFAFIrNflHT8tFxWGEivWg3Zeyp4Uy2NlKN1FGPr6/BxcLGG3+kZ6Wp14g5Uj+n71boqZfiw=="], "@pagefind/darwin-arm64": ["@pagefind/darwin-arm64@1.5.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-MXpI+7HsAdPkvJ0gk9xj9g541BCqBZOBbdwj9g6lB5LCj6kSV6nqDSjzcAJwvOsfu0fjwvC8hQU+ecfhp+MpiQ=="], @@ -836,6 +916,8 @@ "fault": ["fault@2.0.1", "", { "dependencies": { "format": "^0.2.0" } }, "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ=="], + "fd-package-json": ["fd-package-json@2.0.0", "", { "dependencies": { "walk-up-path": "^4.0.0" } }, "sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ=="], + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], "fetchdts": ["fetchdts@0.1.7", "", {}, "sha512-YoZjBdafyLIop9lSxXVI33oLD5kN31q4Td+CasofLLYeLXRFeOsuOw0Uo+XNRi9PZlbfdlN2GmRtm4tCEQ9/KA=="], @@ -848,12 +930,16 @@ "format": ["format@0.2.2", "", {}, "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww=="], + "formatly": ["formatly@0.3.0", "", { "dependencies": { "fd-package-json": "^2.0.0" }, "bin": { "formatly": "bin/index.mjs" } }, "sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w=="], + "fs-extra": ["fs-extra@7.0.1", "", { "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw=="], "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + "get-tsconfig": ["get-tsconfig@4.14.1", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-Dz/6HxkrxgNehhxLVeyv8sad9UzF2xBVeaKBQNDfJ5XiSXmp2gTR0eO0RWiT2NCKS5aGP9jjkOMggTN90qU50A=="], + "github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="], "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], @@ -938,7 +1024,7 @@ "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "js-yaml": ["js-yaml@4.3.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q=="], + "js-yaml": ["js-yaml@4.3.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ=="], "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], @@ -946,6 +1032,8 @@ "jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], + "knip": ["knip@6.32.1", "", { "dependencies": { "fdir": "^6.5.0", "formatly": "^0.3.0", "get-tsconfig": "4.14.1", "jiti": "^2.7.0", "oxc-parser": "^0.142.0", "oxc-resolver": "11.24.2", "picomatch": "^4.0.5", "smol-toml": "^1.7.1", "strip-json-comments": "5.0.3", "tinyglobby": "^0.2.17", "unbash": "^4.0.4", "yaml": "^2.9.0", "zod": "^4.4.3" }, "bin": { "knip": "bin/knip.js", "knip-bun": "bin/knip-bun.js" } }, "sha512-mIiIHMTJVUgSlz0mxEgPt7wg8DmfbCp1Txqab3WpbMCJF7YHvHtC9jeAHHXfISMl72N8WzhyG71SQlaqCOGZtg=="], + "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], @@ -1108,7 +1196,7 @@ "muggle-string": ["muggle-string@0.4.1", "", {}, "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ=="], - "nanoid": ["nanoid@3.3.16", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q=="], + "nanoid": ["nanoid@3.3.18", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w=="], "node-releases": ["node-releases@2.0.51", "", {}, "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ=="], @@ -1122,6 +1210,10 @@ "outdent": ["outdent@0.5.0", "", {}, "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q=="], + "oxc-parser": ["oxc-parser@0.142.0", "", { "dependencies": { "@oxc-project/types": "^0.142.0" }, "optionalDependencies": { "@oxc-parser/binding-android-arm-eabi": "0.142.0", "@oxc-parser/binding-android-arm64": "0.142.0", "@oxc-parser/binding-darwin-arm64": "0.142.0", "@oxc-parser/binding-darwin-x64": "0.142.0", "@oxc-parser/binding-freebsd-x64": "0.142.0", "@oxc-parser/binding-linux-arm-gnueabihf": "0.142.0", "@oxc-parser/binding-linux-arm-musleabihf": "0.142.0", "@oxc-parser/binding-linux-arm64-gnu": "0.142.0", "@oxc-parser/binding-linux-arm64-musl": "0.142.0", "@oxc-parser/binding-linux-ppc64-gnu": "0.142.0", "@oxc-parser/binding-linux-riscv64-gnu": "0.142.0", "@oxc-parser/binding-linux-riscv64-musl": "0.142.0", "@oxc-parser/binding-linux-s390x-gnu": "0.142.0", "@oxc-parser/binding-linux-x64-gnu": "0.142.0", "@oxc-parser/binding-linux-x64-musl": "0.142.0", "@oxc-parser/binding-openharmony-arm64": "0.142.0", "@oxc-parser/binding-wasm32-wasi": "0.142.0", "@oxc-parser/binding-win32-arm64-msvc": "0.142.0", "@oxc-parser/binding-win32-ia32-msvc": "0.142.0", "@oxc-parser/binding-win32-x64-msvc": "0.142.0" } }, "sha512-kKR+jPiRJYJDexVoziIg/FVGvr1fT1FZSSJOk6tVoMKKSlsf1Cso+cgGCJkOEDWOP174vRntCPFKg+AS7InWvw=="], + + "oxc-resolver": ["oxc-resolver@11.24.2", "", { "optionalDependencies": { "@oxc-resolver/binding-android-arm-eabi": "11.24.2", "@oxc-resolver/binding-android-arm64": "11.24.2", "@oxc-resolver/binding-darwin-arm64": "11.24.2", "@oxc-resolver/binding-darwin-x64": "11.24.2", "@oxc-resolver/binding-freebsd-x64": "11.24.2", "@oxc-resolver/binding-linux-arm-gnueabihf": "11.24.2", "@oxc-resolver/binding-linux-arm-musleabihf": "11.24.2", "@oxc-resolver/binding-linux-arm64-gnu": "11.24.2", "@oxc-resolver/binding-linux-arm64-musl": "11.24.2", "@oxc-resolver/binding-linux-ppc64-gnu": "11.24.2", "@oxc-resolver/binding-linux-riscv64-gnu": "11.24.2", "@oxc-resolver/binding-linux-riscv64-musl": "11.24.2", "@oxc-resolver/binding-linux-s390x-gnu": "11.24.2", "@oxc-resolver/binding-linux-x64-gnu": "11.24.2", "@oxc-resolver/binding-linux-x64-musl": "11.24.2", "@oxc-resolver/binding-openharmony-arm64": "11.24.2", "@oxc-resolver/binding-wasm32-wasi": "11.24.2", "@oxc-resolver/binding-win32-arm64-msvc": "11.24.2", "@oxc-resolver/binding-win32-x64-msvc": "11.24.2" } }, "sha512-FY91FiDBj7ls5MsFS9jN3tjz2o0/zsdSsymlakySaBwVJZorHhkWyICLZMKxlu1R9vYo+sd3z1jwb4J8x7bNDw=="], + "p-filter": ["p-filter@2.1.0", "", { "dependencies": { "p-map": "^2.0.0" } }, "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw=="], "p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], @@ -1222,6 +1314,8 @@ "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], + "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], "rolldown": ["rolldown@1.1.5", "", { "dependencies": { "@oxc-project/types": "=0.139.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.1.5", "@rolldown/binding-darwin-arm64": "1.1.5", "@rolldown/binding-darwin-x64": "1.1.5", "@rolldown/binding-freebsd-x64": "1.1.5", "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", "@rolldown/binding-linux-arm64-gnu": "1.1.5", "@rolldown/binding-linux-arm64-musl": "1.1.5", "@rolldown/binding-linux-ppc64-gnu": "1.1.5", "@rolldown/binding-linux-s390x-gnu": "1.1.5", "@rolldown/binding-linux-x64-gnu": "1.1.5", "@rolldown/binding-linux-x64-musl": "1.1.5", "@rolldown/binding-openharmony-arm64": "1.1.5", "@rolldown/binding-wasm32-wasi": "1.1.5", "@rolldown/binding-win32-arm64-msvc": "1.1.5", "@rolldown/binding-win32-x64-msvc": "1.1.5" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA=="], @@ -1256,6 +1350,8 @@ "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], + "smol-toml": ["smol-toml@1.7.1", "", {}, "sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ=="], + "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], @@ -1274,6 +1370,8 @@ "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], + "strip-json-comments": ["strip-json-comments@5.0.3", "", {}, "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw=="], + "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], @@ -1308,6 +1406,8 @@ "ufo": ["ufo@1.6.4", "", {}, "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA=="], + "unbash": ["unbash@4.0.10", "", {}, "sha512-b7zoBQvpWp0vuN5q2vK2RRBR2SvuruQAs50DApdDveBSn3eSYd84IaHodFqQIMlvY9K2VnyBUEXgwOBuGU9GBg=="], + "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], "undici-types": ["undici-types@8.3.0", "", {}, "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ=="], @@ -1352,6 +1452,8 @@ "vue": ["vue@3.5.39", "", { "dependencies": { "@vue/compiler-dom": "3.5.39", "@vue/compiler-sfc": "3.5.39", "@vue/runtime-dom": "3.5.39", "@vue/server-renderer": "3.5.39", "@vue/shared": "3.5.39" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-xmZCYabFGcirU8r0fTuvl/LICc1OU620rnqepaJDL/a141ZigkG7AyaxQLdqJ02ZRYzWe6YPaDHeQx7MfknQfA=="], + "walk-up-path": ["walk-up-path@4.0.0", "", {}, "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A=="], + "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="], @@ -1398,6 +1500,10 @@ "@manypkg/get-packages/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], + "@rolldown/binding-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.11.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" } }, "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ=="], + + "@rolldown/binding-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.11.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw=="], + "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], "@sheetwrite/docs-start/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], @@ -1438,7 +1544,9 @@ "playwright/fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="], - "read-yaml-file/js-yaml": ["js-yaml@3.15.0", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog=="], + "read-yaml-file/js-yaml": ["js-yaml@3.15.1", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag=="], + + "rolldown/@oxc-project/types": ["@oxc-project/types@0.139.0", "", {}, "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw=="], "tinyglobby/picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 4bc358c1..f159918e 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,29 @@ # @sheetwrite/docs-start +## 0.0.2 + +### Patch Changes + +- Updated dependencies [8457eca] +- Updated dependencies [dac694a] +- Updated dependencies [0e09ecc] +- Updated dependencies [41f6749] +- Updated dependencies +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [55b1f35] +- Updated dependencies [b225783] +- Updated dependencies [41f6749] +- Updated dependencies [ce1e404] +- Updated dependencies [41f6749] + - @sheetwrite/core@0.4.0 + - @sheetwrite/xlsx@0.4.0 + - @sheetwrite/react@0.4.0 + - @sheetwrite/vue@0.4.0 + - @sheetwrite/svelte@0.4.0 + - @sheetwrite/wasm@0.4.0 + ## 0.0.1 ### Patch Changes diff --git a/docs/package.json b/docs/package.json index 1a20971b..9ba78720 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,6 +1,6 @@ { "name": "@sheetwrite/docs-start", - "version": "0.0.1", + "version": "0.0.2", "private": true, "type": "module", "scripts": { diff --git a/docs/src/content/docs/api/core-adapter/create-row-bridge.md b/docs/src/content/docs/api/core-adapter/create-row-bridge.md index c2f38d87..30daa2fc 100644 --- a/docs/src/content/docs/api/core-adapter/create-row-bridge.md +++ b/docs/src/content/docs/api/core-adapter/create-row-bridge.md @@ -9,7 +9,7 @@ Create a typed bridge while preserving row and identity inference. ## Declaration diff --git a/docs/src/content/docs/api/core-adapter/row-bridge-clear-delta.md b/docs/src/content/docs/api/core-adapter/row-bridge-clear-delta.md index 672aafe2..9b5e2243 100644 --- a/docs/src/content/docs/api/core-adapter/row-bridge-clear-delta.md +++ b/docs/src/content/docs/api/core-adapter/row-bridge-clear-delta.md @@ -9,7 +9,7 @@ A clearRange effect expanded to its exact changed cells. ## Members 10 diff --git a/docs/src/content/docs/api/core-adapter/row-bridge-delta.md b/docs/src/content/docs/api/core-adapter/row-bridge-delta.md index 67c04cb0..379e7408 100644 --- a/docs/src/content/docs/api/core-adapter/row-bridge-delta.md +++ b/docs/src/content/docs/api/core-adapter/row-bridge-delta.md @@ -9,7 +9,7 @@ Every possible projection produced by a row bridge. ## Declaration diff --git a/docs/src/content/docs/api/core-adapter/row-bridge-fill-delta.md b/docs/src/content/docs/api/core-adapter/row-bridge-fill-delta.md index 1a11b145..6e71fcef 100644 --- a/docs/src/content/docs/api/core-adapter/row-bridge-fill-delta.md +++ b/docs/src/content/docs/api/core-adapter/row-bridge-fill-delta.md @@ -9,7 +9,7 @@ A fill-series transaction effect. ## Members 10 diff --git a/docs/src/content/docs/api/core-adapter/row-bridge-handler.md b/docs/src/content/docs/api/core-adapter/row-bridge-handler.md index 44e6ce97..2f923c2b 100644 --- a/docs/src/content/docs/api/core-adapter/row-bridge-handler.md +++ b/docs/src/content/docs/api/core-adapter/row-bridge-handler.md @@ -9,7 +9,7 @@ Callback accepted by imperative and framework adapters. ## Declaration diff --git a/docs/src/content/docs/api/core-adapter/row-bridge-host-action-delta.md b/docs/src/content/docs/api/core-adapter/row-bridge-host-action-delta.md index 06648bc1..3806b437 100644 --- a/docs/src/content/docs/api/core-adapter/row-bridge-host-action-delta.md +++ b/docs/src/content/docs/api/core-adapter/row-bridge-host-action-delta.md @@ -9,7 +9,7 @@ A document operation that needs a host-side action rather than row mutation. ## Members 9 diff --git a/docs/src/content/docs/api/core-adapter/row-bridge-metadata-delta.md b/docs/src/content/docs/api/core-adapter/row-bridge-metadata-delta.md index 8af67271..03f72581 100644 --- a/docs/src/content/docs/api/core-adapter/row-bridge-metadata-delta.md +++ b/docs/src/content/docs/api/core-adapter/row-bridge-metadata-delta.md @@ -9,7 +9,7 @@ A document operation that changes workbook or column metadata. ## Members 9 diff --git a/docs/src/content/docs/api/core-adapter/row-bridge-paste-delta.md b/docs/src/content/docs/api/core-adapter/row-bridge-paste-delta.md index 93253c62..c35448cf 100644 --- a/docs/src/content/docs/api/core-adapter/row-bridge-paste-delta.md +++ b/docs/src/content/docs/api/core-adapter/row-bridge-paste-delta.md @@ -9,7 +9,7 @@ A paste transaction effect. A paste can contain multiple canonical patches. ## Members 10 diff --git a/docs/src/content/docs/api/core-adapter/row-bridge-projection.md b/docs/src/content/docs/api/core-adapter/row-bridge-projection.md index 2acab46e..97532597 100644 --- a/docs/src/content/docs/api/core-adapter/row-bridge-projection.md +++ b/docs/src/content/docs/api/core-adapter/row-bridge-projection.md @@ -9,7 +9,7 @@ Result of projection or reconciliation. ## Members 3 diff --git a/docs/src/content/docs/api/core-adapter/row-bridge-range-delta.md b/docs/src/content/docs/api/core-adapter/row-bridge-range-delta.md index 8a3fb24a..91a2c402 100644 --- a/docs/src/content/docs/api/core-adapter/row-bridge-range-delta.md +++ b/docs/src/content/docs/api/core-adapter/row-bridge-range-delta.md @@ -9,7 +9,7 @@ A setRange/setBlock effect expanded to its exact changed cells. ## Members 10 diff --git a/docs/src/content/docs/api/core-adapter/row-bridge-reconciliation-input.md b/docs/src/content/docs/api/core-adapter/row-bridge-reconciliation-input.md index 8d27bef5..74a96682 100644 --- a/docs/src/content/docs/api/core-adapter/row-bridge-reconciliation-input.md +++ b/docs/src/content/docs/api/core-adapter/row-bridge-reconciliation-input.md @@ -9,7 +9,7 @@ Input to [`RowBridge.reconcile`](/docs/api/core-adapter/row-bridge/#row-bridge-r ## Members 9 diff --git a/docs/src/content/docs/api/core-adapter/row-bridge-reconciliation-status.md b/docs/src/content/docs/api/core-adapter/row-bridge-reconciliation-status.md index b20f24b3..af138f22 100644 --- a/docs/src/content/docs/api/core-adapter/row-bridge-reconciliation-status.md +++ b/docs/src/content/docs/api/core-adapter/row-bridge-reconciliation-status.md @@ -9,7 +9,7 @@ Reconciliation status for a canonical transaction response. ## Declaration diff --git a/docs/src/content/docs/api/core-adapter/row-bridge-row-structure-delta.md b/docs/src/content/docs/api/core-adapter/row-bridge-row-structure-delta.md index 0ceb42c6..c17c7fdc 100644 --- a/docs/src/content/docs/api/core-adapter/row-bridge-row-structure-delta.md +++ b/docs/src/content/docs/api/core-adapter/row-bridge-row-structure-delta.md @@ -9,7 +9,7 @@ Stable row identity effects for insert, delete, and move operations. ## Members 16 diff --git a/docs/src/content/docs/api/core-adapter/row-bridge-transaction-id.md b/docs/src/content/docs/api/core-adapter/row-bridge-transaction-id.md index 3893bf20..993ea15f 100644 --- a/docs/src/content/docs/api/core-adapter/row-bridge-transaction-id.md +++ b/docs/src/content/docs/api/core-adapter/row-bridge-transaction-id.md @@ -9,7 +9,7 @@ Compute a deterministic identity for a canonical transaction. ## Declaration diff --git a/docs/src/content/docs/api/core-adapter/row-bridge-unprojectable-delta.md b/docs/src/content/docs/api/core-adapter/row-bridge-unprojectable-delta.md index 18cf289b..76d5cd9a 100644 --- a/docs/src/content/docs/api/core-adapter/row-bridge-unprojectable-delta.md +++ b/docs/src/content/docs/api/core-adapter/row-bridge-unprojectable-delta.md @@ -9,7 +9,7 @@ An explicit projection record for an operation with no row-space meaning. ## Members 9 diff --git a/docs/src/content/docs/api/core-adapter/row-bridge.md b/docs/src/content/docs/api/core-adapter/row-bridge.md index 21ba864f..565cb8a8 100644 --- a/docs/src/content/docs/api/core-adapter/row-bridge.md +++ b/docs/src/content/docs/api/core-adapter/row-bridge.md @@ -12,7 +12,7 @@ The bridge only owns compact data-space identity arrays. It never writes to ## Members 5 diff --git a/docs/src/content/docs/api/core-worker.md b/docs/src/content/docs/api/core-worker.md index 5cabfba6..5f1f0fed 100644 --- a/docs/src/content/docs/api/core-worker.md +++ b/docs/src/content/docs/api/core-worker.md @@ -24,5 +24,5 @@ Source entry: `packages/core/src/worker.ts` ### Types 1 diff --git a/docs/src/content/docs/api/core-worker/create-worker-message-handler.md b/docs/src/content/docs/api/core-worker/create-worker-message-handler.md index ce413af3..e2286873 100644 --- a/docs/src/content/docs/api/core-worker/create-worker-message-handler.md +++ b/docs/src/content/docs/api/core-worker/create-worker-message-handler.md @@ -11,7 +11,7 @@ without booting a browser Worker. ## Declaration diff --git a/docs/src/content/docs/api/core-worker/worker-acknowledgement.md b/docs/src/content/docs/api/core-worker/worker-acknowledgement.md index 589fafc7..ade04cd5 100644 --- a/docs/src/content/docs/api/core-worker/worker-acknowledgement.md +++ b/docs/src/content/docs/api/core-worker/worker-acknowledgement.md @@ -1,29 +1,41 @@ --- title: "WorkerAcknowledgement | @sheetwrite/core/worker" -description: "Acknowledgement posted back to the sender after a frame actually painted." +description: "Lifecycle and frame acknowledgements posted back to the sender." --- -Acknowledgement posted back to the sender after a frame actually painted. +Lifecycle and frame acknowledgements posted back to the sender. -## Members 1 +## Variants 3 -
+
+
-
-type +```ts generated +{ type: "ready" } +``` + +
+
```ts generated -type: "painted" +{ type: "fatal"; reason: string } ``` - +
+
+ +```ts generated +{ type: "painted" } +``` + +
## Declaration @@ -32,9 +44,17 @@ type: "painted" View full TypeScript declaration ```ts generated -export type WorkerAcknowledgement = { - type: "painted"; -}; +export type WorkerAcknowledgement = + | { + type: "ready"; + } + | { + type: "fatal"; + reason: string; + } + | { + type: "painted"; + }; ``` diff --git a/docs/src/content/docs/api/core.md b/docs/src/content/docs/api/core.md index c5a6ee18..5c7d9ab3 100644 --- a/docs/src/content/docs/api/core.md +++ b/docs/src/content/docs/api/core.md @@ -8,7 +8,7 @@ description: "API reference for @sheetwrite/core." Source entry: `packages/core/src/index.ts` @@ -37,18 +37,16 @@ Source entry: `packages/core/src/index.ts` XlsxResourceErrorStable resource-limit failure surfaced before an XLSX codec allocates unsafe data.
-### Functions 60 +### Functions 58
assertRuntimeResourceSnapshotReject overlap, negative values, and attempts to fold runtime observations into owner totals. assertWorkbookTablesReject an invalid or oversized live workbook before table arrays are copied to WASM. cellA10-based (row, col) → A1 cell reference (0, 0 → "A1"). cellScalarToTextSpreadsheet display text for a resolved scalar. -cloneCellHyperlinkClone one validated hyperlink into an independent plain-data value. colToA1Column index (0-based) → A1 column label (0 → "A", 26 → "AA"). createGridCreates and mounts an imperative Grid in the supplied host element. createGridFromSnapshotMount a grid over a validated, non-dirty snapshot. -createHyperlinkIdProduce a new stable identity for copied hyperlinks without trusting clipboard IDs. createRowBridgeCreate a typed bridge while preserving row and identity inference. createRuntimeResourceSnapshotBuild and validate one operation-phase snapshot without double-counting runtime observations. dateToSerialConvert a real UTC Date to the Excel 1900-system serial. diff --git a/docs/src/content/docs/api/core/clone-cell-hyperlink.md b/docs/src/content/docs/api/core/clone-cell-hyperlink.md deleted file mode 100644 index 3ac863c6..00000000 --- a/docs/src/content/docs/api/core/clone-cell-hyperlink.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "cloneCellHyperlink | @sheetwrite/core" -description: "Clone one validated hyperlink into an independent plain-data value." ---- - - - -Clone one validated hyperlink into an independent plain-data value. - - - -## Declaration - -
- -```ts generated -function cloneCellHyperlink(link: CellHyperlink): CellHyperlink -``` - -
diff --git a/docs/src/content/docs/api/core/create-hyperlink-id.md b/docs/src/content/docs/api/core/create-hyperlink-id.md deleted file mode 100644 index 8f94f190..00000000 --- a/docs/src/content/docs/api/core/create-hyperlink-id.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "createHyperlinkId | @sheetwrite/core" -description: "Produce a new stable identity for copied hyperlinks without trusting clipboard IDs." ---- - - - -Produce a new stable identity for copied hyperlinks without trusting clipboard IDs. - - - -## Declaration - -
- -```ts generated -function createHyperlinkId(): string -``` - -
diff --git a/docs/src/content/docs/api/core/create-row-bridge.md b/docs/src/content/docs/api/core/create-row-bridge.md index f2a8b547..8c6c2870 100644 --- a/docs/src/content/docs/api/core/create-row-bridge.md +++ b/docs/src/content/docs/api/core/create-row-bridge.md @@ -9,7 +9,7 @@ Create a typed bridge while preserving row and identity inference. ## Declaration diff --git a/docs/src/content/docs/api/core/incomplete-data-error.md b/docs/src/content/docs/api/core/incomplete-data-error.md index 3e329e1b..53ef5213 100644 --- a/docs/src/content/docs/api/core/incomplete-data-error.md +++ b/docs/src/content/docs/api/core/incomplete-data-error.md @@ -9,7 +9,7 @@ Error thrown when an operation requires datasource cells that are not loaded. ## Members 3 diff --git a/docs/src/content/docs/api/core/row-bridge-clear-delta.md b/docs/src/content/docs/api/core/row-bridge-clear-delta.md index be0814f9..4fa815b9 100644 --- a/docs/src/content/docs/api/core/row-bridge-clear-delta.md +++ b/docs/src/content/docs/api/core/row-bridge-clear-delta.md @@ -9,7 +9,7 @@ A clearRange effect expanded to its exact changed cells. ## Members 10 diff --git a/docs/src/content/docs/api/core/row-bridge-delta.md b/docs/src/content/docs/api/core/row-bridge-delta.md index ad52dafa..8db17252 100644 --- a/docs/src/content/docs/api/core/row-bridge-delta.md +++ b/docs/src/content/docs/api/core/row-bridge-delta.md @@ -9,7 +9,7 @@ Every possible projection produced by a row bridge. ## Declaration diff --git a/docs/src/content/docs/api/core/row-bridge-fill-delta.md b/docs/src/content/docs/api/core/row-bridge-fill-delta.md index 27da9604..34dff5e4 100644 --- a/docs/src/content/docs/api/core/row-bridge-fill-delta.md +++ b/docs/src/content/docs/api/core/row-bridge-fill-delta.md @@ -9,7 +9,7 @@ A fill-series transaction effect. ## Members 10 diff --git a/docs/src/content/docs/api/core/row-bridge-handler.md b/docs/src/content/docs/api/core/row-bridge-handler.md index 73a20f9a..293d4d9c 100644 --- a/docs/src/content/docs/api/core/row-bridge-handler.md +++ b/docs/src/content/docs/api/core/row-bridge-handler.md @@ -9,7 +9,7 @@ Callback accepted by imperative and framework adapters. ## Declaration diff --git a/docs/src/content/docs/api/core/row-bridge-host-action-delta.md b/docs/src/content/docs/api/core/row-bridge-host-action-delta.md index 6771b324..356bee2a 100644 --- a/docs/src/content/docs/api/core/row-bridge-host-action-delta.md +++ b/docs/src/content/docs/api/core/row-bridge-host-action-delta.md @@ -9,7 +9,7 @@ A document operation that needs a host-side action rather than row mutation. ## Members 9 diff --git a/docs/src/content/docs/api/core/row-bridge-metadata-delta.md b/docs/src/content/docs/api/core/row-bridge-metadata-delta.md index 266aadb6..6eb6ca66 100644 --- a/docs/src/content/docs/api/core/row-bridge-metadata-delta.md +++ b/docs/src/content/docs/api/core/row-bridge-metadata-delta.md @@ -9,7 +9,7 @@ A document operation that changes workbook or column metadata. ## Members 9 diff --git a/docs/src/content/docs/api/core/row-bridge-paste-delta.md b/docs/src/content/docs/api/core/row-bridge-paste-delta.md index 4103818b..1e960c7e 100644 --- a/docs/src/content/docs/api/core/row-bridge-paste-delta.md +++ b/docs/src/content/docs/api/core/row-bridge-paste-delta.md @@ -9,7 +9,7 @@ A paste transaction effect. A paste can contain multiple canonical patches. ## Members 10 diff --git a/docs/src/content/docs/api/core/row-bridge-projection.md b/docs/src/content/docs/api/core/row-bridge-projection.md index 02588f54..ea4d9fb5 100644 --- a/docs/src/content/docs/api/core/row-bridge-projection.md +++ b/docs/src/content/docs/api/core/row-bridge-projection.md @@ -9,7 +9,7 @@ Result of projection or reconciliation. ## Members 3 diff --git a/docs/src/content/docs/api/core/row-bridge-range-delta.md b/docs/src/content/docs/api/core/row-bridge-range-delta.md index 765a4ce1..408ffdd6 100644 --- a/docs/src/content/docs/api/core/row-bridge-range-delta.md +++ b/docs/src/content/docs/api/core/row-bridge-range-delta.md @@ -9,7 +9,7 @@ A setRange/setBlock effect expanded to its exact changed cells. ## Members 10 diff --git a/docs/src/content/docs/api/core/row-bridge-reconciliation-input.md b/docs/src/content/docs/api/core/row-bridge-reconciliation-input.md index cab19bce..699db983 100644 --- a/docs/src/content/docs/api/core/row-bridge-reconciliation-input.md +++ b/docs/src/content/docs/api/core/row-bridge-reconciliation-input.md @@ -9,7 +9,7 @@ Input to [`RowBridge.reconcile`](/docs/api/core/row-bridge/#row-bridge-reconcile ## Members 9 diff --git a/docs/src/content/docs/api/core/row-bridge-reconciliation-status.md b/docs/src/content/docs/api/core/row-bridge-reconciliation-status.md index 94cd7fe5..ec0a031a 100644 --- a/docs/src/content/docs/api/core/row-bridge-reconciliation-status.md +++ b/docs/src/content/docs/api/core/row-bridge-reconciliation-status.md @@ -9,7 +9,7 @@ Reconciliation status for a canonical transaction response. ## Declaration diff --git a/docs/src/content/docs/api/core/row-bridge-row-structure-delta.md b/docs/src/content/docs/api/core/row-bridge-row-structure-delta.md index 37ff1fde..366e17b8 100644 --- a/docs/src/content/docs/api/core/row-bridge-row-structure-delta.md +++ b/docs/src/content/docs/api/core/row-bridge-row-structure-delta.md @@ -9,7 +9,7 @@ Stable row identity effects for insert, delete, and move operations. ## Members 16 diff --git a/docs/src/content/docs/api/core/row-bridge-transaction-id.md b/docs/src/content/docs/api/core/row-bridge-transaction-id.md index 9a5016fd..207413b0 100644 --- a/docs/src/content/docs/api/core/row-bridge-transaction-id.md +++ b/docs/src/content/docs/api/core/row-bridge-transaction-id.md @@ -9,7 +9,7 @@ Compute a deterministic identity for a canonical transaction. ## Declaration diff --git a/docs/src/content/docs/api/core/row-bridge-unprojectable-delta.md b/docs/src/content/docs/api/core/row-bridge-unprojectable-delta.md index 8fafc9aa..3706701c 100644 --- a/docs/src/content/docs/api/core/row-bridge-unprojectable-delta.md +++ b/docs/src/content/docs/api/core/row-bridge-unprojectable-delta.md @@ -9,7 +9,7 @@ An explicit projection record for an operation with no row-space meaning. ## Members 9 diff --git a/docs/src/content/docs/api/core/row-bridge.md b/docs/src/content/docs/api/core/row-bridge.md index fd55f962..302a3502 100644 --- a/docs/src/content/docs/api/core/row-bridge.md +++ b/docs/src/content/docs/api/core/row-bridge.md @@ -12,7 +12,7 @@ The bridge only owns compact data-space identity arrays. It never writes to ## Members 5 diff --git a/docs/src/content/docs/api/index.md b/docs/src/content/docs/api/index.md index a6c9b60f..6b9aecd9 100644 --- a/docs/src/content/docs/api/index.md +++ b/docs/src/content/docs/api/index.md @@ -9,7 +9,7 @@ The package `exports` maps define this inventory. Supported, internal, asset, an - + diff --git a/docs/src/content/docs/api/wasm/cell-store.md b/docs/src/content/docs/api/wasm/cell-store.md index fdca90c4..3a840706 100644 --- a/docs/src/content/docs/api/wasm/cell-store.md +++ b/docs/src/content/docs/api/wasm/cell-store.md @@ -310,9 +310,9 @@ getWindow: (sheet: number, row_start: number, row_end: number, cols: Uint32Array ```

One bulk read of a rectangular window for the renderer. Returns -contiguous typed arrays (row-major over `rows x cols`) plus the unique -strings referenced by the window, so the host paints without crossing -the boundary per cell.

+contiguous packed cell data (row-major over `rows x cols`) plus the +unique strings referenced by the window, so the host paints without +crossing the boundary per cell.

diff --git a/docs/src/content/docs/api/wasm/init-input.md b/docs/src/content/docs/api/wasm/init-input.md index f307b690..35148302 100644 --- a/docs/src/content/docs/api/wasm/init-input.md +++ b/docs/src/content/docs/api/wasm/init-input.md @@ -9,7 +9,7 @@ Sources accepted by asynchronous initialization: a fetchable URL/request/respons ## Declaration diff --git a/docs/src/content/docs/api/wasm/init-output.md b/docs/src/content/docs/api/wasm/init-output.md index 5c84d387..c1292687 100644 --- a/docs/src/content/docs/api/wasm/init-output.md +++ b/docs/src/content/docs/api/wasm/init-output.md @@ -9,10 +9,10 @@ Result of module initialization: the instantiated exports plus the shared linear -## Members 134 +## Members 128
@@ -1078,42 +1078,6 @@ readonly windowview_nCols: (a: number) => number;
-
-windowview_nRows - -```ts generated -readonly windowview_nRows: (a: number) => number; -``` - -
- -
-windowview_takeCondMatches - -```ts generated -readonly windowview_takeCondMatches: (a: number) => [number, number]; -``` - -
- -
-windowview_takeStringIds - -```ts generated -readonly windowview_takeStringIds: (a: number) => [number, number]; -``` - -
- -
-windowview_takeStringIndex - -```ts generated -readonly windowview_takeStringIndex: (a: number) => [number, number]; -``` - -
-
windowview_takeStrings @@ -1123,38 +1087,20 @@ readonly windowview_takeStrings: (a: number) => [number, number];
-
-windowview_takeStyleDict - -```ts generated -readonly windowview_takeStyleDict: (a: number) => [number, number]; -``` - -
- -
-windowview_takeStyleIndex +
+windowview_takePacked ```ts generated -readonly windowview_takeStyleIndex: (a: number) => [number, number]; +readonly windowview_takePacked: (a: number) => [number, number]; ```
-
-windowview_takeKinds - -```ts generated -readonly windowview_takeKinds: (a: number) => [number, number]; -``` - -
- -
-windowview_takeNumbers +
+windowview_nRows ```ts generated -readonly windowview_takeNumbers: (a: number) => [number, number]; +readonly windowview_nRows: (a: number) => number; ```
@@ -1832,15 +1778,9 @@ export interface InitOutput { readonly sourcesnapshot_referenceTargets: (a: number) => [number, number]; readonly sourcesnapshot_spillDerived: (a: number) => [number, number]; readonly windowview_nCols: (a: number) => number; - readonly windowview_nRows: (a: number) => number; - readonly windowview_takeCondMatches: (a: number) => [number, number]; - readonly windowview_takeStringIds: (a: number) => [number, number]; - readonly windowview_takeStringIndex: (a: number) => [number, number]; readonly windowview_takeStrings: (a: number) => [number, number]; - readonly windowview_takeStyleDict: (a: number) => [number, number]; - readonly windowview_takeStyleIndex: (a: number) => [number, number]; - readonly windowview_takeKinds: (a: number) => [number, number]; - readonly windowview_takeNumbers: (a: number) => [number, number]; + readonly windowview_takePacked: (a: number) => [number, number]; + readonly windowview_nRows: (a: number) => number; readonly __wbindgen_malloc: (a: number, b: number) => number; readonly __wbindgen_realloc: ( a: number, diff --git a/docs/src/content/docs/api/wasm/init-sync.md b/docs/src/content/docs/api/wasm/init-sync.md index 77611164..f2108bac 100644 --- a/docs/src/content/docs/api/wasm/init-sync.md +++ b/docs/src/content/docs/api/wasm/init-sync.md @@ -10,7 +10,7 @@ a precompiled `WebAssembly.Module`. ## Declaration diff --git a/docs/src/content/docs/api/wasm/sync-init-input.md b/docs/src/content/docs/api/wasm/sync-init-input.md index 3ce265f9..ae69191c 100644 --- a/docs/src/content/docs/api/wasm/sync-init-input.md +++ b/docs/src/content/docs/api/wasm/sync-init-input.md @@ -9,7 +9,7 @@ Sources accepted by synchronous initialization: raw module bytes or a precompile ## Declaration diff --git a/docs/src/content/docs/api/wasm/window-view.md b/docs/src/content/docs/api/wasm/window-view.md index 0590bfbe..8308cb11 100644 --- a/docs/src/content/docs/api/wasm/window-view.md +++ b/docs/src/content/docs/api/wasm/window-view.md @@ -12,7 +12,7 @@ A bulk window of resolved cells, row-major over `n_rows x n_cols`.
Source
packages/wasm/pkg/sheetwrite_wasm.d.ts#L367
-## Members 11 +## Members 5
@@ -43,74 +43,22 @@ nRows: number;
-
-takeCondMatches Consume and return per-cell conditional-format rule bitmasks; empty when the sheet has no rules. +
+takePacked Consume the complete fixed-width window payload. ```ts generated -takeCondMatches: () => Uint32Array; -``` - -
- -
-takeKinds Consume and return the per-cell tag array: 0 empty, 1 number, 2 string. - -```ts generated -takeKinds: () => Uint8Array; -``` - -
- -
-takeNumbers Consume and return per-cell numeric payloads (valid where kind == 1). - -```ts generated -takeNumbers: () => Float64Array; -``` - -
- -
-takeStringIds Consume and return per-cell GLOBAL string-pool ids; u32::MAX means none. - -```ts generated -takeStringIds: () => Uint32Array; -``` - -
- -
-takeStringIndex Consume and return per-cell indices into strings (string cells only). - -```ts generated -takeStringIndex: () => Int32Array; +takePacked: () => Uint8Array; ``` +

Consume the complete fixed-width window payload. The returned +`Uint8Array` is copied by wasm-bindgen into JS-owned memory.

-takeStrings Consume and return unique strings referenced by this window. - -```ts generated -takeStrings: () => string[]; -``` - -
- -
-takeStyleDict Consume and return the unique global style-dictionary ids referenced by this window, in local-index order; the host maps each to a CellStyle. - -```ts generated -takeStyleDict: () => Uint32Array; -``` - -
- -
-takeStyleIndex Consume and return per-cell WINDOW-LOCAL style indices into the dict. +takeStrings Consume formula-error sentinel strings referenced by the packed data. ```ts generated -takeStyleIndex: () => Uint32Array +takeStrings: () => string[] ```
@@ -126,14 +74,8 @@ class WindowView { free: () => void; nCols: number; nRows: number; - takeCondMatches: () => Uint32Array; - takeKinds: () => Uint8Array; - takeNumbers: () => Float64Array; - takeStringIds: () => Uint32Array; - takeStringIndex: () => Int32Array; + takePacked: () => Uint8Array; takeStrings: () => string[]; - takeStyleDict: () => Uint32Array; - takeStyleIndex: () => Uint32Array; } ``` diff --git a/docs/src/generated/compatibility-results.json b/docs/src/generated/compatibility-results.json index ac5b35a1..20f9a233 100644 --- a/docs/src/generated/compatibility-results.json +++ b/docs/src/generated/compatibility-results.json @@ -2,7 +2,7 @@ "schemaVersion": 1, "testSet": { "version": 1, - "libraryVersion": "0.3.1", + "libraryVersion": "0.4.0", "checksum": "bdf94c76df81ea1fa2e1bf96a557c41b21a0f11ea11ae612fcccc35157d7275a", "totalTests": 2350, "publishedExamples": 177, diff --git a/docs/src/generated/docs-contract.json b/docs/src/generated/docs-contract.json index ada5e87d..a28f7ee7 100644 --- a/docs/src/generated/docs-contract.json +++ b/docs/src/generated/docs-contract.json @@ -23,9 +23,9 @@ "toXlsxWorkbook" ], "entryPointCount": 18, - "exportCount": 468, - "symbolPageCount": 468, - "apiSha256": "9cc3fe343edebb80e5eb431b802655092d5ccd02d94ab4dfab76127c312d6192", + "exportCount": 466, + "symbolPageCount": 466, + "apiSha256": "53bac9252e6664e7ab153847ffbce109758fb41df63876a219847cd332528114", "compatibilitySha256": "3dc63d06901349f4edd5b2b5bc332b87cdbecacc54d303c85eb2b0b1354ed01a", "formulaContractSha256": "c19bbb023fd08bd378ca2d0b82761fa1b203e29f93a5d4b32bf4a2e6ce4affaf" } diff --git a/docs/src/generated/public-api.json b/docs/src/generated/public-api.json index bb518e87..d554a47e 100644 --- a/docs/src/generated/public-api.json +++ b/docs/src/generated/public-api.json @@ -489,18 +489,6 @@ } ] }, - { - "name": "cloneCellHyperlink", - "kind": "function", - "signature": "(link: CellHyperlink): CellHyperlink", - "owners": [ - "src/hyperlink.ts" - ], - "source": "src/hyperlink.ts#L263", - "jsDocTags": [], - "documentation": "Clone one validated hyperlink into an independent plain-data value.", - "memberDocs": [] - }, { "name": "colToA1", "kind": "function", @@ -893,18 +881,6 @@ "documentation": "Mount a grid over a validated, non-dirty snapshot. The grid owns and disposes\nthe hydrated store just like one created through `createGrid`.", "memberDocs": [] }, - { - "name": "createHyperlinkId", - "kind": "function", - "signature": "(): string", - "owners": [ - "src/hyperlink.ts" - ], - "source": "src/hyperlink.ts#L329", - "jsDocTags": [], - "documentation": "Produce a new stable identity for copied hyperlinks without trusting clipboard IDs.", - "memberDocs": [] - }, { "name": "createRowBridge", "kind": "function", @@ -912,7 +888,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L859", + "source": "src/row-bridge.ts#L858", "jsDocTags": [], "documentation": "Create a typed bridge while preserving row and identity inference.", "memberDocs": [] @@ -2041,7 +2017,7 @@ "owners": [ "src/store/data-engine.ts" ], - "source": "src/store/data-engine.ts#L245", + "source": "src/store/data-engine.ts#L242", "jsDocTags": [], "documentation": "Error thrown when an operation requires datasource cells that are not loaded.", "memberDocs": [] @@ -2990,7 +2966,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L313", + "source": "src/row-bridge.ts#L312", "jsDocTags": [], "documentation": "Projects canonical document transactions into host-owned row changes.\n\nThe bridge only owns compact data-space identity arrays. It never writes to\n`defaultRows`, never renders, and never creates a second document store.", "memberDocs": [ @@ -3031,7 +3007,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L82", + "source": "src/row-bridge.ts#L81", "jsDocTags": [], "documentation": "A clearRange effect expanded to its exact changed cells.", "memberDocs": [] @@ -3055,7 +3031,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L156", + "source": "src/row-bridge.ts#L155", "jsDocTags": [], "documentation": "Every possible projection produced by a row bridge.", "memberDocs": [] @@ -3067,7 +3043,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L98", + "source": "src/row-bridge.ts#L97", "jsDocTags": [], "documentation": "A fill-series transaction effect.", "memberDocs": [] @@ -3079,7 +3055,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L199", + "source": "src/row-bridge.ts#L198", "jsDocTags": [], "documentation": "Callback accepted by imperative and framework adapters.", "memberDocs": [] @@ -3091,7 +3067,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L137", + "source": "src/row-bridge.ts#L136", "jsDocTags": [], "documentation": "A document operation that needs a host-side action rather than row mutation.", "memberDocs": [] @@ -3127,7 +3103,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L120", + "source": "src/row-bridge.ts#L119", "jsDocTags": [], "documentation": "A document operation that changes workbook or column metadata.", "memberDocs": [] @@ -3160,7 +3136,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L90", + "source": "src/row-bridge.ts#L89", "jsDocTags": [], "documentation": "A paste transaction effect. A paste can contain multiple canonical patches.", "memberDocs": [] @@ -3172,7 +3148,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L192", + "source": "src/row-bridge.ts#L191", "jsDocTags": [], "documentation": "Result of projection or reconciliation.", "memberDocs": [] @@ -3184,7 +3160,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L74", + "source": "src/row-bridge.ts#L73", "jsDocTags": [], "documentation": "A setRange/setBlock effect expanded to its exact changed cells.", "memberDocs": [] @@ -3196,7 +3172,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L177", + "source": "src/row-bridge.ts#L176", "jsDocTags": [], "documentation": "Input to {@link RowBridge.reconcile}.", "memberDocs": [ @@ -3217,7 +3193,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L168", + "source": "src/row-bridge.ts#L167", "jsDocTags": [], "documentation": "Reconciliation status for a canonical transaction response.", "memberDocs": [] @@ -3229,7 +3205,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L106", + "source": "src/row-bridge.ts#L105", "jsDocTags": [], "documentation": "Stable row identity effects for insert, delete, and move operations.", "memberDocs": [] @@ -3253,7 +3229,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L867", + "source": "src/row-bridge.ts#L866", "jsDocTags": [], "documentation": "Compute a deterministic identity for a canonical transaction.", "memberDocs": [] @@ -3265,7 +3241,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L149", + "source": "src/row-bridge.ts#L148", "jsDocTags": [], "documentation": "An explicit projection record for an operation with no row-space meaning.", "memberDocs": [] @@ -5393,7 +5369,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L859", + "source": "src/row-bridge.ts#L858", "jsDocTags": [], "documentation": "Create a typed bridge while preserving row and identity inference.", "memberDocs": [] @@ -5753,7 +5729,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L313", + "source": "src/row-bridge.ts#L312", "jsDocTags": [], "documentation": "Projects canonical document transactions into host-owned row changes.\n\nThe bridge only owns compact data-space identity arrays. It never writes to\n`defaultRows`, never renders, and never creates a second document store.", "memberDocs": [ @@ -5794,7 +5770,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L82", + "source": "src/row-bridge.ts#L81", "jsDocTags": [], "documentation": "A clearRange effect expanded to its exact changed cells.", "memberDocs": [] @@ -5818,7 +5794,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L156", + "source": "src/row-bridge.ts#L155", "jsDocTags": [], "documentation": "Every possible projection produced by a row bridge.", "memberDocs": [] @@ -5830,7 +5806,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L98", + "source": "src/row-bridge.ts#L97", "jsDocTags": [], "documentation": "A fill-series transaction effect.", "memberDocs": [] @@ -5842,7 +5818,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L199", + "source": "src/row-bridge.ts#L198", "jsDocTags": [], "documentation": "Callback accepted by imperative and framework adapters.", "memberDocs": [] @@ -5854,7 +5830,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L137", + "source": "src/row-bridge.ts#L136", "jsDocTags": [], "documentation": "A document operation that needs a host-side action rather than row mutation.", "memberDocs": [] @@ -5890,7 +5866,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L120", + "source": "src/row-bridge.ts#L119", "jsDocTags": [], "documentation": "A document operation that changes workbook or column metadata.", "memberDocs": [] @@ -5923,7 +5899,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L90", + "source": "src/row-bridge.ts#L89", "jsDocTags": [], "documentation": "A paste transaction effect. A paste can contain multiple canonical patches.", "memberDocs": [] @@ -5935,7 +5911,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L192", + "source": "src/row-bridge.ts#L191", "jsDocTags": [], "documentation": "Result of projection or reconciliation.", "memberDocs": [] @@ -5947,7 +5923,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L74", + "source": "src/row-bridge.ts#L73", "jsDocTags": [], "documentation": "A setRange/setBlock effect expanded to its exact changed cells.", "memberDocs": [] @@ -5959,7 +5935,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L177", + "source": "src/row-bridge.ts#L176", "jsDocTags": [], "documentation": "Input to {@link RowBridge.reconcile}.", "memberDocs": [ @@ -5980,7 +5956,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L168", + "source": "src/row-bridge.ts#L167", "jsDocTags": [], "documentation": "Reconciliation status for a canonical transaction response.", "memberDocs": [] @@ -5992,7 +5968,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L106", + "source": "src/row-bridge.ts#L105", "jsDocTags": [], "documentation": "Stable row identity effects for insert, delete, and move operations.", "memberDocs": [] @@ -6016,7 +5992,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L867", + "source": "src/row-bridge.ts#L866", "jsDocTags": [], "documentation": "Compute a deterministic identity for a canonical transaction.", "memberDocs": [] @@ -6028,7 +6004,7 @@ "owners": [ "src/row-bridge.ts" ], - "source": "src/row-bridge.ts#L149", + "source": "src/row-bridge.ts#L148", "jsDocTags": [], "documentation": "An explicit projection record for an operation with no row-space meaning.", "memberDocs": [] @@ -6610,7 +6586,7 @@ "owners": [ "src/worker.ts" ], - "source": "src/worker.ts#L256", + "source": "src/worker.ts#L259", "jsDocTags": [], "documentation": "Build the worker-side protocol handler. Keeping the mutable render state\ninside the returned closure lets tests exercise the real message contract\nwithout booting a browser Worker.", "memberDocs": [] @@ -6618,13 +6594,13 @@ { "name": "WorkerAcknowledgement", "kind": "type", - "signature": "export type WorkerAcknowledgement = { type: \"painted\" };", + "signature": "export type WorkerAcknowledgement = | { type: \"ready\" } | { type: \"fatal\"; reason: string } | { type: \"painted\" };", "owners": [ "src/worker.ts" ], "source": "src/worker.ts#L249", "jsDocTags": [], - "documentation": "Acknowledgement posted back to the sender after a frame actually painted.", + "documentation": "Lifecycle and frame acknowledgements posted back to the sender.", "memberDocs": [] } ] @@ -9411,7 +9387,7 @@ }, { "name": "getWindow", - "documentation": "One bulk read of a rectangular window for the renderer. Returns\ncontiguous typed arrays (row-major over `rows x cols`) plus the unique\nstrings referenced by the window, so the host paints without crossing\nthe boundary per cell." + "documentation": "One bulk read of a rectangular window for the renderer. Returns\ncontiguous packed cell data (row-major over `rows x cols`) plus the\nunique strings referenced by the window, so the host paints without\ncrossing the boundary per cell." }, { "name": "getWindowRows", @@ -9563,7 +9539,7 @@ "owners": [ "pkg/sheetwrite_wasm.d.ts" ], - "source": "pkg/sheetwrite_wasm.d.ts#L409", + "source": "pkg/sheetwrite_wasm.d.ts#L384", "jsDocTags": [], "documentation": "Sources accepted by asynchronous initialization: a fetchable URL/request/response, raw module bytes, or a precompiled `WebAssembly.Module`.", "memberDocs": [] @@ -9571,11 +9547,11 @@ { "name": "InitOutput", "kind": "interface", - "signature": "export interface InitOutput { readonly memory: WebAssembly.Memory; readonly __wbg_cellout_free: (a: number, b: number) => void; readonly __wbg_cellstore_free: (a: number, b: number) => void; readonly __wbg_distinctcolumn_free: (a: number, b: number) => void; readonly __wbg_rangesnapshot_free: (a: number, b: number) => void; readonly __wbg_sourcesnapshot_free: (a: number, b: number) => void; readonly __wbg_windowview_free: (a: number, b: number) => void; readonly cellout_kind: (a: number) => number; readonly cellout_num: (a: number) => number; readonly cellout_string: (a: number) => [number, number]; readonly cellout_style: (a: number) => number; readonly cellstore_acknowledgeRevision: (a: number, b: bigint) => void; readonly cellstore_addPagedSheet: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_addRows: (a: number, b: number, c: number, d: number) => void; readonly cellstore_addSheet: (a: number, b: number, c: number) => number; readonly cellstore_aggregate: (a: number, b: number, c: number, d: number) => number; readonly cellstore_beginMutation: (a: number) => bigint; readonly cellstore_beginPageLoad: (a: number) => void; readonly cellstore_canDirtyCell: (a: number, b: number, c: number, d: number) => number; readonly cellstore_captureRange: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_captureReferences: (a: number, b: number, c: number) => number; readonly cellstore_captureSources: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_captureSourcesForRows: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_cellState: (a: number, b: number, c: number, d: number) => number; readonly cellstore_clearCell: (a: number, b: number, c: number, d: number, e: number) => void; readonly cellstore_clearRange: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number; readonly cellstore_colCount: (a: number, b: number) => number; readonly cellstore_columnsFullyLoaded: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_compactStringStorage: (a: number) => void; readonly cellstore_dataEdge: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_dataEdgeOrdered: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number; readonly cellstore_dirtyRevision: (a: number, b: number, c: number, d: number) => bigint; readonly cellstore_distinctValues: (a: number, b: number, c: number, d: number) => number; readonly cellstore_endMutation: (a: number) => void; readonly cellstore_endPageLoad: (a: number) => void; readonly cellstore_filterRows: (a: number, b: number, c: number, d: number, e: number) => [number, number]; readonly cellstore_filterRowsMulti: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number) => [number, number]; readonly cellstore_formulaMatrixResourceStats: (a: number) => [number, number]; readonly cellstore_formulaSource: (a: number, b: number, c: number, d: number) => [number, number]; readonly cellstore_getCell: (a: number, b: number, c: number, d: number) => number; readonly cellstore_getWindow: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_getWindowRows: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_hydratePageNumbers: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void; readonly cellstore_hydratePageStringsPacked: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => void; readonly cellstore_insertCols: (a: number, b: number, c: number, d: number) => void; readonly cellstore_isFullyLoaded: (a: number, b: number) => number; readonly cellstore_isPaged: (a: number, b: number) => number; readonly cellstore_isSheetAlive: (a: number, b: number) => number; readonly cellstore_markCellCleanRevision: (a: number, b: number, c: number, d: number, e: bigint) => number; readonly cellstore_markRangeClean: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_memoryStats: (a: number) => [number, number]; readonly cellstore_new: () => number; readonly cellstore_pagedDirtyCoordinates: (a: number, b: number) => [number, number]; readonly cellstore_pagedStats: (a: number, b: number) => [number, number]; readonly cellstore_persistedCellData: (a: number, b: number) => [number, number]; readonly cellstore_pinRange: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_poolStrings: (a: number, b: number, c: number) => [number, number]; readonly cellstore_queryResourceStats: (a: number) => [number, number]; readonly cellstore_rangeFullyLoaded: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_rangeStyleIds: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; readonly cellstore_recompute: (a: number, b: number) => void; readonly cellstore_recomputeChanged: (a: number) => void; readonly cellstore_recomputeVolatile: (a: number, b: number) => number; readonly cellstore_referenceTarget: (a: number, b: number, c: number, d: number) => [number, number]; readonly cellstore_referencesTargeting: (a: number, b: number, c: number) => [number, number]; readonly cellstore_remapRangeStyles: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => number; readonly cellstore_removeCols: (a: number, b: number, c: number, d: number) => void; readonly cellstore_removeNamedRange: (a: number, b: number, c: number, d: number) => number; readonly cellstore_removeRows: (a: number, b: number, c: number, d: number) => void; readonly cellstore_removeSheet: (a: number, b: number) => number; readonly cellstore_removeTable: (a: number, b: number, c: number) => number; readonly cellstore_renameSheet: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_resetFormulaMatrixResourceStats: (a: number) => void; readonly cellstore_resetQueryResourceStats: (a: number) => void; readonly cellstore_restoreRange: (a: number, b: number, c: number, d: number, e: number) => number; readonly cellstore_rowCount: (a: number, b: number) => number; readonly cellstore_search: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number]; readonly cellstore_setBlock: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number) => number; readonly cellstore_setBool: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_setColumnNumbers: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void; readonly cellstore_setColumnStrings: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void; readonly cellstore_setColumnStringsPacked: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void; readonly cellstore_setConditionalRules: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number) => void; readonly cellstore_setFormula: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => number; readonly cellstore_setNamedRange: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => number; readonly cellstore_setNumber: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_setSheetName: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_setSparseBlock: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number) => number; readonly cellstore_setSpillBlockers: (a: number, b: number, c: number, d: number) => number; readonly cellstore_setString: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void; readonly cellstore_setTable: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number) => number; readonly cellstore_snapshotNumbers: (a: number, b: number) => [number, number]; readonly cellstore_snapshotTexts: (a: number, b: number) => [number, number]; readonly cellstore_sortRows: (a: number, b: number, c: number, d: number) => [number, number]; readonly cellstore_sortRowsMulti: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number]; readonly cellstore_spillAnchorCol: (a: number, b: number, c: number, d: number) => number; readonly cellstore_spillAnchorRow: (a: number, b: number, c: number, d: number) => number; readonly cellstore_spillDerivedMask: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; readonly cellstore_spillOwnerCoordinates: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; readonly cellstore_styleIdAt: (a: number, b: number, c: number, d: number) => number; readonly cellstore_wasmCommittedBytes: (a: number) => number; readonly distinctcolumn_takeKinds: (a: number) => [number, number]; readonly distinctcolumn_takeNumbers: (a: number) => [number, number]; readonly distinctcolumn_takeTexts: (a: number) => [number, number]; readonly rangesnapshot_byteLength: (a: number) => number; readonly rangesnapshot_formulaOffsets: (a: number) => [number, number]; readonly rangesnapshot_formulaSources: (a: number) => [number, number]; readonly rangesnapshot_kinds: (a: number) => [number, number]; readonly rangesnapshot_referenceOffsets: (a: number) => [number, number]; readonly rangesnapshot_referenceTargets: (a: number) => [number, number]; readonly rangesnapshot_styleIds: (a: number) => [number, number]; readonly sourcesnapshot_byteLength: (a: number) => number; readonly sourcesnapshot_formulaOffsets: (a: number) => [number, number]; readonly sourcesnapshot_formulaSources: (a: number) => [number, number]; readonly sourcesnapshot_referenceOffsets: (a: number) => [number, number]; readonly sourcesnapshot_referenceTargets: (a: number) => [number, number]; readonly sourcesnapshot_spillDerived: (a: number) => [number, number]; readonly windowview_nCols: (a: number) => number; readonly windowview_nRows: (a: number) => number; readonly windowview_takeCondMatches: (a: number) => [number, number]; readonly windowview_takeStringIds: (a: number) => [number, number]; readonly windowview_takeStringIndex: (a: number) => [number, number]; readonly windowview_takeStrings: (a: number) => [number, number]; readonly windowview_takeStyleDict: (a: number) => [number, number]; readonly windowview_takeStyleIndex: (a: number) => [number, number]; readonly windowview_takeKinds: (a: number) => [number, number]; readonly windowview_takeNumbers: (a: number) => [number, number]; readonly __wbindgen_malloc: (a: number, b: number) => number; readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; readonly __wbindgen_externrefs: WebAssembly.Table; readonly __wbindgen_free: (a: number, b: number, c: number) => void; readonly __externref_table_alloc: () => number; readonly __externref_drop_slice: (a: number, b: number) => void; readonly __wbindgen_start: () => void; }", + "signature": "export interface InitOutput { readonly memory: WebAssembly.Memory; readonly __wbg_cellout_free: (a: number, b: number) => void; readonly __wbg_cellstore_free: (a: number, b: number) => void; readonly __wbg_distinctcolumn_free: (a: number, b: number) => void; readonly __wbg_rangesnapshot_free: (a: number, b: number) => void; readonly __wbg_sourcesnapshot_free: (a: number, b: number) => void; readonly __wbg_windowview_free: (a: number, b: number) => void; readonly cellout_kind: (a: number) => number; readonly cellout_num: (a: number) => number; readonly cellout_string: (a: number) => [number, number]; readonly cellout_style: (a: number) => number; readonly cellstore_acknowledgeRevision: (a: number, b: bigint) => void; readonly cellstore_addPagedSheet: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_addRows: (a: number, b: number, c: number, d: number) => void; readonly cellstore_addSheet: (a: number, b: number, c: number) => number; readonly cellstore_aggregate: (a: number, b: number, c: number, d: number) => number; readonly cellstore_beginMutation: (a: number) => bigint; readonly cellstore_beginPageLoad: (a: number) => void; readonly cellstore_canDirtyCell: (a: number, b: number, c: number, d: number) => number; readonly cellstore_captureRange: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_captureReferences: (a: number, b: number, c: number) => number; readonly cellstore_captureSources: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_captureSourcesForRows: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_cellState: (a: number, b: number, c: number, d: number) => number; readonly cellstore_clearCell: (a: number, b: number, c: number, d: number, e: number) => void; readonly cellstore_clearRange: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number; readonly cellstore_colCount: (a: number, b: number) => number; readonly cellstore_columnsFullyLoaded: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_compactStringStorage: (a: number) => void; readonly cellstore_dataEdge: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_dataEdgeOrdered: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number; readonly cellstore_dirtyRevision: (a: number, b: number, c: number, d: number) => bigint; readonly cellstore_distinctValues: (a: number, b: number, c: number, d: number) => number; readonly cellstore_endMutation: (a: number) => void; readonly cellstore_endPageLoad: (a: number) => void; readonly cellstore_filterRows: (a: number, b: number, c: number, d: number, e: number) => [number, number]; readonly cellstore_filterRowsMulti: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number) => [number, number]; readonly cellstore_formulaMatrixResourceStats: (a: number) => [number, number]; readonly cellstore_formulaSource: (a: number, b: number, c: number, d: number) => [number, number]; readonly cellstore_getCell: (a: number, b: number, c: number, d: number) => number; readonly cellstore_getWindow: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_getWindowRows: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_hydratePageNumbers: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void; readonly cellstore_hydratePageStringsPacked: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => void; readonly cellstore_insertCols: (a: number, b: number, c: number, d: number) => void; readonly cellstore_isFullyLoaded: (a: number, b: number) => number; readonly cellstore_isPaged: (a: number, b: number) => number; readonly cellstore_isSheetAlive: (a: number, b: number) => number; readonly cellstore_markCellCleanRevision: (a: number, b: number, c: number, d: number, e: bigint) => number; readonly cellstore_markRangeClean: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_memoryStats: (a: number) => [number, number]; readonly cellstore_new: () => number; readonly cellstore_pagedDirtyCoordinates: (a: number, b: number) => [number, number]; readonly cellstore_pagedStats: (a: number, b: number) => [number, number]; readonly cellstore_persistedCellData: (a: number, b: number) => [number, number]; readonly cellstore_pinRange: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_poolStrings: (a: number, b: number, c: number) => [number, number]; readonly cellstore_queryResourceStats: (a: number) => [number, number]; readonly cellstore_rangeFullyLoaded: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_rangeStyleIds: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; readonly cellstore_recompute: (a: number, b: number) => void; readonly cellstore_recomputeChanged: (a: number) => void; readonly cellstore_recomputeVolatile: (a: number, b: number) => number; readonly cellstore_referenceTarget: (a: number, b: number, c: number, d: number) => [number, number]; readonly cellstore_referencesTargeting: (a: number, b: number, c: number) => [number, number]; readonly cellstore_remapRangeStyles: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => number; readonly cellstore_removeCols: (a: number, b: number, c: number, d: number) => void; readonly cellstore_removeNamedRange: (a: number, b: number, c: number, d: number) => number; readonly cellstore_removeRows: (a: number, b: number, c: number, d: number) => void; readonly cellstore_removeSheet: (a: number, b: number) => number; readonly cellstore_removeTable: (a: number, b: number, c: number) => number; readonly cellstore_renameSheet: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_resetFormulaMatrixResourceStats: (a: number) => void; readonly cellstore_resetQueryResourceStats: (a: number) => void; readonly cellstore_restoreRange: (a: number, b: number, c: number, d: number, e: number) => number; readonly cellstore_rowCount: (a: number, b: number) => number; readonly cellstore_search: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number]; readonly cellstore_setBlock: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number) => number; readonly cellstore_setBool: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_setColumnNumbers: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void; readonly cellstore_setColumnStrings: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void; readonly cellstore_setColumnStringsPacked: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void; readonly cellstore_setConditionalRules: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number) => void; readonly cellstore_setFormula: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => number; readonly cellstore_setNamedRange: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => number; readonly cellstore_setNumber: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_setSheetName: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_setSparseBlock: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number) => number; readonly cellstore_setSpillBlockers: (a: number, b: number, c: number, d: number) => number; readonly cellstore_setString: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void; readonly cellstore_setTable: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number) => number; readonly cellstore_snapshotNumbers: (a: number, b: number) => [number, number]; readonly cellstore_snapshotTexts: (a: number, b: number) => [number, number]; readonly cellstore_sortRows: (a: number, b: number, c: number, d: number) => [number, number]; readonly cellstore_sortRowsMulti: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number]; readonly cellstore_spillAnchorCol: (a: number, b: number, c: number, d: number) => number; readonly cellstore_spillAnchorRow: (a: number, b: number, c: number, d: number) => number; readonly cellstore_spillDerivedMask: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; readonly cellstore_spillOwnerCoordinates: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; readonly cellstore_styleIdAt: (a: number, b: number, c: number, d: number) => number; readonly cellstore_wasmCommittedBytes: (a: number) => number; readonly distinctcolumn_takeKinds: (a: number) => [number, number]; readonly distinctcolumn_takeNumbers: (a: number) => [number, number]; readonly distinctcolumn_takeTexts: (a: number) => [number, number]; readonly rangesnapshot_byteLength: (a: number) => number; readonly rangesnapshot_formulaOffsets: (a: number) => [number, number]; readonly rangesnapshot_formulaSources: (a: number) => [number, number]; readonly rangesnapshot_kinds: (a: number) => [number, number]; readonly rangesnapshot_referenceOffsets: (a: number) => [number, number]; readonly rangesnapshot_referenceTargets: (a: number) => [number, number]; readonly rangesnapshot_styleIds: (a: number) => [number, number]; readonly sourcesnapshot_byteLength: (a: number) => number; readonly sourcesnapshot_formulaOffsets: (a: number) => [number, number]; readonly sourcesnapshot_formulaSources: (a: number) => [number, number]; readonly sourcesnapshot_referenceOffsets: (a: number) => [number, number]; readonly sourcesnapshot_referenceTargets: (a: number) => [number, number]; readonly sourcesnapshot_spillDerived: (a: number) => [number, number]; readonly windowview_nCols: (a: number) => number; readonly windowview_takeStrings: (a: number) => [number, number]; readonly windowview_takePacked: (a: number) => [number, number]; readonly windowview_nRows: (a: number) => number; readonly __wbindgen_malloc: (a: number, b: number) => number; readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; readonly __wbindgen_externrefs: WebAssembly.Table; readonly __wbindgen_free: (a: number, b: number, c: number) => void; readonly __externref_table_alloc: () => number; readonly __externref_drop_slice: (a: number, b: number) => void; readonly __wbindgen_start: () => void; }", "owners": [ "pkg/sheetwrite_wasm.d.ts" ], - "source": "pkg/sheetwrite_wasm.d.ts#L411", + "source": "pkg/sheetwrite_wasm.d.ts#L386", "jsDocTags": [], "documentation": "Result of module initialization: the instantiated exports plus the shared linear memory.", "memberDocs": [] @@ -9587,7 +9563,7 @@ "owners": [ "pkg/sheetwrite_wasm.d.ts" ], - "source": "pkg/sheetwrite_wasm.d.ts#L558", + "source": "pkg/sheetwrite_wasm.d.ts#L527", "jsDocTags": [ "param", "returns" @@ -9650,7 +9626,7 @@ "owners": [ "pkg/sheetwrite_wasm.d.ts" ], - "source": "pkg/sheetwrite_wasm.d.ts#L548", + "source": "pkg/sheetwrite_wasm.d.ts#L517", "jsDocTags": [], "documentation": "Sources accepted by synchronous initialization: raw module bytes or a precompiled `WebAssembly.Module`.", "memberDocs": [] @@ -9658,7 +9634,7 @@ { "name": "WindowView", "kind": "class", - "signature": "class WindowView { free: () => void; nCols: number; nRows: number; takeCondMatches: () => Uint32Array; takeKinds: () => Uint8Array; takeNumbers: () => Float64Array; takeStringIds: () => Uint32Array; takeStringIndex: () => Int32Array; takeStrings: () => string[]; takeStyleDict: () => Uint32Array; takeStyleIndex: () => Uint32Array }", + "signature": "class WindowView { free: () => void; nCols: number; nRows: number; takePacked: () => Uint8Array; takeStrings: () => string[] }", "owners": [ "pkg/sheetwrite_wasm.d.ts" ], @@ -9667,36 +9643,12 @@ "documentation": "A bulk window of resolved cells, row-major over `n_rows x n_cols`.", "memberDocs": [ { - "name": "takeCondMatches", - "documentation": "Consume and return per-cell conditional-format rule bitmasks; empty\nwhen the sheet has no rules." - }, - { - "name": "takeKinds", - "documentation": "Consume and return the per-cell tag array: 0 empty, 1 number, 2 string." - }, - { - "name": "takeNumbers", - "documentation": "Consume and return per-cell numeric payloads (valid where kind == 1)." - }, - { - "name": "takeStringIds", - "documentation": "Consume and return per-cell GLOBAL string-pool ids; `u32::MAX` means none." - }, - { - "name": "takeStringIndex", - "documentation": "Consume and return per-cell indices into `strings` (string cells only)." + "name": "takePacked", + "documentation": "Consume the complete fixed-width window payload. The returned\n`Uint8Array` is copied by wasm-bindgen into JS-owned memory." }, { "name": "takeStrings", - "documentation": "Consume and return unique strings referenced by this window." - }, - { - "name": "takeStyleDict", - "documentation": "Consume and return the unique global style-dictionary ids referenced by\nthis window, in local-index order; the host maps each to a `CellStyle`." - }, - { - "name": "takeStyleIndex", - "documentation": "Consume and return per-cell WINDOW-LOCAL style indices into the dict." + "documentation": "Consume formula-error sentinel strings referenced by the packed data." } ] } diff --git a/docs/test/compatibility-inventory.test.ts b/docs/test/compatibility-inventory.test.ts index 42ea0009..f7761016 100644 --- a/docs/test/compatibility-inventory.test.ts +++ b/docs/test/compatibility-inventory.test.ts @@ -29,7 +29,10 @@ const REQUIRED_RECORD_IDS = [ "xlsx.rich-workbook", "xlsx.shared-formulas", "validation.native-subset", - "xlsx.tables-charts-macros", + "table.native-subset", + "hyperlink.safe-subset", + "conditional-format.native-subset", + "xlsx.advanced-unsupported", "clipboard.delimited", "producer.microsoft-excel", "producer.google-sheets", diff --git a/knip.json b/knip.json new file mode 100644 index 00000000..2ca3f41b --- /dev/null +++ b/knip.json @@ -0,0 +1,34 @@ +{ + "$schema": "https://unpkg.com/knip@6/schema.json", + "ignoreWorkspaces": ["bench", "docs", "examples/*", "packages/wasm"], + "workspaces": { + "packages/core": { + "entry": [ + "src/index.ts", + "src/adapter.ts", + "src/indexeddb.ts", + "src/shell.ts", + "src/testing.ts", + "src/worker.ts", + "test/**/*.test.ts" + ], + "project": ["src/**/*.ts", "test/**/*.ts"] + }, + "packages/react": { + "entry": ["src/index.tsx", "test/**/*.test.ts?(x)"], + "project": ["src/**/*.ts?(x)", "test/**/*.ts?(x)"] + }, + "packages/svelte": { + "entry": ["src/*.svelte", "test/**/*.test.ts"], + "project": ["src/**/*.ts", "test/**/*.ts"] + }, + "packages/vue": { + "entry": ["src/index.ts", "test/**/*.test.ts"], + "project": ["src/**/*.ts", "test/**/*.ts"] + }, + "packages/xlsx": { + "entry": ["src/index.ts", "test/**/*.test.ts"], + "project": ["src/**/*.ts", "test/**/*.ts"] + } + } +} diff --git a/package.json b/package.json index 30cdb9f5..79106ed5 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,9 @@ }, "scripts": { "api:report": "bun scripts/public-api.ts report", - "api:check": "bun scripts/public-api.ts check", + "api:check": "bun scripts/public-api.ts check && bun run api:unused:internal", + "api:unused": "bun scripts/public-api.ts unused", + "api:unused:internal": "knip --workspace './packages/*' --include exports,types,nsExports,nsTypes --no-progress", "api:baseline": "bun scripts/public-api.ts baseline", "compatibility:validate": "bun scripts/conformance/validate-cli.ts", "compatibility:check": "bun scripts/conformance.ts offline", @@ -45,6 +47,7 @@ "size:report": "bun scripts/size-report.ts report", "size:history": "bun scripts/size-report.ts history", "size:record": "bun scripts/size-report.ts record", + "size:first-paint": "node test/bundler-fixtures/run.mjs && node test/bundler-fixtures/first-paint/run.mjs", "release:artifacts": "bun scripts/release-artifacts.ts build --output test-results/release-artifacts", "release:artifacts:verify": "bun scripts/release-artifacts.ts verify --artifacts test-results/release-artifacts", "release:prepare": "bun scripts/release-artifacts.ts prepare", @@ -62,6 +65,10 @@ "verify:nodenext-types": "tsc --noEmit -p test/consumer-nodenext", "examples": "bun run build:packages && bun run --filter '@sheetwrite/docs-start' dev", "toolchain:install-wasm-pack": "bun scripts/install-wasm-pack.ts", + "wasm:profile:build": "bun scripts/wasm-profile-matrix.ts build", + "wasm:profile:assemble": "bun scripts/wasm-profile-matrix.ts assemble", + "wasm:profile:decide": "bun scripts/wasm-profile-matrix.ts decide", + "wasm:store-only:probe": "bun scripts/wasm-profile-matrix.ts probe-store", "test:browser": "playwright test --config test/browser/playwright.config.ts", "browser:install:chromium": "playwright install --with-deps chromium", "test:browser:portability": "playwright test --config test/browser/playwright.config.ts --grep @portability", @@ -83,6 +90,7 @@ "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "fake-indexeddb": "6.2.5", + "knip": "6.32.1", "react": "^19.2.7", "react-dom": "^19.2.7", "svelte": "5.56.5", @@ -94,6 +102,7 @@ "@biomejs/biome" ], "overrides": { + "nanoid": "3.3.18", "postcss": "^8.5.18" } } diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index a9708bc5..33b351d5 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,27 @@ # @sheetwrite/core +## 0.4.0 + +### Minor Changes + +- 41f6749: Remove the unsupported `cloneCellHyperlink` and `createHyperlinkId` root exports. Hyperlink behavior remains available through the documented grid APIs. + +### Patch Changes + +- 8457eca: Fall back observably to the main-thread renderer when a paint worker cannot initialize, cannot create a 2D context, or loses its context. The public worker acknowledgement type now includes `ready` and `fatal` lifecycle messages. +- dac694a: Re-rasterize the grid when a window moves between displays with different pixel densities instead of remaining blurry or oversized until the next interaction. +- 0e09ecc: Share cell-kind wire tags across the store, window reader, and paint worker to prevent internal WASM contract divergence. +- 41f6749: Exclude generated source maps from the published package while retaining JavaScript, declarations, styles, and unchanged browser runtime output. +- 41f6749: Pack visible-window numeric, kind, style, string-index, and conditional-format data into one validated transfer buffer, reducing ordinary window reads from seven output allocations to one. +- 41f6749: Compare render state with allocation-light scalar snapshots instead of rebuilding composite signature strings on every frame. +- 55b1f35: Stop exporting implementation-only helpers and types from internal modules, and gate package workspaces against new unused internal exports. +- b225783: Keep cached worker-renderer views valid across repeated paints so scrolling no longer produces blank or stale regions. +- 41f6749: Keep paged transaction admission and reference accounting isolated from dense store initialization while preserving existing resource limits. +- ce1e404: Keep uniform row geometry allocation-free until a custom row height requires dense indexing. +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] + - @sheetwrite/wasm@0.4.0 + ## 0.3.1 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index 61af53aa..ffc61a03 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@sheetwrite/core", - "version": "0.3.1", + "version": "0.4.0", "type": "module", "description": "Framework-agnostic, canvas-rendered spreadsheet grid core.", "license": "MIT", @@ -57,7 +57,8 @@ "./shell.css": "./shell.css" }, "files": [ - "dist", + "dist/**/*.js", + "dist/**/*.d.ts", "styles.css", "shell.css" ], diff --git a/packages/core/src/canvas-paint.ts b/packages/core/src/canvas-paint.ts index 0f4df5c1..07b71eaa 100644 --- a/packages/core/src/canvas-paint.ts +++ b/packages/core/src/canvas-paint.ts @@ -86,7 +86,7 @@ function mergeRowSpanHeight( const columnEdgesCache = new WeakMap(); /** Cumulative left edges per visible column; `colX[c+1] - colX[c]` is its width. */ -export function columnEdges(layout: RenderLayout): number[] { +function columnEdges(layout: RenderLayout): number[] { const columns = layout.columns; const cached = columnEdgesCache.get(columns); if (cached !== undefined) return cached; diff --git a/packages/core/src/datasource-controller.ts b/packages/core/src/datasource-controller.ts index 5e9e7070..c919f0e6 100644 --- a/packages/core/src/datasource-controller.ts +++ b/packages/core/src/datasource-controller.ts @@ -11,7 +11,7 @@ import type { ResourceOwnerBytes } from "./types/store.js"; /** Stable internal policy bounds. Prefetch never exceeds either horizon. */ export const DATASOURCE_PREFETCH_MAX_ROWS = 512; export const DATASOURCE_PREFETCH_MAX_BYTES = 512 * 1024; -export const DATASOURCE_PREFETCH_MAX_BANDS = 2; +const DATASOURCE_PREFETCH_MAX_BANDS = 2; export const DATASOURCE_MAX_ACTIVE_REQUESTS = 6; export const DATASOURCE_VISIBLE_WAIT_SAMPLE_LIMIT = 4_096; const DATASOURCE_NO_PROGRESS_RETRIES = 1; diff --git a/packages/core/src/export.ts b/packages/core/src/export.ts index 61a1f858..bf04392a 100644 --- a/packages/core/src/export.ts +++ b/packages/core/src/export.ts @@ -22,12 +22,12 @@ import type { Store } from "./types/store.js"; * file is reopened in Excel/Sheets. Numeric values are legitimate data and pass * through untouched — a negative number is a number, not an attack vector. */ -export function safeText(value: CellScalar): string { +function safeText(value: CellScalar): string { return typeof value === "string" ? neutralizeInjection(value) : cellScalarToText(value); } /** Harden a column header (always text) exactly as a text cell value. */ -export function safeHeader(header: string): string { +function safeHeader(header: string): string { return neutralizeInjection(header); } diff --git a/packages/core/src/fenwick.ts b/packages/core/src/fenwick.ts index f413d066..07929cff 100644 --- a/packages/core/src/fenwick.ts +++ b/packages/core/src/fenwick.ts @@ -1,36 +1,47 @@ -// Fenwick (binary-indexed) tree over row heights: O(log n) scrollTop<->row and -// O(log n) single-row height updates. A parallel `heights` array keeps single-row -// reads and structural rebuilds O(1)/O(n) respectively; structural edits are rare. +// Uniform row geometry stays arithmetic and allocation-free. The first non-default +// height materializes parallel height/Fenwick arrays for O(log n) updates and lookups; +// structural rebuilds remain O(n) and are rare. export class OffsetIndex { private n: number; private readonly defaultHeight: number; - private heights: Float64Array; - /** 1-indexed Fenwick tree of heights. */ - private tree: Float64Array; + private heights: Float64Array | undefined; + /** 1-indexed Fenwick tree of heights; absent while every row has the default height. */ + private tree: Float64Array | undefined; private total: number; constructor(count: number, defaultHeight: number) { this.n = count; this.defaultHeight = defaultHeight; - this.heights = new Float64Array(count); - this.heights.fill(defaultHeight); - this.tree = new Float64Array(count + 1); this.total = count * defaultHeight; + } + + /** Allocate the dense index only when the first non-default height requires it. */ + private materialize(): void { + const heights = new Float64Array(this.n); + heights.fill(this.defaultHeight); + const tree = new Float64Array(this.n + 1); + this.heights = heights; + this.tree = tree; this.build(); } /** O(n) Fenwick construction from `heights`; also refreshes `total`. */ private build(): void { - const { tree, heights, n } = this; + const heights = this.heights; + const tree = this.tree; + if (!heights || !tree) { + this.total = this.n * this.defaultHeight; + return; + } tree.fill(0); let total = 0; - for (let i = 1; i <= n; i++) { + for (let i = 1; i <= this.n; i++) { const h = heights[i - 1] ?? 0; total += h; tree[i] = (tree[i] ?? 0) + h; const j = i + (i & -i); - if (j <= n) tree[j] = (tree[j] ?? 0) + (tree[i] ?? 0); + if (j <= this.n) tree[j] = (tree[j] ?? 0) + (tree[i] ?? 0); } this.total = total; } @@ -47,27 +58,38 @@ export class OffsetIndex { return this.defaultHeight; } + /** Bytes reserved by the optional dense typed-array backing stores. */ + get backingStoreBytes(): number { + return (this.heights?.byteLength ?? 0) + (this.tree?.byteLength ?? 0); + } + heightOf(row: number): number { - return this.heights[row] ?? this.defaultHeight; + return this.heights?.[row] ?? this.defaultHeight; } setHeight(row: number, h: number): void { if (row < 0 || row >= this.n) return; - const delta = h - this.heights[row]!; + const current = this.heights?.[row] ?? this.defaultHeight; + const delta = h - current; if (delta === 0) return; - this.heights[row] = h; + if (!this.heights || !this.tree) this.materialize(); + const heights = this.heights!; + const tree = this.tree!; + heights[row] = h; this.total += delta; for (let i = row + 1; i <= this.n; i += i & -i) { - this.tree[i] = (this.tree[i] ?? 0) + delta; + tree[i] = (tree[i] ?? 0) + delta; } } /** Sum of heights of rows [0, row); i.e. the top Y of `row`. */ offsetOf(row: number): number { let r = Math.max(0, Math.min(row, this.n)); + const tree = this.tree; + if (!tree) return r * this.defaultHeight; let sum = 0; while (r > 0) { - sum += this.tree[r] ?? 0; + sum += tree[r] ?? 0; r -= r & -r; } return sum; @@ -84,6 +106,11 @@ export class OffsetIndex { const last = this.n - 1; return { row: last, top: this.offsetOf(last) }; } + const tree = this.tree; + if (!tree) { + const row = Math.floor(offset / this.defaultHeight); + return { row, top: row * this.defaultHeight }; + } // Largest `pos` with prefix(pos) <= offset. let pos = 0; let remaining = offset; @@ -91,9 +118,9 @@ export class OffsetIndex { while (1 << (logn + 1) <= this.n) logn++; for (let k = logn; k >= 0; k--) { const next = pos + (1 << k); - if (next <= this.n && (this.tree[next] ?? 0) <= remaining) { + if (next <= this.n && (tree[next] ?? 0) <= remaining) { pos = next; - remaining -= this.tree[pos] ?? 0; + remaining -= tree[pos] ?? 0; } } // `pos` rows fit entirely above `offset`, so `offset` is inside row `pos`. @@ -103,10 +130,25 @@ export class OffsetIndex { insertRows(at: number, count: number, height = this.defaultHeight): void { if (count <= 0) return; const clamp = Math.max(0, Math.min(at, this.n)); + const heights = this.heights; + if (!heights) { + this.n += count; + if (height === this.defaultHeight) { + this.total = this.n * this.defaultHeight; + return; + } + const next = new Float64Array(this.n); + next.fill(this.defaultHeight); + next.fill(height, clamp, clamp + count); + this.heights = next; + this.tree = new Float64Array(this.n + 1); + this.build(); + return; + } const next = new Float64Array(this.n + count); - next.set(this.heights.subarray(0, clamp), 0); + next.set(heights.subarray(0, clamp), 0); next.fill(height, clamp, clamp + count); - next.set(this.heights.subarray(clamp), clamp + count); + next.set(heights.subarray(clamp), clamp + count); this.heights = next; this.n += count; this.tree = new Float64Array(this.n + 1); @@ -116,9 +158,15 @@ export class OffsetIndex { removeRows(at: number, count: number): void { if (count <= 0 || at >= this.n) return; const c = Math.min(count, this.n - at); + const heights = this.heights; + if (!heights) { + this.n -= c; + this.total = this.n * this.defaultHeight; + return; + } const next = new Float64Array(this.n - c); - next.set(this.heights.subarray(0, at), 0); - next.set(this.heights.subarray(at + c), at); + next.set(heights.subarray(0, at), 0); + next.set(heights.subarray(at + c), at); this.heights = next; this.n -= c; this.tree = new Float64Array(this.n + 1); diff --git a/packages/core/src/fill-series.ts b/packages/core/src/fill-series.ts index f9426c37..a53bfb80 100644 --- a/packages/core/src/fill-series.ts +++ b/packages/core/src/fill-series.ts @@ -21,7 +21,7 @@ export interface FillSourceCell { * - `value`: a numeric literal produced by arithmetic extrapolation. * - `tile`: copy the source cell at `sourceIndex` (caller resolves value / shifts refs). */ -export type FillStep = { kind: "value"; value: number } | { kind: "tile"; sourceIndex: number }; +type FillStep = { kind: "value"; value: number } | { kind: "tile"; sourceIndex: number }; /** A resolved fill plan for a single column. */ export interface FillSeries { diff --git a/packages/core/src/geometry-layout-controller.ts b/packages/core/src/geometry-layout-controller.ts index 78263e31..f57ba974 100644 --- a/packages/core/src/geometry-layout-controller.ts +++ b/packages/core/src/geometry-layout-controller.ts @@ -46,19 +46,6 @@ function assertGeometryDimensions(rowCount: number, columnCount: number): void { } } -function createRowIndex(rowCount: number, defaultHeight: number): OffsetIndex { - try { - return new OffsetIndex(rowCount, defaultHeight); - } catch (error) { - if (!(error instanceof RangeError)) throw error; - throw new SnapshotResourceError( - "maxRowsPerSheet", - DEFAULT_SNAPSHOT_RESOURCE_LIMITS.maxRowsPerSheet, - rowCount, - { cause: error }, - ); - } -} /** Owns row/column indexes, scaled scrolling, viewport windows, and frozen-pane mapping. */ export class GeometryLayoutController { private rowIndex: OffsetIndex; @@ -79,8 +66,7 @@ export class GeometryLayoutController { assertGeometryDimensions(sheet.rowCount, sheet.columns.length); this.visibleColumnIndices = visibleColumns(sheet); this.columnIndex = buildColumnIndex(sheet, this.visibleColumnIndices, options.zoom()); - this.rowIndex = createRowIndex(sheet.rowCount, options.theme().rowHeight); - this.applyRowHeights(sheet); + this.rowIndex = this.createRowIndex(sheet, sheet.rowCount); this.scrollScale = new ScaledScroll( this.rowIndex.totalHeight + options.theme().headerHeight, viewportHeight, @@ -351,8 +337,7 @@ export class GeometryLayoutController { rebuildRows(rowCount = this.options.sheet().rowCount): void { const sheet = this.options.sheet(); assertGeometryDimensions(rowCount, sheet.columns.length); - this.rowIndex = createRowIndex(rowCount, this.options.theme().rowHeight); - this.applyRowHeights(sheet); + this.rowIndex = this.createRowIndex(sheet, rowCount); } rebuildColumns(): void { @@ -375,14 +360,27 @@ export class GeometryLayoutController { }; } - private applyRowHeights(sheet: Sheet): void { - if (!sheet.rowHeights || sheet.rowHeights.size === 0) return; - for (const [dataRow, height] of sheet.rowHeights) { - const viewRow = this.toViewRow(dataRow); - if (viewRow !== null && viewRow < this.rowIndex.count) { - this.rowIndex.setHeight(viewRow, height * this.options.zoom()); + private createRowIndex(sheet: Sheet, rowCount: number): OffsetIndex { + const index = new OffsetIndex(rowCount, this.options.theme().rowHeight); + try { + if (sheet.rowHeights) { + for (const [dataRow, height] of sheet.rowHeights) { + const viewRow = this.toViewRow(dataRow); + if (viewRow !== null && viewRow < index.count) { + index.setHeight(viewRow, height * this.options.zoom()); + } + } } + } catch (error) { + if (!(error instanceof RangeError)) throw error; + throw new SnapshotResourceError( + "maxRowsPerSheet", + DEFAULT_SNAPSHOT_RESOURCE_LIMITS.maxRowsPerSheet, + rowCount, + { cause: error }, + ); } + return index; } } diff --git a/packages/core/src/grid.ts b/packages/core/src/grid.ts index 1401704e..ce51a300 100644 --- a/packages/core/src/grid.ts +++ b/packages/core/src/grid.ts @@ -460,6 +460,14 @@ export class GridImpl implements Grid { committedPatches: 0, }; private resizeObserver: ResizeObserver | null = null; + private resolutionMediaQuery: MediaQueryList | null = null; + private readonly onResolutionChange = (): void => { + if (this.destroyed) return; + this.armResolutionListener(); + this.syncSizer(); + this.renderCoordinator.invalidate(); + this.scheduleRender(); + }; private readonly onScroll = () => this.scheduleRender(); private readonly disposeStore: () => void; @@ -968,6 +976,7 @@ export class GridImpl implements Grid { this.resizeObserver = new ResizeObserver(() => this.onResize()); this.resizeObserver.observe(host); } + this.armResolutionListener(); this.render(); } @@ -3057,6 +3066,21 @@ export class GridImpl implements Grid { this.render(); } + /** + * A resolution query stops being useful after it changes, so replace it with + * one matching the current display. This catches DPR-only changes that do not + * resize the host and therefore never reach ResizeObserver. + */ + private armResolutionListener(): void { + this.resolutionMediaQuery?.removeEventListener("change", this.onResolutionChange); + this.resolutionMediaQuery = null; + if (typeof globalThis.matchMedia !== "function") return; + + const devicePixelRatio = globalThis.devicePixelRatio ?? 1; + this.resolutionMediaQuery = globalThis.matchMedia(`(resolution: ${devicePixelRatio}dppx)`); + this.resolutionMediaQuery.addEventListener("change", this.onResolutionChange); + } + private onResize(): void { this.syncSizer(); this.render(); @@ -3076,6 +3100,8 @@ export class GridImpl implements Grid { this.scroller.removeEventListener("scroll", this.onScroll); this.scroller.removeEventListener("contextmenu", this.onContextMenu); this.resizeObserver?.disconnect(); + this.resolutionMediaQuery?.removeEventListener("change", this.onResolutionChange); + this.resolutionMediaQuery = null; this.document.destroy(); this.disposeStore(); // Free the WASM CellStore only when we constructed it. A caller-provided diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 0b09c8f0..a488a218 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -107,8 +107,6 @@ export { resolveThemeFromCss, } from "./grid.js"; export { - cloneCellHyperlink, - createHyperlinkId, hyperlinkAt, isSafeExternalHyperlink, isValidCellHyperlink, diff --git a/packages/core/src/render-coordinator.ts b/packages/core/src/render-coordinator.ts index 2932ac55..65810db0 100644 --- a/packages/core/src/render-coordinator.ts +++ b/packages/core/src/render-coordinator.ts @@ -47,9 +47,23 @@ export class RenderCoordinator { private windowedColumnIndices: readonly number[] = []; private datasourceColumnIndices: readonly number[] = []; private datasourceFrozenColumns = -1; - private columnWindowSignature = ""; - private lastDataSignature = ""; - private lastPaintSignature = ""; + private columnWindowRevision = 0; + private lastDataSheet: SheetId | null = null; + private lastDataRowStart = 0; + private lastDataRowEnd = 0; + private lastDataColumnWindowRevision = 0; + private lastDataStoreEpoch = 0; + private lastDataInvalidationEpoch = 0; + private lastDataFrozenRows = 0; + private lastDataFrozenColumns = 0; + private lastPaintContentTop = 0; + private lastPaintScrollLeft = 0; + private lastPaintClientWidth = 0; + private lastPaintClientHeight = 0; + private lastPaintInvalidationEpoch = 0; + private lastPaintFrozenHeight = 0; + private lastPaintFrozenWidth = 0; + private lastPaintZoom = 0; private lastPaintView: VisibleWindowView | null = null; private cachedPaneViews: VisibleWindowView[] = []; private readonly paneValuePools: CellScalar[][] = []; @@ -57,7 +71,7 @@ export class RenderCoordinator { private readonly domMergeAnchorValuePools: CellScalar[][] = []; private readonly domMergeSourceViews: VisibleWindowView[] = []; private mainViewValuePool: CellScalar[] = []; - private domMergeAnchorSignature = ""; + private readonly domMergeAnchorState: Array = []; private destroyed = false; constructor(private readonly options: RenderCoordinatorOptions) {} @@ -82,7 +96,6 @@ export class RenderCoordinator { this.columnWindowEnd = -1; this.datasourceColumnIndices = []; this.datasourceFrozenColumns = -1; - this.columnWindowSignature = ""; this.invalidateData(); } @@ -117,9 +130,7 @@ export class RenderCoordinator { this.cachedPaneViews = []; this.cachedDomMergeAnchorViews = []; this.domMergeSourceViews.length = 0; - this.lastDataSignature = ""; - this.lastPaintSignature = ""; - this.domMergeAnchorSignature = ""; + this.domMergeAnchorState.length = 0; } private render(): void { @@ -172,10 +183,17 @@ export class RenderCoordinator { const columnWindowChanged = columns.start !== this.columnWindowStart || columns.end !== this.columnWindowEnd; if (columnWindowChanged) { + const columnCount = columns.end - columns.start; + let contentsChanged = columnCount !== this.windowedColumnIndices.length; + for (let offset = 0; !contentsChanged && offset < columnCount; offset++) { + if (geometry.columnIndices[columns.start + offset] !== this.windowedColumnIndices[offset]) { + contentsChanged = true; + } + } this.columnWindowStart = columns.start; this.columnWindowEnd = columns.end; this.windowedColumnIndices = geometry.columnIndices.slice(columns.start, columns.end); - this.columnWindowSignature = this.windowedColumnIndices.join(","); + if (contentsChanged) this.columnWindowRevision += 1; this.options.ariaMirror.bumpVersion(); } if (columnWindowChanged || frozenColumns !== this.datasourceFrozenColumns) { @@ -209,6 +227,7 @@ export class RenderCoordinator { this.datasourceColumnIndices, ); + const activeSheet = this.options.activeSheet(); const storeEpoch = this.options.storeEpoch(); const viewport: Viewport = { scrollTop: contentTop, @@ -223,18 +242,32 @@ export class RenderCoordinator { } this.options.renderer().setViewport(viewport); - const dataSignature = - `${this.options.activeSheet()}|${rows.start}|${rows.end}|${this.columnWindowSignature}` + - `|${storeEpoch}|${this.dataInvalidationEpoch}|${frozenRows}|${frozenColumns}`; - const paintSignature = - `${dataSignature}|${contentTop}|${scrollLeft}|${clientWidth}|${clientHeight}` + - `|${this.paintInvalidationEpoch}|${frozenHeight}|${frozenWidth}|${this.options.zoom()}`; - const refreshData = this.lastPaintView === null || dataSignature !== this.lastDataSignature; - const repaint = refreshData || paintSignature !== this.lastPaintSignature; + const zoom = this.options.zoom(); + const refreshData = + this.lastPaintView === null || + activeSheet !== this.lastDataSheet || + rows.start !== this.lastDataRowStart || + rows.end !== this.lastDataRowEnd || + this.columnWindowRevision !== this.lastDataColumnWindowRevision || + storeEpoch !== this.lastDataStoreEpoch || + this.dataInvalidationEpoch !== this.lastDataInvalidationEpoch || + frozenRows !== this.lastDataFrozenRows || + frozenColumns !== this.lastDataFrozenColumns; + const repaint = + refreshData || + !Object.is(contentTop, this.lastPaintContentTop) || + !Object.is(scrollLeft, this.lastPaintScrollLeft) || + !Object.is(clientWidth, this.lastPaintClientWidth) || + !Object.is(clientHeight, this.lastPaintClientHeight) || + this.paintInvalidationEpoch !== this.lastPaintInvalidationEpoch || + !Object.is(frozenHeight, this.lastPaintFrozenHeight) || + !Object.is(frozenWidth, this.lastPaintFrozenWidth) || + !Object.is(zoom, this.lastPaintZoom); let view: VisibleWindowView; if (usePanes) { view = this.paintFrozenPanes( + activeSheet, rows, this.windowedColumnIndices, frozenRows, @@ -253,7 +286,7 @@ export class RenderCoordinator { if (refreshData) { this.cachedPaneViews = []; this.lastPaintView = this.options.store.getVisibleWindow( - this.options.activeSheet(), + activeSheet, rows, this.windowedColumnIndices, ); @@ -275,8 +308,22 @@ export class RenderCoordinator { } } this.lastPaintView = view; - this.lastDataSignature = dataSignature; - this.lastPaintSignature = paintSignature; + this.lastDataSheet = activeSheet; + this.lastDataRowStart = rows.start; + this.lastDataRowEnd = rows.end; + this.lastDataColumnWindowRevision = this.columnWindowRevision; + this.lastDataStoreEpoch = storeEpoch; + this.lastDataInvalidationEpoch = this.dataInvalidationEpoch; + this.lastDataFrozenRows = frozenRows; + this.lastDataFrozenColumns = frozenColumns; + this.lastPaintContentTop = contentTop; + this.lastPaintScrollLeft = scrollLeft; + this.lastPaintClientWidth = clientWidth; + this.lastPaintClientHeight = clientHeight; + this.lastPaintInvalidationEpoch = this.paintInvalidationEpoch; + this.lastPaintFrozenHeight = frozenHeight; + this.lastPaintFrozenWidth = frozenWidth; + this.lastPaintZoom = zoom; this.options.ariaMirror.update(view); this.options.overlayPainter.paint(contentTop, scrollLeft, clientWidth, clientHeight); this.options.repositionEditor(contentTop, scrollLeft); @@ -291,6 +338,7 @@ export class RenderCoordinator { } private paintFrozenPanes( + activeSheet: SheetId, bodyRows: { start: number; end: number }, bodyColumns: readonly number[], frozenRows: number, @@ -324,7 +372,7 @@ export class RenderCoordinator { let view = this.cachedPaneViews[slot]; if (refreshData || !view) { view = this.retainPaneView( - this.options.store.getVisibleWindow(this.options.activeSheet(), rows, columns), + this.options.store.getVisibleWindow(activeSheet, rows, columns), slot, ); this.cachedPaneViews[slot] = view; @@ -400,14 +448,23 @@ export class RenderCoordinator { requests: readonly DomMergeAnchorRequest[], refreshData: boolean, ): boolean { - let signature = String(requests.length); + let changed = refreshData; + let stateIndex = 0; for (const request of requests) { - signature += `|${request.sheet}\u0000${request.row}`; - for (const col of request.cols) signature += `,${col}`; + if (this.domMergeAnchorState[stateIndex] !== request.sheet) changed = true; + this.domMergeAnchorState[stateIndex++] = request.sheet; + if (this.domMergeAnchorState[stateIndex] !== request.row) changed = true; + this.domMergeAnchorState[stateIndex++] = request.row; + if (this.domMergeAnchorState[stateIndex] !== request.cols.length) changed = true; + this.domMergeAnchorState[stateIndex++] = request.cols.length; + for (const col of request.cols) { + if (this.domMergeAnchorState[stateIndex] !== col) changed = true; + this.domMergeAnchorState[stateIndex++] = col; + } } - const refresh = refreshData || signature !== this.domMergeAnchorSignature; - this.domMergeAnchorSignature = signature; - return refresh; + if (this.domMergeAnchorState.length !== stateIndex) changed = true; + this.domMergeAnchorState.length = stateIndex; + return changed; } private loadDomMergeAnchorViews(requests: readonly DomMergeAnchorRequest[]): void { diff --git a/packages/core/src/resize.ts b/packages/core/src/resize.ts index 2cfd31c0..102b8c49 100644 --- a/packages/core/src/resize.ts +++ b/packages/core/src/resize.ts @@ -5,12 +5,12 @@ // ── Constants ──────────────────────────────────────────────────────────────── /** Pointer proximity (px) to a boundary that counts as grabbing it. */ -export const RESIZE_THRESHOLD = 4; +const RESIZE_THRESHOLD = 4; /** Floors so a resized column / row never collapses away. */ export const MIN_COLUMN_WIDTH = 24; export const MIN_ROW_HEIGHT = 12; /** Left+right text padding baked into an autofit width (matches the paint CELL_PAD * 2). */ -export const AUTOFIT_PADDING = 12; +const AUTOFIT_PADDING = 12; // ── Boundary hit-testing ───────────────────────────────────────────────────── diff --git a/packages/core/src/resource-accounting.ts b/packages/core/src/resource-accounting.ts index 2fa2505e..97cd1d02 100644 --- a/packages/core/src/resource-accounting.ts +++ b/packages/core/src/resource-accounting.ts @@ -112,7 +112,7 @@ export interface RuntimeResourceSnapshot { }; } -export interface ResourceOwnerDelta { +interface ResourceOwnerDelta { readonly owner: string; readonly logicalBytes: number; readonly allocatedBytes: number; diff --git a/packages/core/src/row-bridge.ts b/packages/core/src/row-bridge.ts index 76929093..697c6ce7 100644 --- a/packages/core/src/row-bridge.ts +++ b/packages/core/src/row-bridge.ts @@ -64,8 +64,7 @@ interface RowBridgeDeltaBase { } /** A single-cell edit, including edits from search, undo, and redo. */ -export interface RowBridgeCellDelta - extends RowBridgeDeltaBase { +interface RowBridgeCellDelta extends RowBridgeDeltaBase { readonly kind: "cell"; readonly cell: RowBridgeCell; } diff --git a/packages/core/src/store/data-engine.ts b/packages/core/src/store/data-engine.ts index 34cdbb6e..d1eb068a 100644 --- a/packages/core/src/store/data-engine.ts +++ b/packages/core/src/store/data-engine.ts @@ -26,11 +26,7 @@ import { type StoreMemoryBreakdown, type TransientResourcePeak, } from "../resource-accounting.js"; -import { - applySheetLifecycleOperation, - canAddSheetSnapshot, - createSheetLifecycleState, -} from "../sheet-lifecycle.js"; +import { canAddSheetSnapshot } from "../sheet-lifecycle.js"; import { validateSheetName } from "../sheet-name.js"; import { StyleDictionary } from "../style-dictionary.js"; import type { @@ -83,6 +79,7 @@ import { validWorkbookTable, workbookTableNameKey, } from "../workbook-table.js"; +import { PagedDirtyPreflight } from "./paged-dirty-preflight.js"; import { integerAt, mergeCrossesFreeze, @@ -107,12 +104,12 @@ import { StoreSnapshotCodec } from "./snapshot-codec.js"; import { StoreViewState } from "./view-state.js"; import type { RecomputingCellStore } from "./wasm-contract.js"; import { StoreWindowReader } from "./window-reader.js"; - -// Mirror of the WASM cell tags. -const KIND_NUMBER = 1; -const KIND_STRING = 2; -const KIND_BOOL = 3; -const KIND_FORMULA = 4; +/** + * Cell kinds cross the WASM boundary in bulk paths here. + * Shared tags keep these encodings aligned with window reads + * and the paint worker. + */ +import { KIND_BOOL, KIND_FORMULA, KIND_NUMBER, KIND_STRING } from "./wire-tags.js"; const AGG_OP: Record = { sum: 0, avg: 1, min: 2, max: 3, count: 4 }; @@ -257,16 +254,6 @@ export class IncompleteDataError extends SheetwriteError { this.capability = capability; } } -interface PagedDirtyPreflightState { - handle: number | null; - rows: number; - cols: number; - columnKeys: string[]; - dirty: number; - additional: number; - existing: Set | null; - seen: Set; -} export interface StoreDataEngineEffects { readonly appliedPatches: DocumentOp[]; @@ -278,15 +265,6 @@ function literalOf(value: CellScalar): CellValue { return { kind: "literal", value }; } -function cellKey(addr: CellAddress): string { - return JSON.stringify([addr.sheet, addr.row, addr.col]); -} - -function parseCellKey(key: string): CellAddress { - const [sheet, row, col] = JSON.parse(key) as [SheetId, number, number]; - return { sheet, row, col }; -} - /** * Owns the raw workbook/WASM state and returns typed effects to the public * transaction facade. It never owns public listeners, epochs, or policy. @@ -301,6 +279,7 @@ export class StoreDataEngine { private readonly view: StoreViewState; private readonly windowReader: StoreWindowReader; private readonly snapshotCodec: StoreSnapshotCodec; + private readonly pagedDirtyPreflight: PagedDirtyPreflight | null; private readonly boundaryAccounting = new BoundaryResourceAccounting(); private resourceOperation: RuntimeResourceOperation | null = "startup"; private disposed = false; @@ -349,6 +328,19 @@ export class StoreDataEngine { this.view = new StoreViewState(this.wasm, workbook, this.handles); this.windowReader = new StoreWindowReader(this.wasm, workbook, this.handles, this.styles); this.snapshotCodec = new StoreSnapshotCodec(workbook, this.windowReader, this.sheetIdsByHandle); + this.pagedDirtyPreflight = + options.storage === "paged" + ? new PagedDirtyPreflight( + this.wasm, + workbook, + this.handles, + this.sheetIdsByHandle, + this.rangeMutationStats, + this.boundaryAccounting, + options.dirtyCellLimit ?? DEFAULT_PAGED_DIRTY_CELL_LIMIT, + options.referenceSimulationLimit ?? MAX_PAGED_REFERENCE_SIMULATION_ENTRIES, + ) + : null; for (const sheet of workbook.sheets) { const handle = this.allocateSheet(sheet.columns.length, sheet.rowCount); this.boundaryAccounting.record( @@ -788,610 +780,7 @@ export class StoreDataEngine { } pagedDirtyCapacityIssue(patches: readonly DocumentOp[]): MutationIssue | null { - if (this.storageOptions.storage !== "paged") return null; - const limit = this.storageOptions.dirtyCellLimit ?? DEFAULT_PAGED_DIRTY_CELL_LIMIT; - const referenceSimulationLimit = - this.storageOptions.referenceSimulationLimit ?? MAX_PAGED_REFERENCE_SIMULATION_ENTRIES; - const wasmIndexLimit = 0xffff_ffff; - const states = new Map(); - const sheetLifecycle = createSheetLifecycleState(this.workbook.sheets); - const referenceLifecycle = createSheetLifecycleState(this.workbook.sheets); - const applicableRemove = patches.map((patch) => { - const lifecycle = applySheetLifecycleOperation(referenceLifecycle, patch); - return patch.op === "removeSheet" && lifecycle?.ok === true; - }); - const removeAfter = new Array(patches.length); - let laterRemove = false; - for (let index = patches.length - 1; index >= 0; index--) { - removeAfter[index] = laterRemove; - if (applicableRemove[index]) laterRemove = true; - } - let trackVirtualRefs = false; - let referenceSimulationExceeded = false; - let referenceSimulationActual = 0; - let virtualRefs: Map | null = null; - const referenceSimulationIssue = (): MutationIssue => ({ - kind: "resource-limit", - severity: "error", - resource: "paged-reference-simulation", - actual: referenceSimulationActual, - max: referenceSimulationLimit, - message: `Paged reference simulation exceeds the ${referenceSimulationLimit} entry limit`, - }); - const materializeVirtualRefs = (force = false): Map | null => { - if (!trackVirtualRefs && !force) return null; - if (virtualRefs) return virtualRefs; - const refs = new Map(); - for (const sheet of this.workbook.sheets) { - if (!this.handles.has(sheet.id) || sheet.rowCount === 0 || sheet.columns.length === 0) { - continue; - } - this.noteRangeMutationFfi(); - const snapshot = this.wasm.captureReferences( - this.handleOf(sheet.id), - referenceSimulationLimit - refs.size, - ); - if (!snapshot) { - referenceSimulationActual = referenceSimulationLimit + 1; - referenceSimulationExceeded = true; - return null; - } - const projection = consumeSourceSnapshot(snapshot, this.sheetIdsByHandle); - for (const [offset, target] of projection.references()) { - referenceSimulationActual++; - this.rangeMutationStats.admissionReferenceEntriesScanned++; - if (referenceSimulationActual > referenceSimulationLimit) { - referenceSimulationExceeded = true; - return null; - } - const source = { - sheet: sheet.id, - row: Math.floor(offset / sheet.columns.length), - col: offset % sheet.columns.length, - }; - refs.set(cellKey(source), target); - } - } - virtualRefs = refs; - this.rangeMutationStats.admissionReferenceMapsMaterialized++; - return virtualRefs; - }; - const setVirtualRef = (source: CellAddress, target: CellAddress | null): void => { - const refs = materializeVirtualRefs(); - if (!refs) return; - const key = cellKey(source); - const replaced = refs.delete(key); - if (target) { - if (!replaced && refs.size >= referenceSimulationLimit) { - referenceSimulationActual = refs.size + 1; - referenceSimulationExceeded = true; - return; - } - refs.set(key, { ...target }); - } - }; - const rebaseVirtualRefs = ( - sheet: SheetId, - rowAt: (row: number) => number | null, - colAt: (col: number) => number | null, - ): void => { - const refs = materializeVirtualRefs(); - if (!refs) return; - this.rangeMutationStats.admissionReferenceMapsMaterialized++; - const rebased = new Map(); - for (const [sourceKey, target] of refs) { - const source = parseCellKey(sourceKey); - const sourceRow = source.sheet === sheet ? rowAt(source.row) : source.row; - const sourceCol = source.sheet === sheet ? colAt(source.col) : source.col; - const targetRow = target.sheet === sheet ? rowAt(target.row) : target.row; - const targetCol = target.sheet === sheet ? colAt(target.col) : target.col; - if (sourceRow === null || sourceCol === null || targetRow === null || targetCol === null) { - continue; - } - const nextSource = { sheet: source.sheet, row: sourceRow, col: sourceCol }; - rebased.set(cellKey(nextSource), { - sheet: target.sheet, - row: targetRow, - col: targetCol, - }); - } - virtualRefs = rebased; - if (rebased.size > referenceSimulationLimit) { - referenceSimulationActual = rebased.size; - referenceSimulationExceeded = true; - } - }; - const clearVirtualRefs = ( - sheet: SheetId, - startRow: number, - startCol: number, - rows: number, - cols: number, - ): void => { - const refs = materializeVirtualRefs(); - if (!refs) return; - for (const sourceKey of refs.keys()) { - const source = parseCellKey(sourceKey); - if ( - source.sheet === sheet && - source.row >= startRow && - source.row < startRow + rows && - source.col >= startCol && - source.col < startCol + cols - ) { - refs.delete(sourceKey); - } - } - }; - const keyOf = (row: number, col: number) => `${row}:${col}`; - const stateFor = (sheet: SheetId) => { - const existing = states.get(sheet); - if (existing) return existing; - if (!this.handles.has(sheet)) return undefined; - const meta = this.sheetMeta(sheet); - const state: PagedDirtyPreflightState = { - handle: this.handleOf(sheet), - rows: meta.rowCount, - cols: meta.columns.length, - columnKeys: meta.columns.map((column) => column.key), - dirty: this.getPagedStats(sheet).dirtyCells, - additional: 0, - existing: null, - seen: new Set(), - }; - states.set(sheet, state); - return state; - }; - const issue = (actual: number): MutationIssue => ({ - kind: "resource-limit", - severity: "error", - resource: "paged-dirty-cells", - actual: Math.min(Number.MAX_SAFE_INTEGER, actual), - max: limit, - message: `Paged dirty cells exceed the ${limit} cell limit`, - }); - const invalid = (operationIndex: number, message: string): MutationIssue => ({ - kind: "invalid-operation", - severity: "error", - operationIndex, - message, - }); - const consume = (state: PagedDirtyPreflightState): MutationIssue | null => { - const actual = state.dirty + state.additional + 1; - if (actual > limit) return issue(actual); - state.additional += 1; - return null; - }; - const materializeExisting = (state: PagedDirtyPreflightState) => { - if (state.existing) return; - const existing = new Set(); - if (state.handle !== null) { - const coordinates = this.wasm.pagedDirtyCoordinates(state.handle); - for (let index = 0; index + 1 < coordinates.length; index += 2) { - existing.add(keyOf(coordinates[index]!, coordinates[index + 1]!)); - } - } - state.existing = existing; - state.dirty = existing.size; - }; - const rebaseSet = ( - source: ReadonlySet, - rowAt: (row: number) => number | null, - colAt: (col: number) => number | null, - ) => { - const rebased = new Set(); - for (const encoded of source) { - const separator = encoded.indexOf(":"); - const row = Number(encoded.slice(0, separator)); - const col = Number(encoded.slice(separator + 1)); - const nextRow = rowAt(row); - const nextCol = colAt(col); - if (nextRow !== null && nextCol !== null) rebased.add(keyOf(nextRow, nextCol)); - } - return rebased; - }; - const rebaseState = ( - state: PagedDirtyPreflightState, - rowAt: (row: number) => number | null, - colAt: (col: number) => number | null, - ) => { - materializeExisting(state); - state.existing = rebaseSet(state.existing!, rowAt, colAt); - state.seen = rebaseSet(state.seen, rowAt, colAt); - state.dirty = state.existing.size; - state.additional = state.seen.size; - }; - const addSparse = (sheet: SheetId, row: number, col: number): MutationIssue | null => { - const state = stateFor(sheet); - if (!state || row < 0 || col < 0 || row >= state.rows || col >= state.cols) return null; - const key = keyOf(row, col); - if (state.seen.has(key)) return null; - if ( - state.existing?.has(key) || - (state.existing === null && - state.handle !== null && - this.wasm.cellState(state.handle, row, col) === 3) - ) { - return null; - } - const rejection = consume(state); - if (!rejection) state.seen.add(key); - return rejection; - }; - const cellApplies = (sheet: SheetId, row: number, col: number): boolean => { - const state = stateFor(sheet); - return Boolean(state && row >= 0 && col >= 0 && row < state.rows && col < state.cols); - }; - const rectangleApplies = ( - sheet: SheetId, - startRow: number, - startCol: number, - rows: number, - cols: number, - ): boolean => { - const state = stateFor(sheet); - return Boolean( - state && - startRow >= 0 && - startCol >= 0 && - Number.isSafeInteger(rows) && - Number.isSafeInteger(cols) && - rows > 0 && - cols > 0 && - rows <= state.rows - startRow && - cols <= state.cols - startCol, - ); - }; - const addRectangle = ( - sheet: SheetId, - startRow: number, - startCol: number, - rows: number, - cols: number, - ): MutationIssue | null => { - if (rows === 1 && cols === 1) return addSparse(sheet, startRow, startCol); - const state = stateFor(sheet); - if (!state) return null; - if (startRow < 0 || startCol < 0) return null; - if ( - !Number.isSafeInteger(rows) || - !Number.isSafeInteger(cols) || - rows < 0 || - cols < 0 || - rows > Math.floor(Number.MAX_SAFE_INTEGER / Math.max(cols, 1)) - ) { - return issue(Number.MAX_SAFE_INTEGER); - } - if (rows > state.rows - startRow || cols > state.cols - startCol) { - const actual = state.dirty + state.additional + rows * cols; - return actual > limit ? issue(actual) : null; - } - materializeExisting(state); - for (let row = startRow; row < startRow + rows; row++) { - for (let col = startCol; col < startCol + cols; col++) { - const key = keyOf(row, col); - if (state.existing!.has(key) || state.seen.has(key)) continue; - const rejection = consume(state); - if (rejection) return rejection; - state.seen.add(key); - } - } - return null; - }; - - for (let operationIndex = 0; operationIndex < patches.length; operationIndex++) { - const patch = patches[operationIndex]!; - trackVirtualRefs = removeAfter[operationIndex] ?? false; - if (patch.op === "addSheet") { - if (applySheetLifecycleOperation(sheetLifecycle, patch)?.ok !== true) continue; - const snapshot = patch.sheet; - const state: PagedDirtyPreflightState = { - handle: null, - rows: snapshot.rowCount, - cols: snapshot.columns.length, - columnKeys: snapshot.columns.map((column) => column.key), - dirty: 0, - additional: 0, - existing: new Set(), - seen: new Set(), - }; - states.set(snapshot.id, state); - for (const block of snapshot.cells) { - for (const cell of block.cells) { - const rejection = addSparse( - snapshot.id, - block.startRow + cell.rowOffset, - block.startCol + cell.colOffset, - ); - if (rejection) return rejection; - if (cell.value.kind === "ref") { - setVirtualRef( - { - sheet: snapshot.id, - row: block.startRow + cell.rowOffset, - col: block.startCol + cell.colOffset, - }, - cell.value.target, - ); - if (referenceSimulationExceeded) return referenceSimulationIssue(); - } - } - } - if (referenceSimulationExceeded) return referenceSimulationIssue(); - continue; - } - if (patch.op === "removeSheet") { - if (applySheetLifecycleOperation(sheetLifecycle, patch)?.ok !== true) continue; - if (referenceSimulationExceeded) return referenceSimulationIssue(); - if (!trackVirtualRefs && virtualRefs === null) { - this.noteRangeMutationFfi(); - const sources = this.wasm.referencesTargeting( - this.handleOf(patch.sheet), - referenceSimulationLimit, - ); - if (!sources) { - referenceSimulationActual = referenceSimulationLimit + 1; - return referenceSimulationIssue(); - } - this.rangeMutationStats.admissionReferenceEntriesScanned += sources.length / 3; - for (let index = 0; index < sources.length; index += 3) { - const sourceSheet = this.sheetIdsByHandle[sources[index]!]; - if (sourceSheet === undefined || sourceSheet === patch.sheet) continue; - const rejection = addSparse(sourceSheet, sources[index + 1]!, sources[index + 2]!); - if (rejection) return rejection; - } - states.delete(patch.sheet); - continue; - } - const materializedRefs = materializeVirtualRefs(true); - if (!materializedRefs) return referenceSimulationIssue(); - const entries = (function* (): IterableIterator<[CellAddress, CellAddress]> { - for (const [sourceKey, target] of materializedRefs) { - yield [parseCellKey(sourceKey), target]; - } - })(); - const remaining = trackVirtualRefs ? new Map() : null; - for (const [source, target] of entries) { - if (source.sheet !== patch.sheet && target.sheet === patch.sheet) { - const rejection = addSparse(source.sheet, source.row, source.col); - if (rejection) return rejection; - } - if (remaining && source.sheet !== patch.sheet && target.sheet !== patch.sheet) { - remaining.set(cellKey(source), { ...target }); - } - } - virtualRefs = remaining; - states.delete(patch.sheet); - continue; - } - if ( - patch.op === "renameSheet" || - patch.op === "moveSheet" || - patch.op === "setSheetVisibility" - ) { - applySheetLifecycleOperation(sheetLifecycle, patch); - continue; - } - const sheet = patchSheetId(patch); - if ( - sheet !== null && - (patch.op === "addRows" || - patch.op === "removeRows" || - patch.op === "moveRows" || - patch.op === "addColumns" || - patch.op === "removeColumns" || - patch.op === "moveColumns") - ) { - const state = stateFor(sheet); - if (!state) continue; - const keep = (index: number) => index; - if (patch.op === "addRows") { - if (patch.at > state.rows || patch.count > wasmIndexLimit - state.rows) { - return invalid(operationIndex, "addRows exceeds the current sheet bounds"); - } - rebaseState(state, (row) => (row >= patch.at ? row + patch.count : row), keep); - rebaseVirtualRefs(sheet, (row) => (row >= patch.at ? row + patch.count : row), keep); - state.rows += patch.count; - } else if (patch.op === "removeRows") { - if (patch.at > state.rows || patch.count > state.rows - patch.at) { - return invalid(operationIndex, "removeRows exceeds the current sheet bounds"); - } - rebaseState( - state, - (row) => - row < patch.at ? row : row < patch.at + patch.count ? null : row - patch.count, - keep, - ); - rebaseVirtualRefs( - sheet, - (row) => - row < patch.at ? row : row < patch.at + patch.count ? null : row - patch.count, - keep, - ); - state.rows -= patch.count; - } else if (patch.op === "moveRows") { - if ( - patch.from > state.rows || - patch.count > state.rows - patch.from || - patch.to > state.rows - patch.count - ) { - return invalid(operationIndex, "moveRows exceeds the current sheet bounds"); - } - rebaseState(state, (row) => moveIndex(row, patch.from, patch.count, patch.to), keep); - rebaseVirtualRefs( - sheet, - (row) => moveIndex(row, patch.from, patch.count, patch.to), - keep, - ); - } else if (patch.op === "addColumns") { - const insertedKeys = patch.columns.map((column) => column.key); - if ( - patch.at > state.cols || - insertedKeys.length === 0 || - insertedKeys.length > wasmIndexLimit - state.cols || - new Set([...state.columnKeys, ...insertedKeys]).size !== - state.columnKeys.length + insertedKeys.length - ) { - return invalid(operationIndex, "addColumns exceeds the current sheet bounds"); - } - rebaseState(state, keep, (col) => (col >= patch.at ? col + patch.columns.length : col)); - rebaseVirtualRefs(sheet, keep, (col) => - col >= patch.at ? col + patch.columns.length : col, - ); - state.cols += patch.columns.length; - state.columnKeys.splice(patch.at, 0, ...insertedKeys); - } else if (patch.op === "removeColumns") { - if ( - patch.at > state.cols || - patch.count > state.cols - patch.at || - patch.count === state.cols - ) { - return invalid(operationIndex, "removeColumns exceeds the current sheet bounds"); - } - rebaseState(state, keep, (col) => - col < patch.at ? col : col < patch.at + patch.count ? null : col - patch.count, - ); - rebaseVirtualRefs(sheet, keep, (col) => - col < patch.at ? col : col < patch.at + patch.count ? null : col - patch.count, - ); - state.cols -= patch.count; - state.columnKeys.splice(patch.at, patch.count); - } else { - if ( - patch.from > state.cols || - patch.count > state.cols - patch.from || - patch.to > state.cols - patch.count - ) { - return invalid(operationIndex, "moveColumns exceeds the current sheet bounds"); - } - rebaseState(state, keep, (col) => moveIndex(col, patch.from, patch.count, patch.to)); - rebaseVirtualRefs(sheet, keep, (col) => - moveIndex(col, patch.from, patch.count, patch.to), - ); - const movedKeys = state.columnKeys.splice(patch.from, patch.count); - state.columnKeys.splice(patch.to, 0, ...movedKeys); - } - if (referenceSimulationExceeded) return referenceSimulationIssue(); - continue; - } - let rejection: MutationIssue | null = null; - if (patch.op === "set") { - if (!cellApplies(patch.addr.sheet, patch.addr.row, patch.addr.col)) continue; - rejection = addSparse(patch.addr.sheet, patch.addr.row, patch.addr.col); - if (!rejection) { - setVirtualRef(patch.addr, patch.value.kind === "ref" ? patch.value.target : null); - } - } else if (patch.op === "setRange") { - const range = normalizedRange(patch.range); - const rows = range.end.row - range.start.row + 1; - const cols = range.end.col - range.start.col + 1; - if ( - !rectangleApplies(range.sheet, range.start.row, range.start.col, rows, cols) || - patch.cells.some( - (cell) => - !integerAt(cell.rowOffset) || - !integerAt(cell.colOffset) || - cell.rowOffset >= rows || - cell.colOffset >= cols, - ) - ) { - continue; - } - for (const cell of patch.cells) { - rejection = addSparse( - range.sheet, - range.start.row + cell.rowOffset, - range.start.col + cell.colOffset, - ); - if (rejection) break; - const source = { - sheet: range.sheet, - row: range.start.row + cell.rowOffset, - col: range.start.col + cell.colOffset, - }; - setVirtualRef(source, cell.value.kind === "ref" ? cell.value.target : null); - if (referenceSimulationExceeded) return referenceSimulationIssue(); - } - } else if (patch.op === "setBlock") { - const range = normalizedRange(patch.range); - rejection = addRectangle( - range.sheet, - range.start.row, - range.start.col, - patch.block.rowCount, - patch.block.colCount, - ); - if ( - !rejection && - patch.block.rowCount === range.end.row - range.start.row + 1 && - patch.block.colCount === range.end.col - range.start.col + 1 && - rectangleApplies( - range.sheet, - range.start.row, - range.start.col, - patch.block.rowCount, - patch.block.colCount, - ) - ) { - for (let rowOffset = 0; rowOffset < patch.block.rowCount; rowOffset++) { - for (let colOffset = 0; colOffset < patch.block.colCount; colOffset++) { - setVirtualRef( - { - sheet: range.sheet, - row: range.start.row + rowOffset, - col: range.start.col + colOffset, - }, - null, - ); - if (referenceSimulationExceeded) return referenceSimulationIssue(); - } - } - for (const [offset, target] of patch.block.refs ?? []) { - setVirtualRef( - { - sheet: range.sheet, - row: range.start.row + Math.floor(offset / patch.block.colCount), - col: range.start.col + (offset % patch.block.colCount), - }, - target, - ); - if (referenceSimulationExceeded) return referenceSimulationIssue(); - } - } - } else if (patch.op === "setRangeStyle" || patch.op === "clearRange") { - const range = normalizedRange(patch.range); - rejection = addRectangle( - range.sheet, - range.start.row, - range.start.col, - range.end.row - range.start.row + 1, - range.end.col - range.start.col + 1, - ); - if ( - !rejection && - patch.op === "clearRange" && - (patch.contents ?? true) && - rectangleApplies( - range.sheet, - range.start.row, - range.start.col, - range.end.row - range.start.row + 1, - range.end.col - range.start.col + 1, - ) - ) { - clearVirtualRefs( - range.sheet, - range.start.row, - range.start.col, - range.end.row - range.start.row + 1, - range.end.col - range.start.col + 1, - ); - } - } - if (referenceSimulationExceeded) return referenceSimulationIssue(); - if (rejection) return rejection; - } - return null; + return this.pagedDirtyPreflight?.issue(patches, this.resourceOperation) ?? null; } private requireCompleteQuery(sheet: SheetId): void { diff --git a/packages/core/src/store/paged-dirty-preflight.ts b/packages/core/src/store/paged-dirty-preflight.ts new file mode 100644 index 00000000..0e773fbd --- /dev/null +++ b/packages/core/src/store/paged-dirty-preflight.ts @@ -0,0 +1,672 @@ +import { consumeSourceSnapshot } from "../reference.js"; +import type { + BoundaryResourceAccounting, + RuntimeResourceOperation, +} from "../resource-accounting.js"; +import { applySheetLifecycleOperation, createSheetLifecycleState } from "../sheet-lifecycle.js"; +import type { CellAddress, SheetId } from "../types/coordinates.js"; +import type { DocumentOp, MutationIssue, Workbook } from "../types/document.js"; +import { integerAt, moveIndex, normalizedRange, patchSheetId } from "./ranges.js"; +import type { RecomputingCellStore } from "./wasm-contract.js"; + +export interface PagedDirtyPreflightStats { + ffiCalls: number; + maxTransferredArrayLength: number; + admissionReferenceEntriesScanned: number; + admissionReferenceMapsMaterialized: number; +} + +interface PagedDirtyPreflightState { + handle: number | null; + rows: number; + cols: number; + columnKeys: string[]; + dirty: number; + additional: number; + existing: Set | null; + seen: Set; +} + +function cellKey(addr: CellAddress): string { + return JSON.stringify([addr.sheet, addr.row, addr.col]); +} + +function parseCellKey(key: string): CellAddress { + const [sheet, row, col] = JSON.parse(key) as [SheetId, number, number]; + return { sheet, row, col }; +} + +/** Simulates paged dirty-cell and reference admission before a transaction mutates the store. */ +export class PagedDirtyPreflight { + constructor( + private readonly wasm: RecomputingCellStore, + private readonly workbook: Workbook, + private readonly handles: ReadonlyMap, + private readonly sheetIdsByHandle: readonly SheetId[], + private readonly stats: PagedDirtyPreflightStats, + private readonly boundaryAccounting: BoundaryResourceAccounting, + private readonly dirtyCellLimit: number, + private readonly referenceSimulationLimit: number, + ) {} + + private handleOf(sheet: SheetId): number { + const handle = this.handles.get(sheet); + if (handle === undefined) throw new Error(`unknown sheet: ${sheet}`); + return handle; + } + + private noteRangeMutationFfi(operation: RuntimeResourceOperation | null): void { + this.stats.ffiCalls += 1; + this.stats.maxTransferredArrayLength = Math.max(this.stats.maxTransferredArrayLength, 0); + this.boundaryAccounting.record(operation ?? "edit", "js-to-wasm", 0, "scalar"); + } + + issue( + patches: readonly DocumentOp[], + resourceOperation: RuntimeResourceOperation | null, + ): MutationIssue | null { + const limit = this.dirtyCellLimit; + const referenceSimulationLimit = this.referenceSimulationLimit; + const wasmIndexLimit = 0xffff_ffff; + const states = new Map(); + const sheetLifecycle = createSheetLifecycleState(this.workbook.sheets); + const referenceLifecycle = createSheetLifecycleState(this.workbook.sheets); + const applicableRemove = patches.map((patch) => { + const lifecycle = applySheetLifecycleOperation(referenceLifecycle, patch); + return patch.op === "removeSheet" && lifecycle?.ok === true; + }); + const removeAfter = new Array(patches.length); + let laterRemove = false; + for (let index = patches.length - 1; index >= 0; index--) { + removeAfter[index] = laterRemove; + if (applicableRemove[index]) laterRemove = true; + } + let trackVirtualRefs = false; + let referenceSimulationExceeded = false; + let referenceSimulationActual = 0; + let virtualRefs: Map | null = null; + const referenceSimulationIssue = (): MutationIssue => ({ + kind: "resource-limit", + severity: "error", + resource: "paged-reference-simulation", + actual: referenceSimulationActual, + max: referenceSimulationLimit, + message: `Paged reference simulation exceeds the ${referenceSimulationLimit} entry limit`, + }); + const materializeVirtualRefs = (force = false): Map | null => { + if (!trackVirtualRefs && !force) return null; + if (virtualRefs) return virtualRefs; + const refs = new Map(); + for (const sheet of this.workbook.sheets) { + if (!this.handles.has(sheet.id) || sheet.rowCount === 0 || sheet.columns.length === 0) { + continue; + } + this.noteRangeMutationFfi(resourceOperation); + const snapshot = this.wasm.captureReferences( + this.handleOf(sheet.id), + referenceSimulationLimit - refs.size, + ); + if (!snapshot) { + referenceSimulationActual = referenceSimulationLimit + 1; + referenceSimulationExceeded = true; + return null; + } + const projection = consumeSourceSnapshot(snapshot, this.sheetIdsByHandle); + for (const [offset, target] of projection.references()) { + referenceSimulationActual++; + this.stats.admissionReferenceEntriesScanned++; + if (referenceSimulationActual > referenceSimulationLimit) { + referenceSimulationExceeded = true; + return null; + } + const source = { + sheet: sheet.id, + row: Math.floor(offset / sheet.columns.length), + col: offset % sheet.columns.length, + }; + refs.set(cellKey(source), target); + } + } + virtualRefs = refs; + this.stats.admissionReferenceMapsMaterialized++; + return virtualRefs; + }; + const setVirtualRef = (source: CellAddress, target: CellAddress | null): void => { + const refs = materializeVirtualRefs(); + if (!refs) return; + const key = cellKey(source); + const replaced = refs.delete(key); + if (target) { + if (!replaced && refs.size >= referenceSimulationLimit) { + referenceSimulationActual = refs.size + 1; + referenceSimulationExceeded = true; + return; + } + refs.set(key, { ...target }); + } + }; + const rebaseVirtualRefs = ( + sheet: SheetId, + rowAt: (row: number) => number | null, + colAt: (col: number) => number | null, + ): void => { + const refs = materializeVirtualRefs(); + if (!refs) return; + this.stats.admissionReferenceMapsMaterialized++; + const rebased = new Map(); + for (const [sourceKey, target] of refs) { + const source = parseCellKey(sourceKey); + const sourceRow = source.sheet === sheet ? rowAt(source.row) : source.row; + const sourceCol = source.sheet === sheet ? colAt(source.col) : source.col; + const targetRow = target.sheet === sheet ? rowAt(target.row) : target.row; + const targetCol = target.sheet === sheet ? colAt(target.col) : target.col; + if (sourceRow === null || sourceCol === null || targetRow === null || targetCol === null) { + continue; + } + const nextSource = { sheet: source.sheet, row: sourceRow, col: sourceCol }; + rebased.set(cellKey(nextSource), { + sheet: target.sheet, + row: targetRow, + col: targetCol, + }); + } + virtualRefs = rebased; + if (rebased.size > referenceSimulationLimit) { + referenceSimulationActual = rebased.size; + referenceSimulationExceeded = true; + } + }; + const clearVirtualRefs = ( + sheet: SheetId, + startRow: number, + startCol: number, + rows: number, + cols: number, + ): void => { + const refs = materializeVirtualRefs(); + if (!refs) return; + for (const sourceKey of refs.keys()) { + const source = parseCellKey(sourceKey); + if ( + source.sheet === sheet && + source.row >= startRow && + source.row < startRow + rows && + source.col >= startCol && + source.col < startCol + cols + ) { + refs.delete(sourceKey); + } + } + }; + const keyOf = (row: number, col: number) => `${row}:${col}`; + const stateFor = (sheet: SheetId) => { + const existing = states.get(sheet); + if (existing) return existing; + if (!this.handles.has(sheet)) return undefined; + const meta = this.workbook.sheets.find((candidate) => candidate.id === sheet); + if (!meta) throw new Error(`unknown sheet: ${sheet}`); + const state: PagedDirtyPreflightState = { + handle: this.handleOf(sheet), + rows: meta.rowCount, + cols: meta.columns.length, + columnKeys: meta.columns.map((column) => column.key), + dirty: this.wasm.pagedStats(this.handleOf(sheet))[2] ?? 0, + additional: 0, + existing: null, + seen: new Set(), + }; + states.set(sheet, state); + return state; + }; + const issue = (actual: number): MutationIssue => ({ + kind: "resource-limit", + severity: "error", + resource: "paged-dirty-cells", + actual: Math.min(Number.MAX_SAFE_INTEGER, actual), + max: limit, + message: `Paged dirty cells exceed the ${limit} cell limit`, + }); + const invalid = (operationIndex: number, message: string): MutationIssue => ({ + kind: "invalid-operation", + severity: "error", + operationIndex, + message, + }); + const consume = (state: PagedDirtyPreflightState): MutationIssue | null => { + const actual = state.dirty + state.additional + 1; + if (actual > limit) return issue(actual); + state.additional += 1; + return null; + }; + const materializeExisting = (state: PagedDirtyPreflightState) => { + if (state.existing) return; + const existing = new Set(); + if (state.handle !== null) { + const coordinates = this.wasm.pagedDirtyCoordinates(state.handle); + for (let index = 0; index + 1 < coordinates.length; index += 2) { + existing.add(keyOf(coordinates[index]!, coordinates[index + 1]!)); + } + } + state.existing = existing; + state.dirty = existing.size; + }; + const rebaseSet = ( + source: ReadonlySet, + rowAt: (row: number) => number | null, + colAt: (col: number) => number | null, + ) => { + const rebased = new Set(); + for (const encoded of source) { + const separator = encoded.indexOf(":"); + const row = Number(encoded.slice(0, separator)); + const col = Number(encoded.slice(separator + 1)); + const nextRow = rowAt(row); + const nextCol = colAt(col); + if (nextRow !== null && nextCol !== null) rebased.add(keyOf(nextRow, nextCol)); + } + return rebased; + }; + const rebaseState = ( + state: PagedDirtyPreflightState, + rowAt: (row: number) => number | null, + colAt: (col: number) => number | null, + ) => { + materializeExisting(state); + state.existing = rebaseSet(state.existing!, rowAt, colAt); + state.seen = rebaseSet(state.seen, rowAt, colAt); + state.dirty = state.existing.size; + state.additional = state.seen.size; + }; + const addSparse = (sheet: SheetId, row: number, col: number): MutationIssue | null => { + const state = stateFor(sheet); + if (!state || row < 0 || col < 0 || row >= state.rows || col >= state.cols) return null; + const key = keyOf(row, col); + if (state.seen.has(key)) return null; + if ( + state.existing?.has(key) || + (state.existing === null && + state.handle !== null && + this.wasm.cellState(state.handle, row, col) === 3) + ) { + return null; + } + const rejection = consume(state); + if (!rejection) state.seen.add(key); + return rejection; + }; + const cellApplies = (sheet: SheetId, row: number, col: number): boolean => { + const state = stateFor(sheet); + return Boolean(state && row >= 0 && col >= 0 && row < state.rows && col < state.cols); + }; + const rectangleApplies = ( + sheet: SheetId, + startRow: number, + startCol: number, + rows: number, + cols: number, + ): boolean => { + const state = stateFor(sheet); + return Boolean( + state && + startRow >= 0 && + startCol >= 0 && + Number.isSafeInteger(rows) && + Number.isSafeInteger(cols) && + rows > 0 && + cols > 0 && + rows <= state.rows - startRow && + cols <= state.cols - startCol, + ); + }; + const addRectangle = ( + sheet: SheetId, + startRow: number, + startCol: number, + rows: number, + cols: number, + ): MutationIssue | null => { + if (rows === 1 && cols === 1) return addSparse(sheet, startRow, startCol); + const state = stateFor(sheet); + if (!state) return null; + if (startRow < 0 || startCol < 0) return null; + if ( + !Number.isSafeInteger(rows) || + !Number.isSafeInteger(cols) || + rows < 0 || + cols < 0 || + rows > Math.floor(Number.MAX_SAFE_INTEGER / Math.max(cols, 1)) + ) { + return issue(Number.MAX_SAFE_INTEGER); + } + if (rows > state.rows - startRow || cols > state.cols - startCol) { + const actual = state.dirty + state.additional + rows * cols; + return actual > limit ? issue(actual) : null; + } + materializeExisting(state); + for (let row = startRow; row < startRow + rows; row++) { + for (let col = startCol; col < startCol + cols; col++) { + const key = keyOf(row, col); + if (state.existing!.has(key) || state.seen.has(key)) continue; + const rejection = consume(state); + if (rejection) return rejection; + state.seen.add(key); + } + } + return null; + }; + + for (let operationIndex = 0; operationIndex < patches.length; operationIndex++) { + const patch = patches[operationIndex]!; + trackVirtualRefs = removeAfter[operationIndex] ?? false; + if (patch.op === "addSheet") { + if (applySheetLifecycleOperation(sheetLifecycle, patch)?.ok !== true) continue; + const snapshot = patch.sheet; + const state: PagedDirtyPreflightState = { + handle: null, + rows: snapshot.rowCount, + cols: snapshot.columns.length, + columnKeys: snapshot.columns.map((column) => column.key), + dirty: 0, + additional: 0, + existing: new Set(), + seen: new Set(), + }; + states.set(snapshot.id, state); + for (const block of snapshot.cells) { + for (const cell of block.cells) { + const rejection = addSparse( + snapshot.id, + block.startRow + cell.rowOffset, + block.startCol + cell.colOffset, + ); + if (rejection) return rejection; + if (cell.value.kind === "ref") { + setVirtualRef( + { + sheet: snapshot.id, + row: block.startRow + cell.rowOffset, + col: block.startCol + cell.colOffset, + }, + cell.value.target, + ); + if (referenceSimulationExceeded) return referenceSimulationIssue(); + } + } + } + if (referenceSimulationExceeded) return referenceSimulationIssue(); + continue; + } + if (patch.op === "removeSheet") { + if (applySheetLifecycleOperation(sheetLifecycle, patch)?.ok !== true) continue; + if (referenceSimulationExceeded) return referenceSimulationIssue(); + if (!trackVirtualRefs && virtualRefs === null) { + this.noteRangeMutationFfi(resourceOperation); + const sources = this.wasm.referencesTargeting( + this.handleOf(patch.sheet), + referenceSimulationLimit, + ); + if (!sources) { + referenceSimulationActual = referenceSimulationLimit + 1; + return referenceSimulationIssue(); + } + this.stats.admissionReferenceEntriesScanned += sources.length / 3; + for (let index = 0; index < sources.length; index += 3) { + const sourceSheet = this.sheetIdsByHandle[sources[index]!]; + if (sourceSheet === undefined || sourceSheet === patch.sheet) continue; + const rejection = addSparse(sourceSheet, sources[index + 1]!, sources[index + 2]!); + if (rejection) return rejection; + } + states.delete(patch.sheet); + continue; + } + const materializedRefs = materializeVirtualRefs(true); + if (!materializedRefs) return referenceSimulationIssue(); + const entries = (function* (): IterableIterator<[CellAddress, CellAddress]> { + for (const [sourceKey, target] of materializedRefs) { + yield [parseCellKey(sourceKey), target]; + } + })(); + const remaining = trackVirtualRefs ? new Map() : null; + for (const [source, target] of entries) { + if (source.sheet !== patch.sheet && target.sheet === patch.sheet) { + const rejection = addSparse(source.sheet, source.row, source.col); + if (rejection) return rejection; + } + if (remaining && source.sheet !== patch.sheet && target.sheet !== patch.sheet) { + remaining.set(cellKey(source), { ...target }); + } + } + virtualRefs = remaining; + states.delete(patch.sheet); + continue; + } + if ( + patch.op === "renameSheet" || + patch.op === "moveSheet" || + patch.op === "setSheetVisibility" + ) { + applySheetLifecycleOperation(sheetLifecycle, patch); + continue; + } + const sheet = patchSheetId(patch); + if ( + sheet !== null && + (patch.op === "addRows" || + patch.op === "removeRows" || + patch.op === "moveRows" || + patch.op === "addColumns" || + patch.op === "removeColumns" || + patch.op === "moveColumns") + ) { + const state = stateFor(sheet); + if (!state) continue; + const keep = (index: number) => index; + if (patch.op === "addRows") { + if (patch.at > state.rows || patch.count > wasmIndexLimit - state.rows) { + return invalid(operationIndex, "addRows exceeds the current sheet bounds"); + } + rebaseState(state, (row) => (row >= patch.at ? row + patch.count : row), keep); + rebaseVirtualRefs(sheet, (row) => (row >= patch.at ? row + patch.count : row), keep); + state.rows += patch.count; + } else if (patch.op === "removeRows") { + if (patch.at > state.rows || patch.count > state.rows - patch.at) { + return invalid(operationIndex, "removeRows exceeds the current sheet bounds"); + } + rebaseState( + state, + (row) => + row < patch.at ? row : row < patch.at + patch.count ? null : row - patch.count, + keep, + ); + rebaseVirtualRefs( + sheet, + (row) => + row < patch.at ? row : row < patch.at + patch.count ? null : row - patch.count, + keep, + ); + state.rows -= patch.count; + } else if (patch.op === "moveRows") { + if ( + patch.from > state.rows || + patch.count > state.rows - patch.from || + patch.to > state.rows - patch.count + ) { + return invalid(operationIndex, "moveRows exceeds the current sheet bounds"); + } + rebaseState(state, (row) => moveIndex(row, patch.from, patch.count, patch.to), keep); + rebaseVirtualRefs( + sheet, + (row) => moveIndex(row, patch.from, patch.count, patch.to), + keep, + ); + } else if (patch.op === "addColumns") { + const insertedKeys = patch.columns.map((column) => column.key); + if ( + patch.at > state.cols || + insertedKeys.length === 0 || + insertedKeys.length > wasmIndexLimit - state.cols || + new Set([...state.columnKeys, ...insertedKeys]).size !== + state.columnKeys.length + insertedKeys.length + ) { + return invalid(operationIndex, "addColumns exceeds the current sheet bounds"); + } + rebaseState(state, keep, (col) => (col >= patch.at ? col + patch.columns.length : col)); + rebaseVirtualRefs(sheet, keep, (col) => + col >= patch.at ? col + patch.columns.length : col, + ); + state.cols += patch.columns.length; + state.columnKeys.splice(patch.at, 0, ...insertedKeys); + } else if (patch.op === "removeColumns") { + if ( + patch.at > state.cols || + patch.count > state.cols - patch.at || + patch.count === state.cols + ) { + return invalid(operationIndex, "removeColumns exceeds the current sheet bounds"); + } + rebaseState(state, keep, (col) => + col < patch.at ? col : col < patch.at + patch.count ? null : col - patch.count, + ); + rebaseVirtualRefs(sheet, keep, (col) => + col < patch.at ? col : col < patch.at + patch.count ? null : col - patch.count, + ); + state.cols -= patch.count; + state.columnKeys.splice(patch.at, patch.count); + } else { + if ( + patch.from > state.cols || + patch.count > state.cols - patch.from || + patch.to > state.cols - patch.count + ) { + return invalid(operationIndex, "moveColumns exceeds the current sheet bounds"); + } + rebaseState(state, keep, (col) => moveIndex(col, patch.from, patch.count, patch.to)); + rebaseVirtualRefs(sheet, keep, (col) => + moveIndex(col, patch.from, patch.count, patch.to), + ); + const movedKeys = state.columnKeys.splice(patch.from, patch.count); + state.columnKeys.splice(patch.to, 0, ...movedKeys); + } + if (referenceSimulationExceeded) return referenceSimulationIssue(); + continue; + } + let rejection: MutationIssue | null = null; + if (patch.op === "set") { + if (!cellApplies(patch.addr.sheet, patch.addr.row, patch.addr.col)) continue; + rejection = addSparse(patch.addr.sheet, patch.addr.row, patch.addr.col); + if (!rejection) { + setVirtualRef(patch.addr, patch.value.kind === "ref" ? patch.value.target : null); + } + } else if (patch.op === "setRange") { + const range = normalizedRange(patch.range); + const rows = range.end.row - range.start.row + 1; + const cols = range.end.col - range.start.col + 1; + if ( + !rectangleApplies(range.sheet, range.start.row, range.start.col, rows, cols) || + patch.cells.some( + (cell) => + !integerAt(cell.rowOffset) || + !integerAt(cell.colOffset) || + cell.rowOffset >= rows || + cell.colOffset >= cols, + ) + ) { + continue; + } + for (const cell of patch.cells) { + rejection = addSparse( + range.sheet, + range.start.row + cell.rowOffset, + range.start.col + cell.colOffset, + ); + if (rejection) break; + const source = { + sheet: range.sheet, + row: range.start.row + cell.rowOffset, + col: range.start.col + cell.colOffset, + }; + setVirtualRef(source, cell.value.kind === "ref" ? cell.value.target : null); + if (referenceSimulationExceeded) return referenceSimulationIssue(); + } + } else if (patch.op === "setBlock") { + const range = normalizedRange(patch.range); + rejection = addRectangle( + range.sheet, + range.start.row, + range.start.col, + patch.block.rowCount, + patch.block.colCount, + ); + if ( + !rejection && + patch.block.rowCount === range.end.row - range.start.row + 1 && + patch.block.colCount === range.end.col - range.start.col + 1 && + rectangleApplies( + range.sheet, + range.start.row, + range.start.col, + patch.block.rowCount, + patch.block.colCount, + ) + ) { + for (let rowOffset = 0; rowOffset < patch.block.rowCount; rowOffset++) { + for (let colOffset = 0; colOffset < patch.block.colCount; colOffset++) { + setVirtualRef( + { + sheet: range.sheet, + row: range.start.row + rowOffset, + col: range.start.col + colOffset, + }, + null, + ); + if (referenceSimulationExceeded) return referenceSimulationIssue(); + } + } + for (const [offset, target] of patch.block.refs ?? []) { + setVirtualRef( + { + sheet: range.sheet, + row: range.start.row + Math.floor(offset / patch.block.colCount), + col: range.start.col + (offset % patch.block.colCount), + }, + target, + ); + if (referenceSimulationExceeded) return referenceSimulationIssue(); + } + } + } else if (patch.op === "setRangeStyle" || patch.op === "clearRange") { + const range = normalizedRange(patch.range); + rejection = addRectangle( + range.sheet, + range.start.row, + range.start.col, + range.end.row - range.start.row + 1, + range.end.col - range.start.col + 1, + ); + if ( + !rejection && + patch.op === "clearRange" && + (patch.contents ?? true) && + rectangleApplies( + range.sheet, + range.start.row, + range.start.col, + range.end.row - range.start.row + 1, + range.end.col - range.start.col + 1, + ) + ) { + clearVirtualRefs( + range.sheet, + range.start.row, + range.start.col, + range.end.row - range.start.row + 1, + range.end.col - range.start.col + 1, + ); + } + } + if (referenceSimulationExceeded) return referenceSimulationIssue(); + if (rejection) return rejection; + } + return null; + } +} diff --git a/packages/core/src/store/wasm-contract.ts b/packages/core/src/store/wasm-contract.ts index ee09748d..28949fe7 100644 --- a/packages/core/src/store/wasm-contract.ts +++ b/packages/core/src/store/wasm-contract.ts @@ -195,14 +195,8 @@ export type RecomputingCellStore = CellStore & { markCellCleanRevision(sheet: number, row: number, col: number, revision: bigint): boolean; }; -/** Consuming accessors transfer packed arrays out of one WASM window exactly once. */ +/** Consuming accessors transfer one packed numeric payload and any strings once. */ export type ConsumingWindowView = WindowView & { - takeKinds(): Uint8Array; - takeNumbers(): Float64Array; - takeStringIndex(): Int32Array; - takeStringIds(): Uint32Array; - takeStyleIndex(): Uint32Array; - takeStyleDict(): Uint32Array; + takePacked(): Uint8Array; takeStrings(): string[]; - takeCondMatches(): Uint32Array; }; diff --git a/packages/core/src/store/window-reader.ts b/packages/core/src/store/window-reader.ts index 8ea2e7f1..8c7ca42a 100644 --- a/packages/core/src/store/window-reader.ts +++ b/packages/core/src/store/window-reader.ts @@ -5,16 +5,126 @@ import type { SheetId } from "../types/coordinates.js"; import type { Workbook } from "../types/document.js"; import type { ResourceOwnerBytes, VisibleWindowView } from "../types/store.js"; import type { ConsumingWindowView, RecomputingCellStore } from "./wasm-contract.js"; +import { KIND_BOOL, KIND_EMPTY, KIND_NUMBER, KIND_STRING, NO_STRING } from "./wire-tags.js"; -const KIND_NUMBER = 1; -const KIND_STRING = 2; -const KIND_BOOL = 3; const EMPTY_COND_MATCHES = new Uint32Array(0); +// Kept independent from the worker cache cap so each thread can be tuned separately. const STRING_CACHE_CAP = 65_536; const WINDOW_SCRATCH_MAX_REUSE = 65_536; const CONDITIONAL_MASK_BITS = Uint32Array.BYTES_PER_ELEMENT * 8; const UTF8_DECODER = new TextDecoder(); +const WINDOW_PACKED_MAGIC = 0x3157_4e53; +const WINDOW_PACKED_VERSION = 1; +const WINDOW_PACKED_HEADER_BYTES = 10 * Uint32Array.BYTES_PER_ELEMENT; + +export interface DecodedPackedWindow { + readonly nRows: number; + readonly nCols: number; + readonly kinds: Uint8Array; + readonly numbers: Float64Array; + readonly stringIds: Uint32Array; + readonly stringIndex: Int32Array; + readonly styleIds: Uint32Array; + readonly styleDict: Uint32Array; + readonly condMatches: Uint32Array; + readonly localStringCount: number; +} + +/** Validates the internal packed layout before exposing zero-copy owned-buffer views. */ +export function decodePackedWindow(packed: Uint8Array): DecodedPackedWindow { + if (packed.byteLength < WINDOW_PACKED_HEADER_BYTES) { + throw new Error("Sheetwrite: truncated packed window"); + } + const header = new DataView(packed.buffer, packed.byteOffset, WINDOW_PACKED_HEADER_BYTES); + const magic = header.getUint32(0, true); + const version = header.getUint32(4, true); + const headerBytes = header.getUint32(8, true); + const totalBytes = header.getUint32(12, true); + const nRows = header.getUint32(16, true); + const nCols = header.getUint32(20, true); + const cellCount = header.getUint32(24, true); + const styleCount = header.getUint32(28, true); + const condCount = header.getUint32(32, true); + const localStringCount = header.getUint32(36, true); + if ( + magic !== WINDOW_PACKED_MAGIC || + version !== WINDOW_PACKED_VERSION || + headerBytes !== WINDOW_PACKED_HEADER_BYTES + ) { + throw new Error("Sheetwrite: invalid packed window header"); + } + if (totalBytes > packed.byteLength) { + throw new Error("Sheetwrite: truncated packed window"); + } + if (totalBytes !== packed.byteLength) { + throw new Error("Sheetwrite: invalid packed window length"); + } + const expectedCellCount = nRows * nCols; + if (!Number.isSafeInteger(expectedCellCount) || expectedCellCount !== cellCount) { + throw new Error("Sheetwrite: invalid packed window dimensions"); + } + if (condCount !== 0 && condCount !== cellCount) { + throw new Error("Sheetwrite: invalid packed conditional-match length"); + } + + const kindsStart = WINDOW_PACKED_HEADER_BYTES; + const numbersStart = alignTo8(checkedPackedEnd(kindsStart, cellCount)); + const stringIdsStart = checkedPackedEnd(numbersStart, cellCount * Float64Array.BYTES_PER_ELEMENT); + const stringIndexStart = checkedPackedEnd( + stringIdsStart, + cellCount * Uint32Array.BYTES_PER_ELEMENT, + ); + const styleIdsStart = checkedPackedEnd( + stringIndexStart, + cellCount * Int32Array.BYTES_PER_ELEMENT, + ); + const styleDictStart = checkedPackedEnd(styleIdsStart, cellCount * Uint32Array.BYTES_PER_ELEMENT); + const condMatchesStart = checkedPackedEnd( + styleDictStart, + styleCount * Uint32Array.BYTES_PER_ELEMENT, + ); + const expectedBytes = checkedPackedEnd( + condMatchesStart, + condCount * Uint32Array.BYTES_PER_ELEMENT, + ); + if (expectedBytes !== totalBytes) { + throw new Error("Sheetwrite: invalid packed window layout"); + } + + const base = packed.byteOffset; + if ( + (base + numbersStart) % Float64Array.BYTES_PER_ELEMENT !== 0 || + (base + stringIdsStart) % Uint32Array.BYTES_PER_ELEMENT !== 0 + ) { + throw new Error("Sheetwrite: invalid packed window alignment"); + } + return { + nRows, + nCols, + kinds: new Uint8Array(packed.buffer, base + kindsStart, cellCount), + numbers: new Float64Array(packed.buffer, base + numbersStart, cellCount), + stringIds: new Uint32Array(packed.buffer, base + stringIdsStart, cellCount), + stringIndex: new Int32Array(packed.buffer, base + stringIndexStart, cellCount), + styleIds: new Uint32Array(packed.buffer, base + styleIdsStart, cellCount), + styleDict: new Uint32Array(packed.buffer, base + styleDictStart, styleCount), + condMatches: new Uint32Array(packed.buffer, base + condMatchesStart, condCount), + localStringCount, + }; +} + +function checkedPackedEnd(start: number, byteLength: number): number { + const end = start + byteLength; + if (!Number.isSafeInteger(end) || start < 0 || byteLength < 0) { + throw new Error("Sheetwrite: invalid packed window layout"); + } + return end; +} + +function alignTo8(value: number): number { + return Math.ceil(value / Float64Array.BYTES_PER_ELEMENT) * Float64Array.BYTES_PER_ELEMENT; +} + export interface PersistedCellView { readonly coordinates: Uint32Array; readonly values: readonly CellScalar[]; @@ -25,6 +135,19 @@ export interface PersistedCellView { readonly referenceTargets: Uint32Array; } +/** Exact internal diagnostics attached to each decoded visible-window read. */ +interface VisibleWindowResourceMetrics { + readonly ffiCalls: number; + readonly ffiBoundaryCalls: number; + readonly ffiInputBytes: number; + readonly ffiOutputBytes: number; + readonly ffiLargestTransferBytes: number; + /** Fresh JS-owned packed-buffer allocation plus an optional local-string array. */ + readonly ffiOutputAllocationEvents: number; +} + +export type InstrumentedVisibleWindowView = VisibleWindowView & VisibleWindowResourceMetrics; + /** Owns packed-window decoding, caches, and reusable viewport scratch. */ export class StoreWindowReader { private readonly colsU32Cache = new WeakMap, Uint32Array>(); @@ -191,7 +314,7 @@ export class StoreWindowReader { cols: readonly number[], order: Uint32Array | undefined, applyConditionalRules: boolean, - ): VisibleWindowView { + ): InstrumentedVisibleWindowView { const handle = this.handleOf(sheet); const colsU32 = this.colsU32For(cols); let ffiCalls = 1; @@ -214,46 +337,70 @@ export class StoreWindowReader { } let view: ConsumingWindowView; + let expectedRows: number; if (order) { const dataRows = order.subarray(rows.start, Math.min(rows.end, order.length)); + expectedRows = dataRows.length; ffiInputBytes += dataRows.byteLength; ffiLargestTransferBytes = Math.max(ffiLargestTransferBytes, dataRows.byteLength); view = this.wasm.getWindowRows(handle, dataRows, colsU32) as ConsumingWindowView; } else { + expectedRows = Math.max(0, rows.end - rows.start); view = this.wasm.getWindow(handle, rows.start, rows.end, colsU32) as ConsumingWindowView; } ffiCalls += 1; - const kinds = view.takeKinds(); - const numbers = view.takeNumbers(); - const stringIds = view.takeStringIds(); - const stringIndex = view.takeStringIndex(); - const styleIds = view.takeStyleIndex(); - const styleDict = view.takeStyleDict(); - const strings = view.takeStrings(); - const condMatches = hasCondRules ? view.takeCondMatches() : EMPTY_COND_MATCHES; - view.free(); - let ffiBoundaryCalls = ffiCalls + 8 + (hasCondRules ? 1 : 0); - let ffiOutputBytes = - kinds.byteLength + - numbers.byteLength + - stringIds.byteLength + - stringIndex.byteLength + - styleIds.byteLength + - styleDict.byteLength + - condMatches.byteLength; + let packed: Uint8Array; + let decoded: DecodedPackedWindow; + let strings: string[]; + try { + packed = view.takePacked(); + decoded = decodePackedWindow(packed); + if ( + decoded.nCols !== colsU32.length || + decoded.nRows > expectedRows || + (order !== undefined && decoded.nRows !== expectedRows) || + (hasCondRules && + decoded.kinds.length > 0 && + decoded.condMatches.length !== decoded.kinds.length) + ) { + throw new Error("Sheetwrite: invalid packed window shape"); + } + strings = decoded.localStringCount === 0 ? [] : view.takeStrings(); + if (strings.length !== decoded.localStringCount) { + throw new Error("Sheetwrite: invalid packed window strings"); + } + for (let index = 0; index < decoded.kinds.length; index++) { + const kind = decoded.kinds[index]; + const local = decoded.stringIndex[index]!; + const pool = decoded.stringIds[index]!; + if ( + (kind !== KIND_EMPTY && + kind !== KIND_NUMBER && + kind !== KIND_STRING && + kind !== KIND_BOOL) || + local < -1 || + local >= strings.length || + (local >= 0 && (kind !== KIND_STRING || pool !== NO_STRING)) || + (kind === KIND_STRING && pool === NO_STRING && local < 0) + ) { + throw new Error("Sheetwrite: invalid packed window value"); + } + } + } finally { + view.free(); + } + const { kinds, numbers, stringIds, stringIndex, styleIds, styleDict } = decoded; + const condMatches = hasCondRules ? decoded.condMatches : EMPTY_COND_MATCHES; + const stringOutputAllocationEvents = decoded.localStringCount === 0 ? 0 : 1; + let ffiBoundaryCalls = ffiCalls + 2 + stringOutputAllocationEvents; let localStringBytes = 0; for (const value of strings) localStringBytes += utf8ByteLength(value); - ffiOutputBytes += localStringBytes; + let ffiOutputBytes = packed.byteLength + localStringBytes; + const ffiOutputAllocationEvents = 1 + stringOutputAllocationEvents; ffiLargestTransferBytes = Math.max( ffiLargestTransferBytes, - kinds.byteLength, - numbers.byteLength, - stringIds.byteLength, - stringIndex.byteLength, - styleIds.byteLength, - styleDict.byteLength, - condMatches.byteLength, + packed.byteLength, localStringBytes, ); @@ -264,7 +411,7 @@ export class StoreWindowReader { for (let i = 0; i < stringIds.length; i++) { const id = stringIds[i]; - if (id !== undefined && id !== 0xffffffff && !this.stringCache.has(id)) { + if (id !== undefined && id !== NO_STRING && !this.stringCache.has(id)) { if (!missingIdSet) missingIdSet = new Set(); missingIdSet.add(id); } @@ -284,7 +431,7 @@ export class StoreWindowReader { poolStringBytes, ); for (let i = 0; i < stringPoolUpdateValues.length; i++) { - this.stringCache.set(stringPoolUpdateIds[i] ?? 0xffffffff, stringPoolUpdateValues[i] ?? ""); + this.stringCache.set(stringPoolUpdateIds[i] ?? NO_STRING, stringPoolUpdateValues[i] ?? ""); } } @@ -295,8 +442,8 @@ export class StoreWindowReader { } else if (kinds[i] === KIND_BOOL) { values[i] = (numbers[i] ?? 0) !== 0; } else if (kinds[i] === KIND_STRING) { - const poolId = stringIds[i] ?? 0xffffffff; - if (poolId !== 0xffffffff) { + const poolId = stringIds[i] ?? NO_STRING; + if (poolId !== NO_STRING) { values[i] = this.stringCache.get(poolId) ?? null; } else { const stringSlot = stringIndex[i] ?? -1; @@ -331,6 +478,7 @@ export class StoreWindowReader { ffiOutputBytes, ffiLargestTransferBytes, ffiBoundaryCalls, + ffiOutputAllocationEvents, ffiCalls, }; } diff --git a/packages/core/src/store/wire-tags.ts b/packages/core/src/store/wire-tags.ts new file mode 100644 index 00000000..15f412fe --- /dev/null +++ b/packages/core/src/store/wire-tags.ts @@ -0,0 +1,8 @@ +// These values mirror packages/wasm/src/types.rs and must change together. +export const KIND_EMPTY = 0 as const; +export const KIND_NUMBER = 1 as const; +export const KIND_STRING = 2 as const; +export const KIND_BOOL = 3 as const; +export const KIND_FORMULA = 4 as const; + +export const NO_STRING = 0xffffffff as const; diff --git a/packages/core/src/types/grid.ts b/packages/core/src/types/grid.ts index a9a05592..49c80048 100644 --- a/packages/core/src/types/grid.ts +++ b/packages/core/src/types/grid.ts @@ -434,7 +434,7 @@ export interface CellInputSnapshot { export type SheetLifecycleResult = ApplyTransactionResult & { readonly sheet: SheetId }; /** Host-safe activation payload emitted only after final target validation. */ -export interface HyperlinkActivationEvent { +interface HyperlinkActivationEvent { readonly address: CellAddress; readonly hyperlink: CellHyperlink; readonly target: ResolvedHyperlinkTarget; diff --git a/packages/core/src/types/store.ts b/packages/core/src/types/store.ts index 8ef0ac06..bed85193 100644 --- a/packages/core/src/types/store.ts +++ b/packages/core/src/types/store.ts @@ -80,12 +80,12 @@ export interface VisibleWindowView { ffiLargestTransferBytes?: number; } -export interface ClipboardFormulaEntry { +interface ClipboardFormulaEntry { readonly offset: number; readonly source: string; } -export interface ClipboardRefEntry { +interface ClipboardRefEntry { readonly offset: number; readonly target: CellAddress; } diff --git a/packages/core/src/widget-theme.ts b/packages/core/src/widget-theme.ts index 8cdfc8d7..38c409be 100644 --- a/packages/core/src/widget-theme.ts +++ b/packages/core/src/widget-theme.ts @@ -9,7 +9,7 @@ import type { Theme } from "./types/render.js"; * identical to the old hardcoded inline styles while remaining fully * restylable by host CSS. */ -export const WIDGET_THEME_VARS = { +const WIDGET_THEME_VARS = { "--sheetwrite-widget-font": (t: Theme) => t.font, "--sheetwrite-widget-bg": (t: Theme) => t.bg, "--sheetwrite-widget-fg": (t: Theme) => t.fg, diff --git a/packages/core/src/worker-renderer.ts b/packages/core/src/worker-renderer.ts index 1978635f..c125faae 100644 --- a/packages/core/src/worker-renderer.ts +++ b/packages/core/src/worker-renderer.ts @@ -42,6 +42,9 @@ interface SharedRegion { generation: number; } +// Cold module loading and OffscreenCanvas startup can take seconds on slower +// devices; ten seconds tolerates that path without leaving a blank grid forever. +const WORKER_READY_TIMEOUT_MS = 10_000; const SHARED_REGION_COUNT = 2; const SHARED_HEADER_INTS = 2; const SHARED_HEADER_BYTES = SHARED_HEADER_INTS * Int32Array.BYTES_PER_ELEMENT; @@ -114,6 +117,7 @@ export class WorkerRenderer implements Renderer { private readonly sharedRegions: Array = new Array(SHARED_REGION_COUNT); private failed = false; private frameGeneration = 0; + private readinessTimeout: number | undefined; constructor( private readonly workerUrl?: string | URL, @@ -140,6 +144,9 @@ export class WorkerRenderer implements Renderer { try { const offscreen = canvas.transferControlToOffscreen(); + this.readinessTimeout = window.setTimeout(() => { + this.fail(new Error("Sheetwrite: Paint worker did not become ready")); + }, WORKER_READY_TIMEOUT_MS); worker.postMessage({ type: "init", canvas: offscreen, theme }, [offscreen]); host.appendChild(canvas); this.canvas = canvas; @@ -196,14 +203,24 @@ export class WorkerRenderer implements Renderer { return; } + // The renderer transfers only buffers it allocated: RenderCoordinator + // reuses view-owned buffers across repaints. + const ownedValueKinds = valueKinds.slice(); + const ownedNumberValues = numberValues.slice(); + const ownedStringPoolIds = stringPoolIds.slice(); + const ownedStringLocalIds = stringLocalIds.slice(); + const ownedStyleIds = view.styleIds.slice(); + const ownedStringPoolUpdateIds = stringPoolUpdateIds?.slice(); const transfers: Transferable[] = [ - valueKinds.buffer as ArrayBuffer, - numberValues.buffer as ArrayBuffer, - stringPoolIds.buffer as ArrayBuffer, - stringLocalIds.buffer as ArrayBuffer, - view.styleIds.buffer as ArrayBuffer, + ownedValueKinds.buffer as ArrayBuffer, + ownedNumberValues.buffer as ArrayBuffer, + ownedStringPoolIds.buffer as ArrayBuffer, + ownedStringLocalIds.buffer as ArrayBuffer, + ownedStyleIds.buffer as ArrayBuffer, ]; - if (stringPoolUpdateIds) transfers.push(stringPoolUpdateIds.buffer as ArrayBuffer); + if (ownedStringPoolUpdateIds) { + transfers.push(ownedStringPoolUpdateIds.buffer as ArrayBuffer); + } this.worker?.postMessage( { type: "paintPacked", @@ -211,12 +228,12 @@ export class WorkerRenderer implements Renderer { rows: view.rows, cols: view.cols, styles: view.styles, - styleIds: view.styleIds, - valueKinds, - numberValues, - stringPoolIds, - stringLocalIds, - stringPoolUpdateIds, + styleIds: ownedStyleIds, + valueKinds: ownedValueKinds, + numberValues: ownedNumberValues, + stringPoolIds: ownedStringPoolIds, + stringLocalIds: ownedStringLocalIds, + stringPoolUpdateIds: ownedStringPoolUpdateIds, stringPoolUpdateValues, localStrings, }, @@ -226,8 +243,9 @@ export class WorkerRenderer implements Renderer { } // Custom Store implementations may not expose raw arrays; keep the - // compatibility path, still transferring the fresh style-id buffer. - this.worker?.postMessage({ type: "paint", view }, [view.styleIds.buffer]); + // compatibility path while preserving ownership of their style IDs. + const styleIds = view.styleIds.slice(); + this.worker?.postMessage({ type: "paint", view: { ...view, styleIds } }, [styleIds.buffer]); } paintPanes(panes: readonly PanePaint[], divider: { x: number | null; y: number | null }): void { @@ -248,12 +266,12 @@ export class WorkerRenderer implements Renderer { rows: view.rows, cols: view.cols, styles: view.styles, - styleIds: view.styleIds, - valueKinds, - numberValues, - stringPoolIds, - stringLocalIds, - stringPoolUpdateIds, + styleIds: view.styleIds.slice(), + valueKinds: valueKinds.slice(), + numberValues: numberValues.slice(), + stringPoolIds: stringPoolIds.slice(), + stringLocalIds: stringLocalIds.slice(), + stringPoolUpdateIds: stringPoolUpdateIds?.slice(), stringPoolUpdateValues: view.stringPoolUpdateValues, localStrings: view.localStrings, } @@ -266,7 +284,9 @@ export class WorkerRenderer implements Renderer { packed.stringLocalIds.buffer as ArrayBuffer, packed.styleIds.buffer as ArrayBuffer, ); - if (stringPoolUpdateIds) transfers.push(stringPoolUpdateIds.buffer as ArrayBuffer); + if (packed.stringPoolUpdateIds) { + transfers.push(packed.stringPoolUpdateIds.buffer as ArrayBuffer); + } } return { @@ -285,6 +305,8 @@ export class WorkerRenderer implements Renderer { } destroy(): void { + window.clearTimeout(this.readinessTimeout); + this.readinessTimeout = undefined; const worker = this.worker; if (worker) { worker.removeEventListener("error", this.onWorkerError); @@ -299,31 +321,45 @@ export class WorkerRenderer implements Renderer { } private readonly onWorkerError = (event: ErrorEvent): void => { - if (this.failed) return; - this.failed = true; event.preventDefault(); const error = event.error instanceof Error ? event.error : new Error(event.message || "Sheetwrite: Worker renderer failed to load"); - const onFailure = this.onFailure; - this.destroy(); - onFailure?.(error); + this.fail(error); }; private readonly onWorkerMessage = (event: MessageEvent): void => { - if ( - event.data === null || - typeof event.data !== "object" || - !("type" in event.data) || - event.data.type !== "painted" - ) { - return; + const data = event.data; + if (data === null || typeof data !== "object" || !("type" in data)) return; + switch (data.type) { + case "ready": + window.clearTimeout(this.readinessTimeout); + this.readinessTimeout = undefined; + break; + case "fatal": { + const reason = + "reason" in data && typeof data.reason === "string" + ? data.reason + : "Sheetwrite: Paint worker reported a fatal failure"; + this.fail(new Error(reason)); + break; + } + case "painted": + this.frameGeneration++; + if (this.canvas) this.canvas.dataset.workerFrame = String(this.frameGeneration); + break; } - this.frameGeneration++; - if (this.canvas) this.canvas.dataset.workerFrame = String(this.frameGeneration); }; + private fail(error: unknown): void { + if (this.failed) return; + this.failed = true; + const onFailure = this.onFailure; + this.destroy(); + onFailure?.(error); + } + private canUseSharedMemory(): boolean { return ( typeof SharedArrayBuffer === "function" && diff --git a/packages/core/src/worker.ts b/packages/core/src/worker.ts index ed58ecdc..cfba9468 100644 --- a/packages/core/src/worker.ts +++ b/packages/core/src/worker.ts @@ -3,6 +3,7 @@ // busy main thread can't stall scrolling. Custom (function) cell renderers do // not cross the worker boundary, so the registry here is always empty. import { blitVerticalScroll, paintFrame, paintFreezeDivider } from "./canvas-paint.js"; +import { KIND_NUMBER, KIND_STRING, NO_STRING } from "./store/wire-tags.js"; import type { CellScalar } from "./types/cell.js"; import type { CellRenderer, RenderLayout, Theme, Viewport } from "./types/render.js"; import type { VisibleWindowView } from "./types/store.js"; @@ -85,9 +86,6 @@ type WorkerMessage = | { type: "destroy" }; const NO_RENDERERS: ReadonlyMap = new Map(); -const KIND_NUMBER = 1; -const KIND_STRING = 2; -const NO_STRING = 0xffffffff; /** * Hard cap on the pool-id→string cache, mirroring `SheetwriteStore`. A full-sheet @@ -95,6 +93,8 @@ const NO_STRING = 0xffffffff; * string pool on the JS heap. At the cap we drop it wholesale and re-warm from * this frame's `stringPoolUpdate*` payload — cheap and self-healing. */ +// Kept independent from the host reader's cache cap: +// each thread can be tuned separately. const STRING_CACHE_CAP = 65_536; interface WorkerRuntimeState { @@ -245,8 +245,11 @@ function paintPanesFrame(state: WorkerRuntimeState, msg: PanesMessage): boolean return true; } -/** Acknowledgement posted back to the sender after a frame actually painted. */ -export type WorkerAcknowledgement = { type: "painted" }; +/** Lifecycle and frame acknowledgements posted back to the sender. */ +export type WorkerAcknowledgement = + | { type: "ready" } + | { type: "fatal"; reason: string } + | { type: "painted" }; /** * Build the worker-side protocol handler. Keeping the mutable render state @@ -271,17 +274,36 @@ export function createWorkerMessageHandler( const acknowledgeFrame = (painted: boolean): void => { if (painted) postAcknowledgement({ type: "painted" }); }; + let fatal = false; + const reportFatal = (reason: string): void => { + if (fatal) return; + fatal = true; + postAcknowledgement({ type: "fatal", reason }); + }; return (input: unknown): void => { if (input === null || typeof input !== "object" || !("type" in input)) return; const msg = input as WorkerMessage; switch (msg.type) { - case "init": + case "init": { state.canvas = msg.canvas; state.ctx = state.canvas.getContext("2d", { alpha: false }); state.theme = msg.theme; state.lastViewport = null; + if (!state.ctx) { + reportFatal("Sheetwrite: Paint worker could not acquire a 2D context"); + break; + } + // A lost canvas invalidates the previous frame assumed by scroll blits; + // falling back is safer than attempting restoration from stale pixels. + state.canvas.addEventListener( + "contextlost", + () => reportFatal("Sheetwrite: Paint worker lost its 2D context"), + { once: true }, + ); + postAcknowledgement({ type: "ready" }); break; + } case "layout": state.layout = msg.layout; state.lastViewport = null; diff --git a/packages/core/test/conditional-format.test.ts b/packages/core/test/conditional-format.test.ts index 5265e7d7..bc63849e 100644 --- a/packages/core/test/conditional-format.test.ts +++ b/packages/core/test/conditional-format.test.ts @@ -104,6 +104,7 @@ describe("conditional formula formats", () => { ]; const store = new SheetwriteStore(workbook); const mainView = store.getVisibleWindow("s1", { start: 0, end: 1 }, [1]); + expect(Reflect.get(mainView, "ffiOutputAllocationEvents")).toBe(1); const messages: unknown[] = []; const renderer = new WorkerRenderer(); Reflect.set(renderer, "worker", { diff --git a/packages/core/test/controllers.test.ts b/packages/core/test/controllers.test.ts index 49a0c581..1a15d9ec 100644 --- a/packages/core/test/controllers.test.ts +++ b/packages/core/test/controllers.test.ts @@ -2,7 +2,7 @@ import { beforeAll, describe, expect, it } from "bun:test"; import type { AriaMirror } from "../src/aria-mirror.js"; import { DatasourceController } from "../src/datasource-controller.js"; import { DocumentController } from "../src/document-controller.js"; -import type { DomOverlay } from "../src/dom-overlay.js"; +import type { DomMergeAnchorRequest, DomOverlay } from "../src/dom-overlay.js"; import { GeometryLayoutController } from "../src/geometry-layout-controller.js"; import { DEFAULT_THEME, initSheetwrite } from "../src/grid.js"; import type { OverlayPainter } from "../src/overlay-painter.js"; @@ -237,6 +237,8 @@ describe("RenderCoordinator", () => { let scrollTop = 0; let scrollLeft = 0; let storeEpoch = 0; + let zoom = 1; + let anchorRequests: readonly DomMergeAnchorRequest[] = []; const countedStore = { getVisibleWindow: (...args: Parameters) => { windowReads += 1; @@ -250,7 +252,7 @@ describe("RenderCoordinator", () => { activeSheet: () => "s1", loadable: null, theme: () => DEFAULT_THEME, - zoom: () => 1, + zoom: () => zoom, maxElementHeight: () => 33_000_000, }, 180, @@ -272,6 +274,7 @@ describe("RenderCoordinator", () => { const viewports: Viewport[] = []; const paints: VisibleWindowView[] = []; let overlayPaints = 0; + const domAnchorViewCounts: number[] = []; let ariaUpdates = 0; const renderer: Renderer = { mount: () => {}, @@ -288,8 +291,14 @@ describe("RenderCoordinator", () => { }, } as unknown as OverlayPainter; const domOverlay = { - mergeAnchorRequests: () => [], - paint: () => {}, + mergeAnchorRequests: () => anchorRequests, + paint: ( + _view: VisibleWindowView, + _viewport: Viewport, + anchorViews: readonly VisibleWindowView[], + ) => { + domAnchorViewCounts.push(anchorViews.length); + }, paintPanes: () => {}, } as unknown as DomOverlay; const aria = { @@ -318,7 +327,7 @@ describe("RenderCoordinator", () => { activeSheet: () => "s1", theme: () => DEFAULT_THEME, overscan: () => 0, - zoom: () => 1, + zoom: () => zoom, storeEpoch: () => storeEpoch, viewportHeight: () => 180, viewportWidth: () => 420, @@ -338,11 +347,14 @@ describe("RenderCoordinator", () => { expect(overlayPaints).toBe(1); expect(ariaUpdates).toBe(1); expect(windowReads).toBe(1); + coordinator.renderNow(); + expect(paints).toHaveLength(1); + expect(windowReads).toBe(1); coordinator.invalidate(); coordinator.renderNow(); expect(paints).toHaveLength(2); - expect(viewports[1]?.contentRevision).toBe(1); + expect(viewports.at(-1)?.contentRevision).toBe(1); expect(windowReads).toBe(1); scrollTop = 1; @@ -356,14 +368,55 @@ describe("RenderCoordinator", () => { coordinator.renderNow(); expect(windowReads).toBe(2); - storeEpoch += 1; + scrollLeft = 170; coordinator.renderNow(); expect(windowReads).toBe(3); - coordinator.invalidateData(); + storeEpoch += 1; coordinator.renderNow(); expect(windowReads).toBe(4); + coordinator.invalidateData(); + coordinator.renderNow(); + expect(windowReads).toBe(5); + + const paintsBeforeZoom = paints.length; + zoom = 1.25; + coordinator.renderNow(); + expect(windowReads).toBe(5); + expect(paints).toHaveLength(paintsBeforeZoom + 1); + + anchorRequests = [{ sheet: "s1", row: 0, cols: [0] }]; + coordinator.invalidate(); + coordinator.renderNow(); + expect(windowReads).toBe(6); + expect(domAnchorViewCounts.at(-1)).toBe(1); + + coordinator.invalidate(); + coordinator.renderNow(); + expect(windowReads).toBe(6); + + anchorRequests = [{ sheet: "s1", row: 1, cols: [0] }]; + coordinator.invalidate(); + coordinator.renderNow(); + expect(windowReads).toBe(7); + + anchorRequests = [{ sheet: "s1", row: 1, cols: [1] }]; + coordinator.invalidate(); + coordinator.renderNow(); + expect(windowReads).toBe(8); + + anchorRequests = [{ sheet: "s1", row: 1, cols: [1, 2] }]; + coordinator.invalidate(); + coordinator.renderNow(); + expect(windowReads).toBe(9); + + anchorRequests = []; + coordinator.invalidate(); + coordinator.renderNow(); + expect(windowReads).toBe(9); + expect(domAnchorViewCounts.at(-1)).toBe(0); + const paintsBeforeDestroy = paints.length; coordinator.destroy(); coordinator.renderNow(); diff --git a/packages/core/test/device-pixel-ratio.test.ts b/packages/core/test/device-pixel-ratio.test.ts new file mode 100644 index 00000000..998923f9 --- /dev/null +++ b/packages/core/test/device-pixel-ratio.test.ts @@ -0,0 +1,308 @@ +import { afterEach, beforeEach, describe, expect, it } from "bun:test"; +import { GridImpl } from "../src/grid.js"; +import { installCanvasTestStubs } from "../src/testing.js"; +import type { CellScalar, Store, Workbook } from "../src/types.js"; +import { makeWorkbook } from "./fixtures.js"; + +class ResolutionQuery extends EventTarget { + readonly media: string; + matches = true; + + constructor(media: string) { + super(); + this.media = media; + } + + change(matches: boolean): void { + this.matches = matches; + this.dispatchEvent(new Event("change")); + } + + listenerCount = 0; + + override addEventListener(...args: Parameters): void { + if (args[0] === "change") this.listenerCount += 1; + super.addEventListener(...args); + } + + override removeEventListener(...args: Parameters): void { + if (args[0] === "change") this.listenerCount -= 1; + super.removeEventListener(...args); + } +} + +function makeStore(workbook: Workbook): Store { + return { + getWorkbook: () => workbook, + getCell: () => { + throw new Error("getCell must not run during painting"); + }, + getFormula: () => null, + getSpillAnchor: () => null, + getRefTarget: () => null, + recalculateVolatile: () => {}, + getVisibleWindow: (sheet, rows, cols) => { + const size = Math.max(0, (rows.end - rows.start) * cols.length); + const values: CellScalar[] = new Array(size).fill(null); + return { sheet, rows, cols, values, styleIds: new Uint32Array(size), styles: [{}] }; + }, + ensureColumns: () => {}, + applyTransaction: () => ({ status: "noop", epoch: 0, reason: "empty" }), + on: () => () => {}, + viewRowCount: (sheet) => workbook.sheets.find((entry) => entry.id === sheet)?.rowCount ?? 0, + }; +} + +function mountHost(): HTMLDivElement { + const host = document.createElement("div"); + Object.defineProperty(host, "clientWidth", { value: 800, configurable: true }); + Object.defineProperty(host, "clientHeight", { value: 400, configurable: true }); + document.body.appendChild(host); + return host; +} + +async function flushScheduledFrame(frames: Map): Promise { + expect(frames.size).toBe(1); + const entry = frames.entries().next().value; + if (!entry) throw new Error("expected a scheduled animation frame"); + frames.delete(entry[0]); + entry[1](0); + await Promise.resolve(); +} + +describe("device-pixel-ratio lifecycle", () => { + let restoreCanvas: () => void; + let originalDpr: PropertyDescriptor | undefined; + let originalMatchMedia: typeof globalThis.matchMedia | undefined; + let originalClientWidth: PropertyDescriptor | undefined; + let originalClientHeight: PropertyDescriptor | undefined; + let originalRequestAnimationFrame: PropertyDescriptor | undefined; + let originalCancelAnimationFrame: PropertyDescriptor | undefined; + let scheduledFrames: Map; + let dpr: number; + let queries: ResolutionQuery[]; + + beforeEach(() => { + restoreCanvas = installCanvasTestStubs(); + originalDpr = Object.getOwnPropertyDescriptor(globalThis, "devicePixelRatio"); + originalMatchMedia = globalThis.matchMedia; + originalClientWidth = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "clientWidth"); + originalClientHeight = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "clientHeight"); + originalRequestAnimationFrame = Object.getOwnPropertyDescriptor( + globalThis, + "requestAnimationFrame", + ); + originalCancelAnimationFrame = Object.getOwnPropertyDescriptor( + globalThis, + "cancelAnimationFrame", + ); + dpr = 1; + queries = []; + scheduledFrames = new Map(); + let nextFrame = 1; + + Object.defineProperty(globalThis, "devicePixelRatio", { + configurable: true, + get: () => dpr, + }); + Object.defineProperty(globalThis, "matchMedia", { + configurable: true, + value: (media: string) => { + const query = new ResolutionQuery(media); + queries.push(query); + return query as unknown as MediaQueryList; + }, + }); + Object.defineProperty(globalThis, "requestAnimationFrame", { + configurable: true, + value: (callback: FrameRequestCallback): number => { + const frame = nextFrame++; + scheduledFrames.set(frame, callback); + return frame; + }, + }); + Object.defineProperty(globalThis, "cancelAnimationFrame", { + configurable: true, + value: (frame: number): void => { + scheduledFrames.delete(frame); + }, + }); + Object.defineProperty(HTMLElement.prototype, "clientWidth", { + configurable: true, + get() { + return (this as HTMLElement).classList.contains("sheetwrite-viewport") ? 800 : 0; + }, + }); + Object.defineProperty(HTMLElement.prototype, "clientHeight", { + configurable: true, + get() { + return (this as HTMLElement).classList.contains("sheetwrite-viewport") ? 372 : 0; + }, + }); + }); + + afterEach(() => { + restoreCanvas(); + if (originalDpr) Object.defineProperty(globalThis, "devicePixelRatio", originalDpr); + else Reflect.deleteProperty(globalThis, "devicePixelRatio"); + if (originalMatchMedia) { + Object.defineProperty(globalThis, "matchMedia", { + configurable: true, + value: originalMatchMedia, + }); + } else { + Reflect.deleteProperty(globalThis, "matchMedia"); + } + if (originalRequestAnimationFrame) { + Object.defineProperty(globalThis, "requestAnimationFrame", originalRequestAnimationFrame); + } else { + Reflect.deleteProperty(globalThis, "requestAnimationFrame"); + } + if (originalCancelAnimationFrame) { + Object.defineProperty(globalThis, "cancelAnimationFrame", originalCancelAnimationFrame); + } else { + Reflect.deleteProperty(globalThis, "cancelAnimationFrame"); + } + if (originalClientWidth) { + Object.defineProperty(HTMLElement.prototype, "clientWidth", originalClientWidth); + } else Reflect.deleteProperty(HTMLElement.prototype, "clientWidth"); + if (originalClientHeight) { + Object.defineProperty(HTMLElement.prototype, "clientHeight", originalClientHeight); + } else Reflect.deleteProperty(HTMLElement.prototype, "clientHeight"); + document.body.replaceChildren(); + }); + + it("rearms its resolution query, repaints, and detaches on destroy", async () => { + const workbook = makeWorkbook(20); + const host = mountHost(); + const grid = new GridImpl(host, { workbook }, makeStore(workbook)); + const canvas = host.querySelector("canvas"); + + expect(canvas).toBeInstanceOf(HTMLCanvasElement); + expect(queries.map((query) => query.media)).toEqual(["(resolution: 1dppx)"]); + expect(queries[0]?.listenerCount).toBe(1); + expect(canvas?.width).toBe(800); + + dpr = 2; + queries[0]?.change(false); + + expect(queries.map((query) => query.media)).toEqual([ + "(resolution: 1dppx)", + "(resolution: 2dppx)", + ]); + expect(queries[0]?.listenerCount).toBe(0); + expect(queries[1]?.listenerCount).toBe(1); + expect(canvas?.width).toBe(800); + await flushScheduledFrame(scheduledFrames); + expect(canvas?.width).toBe(1_600); + + dpr = 1; + queries[1]?.change(false); + expect(queries.map((query) => query.media)).toEqual([ + "(resolution: 1dppx)", + "(resolution: 2dppx)", + "(resolution: 1dppx)", + ]); + expect(canvas?.width).toBe(1_600); + await flushScheduledFrame(scheduledFrames); + expect(canvas?.width).toBe(800); + + grid.destroy(); + expect(queries[2]?.listenerCount).toBe(0); + + dpr = 2; + queries[2]?.change(false); + expect(queries).toHaveLength(3); + expect(scheduledFrames.size).toBe(0); + + for (let cycle = 0; cycle < 3; cycle++) { + const cycleWorkbook = makeWorkbook(20); + const cycleGrid = new GridImpl( + mountHost(), + { workbook: cycleWorkbook }, + makeStore(cycleWorkbook), + ); + expect(queries.reduce((count, query) => count + query.listenerCount, 0)).toBe(1); + cycleGrid.destroy(); + expect(queries.reduce((count, query) => count + query.listenerCount, 0)).toBe(0); + } + }); + + it("posts the new DPR to the Worker viewport before repainting", async () => { + const workerDescriptor = Object.getOwnPropertyDescriptor(globalThis, "Worker"); + const transferDescriptor = Object.getOwnPropertyDescriptor( + HTMLCanvasElement.prototype, + "transferControlToOffscreen", + ); + let instance: RecordingWorker | null = null; + + class RecordingWorker extends EventTarget { + readonly messages: unknown[] = []; + + constructor() { + super(); + instance = this; + } + + postMessage(message: unknown): void { + this.messages.push(message); + } + + terminate(): void {} + } + + Object.defineProperty(globalThis, "Worker", { + configurable: true, + value: RecordingWorker, + }); + Object.defineProperty(HTMLCanvasElement.prototype, "transferControlToOffscreen", { + configurable: true, + value: () => ({}), + }); + + let grid: GridImpl | undefined; + try { + const workbook = makeWorkbook(20); + grid = new GridImpl( + mountHost(), + { workbook, renderer: "worker", workerUrl: "/worker.js" }, + makeStore(workbook), + ); + const worker = instance as RecordingWorker | null; + if (!worker) throw new Error("expected the Worker renderer to construct a worker"); + const viewportDprs = (): number[] => + worker.messages.flatMap((message) => + message !== null && + typeof message === "object" && + "type" in message && + message.type === "viewport" && + "dpr" in message && + typeof message.dpr === "number" + ? [message.dpr] + : [], + ); + + expect(grid.rendererKind()).toBe("worker"); + expect(viewportDprs()).toEqual([1]); + + dpr = 2; + queries[0]?.change(false); + expect(viewportDprs()).toEqual([1]); + await flushScheduledFrame(scheduledFrames); + expect(viewportDprs()).toEqual([1, 2]); + } finally { + grid?.destroy(); + if (workerDescriptor) Object.defineProperty(globalThis, "Worker", workerDescriptor); + else Reflect.deleteProperty(globalThis, "Worker"); + if (transferDescriptor) { + Object.defineProperty( + HTMLCanvasElement.prototype, + "transferControlToOffscreen", + transferDescriptor, + ); + } else { + Reflect.deleteProperty(HTMLCanvasElement.prototype, "transferControlToOffscreen"); + } + } + }); +}); diff --git a/packages/core/test/fenwick.test.ts b/packages/core/test/fenwick.test.ts index 361dafd2..7194d28e 100644 --- a/packages/core/test/fenwick.test.ts +++ b/packages/core/test/fenwick.test.ts @@ -17,6 +17,17 @@ describe("OffsetIndex", () => { expect(idx.rowAtOffset(100000)).toEqual({ row: 9, top: 180 }); }); + it("keeps uniform geometry allocation-free through structural edits", () => { + const idx = new OffsetIndex(1_000_000, 28); + expect(idx.backingStoreBytes).toBe(0); + expect(idx.rowAtOffset(14_000_005)).toEqual({ row: 500_000, top: 14_000_000 }); + + idx.insertRows(500_000, 2, 28); + idx.removeRows(100, 1); + expect(idx.backingStoreBytes).toBe(0); + expect(idx.totalHeight).toBe(1_000_001 * 28); + }); + it("reflects a single-row height override in subsequent offsets", () => { const idx = new OffsetIndex(10, 20); idx.setHeight(2, 50); @@ -28,6 +39,26 @@ describe("OffsetIndex", () => { expect(idx.rowAtOffset(90)).toEqual({ row: 3, top: 90 }); }); + it("materializes the dense index on the first height override", () => { + const idx = new OffsetIndex(10, 20); + expect(idx.backingStoreBytes).toBe(0); + idx.setHeight(2, 50); + expect(idx.backingStoreBytes).toBe(10 * 8 + 11 * 8); + expect(idx.rowAtOffset(85)).toEqual({ row: 2, top: 40 }); + }); + + it("materializes and indexes a non-default inserted band", () => { + const idx = new OffsetIndex(3, 20); + idx.insertRows(1, 2, 35); + expect(idx.backingStoreBytes).toBe(5 * 8 + 6 * 8); + expect(idx.totalHeight).toBe(130); + expect([0, 1, 2, 3, 4].map((row) => idx.heightOf(row))).toEqual([20, 35, 35, 20, 20]); + expect(idx.offsetOf(3)).toBe(90); + expect(idx.rowAtOffset(54)).toEqual({ row: 1, top: 20 }); + expect(idx.rowAtOffset(55)).toEqual({ row: 2, top: 55 }); + expect(idx.rowAtOffset(90)).toEqual({ row: 3, top: 90 }); + }); + it("inserts and removes rows, updating the total height", () => { const idx = new OffsetIndex(10, 20); idx.insertRows(0, 2, 20); diff --git a/packages/core/test/store.test.ts b/packages/core/test/store.test.ts index b8842bb8..23e41e7c 100644 --- a/packages/core/test/store.test.ts +++ b/packages/core/test/store.test.ts @@ -106,6 +106,8 @@ describe("SheetwriteStore", () => { // row 4 begins at index 3 expect(view.values[3]).toBe("Customer 4"); expect(view.styleIds.length).toBe(9); + expect(view.ffiOutputBytes).toBeGreaterThan(0); + expect(Reflect.get(view, "ffiOutputAllocationEvents")).toBe(1); }); it("carries a non-default style id and exposes it via the dictionary", () => { @@ -1929,7 +1931,9 @@ describe("paged datasource storage", () => { }); expect(store.getCellLoadState(addr(0, 0))).toBe("unloaded"); expect(store.getCell(addr(0, 0)).resolved).toBe("#LOADING!"); - expect(store.getVisibleWindow("s1", { start: 0, end: 1 }, [0]).values).toEqual(["#LOADING!"]); + const loadingWindow = store.getVisibleWindow("s1", { start: 0, end: 1 }, [0]); + expect(loadingWindow.values).toEqual(["#LOADING!"]); + expect(Reflect.get(loadingWindow, "ffiOutputAllocationEvents")).toBe(2); expect(store.queryCapability("s1")).toEqual({ status: "incomplete", loadedCells: 0, diff --git a/packages/core/test/window-reader.test.ts b/packages/core/test/window-reader.test.ts new file mode 100644 index 00000000..7f14b8d1 --- /dev/null +++ b/packages/core/test/window-reader.test.ts @@ -0,0 +1,97 @@ +import { describe, expect, it } from "bun:test"; +import { decodePackedWindow } from "../src/store/window-reader.js"; +import { KIND_BOOL, KIND_EMPTY, KIND_NUMBER, KIND_STRING } from "../src/store/wire-tags.js"; + +const HEADER_BYTES = 40; + +function makePackedWindow(): Uint8Array { + const kinds = new Uint8Array([KIND_EMPTY, KIND_NUMBER, KIND_STRING, KIND_BOOL]); + const numbers = new Float64Array([0, 42.5, 0, 1]); + const stringIds = new Uint32Array([0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff]); + const stringIndex = new Int32Array([-1, -1, 0, -1]); + const styleIds = new Uint32Array([0, 1, 1, 0]); + const styleDict = new Uint32Array([4, 9]); + const condMatches = new Uint32Array([0, 2, 1, 0]); + const numbersStart = (HEADER_BYTES + kinds.length + 7) & ~7; + const stringIdsStart = numbersStart + numbers.byteLength; + const stringIndexStart = stringIdsStart + stringIds.byteLength; + const styleIdsStart = stringIndexStart + stringIndex.byteLength; + const styleDictStart = styleIdsStart + styleIds.byteLength; + const condMatchesStart = styleDictStart + styleDict.byteLength; + const totalBytes = condMatchesStart + condMatches.byteLength; + const packed = new Uint8Array(totalBytes); + const header = new DataView(packed.buffer); + for (const [index, value] of [ + 0x3157_4e53, + 1, + HEADER_BYTES, + totalBytes, + 2, + 2, + kinds.length, + styleDict.length, + condMatches.length, + 1, + ].entries()) { + header.setUint32(index * 4, value, true); + } + packed.set(kinds, HEADER_BYTES); + new Float64Array(packed.buffer, numbersStart, numbers.length).set(numbers); + new Uint32Array(packed.buffer, stringIdsStart, stringIds.length).set(stringIds); + new Int32Array(packed.buffer, stringIndexStart, stringIndex.length).set(stringIndex); + new Uint32Array(packed.buffer, styleIdsStart, styleIds.length).set(styleIds); + new Uint32Array(packed.buffer, styleDictStart, styleDict.length).set(styleDict); + new Uint32Array(packed.buffer, condMatchesStart, condMatches.length).set(condMatches); + return packed; +} + +describe("packed window decoding", () => { + it("exposes aligned owned-buffer views for every value kind, styles, and conditional masks", () => { + const packed = makePackedWindow(); + const decoded = decodePackedWindow(packed); + + expect([decoded.nRows, decoded.nCols, decoded.localStringCount]).toEqual([2, 2, 1]); + expect(Array.from(decoded.kinds)).toEqual([KIND_EMPTY, KIND_NUMBER, KIND_STRING, KIND_BOOL]); + expect(Array.from(decoded.numbers)).toEqual([0, 42.5, 0, 1]); + expect(Array.from(decoded.stringIds)).toEqual([ + 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, + ]); + expect(Array.from(decoded.stringIndex)).toEqual([-1, -1, 0, -1]); + expect(Array.from(decoded.styleIds)).toEqual([0, 1, 1, 0]); + expect(Array.from(decoded.styleDict)).toEqual([4, 9]); + expect(Array.from(decoded.condMatches)).toEqual([0, 2, 1, 0]); + expect(decoded.kinds.buffer).toBe(packed.buffer); + expect(decoded.numbers.buffer).toBe(packed.buffer); + expect(decoded.numbers.byteOffset % Float64Array.BYTES_PER_ELEMENT).toBe(0); + }); + + it("rejects truncated, inconsistent, and unaligned layouts", () => { + expect(() => decodePackedWindow(new Uint8Array(HEADER_BYTES - 1))).toThrow( + "truncated packed window", + ); + + const truncated = makePackedWindow().slice(0, -1); + expect(() => decodePackedWindow(truncated)).toThrow("truncated packed window"); + + const badDimensions = makePackedWindow(); + new DataView(badDimensions.buffer).setUint32(24, 3, true); + expect(() => decodePackedWindow(badDimensions)).toThrow("invalid packed window dimensions"); + + const badConditionalLength = makePackedWindow(); + new DataView(badConditionalLength.buffer).setUint32(32, 1, true); + expect(() => decodePackedWindow(badConditionalLength)).toThrow( + "invalid packed conditional-match length", + ); + + const badStyleLength = makePackedWindow(); + new DataView(badStyleLength.buffer).setUint32(28, 3, true); + expect(() => decodePackedWindow(badStyleLength)).toThrow("invalid packed window layout"); + + const valid = makePackedWindow(); + const shifted = new Uint8Array(valid.byteLength + 1); + shifted.set(valid, 1); + expect(() => decodePackedWindow(shifted.subarray(1))).toThrow( + "invalid packed window alignment", + ); + }); +}); diff --git a/packages/core/test/wire-tags.test.ts b/packages/core/test/wire-tags.test.ts new file mode 100644 index 00000000..72aafdc7 --- /dev/null +++ b/packages/core/test/wire-tags.test.ts @@ -0,0 +1,53 @@ +import { beforeAll, describe, expect, it } from "bun:test"; +import { initSheetwrite } from "../src/grid.js"; +import { + KIND_BOOL, + KIND_EMPTY, + KIND_NUMBER, + KIND_STRING, + NO_STRING, +} from "../src/store/wire-tags.js"; +import { SheetwriteStore } from "../src/store.js"; +import { makeWorkbook } from "./fixtures.js"; + +beforeAll(async () => { + await initSheetwrite(); +}); + +describe("cell-kind wire tags", () => { + it("matches the tags and string sentinel produced by the WASM store", () => { + const store = new SheetwriteStore(makeWorkbook(1)); + try { + store.applyTransaction({ + patches: [ + { + op: "set", + addr: { sheet: "s1", row: 0, col: 0 }, + value: { kind: "literal", value: 42 }, + }, + { + op: "set", + addr: { sheet: "s1", row: 0, col: 1 }, + value: { kind: "literal", value: "alpha" }, + }, + { + op: "set", + addr: { sheet: "s1", row: 0, col: 2 }, + value: { kind: "literal", value: true }, + }, + ], + }); + + const view = store.getVisibleWindow("s1", { start: 0, end: 1 }, [0, 1, 2, 3]); + expect(Array.from(view.valueKinds ?? [])).toEqual([ + KIND_NUMBER, + KIND_STRING, + KIND_BOOL, + KIND_EMPTY, + ]); + expect(view.stringPoolIds?.[0]).toBe(NO_STRING); + } finally { + store.dispose(); + } + }); +}); diff --git a/packages/core/test/worker-fallback.test.ts b/packages/core/test/worker-fallback.test.ts index 7dfafb3c..663e86a5 100644 --- a/packages/core/test/worker-fallback.test.ts +++ b/packages/core/test/worker-fallback.test.ts @@ -1,7 +1,8 @@ -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "bun:test"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, jest } from "bun:test"; import { GridImpl, initSheetwrite } from "../src/grid.js"; import { installCanvasTestStubs } from "../src/testing.js"; import type { GridEvents } from "../src/types.js"; +import { createWorkerMessageHandler } from "../src/worker.js"; import { makeColumnarData, makeWorkbook } from "./fixtures.js"; beforeAll(async () => { @@ -217,6 +218,140 @@ describe("worker renderer fallback observability", () => { } }); + it("falls back exactly once when the worker cannot acquire a 2D context", async () => { + const workerDescriptor = Object.getOwnPropertyDescriptor(globalThis, "Worker"); + const transferDescriptor = Object.getOwnPropertyDescriptor( + HTMLCanvasElement.prototype, + "transferControlToOffscreen", + ); + let terminations = 0; + + class NullContextWorker extends EventTarget { + private readonly handleMessage = createWorkerMessageHandler((message) => { + this.dispatchEvent(new MessageEvent("message", { data: message })); + }); + + postMessage(message: unknown): void { + queueMicrotask(() => this.handleMessage(message)); + } + + terminate(): void { + terminations += 1; + } + } + + const offscreen = new EventTarget(); + Object.defineProperties(offscreen, { + width: { value: 0, writable: true }, + height: { value: 0, writable: true }, + getContext: { value: () => null }, + }); + Object.defineProperty(globalThis, "Worker", { + configurable: true, + value: NullContextWorker, + }); + Object.defineProperty(HTMLCanvasElement.prototype, "transferControlToOffscreen", { + configurable: true, + value: () => offscreen, + }); + + try { + const host = mountHost(); + const events: Array = []; + const grid = new GridImpl(host, { + workbook: makeWorkbook(5), + data: makeColumnarData(5), + renderer: "worker", + workerUrl: "/worker-without-context.js", + }); + grid.on("renderer-fallback", (event) => events.push(event)); + await Promise.resolve(); + await Promise.resolve(); + + expect(grid.rendererKind()).toBe("canvas"); + expect(host.querySelectorAll("canvas")).toHaveLength(1); + expect(events).toHaveLength(1); + expect(terminations).toBe(1); + + grid.destroy(); + } finally { + if (workerDescriptor) Object.defineProperty(globalThis, "Worker", workerDescriptor); + else Reflect.deleteProperty(globalThis, "Worker"); + if (transferDescriptor) { + Object.defineProperty( + HTMLCanvasElement.prototype, + "transferControlToOffscreen", + transferDescriptor, + ); + } else { + Reflect.deleteProperty(HTMLCanvasElement.prototype, "transferControlToOffscreen"); + } + } + }); + + it("falls back exactly once when the worker never acknowledges initialization", async () => { + jest.useFakeTimers(); + const workerDescriptor = Object.getOwnPropertyDescriptor(globalThis, "Worker"); + const transferDescriptor = Object.getOwnPropertyDescriptor( + HTMLCanvasElement.prototype, + "transferControlToOffscreen", + ); + let terminations = 0; + + class SilentWorker extends EventTarget { + postMessage(): void {} + + terminate(): void { + terminations += 1; + } + } + + Object.defineProperty(globalThis, "Worker", { + configurable: true, + value: SilentWorker, + }); + Object.defineProperty(HTMLCanvasElement.prototype, "transferControlToOffscreen", { + configurable: true, + value: () => new EventTarget(), + }); + + try { + const host = mountHost(); + const events: Array = []; + const grid = new GridImpl(host, { + workbook: makeWorkbook(5), + data: makeColumnarData(5), + renderer: "worker", + workerUrl: "/worker-that-never-replies.js", + }); + grid.on("renderer-fallback", (event) => events.push(event)); + expect(grid.rendererKind()).toBe("worker"); + + jest.advanceTimersByTime(30_000); + await Promise.resolve(); + + expect(grid.rendererKind()).toBe("canvas"); + expect(host.querySelectorAll("canvas")).toHaveLength(1); + expect(events).toHaveLength(1); + expect(terminations).toBe(1); + + grid.destroy(); + } finally { + jest.useRealTimers(); + if (workerDescriptor) Object.defineProperty(globalThis, "Worker", workerDescriptor); + else Reflect.deleteProperty(globalThis, "Worker"); + if (transferDescriptor) { + Object.defineProperty( + HTMLCanvasElement.prototype, + "transferControlToOffscreen", + transferDescriptor, + ); + } else { + Reflect.deleteProperty(HTMLCanvasElement.prototype, "transferControlToOffscreen"); + } + } + }); + it("reports canvas and emits nothing for the default renderer", async () => { const workbook = makeWorkbook(5); const events: unknown[] = []; diff --git a/packages/core/test/worker-renderer.test.ts b/packages/core/test/worker-renderer.test.ts index 665102b1..37c2297f 100644 --- a/packages/core/test/worker-renderer.test.ts +++ b/packages/core/test/worker-renderer.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from "bun:test"; +import { describe, expect, it, jest } from "bun:test"; import type { PanePaint, RenderLayout, Theme, VisibleWindowView } from "../src/types.js"; import { createWorkerMessageHandler } from "../src/worker.js"; import { WorkerRenderer } from "../src/worker-renderer.js"; @@ -27,12 +27,39 @@ class RecordingWorker extends EventTarget { } } +class StructuredCloneWorker extends EventTarget { + readonly received: unknown[] = []; + + postMessage(message: unknown, transfer?: Transferable[]): void { + this.received.push(structuredClone(message, { transfer: transfer ?? [] })); + } + + terminate(): void {} +} + function latestWorker(): RecordingWorker { const worker = latestConstructedWorker; if (!worker) throw new Error("worker was not constructed"); return worker; } +const TEST_THEME: Theme = { + font: "12px sans-serif", + bg: "#fff", + fg: "#111", + gridLine: "#ddd", + headerBg: "#eee", + headerFg: "#222", + selection: "#def", + selectionBorder: "#08f", + rowHeight: 20, + headerHeight: 24, + rowHeaderWidth: 40, + searchMatch: "#ff0", + searchActiveMatch: "#fa0", + highlight: "#cfc", +}; + interface SharedPaintPost { type: "paintPackedShared"; shared: { @@ -56,10 +83,66 @@ interface SharedPaintPost { }; } +interface TransferablePackedArrays { + valueKinds: Uint8Array; + numberValues: Float64Array; + stringPoolIds: Uint32Array; + stringLocalIds: Int32Array; + styleIds: Uint32Array; + stringPoolUpdateIds?: Uint32Array; +} + +interface GenericPaintPost { + type: "paint"; + view: { + sheet: unknown; + styleIds: Uint32Array; + }; +} + +interface PanePaintPost { + type: "paintPanes"; + panes: unknown[]; +} + function isRecord(value: unknown): value is Record { return value !== null && typeof value === "object"; } +function isTransferablePackedArrays(value: unknown): value is TransferablePackedArrays { + return ( + isRecord(value) && + value.valueKinds instanceof Uint8Array && + value.numberValues instanceof Float64Array && + value.stringPoolIds instanceof Uint32Array && + value.stringLocalIds instanceof Int32Array && + value.styleIds instanceof Uint32Array && + (value.stringPoolUpdateIds === undefined || value.stringPoolUpdateIds instanceof Uint32Array) + ); +} + +function isGenericPaintPost(value: unknown): value is GenericPaintPost { + return ( + isRecord(value) && + value.type === "paint" && + isRecord(value.view) && + value.view.styleIds instanceof Uint32Array + ); +} + +function isPanePaintPost(value: unknown): value is PanePaintPost { + return isRecord(value) && value.type === "paintPanes" && Array.isArray(value.panes); +} + +function firstPackedPane(value: unknown): TransferablePackedArrays { + if (!isPanePaintPost(value)) throw new Error("expected pane paint message"); + const first = value.panes[0]; + if (!isRecord(first) || !isTransferablePackedArrays(first.packed)) { + throw new Error("expected packed first pane"); + } + return first.packed; +} + function isSharedPaintPost(value: unknown): value is SharedPaintPost { if (!isRecord(value) || value.type !== "paintPackedShared" || !isRecord(value.shared)) { return false; @@ -91,7 +174,7 @@ function makePackedView(): VisibleWindowView { } describe("WorkerRenderer", () => { - it("transfers the visible-window style id buffer when painting a generic view", () => { + it("transfers a renderer-owned style id buffer when painting a generic view", () => { const renderer = new WorkerRenderer(); const worker = new RecordingWorker(); Reflect.set(renderer, "worker", worker); @@ -110,8 +193,12 @@ describe("WorkerRenderer", () => { expect(worker.messages).toHaveLength(1); const posted = worker.messages[0]!; - expect(posted.message).toEqual({ type: "paint", view }); - expect(posted.transfer).toEqual([styleIds.buffer]); + if (!isGenericPaintPost(posted.message)) throw new Error("expected generic paint message"); + const postedView = posted.message.view; + expect(posted.message).toMatchObject({ type: "paint", view: { sheet: "s1" } }); + expect(postedView.styleIds).toEqual(styleIds); + expect(postedView.styleIds).not.toBe(styleIds); + expect(posted.transfer).toEqual([postedView.styleIds.buffer]); }); it("keeps the packed transfer path by default", () => { @@ -124,15 +211,71 @@ describe("WorkerRenderer", () => { expect(worker.messages).toHaveLength(1); const posted = worker.messages[0]!; + if (!isTransferablePackedArrays(posted.message)) { + throw new Error("expected packed paint message"); + } + const payload = posted.message; expect(posted.message).toMatchObject({ type: "paintPacked", sheet: "s1" }); expect(posted.transfer).toEqual([ - view.valueKinds!.buffer, - view.numberValues!.buffer, - view.stringPoolIds!.buffer, - view.stringLocalIds!.buffer, - view.styleIds.buffer, - view.stringPoolUpdateIds!.buffer, + payload.valueKinds.buffer, + payload.numberValues.buffer, + payload.stringPoolIds.buffer, + payload.stringLocalIds.buffer, + payload.styleIds.buffer, + payload.stringPoolUpdateIds!.buffer, ]); + expect(payload.valueKinds).not.toBe(view.valueKinds); + expect(payload.numberValues).not.toBe(view.numberValues); + expect(payload.stringPoolIds).not.toBe(view.stringPoolIds); + expect(payload.stringLocalIds).not.toBe(view.stringLocalIds); + expect(payload.styleIds).not.toBe(view.styleIds); + expect(payload.stringPoolUpdateIds).not.toBe(view.stringPoolUpdateIds); + }); + + it("keeps cached packed view buffers intact across repeated paints", () => { + const renderer = new WorkerRenderer(); + const worker = new StructuredCloneWorker(); + Reflect.set(renderer, "worker", worker); + const view = makePackedView(); + + renderer.paint(view); + renderer.paint(view); + + expect(worker.received).toHaveLength(2); + const second = worker.received[1]; + if (!isTransferablePackedArrays(second)) throw new Error("expected packed paint message"); + expect(second.valueKinds).toHaveLength(2); + expect(second.numberValues).toHaveLength(2); + expect(second.stringPoolIds).toHaveLength(2); + expect(second.stringLocalIds).toHaveLength(2); + expect(second.styleIds).toHaveLength(2); + expect(view.valueKinds).toHaveLength(2); + expect(view.numberValues).toHaveLength(2); + expect(view.stringPoolIds).toHaveLength(2); + expect(view.stringLocalIds).toHaveLength(2); + expect(view.styleIds).toHaveLength(2); + }); + + it("keeps cached generic view buffers intact across repeated paints", () => { + const renderer = new WorkerRenderer(); + const worker = new StructuredCloneWorker(); + Reflect.set(renderer, "worker", worker); + const view: VisibleWindowView = { + sheet: "s1", + rows: { start: 0, end: 1 }, + cols: [0, 1], + values: ["alpha", 42], + styleIds: new Uint32Array([0, 1]), + styles: [{}, { bold: true }], + }; + + renderer.paint(view); + renderer.paint(view); + + const second = worker.received[1]; + if (!isGenericPaintPost(second)) throw new Error("expected generic paint message"); + expect(second.view.styleIds).toHaveLength(2); + expect(view.styleIds).toHaveLength(2); }); it("preserves resolved hyperlink and conditional styles through the Worker payload", () => { @@ -263,27 +406,107 @@ describe("WorkerRenderer", () => { }, ], }); - expect(worker.messages[0]!.transfer).toEqual([ - packed.valueKinds!.buffer, - packed.numberValues!.buffer, - packed.stringPoolIds!.buffer, - packed.stringLocalIds!.buffer, - packed.styleIds.buffer, - packed.stringPoolUpdateIds!.buffer, + const posted = worker.messages[0]!; + const postedPacked = firstPackedPane(posted.message); + expect(posted.transfer).toEqual([ + postedPacked.valueKinds.buffer, + postedPacked.numberValues.buffer, + postedPacked.stringPoolIds.buffer, + postedPacked.stringLocalIds.buffer, + postedPacked.styleIds.buffer, + postedPacked.stringPoolUpdateIds!.buffer, + ]); + expect(postedPacked.valueKinds).not.toBe(packed.valueKinds); + expect(postedPacked.styleIds).not.toBe(packed.styleIds); + }); + + it("keeps cached packed pane buffers intact across repeated paints", () => { + const renderer = new WorkerRenderer(); + const worker = new StructuredCloneWorker(); + Reflect.set(renderer, "worker", worker); + const view = makePackedView(); + const panes: PanePaint[] = [ + { + view, + clip: { x: 0, y: 0, w: 100, h: 40 }, + scrollTop: 0, + scrollLeft: 0, + }, + ]; + + renderer.paintPanes(panes, { x: null, y: null }); + renderer.paintPanes(panes, { x: null, y: null }); + + expect(worker.received).toHaveLength(2); + const second = firstPackedPane(worker.received[1]); + expect(second.valueKinds).toHaveLength(2); + expect(second.numberValues).toHaveLength(2); + expect(second.stringPoolIds).toHaveLength(2); + expect(second.stringLocalIds).toHaveLength(2); + expect(second.styleIds).toHaveLength(2); + expect(second.stringPoolUpdateIds).toHaveLength(1); + expect(view.valueKinds).toHaveLength(2); + expect(view.numberValues).toHaveLength(2); + expect(view.stringPoolIds).toHaveLength(2); + expect(view.stringLocalIds).toHaveLength(2); + expect(view.styleIds).toHaveLength(2); + expect(view.stringPoolUpdateIds).toHaveLength(1); + }); + + it("reports initialization failure and one fatal context-loss outcome", () => { + const nullContextAcknowledgements: unknown[] = []; + const nullContextCanvas = new EventTarget(); + Object.defineProperties(nullContextCanvas, { + width: { value: 0, writable: true }, + height: { value: 0, writable: true }, + getContext: { value: () => null }, + }); + createWorkerMessageHandler((message) => nullContextAcknowledgements.push(message))({ + type: "init", + canvas: nullContextCanvas, + theme: TEST_THEME, + }); + expect(nullContextAcknowledgements).toEqual([ + { + type: "fatal", + reason: "Sheetwrite: Paint worker could not acquire a 2D context", + }, + ]); + + const contextLossAcknowledgements: unknown[] = []; + const contextLossCanvas = new EventTarget(); + Object.defineProperties(contextLossCanvas, { + width: { value: 0, writable: true }, + height: { value: 0, writable: true }, + getContext: { value: () => ({}) }, + }); + createWorkerMessageHandler((message) => contextLossAcknowledgements.push(message))({ + type: "init", + canvas: contextLossCanvas, + theme: TEST_THEME, + }); + contextLossCanvas.dispatchEvent(new Event("contextlost")); + contextLossCanvas.dispatchEvent(new Event("contextlost")); + contextLossCanvas.dispatchEvent(new Event("contextrestored")); + expect(contextLossAcknowledgements).toEqual([ + { type: "ready" }, + { type: "fatal", reason: "Sheetwrite: Paint worker lost its 2D context" }, ]); }); it("round-trips sender lifecycle payloads through the worker handler before acknowledging", () => { + jest.useFakeTimers(); const workerDescriptor = Object.getOwnPropertyDescriptor(globalThis, "Worker"); const transferDescriptor = Object.getOwnPropertyDescriptor( HTMLCanvasElement.prototype, "transferControlToOffscreen", ); - const offscreen = { - width: 0, - height: 0, - getContext: () => ({}), - } as unknown as OffscreenCanvas; + const offscreen = new EventTarget(); + Object.defineProperties(offscreen, { + width: { value: 0, writable: true }, + height: { value: 0, writable: true }, + getContext: { value: () => ({}) }, + }); Object.defineProperty(globalThis, "Worker", { configurable: true, value: RecordingWorker, @@ -293,7 +516,8 @@ describe("WorkerRenderer", () => { value: () => offscreen, }); - const renderer = new WorkerRenderer("/worker.js"); + const failures: unknown[] = []; + const renderer = new WorkerRenderer("/worker.js", {}, (error) => failures.push(error)); try { const host = document.createElement("div"); const layout: RenderLayout = { @@ -302,22 +526,7 @@ describe("WorkerRenderer", () => { headerHeight: 24, totalRows: 0, }; - const theme: Theme = { - font: "12px sans-serif", - bg: "#fff", - fg: "#111", - gridLine: "#ddd", - headerBg: "#eee", - headerFg: "#222", - selection: "#def", - selectionBorder: "#08f", - rowHeight: 20, - headerHeight: 24, - rowHeaderWidth: 40, - searchMatch: "#ff0", - searchActiveMatch: "#fa0", - highlight: "#cfc", - }; + const theme = TEST_THEME; latestConstructedWorker = null; renderer.mount(host, theme); @@ -348,20 +557,80 @@ describe("WorkerRenderer", () => { for (const { message } of worker.messages.slice(0, -1)) { handleWorkerMessage(message); } - expect(acknowledgements).toEqual([]); + expect(acknowledgements).toEqual([{ type: "ready" }]); + jest.advanceTimersByTime(30_000); + expect(failures).toHaveLength(0); expect(canvas.dataset.workerFrame).toBe("0"); handleWorkerMessage(paintPayload); - expect(acknowledgements).toEqual([{ type: "painted" }]); + expect(acknowledgements).toEqual([{ type: "ready" }, { type: "painted" }]); expect(canvas.dataset.workerFrame).toBe("1"); renderer.destroy(); handleWorkerMessage(worker.messages.at(-1)?.message); - expect(acknowledgements).toEqual([{ type: "painted" }]); + expect(acknowledgements).toEqual([{ type: "ready" }, { type: "painted" }]); expect(worker.terminations).toBe(1); expect(host.querySelector("canvas")).toBeNull(); } finally { renderer.destroy(); + jest.useRealTimers(); + if (workerDescriptor) Object.defineProperty(globalThis, "Worker", workerDescriptor); + else Reflect.deleteProperty(globalThis, "Worker"); + if (transferDescriptor) { + Object.defineProperty( + HTMLCanvasElement.prototype, + "transferControlToOffscreen", + transferDescriptor, + ); + } else { + Reflect.deleteProperty(HTMLCanvasElement.prototype, "transferControlToOffscreen"); + } + } + }); + + it("guards duplicate fatal signals and cancels readiness failure on destroy", () => { + jest.useFakeTimers(); + const workerDescriptor = Object.getOwnPropertyDescriptor(globalThis, "Worker"); + const transferDescriptor = Object.getOwnPropertyDescriptor( + HTMLCanvasElement.prototype, + "transferControlToOffscreen", + ); + Object.defineProperty(globalThis, "Worker", { + configurable: true, + value: RecordingWorker, + }); + Object.defineProperty(HTMLCanvasElement.prototype, "transferControlToOffscreen", { + configurable: true, + value: () => new EventTarget(), + }); + + const failures: unknown[] = []; + const renderer = new WorkerRenderer("/worker.js", {}, (error) => failures.push(error)); + try { + latestConstructedWorker = null; + renderer.mount(document.createElement("div"), TEST_THEME); + const worker = latestWorker(); + worker.emitMessage({ type: "fatal", reason: "context unavailable" }); + worker.emitMessage({ type: "fatal", reason: "duplicate fatal" }); + worker.dispatchEvent(new Event("error", { cancelable: true })); + jest.advanceTimersByTime(30_000); + expect(failures).toHaveLength(1); + expect(worker.terminations).toBe(1); + + const destroyedFailures: unknown[] = []; + const destroyed = new WorkerRenderer("/worker.js", {}, (error) => + destroyedFailures.push(error), + ); + latestConstructedWorker = null; + destroyed.mount(document.createElement("div"), TEST_THEME); + const destroyedWorker = latestWorker(); + destroyed.destroy(); + jest.advanceTimersByTime(30_000); + expect(destroyedFailures).toHaveLength(0); + expect(destroyedWorker.terminations).toBe(1); + } finally { + renderer.destroy(); + jest.useRealTimers(); if (workerDescriptor) Object.defineProperty(globalThis, "Worker", workerDescriptor); else Reflect.deleteProperty(globalThis, "Worker"); if (transferDescriptor) { diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index 73658e01..5f3cede6 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -1,5 +1,26 @@ # @sheetwrite/react +## 0.4.0 + +### Minor Changes + +- Align the framework adapters and XLSX integration with the coordinated Sheetwrite 0.4.0 release. + +### Patch Changes + +- Updated dependencies [8457eca] +- Updated dependencies [dac694a] +- Updated dependencies [0e09ecc] +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [55b1f35] +- Updated dependencies [b225783] +- Updated dependencies [41f6749] +- Updated dependencies [ce1e404] + - @sheetwrite/core@0.4.0 + ## 0.3.1 ### Patch Changes diff --git a/packages/react/package.json b/packages/react/package.json index 980dbb2d..9932deee 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@sheetwrite/react", - "version": "0.3.1", + "version": "0.4.0", "type": "module", "description": "React adapter for Sheetwrite.", "license": "MIT", diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index 8b74d57a..d7795ff6 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -1,5 +1,26 @@ # @sheetwrite/svelte +## 0.4.0 + +### Minor Changes + +- Align the framework adapters and XLSX integration with the coordinated Sheetwrite 0.4.0 release. + +### Patch Changes + +- Updated dependencies [8457eca] +- Updated dependencies [dac694a] +- Updated dependencies [0e09ecc] +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [55b1f35] +- Updated dependencies [b225783] +- Updated dependencies [41f6749] +- Updated dependencies [ce1e404] + - @sheetwrite/core@0.4.0 + ## 0.3.1 ### Patch Changes diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 1d65a3b4..1b930525 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@sheetwrite/svelte", - "version": "0.3.1", + "version": "0.4.0", "type": "module", "description": "Svelte adapter for Sheetwrite.", "license": "MIT", diff --git a/packages/vue/CHANGELOG.md b/packages/vue/CHANGELOG.md index 11a3c98a..6555cbbe 100644 --- a/packages/vue/CHANGELOG.md +++ b/packages/vue/CHANGELOG.md @@ -1,5 +1,26 @@ # @sheetwrite/vue +## 0.4.0 + +### Minor Changes + +- Align the framework adapters and XLSX integration with the coordinated Sheetwrite 0.4.0 release. + +### Patch Changes + +- Updated dependencies [8457eca] +- Updated dependencies [dac694a] +- Updated dependencies [0e09ecc] +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [55b1f35] +- Updated dependencies [b225783] +- Updated dependencies [41f6749] +- Updated dependencies [ce1e404] + - @sheetwrite/core@0.4.0 + ## 0.3.1 ### Patch Changes diff --git a/packages/vue/package.json b/packages/vue/package.json index 8b6b584f..c3f5567e 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@sheetwrite/vue", - "version": "0.3.1", + "version": "0.4.0", "type": "module", "description": "Vue adapter for Sheetwrite.", "license": "MIT", diff --git a/packages/wasm/CHANGELOG.md b/packages/wasm/CHANGELOG.md index 1ed31f77..796bb7c9 100644 --- a/packages/wasm/CHANGELOG.md +++ b/packages/wasm/CHANGELOG.md @@ -1,5 +1,15 @@ # @sheetwrite/wasm +## 0.4.0 + +### Minor Changes + +- 41f6749: Pack visible-window numeric, kind, style, string-index, and conditional-format data into one validated transfer buffer, reducing ordinary window reads from seven output allocations to one. + +### Patch Changes + +- 41f6749: Reuse each visible formula entry while decoding render windows, avoiding redundant formula-map probes without changing resolved values or error precedence. + ## 0.3.1 ### Patch Changes diff --git a/packages/wasm/Cargo.toml b/packages/wasm/Cargo.toml index dcf374d2..7b78b20d 100644 --- a/packages/wasm/Cargo.toml +++ b/packages/wasm/Cargo.toml @@ -10,11 +10,15 @@ publish = false crate-type = ["cdylib", "rlib"] name = "sheetwrite_wasm" +[features] +default = ["formula-engine"] +formula-engine = [] + [dependencies] wasm-bindgen = "0.2" -# Speed over size: this crate IS the data hot path (sort/filter/window/ingest). -# Binary cost of `opt-level = 3` vs `"s"` is measured and recorded in plans/006. +# v0.4.0 interleaved captures keep `3`: `"s"` saves 14,218 Brotli bytes +# but slows the resolved 100k formula paths by 8.60–11.71%. [profile.release] opt-level = 3 lto = "fat" diff --git a/packages/wasm/package.json b/packages/wasm/package.json index 3a320a34..4aaa82be 100644 --- a/packages/wasm/package.json +++ b/packages/wasm/package.json @@ -1,6 +1,6 @@ { "name": "@sheetwrite/wasm", - "version": "0.3.1", + "version": "0.4.0", "type": "module", "description": "Sheetwrite columnar store and data engine (Rust/WASM).", "license": "MIT", diff --git a/packages/wasm/src/lib.rs b/packages/wasm/src/lib.rs index 8ed2352f..c06b919e 100644 --- a/packages/wasm/src/lib.rs +++ b/packages/wasm/src/lib.rs @@ -10,30 +10,46 @@ //! dictionary and the store keeps only a `u32` style id per cell. That keeps //! the large per-cell array in linear memory and the tiny dictionary in JS. //! - The render loop never reads a single cell across the boundary: it asks for -//! a whole visible window in one call (`get_window`) and receives contiguous -//! typed arrays plus the window's unique strings. +//! a whole visible window in one call (`get_window`) and receives one packed +//! fixed-width payload plus the window's unique strings. +#[cfg(not(feature = "formula-engine"))] +compile_error!( + "SHEETWRITE_STORE_ONLY_BLOCKED: formula-entry-ast,dependency-index; \ + the store-only boundary must replace FormulaEntry::ast and CellStore::dep_index" +); + +#[cfg(feature = "formula-engine")] mod calc; +#[cfg(feature = "formula-engine")] mod eval; +#[cfg(feature = "formula-engine")] mod memory; +#[cfg(feature = "formula-engine")] mod query; +#[cfg(feature = "formula-engine")] mod sheet; +#[cfg(feature = "formula-engine")] mod store; +#[cfg(feature = "formula-engine")] mod types; +#[cfg(feature = "formula-engine")] mod window; -#[cfg(test)] +#[cfg(all(test, feature = "formula-engine"))] mod tests; +#[cfg(feature = "formula-engine")] pub use store::{CellOut, CellStore}; +#[cfg(feature = "formula-engine")] pub use window::WindowView; // Test-only preludes: `tests.rs` reaches the whole crate through `use super::*`. -#[cfg(test)] +#[cfg(all(test, feature = "formula-engine"))] pub(crate) use calc::parse; -#[cfg(test)] +#[cfg(all(test, feature = "formula-engine"))] pub(crate) use query::*; -#[cfg(test)] +#[cfg(all(test, feature = "formula-engine"))] pub(crate) use sheet::*; -#[cfg(test)] +#[cfg(all(test, feature = "formula-engine"))] pub(crate) use types::*; diff --git a/packages/wasm/src/sheet.rs b/packages/wasm/src/sheet.rs index d7d2a2e0..62773b4b 100644 --- a/packages/wasm/src/sheet.rs +++ b/packages/wasm/src/sheet.rs @@ -20,7 +20,10 @@ pub(crate) enum CondPred { EqNum(f64), EqStr(String), EqEmpty, - Contains { needle: String, match_case: bool }, + Contains { + needle: String, + match_case: bool, + }, Formula { ast: Ast, anchor_row: u32, @@ -1777,12 +1780,20 @@ impl SheetData { } } -pub(crate) fn formula_error_at(sheet: &SheetData, key: CellKey) -> Option { +pub(crate) fn formula_error_with_entry( + sheet: &SheetData, + key: CellKey, + entry: Option<&FormulaEntry>, +) -> Option { sheet .spill_errors .get(&key) .copied() - .or_else(|| sheet.formulas.get(&key).and_then(|entry| entry.error)) + .or_else(|| entry.and_then(|entry| entry.error)) +} + +pub(crate) fn formula_error_at(sheet: &SheetData, key: CellKey) -> Option { + formula_error_with_entry(sheet, key, sheet.formulas.get(&key)) } #[cfg(test)] diff --git a/packages/wasm/src/tests.rs b/packages/wasm/src/tests.rs index 22440378..a217f888 100644 --- a/packages/wasm/src/tests.rs +++ b/packages/wasm/src/tests.rs @@ -21,6 +21,106 @@ fn put_number(sheet: &mut SheetData, row: usize, col: usize, value: f64) { sheet.set_num(i, value); } +struct DecodedWindow { + kinds: Vec, + numbers: Vec, + string_index: Vec, + string_ids: Vec, + style_index: Vec, + style_dict: Vec, + cond_matches: Vec, + strings: Vec, +} + +fn decode_window(mut view: WindowView) -> DecodedWindow { + let packed = view.take_packed(); + assert!(packed.len() >= 40); + let word = |index: usize| { + u32::from_le_bytes( + packed[index * 4..index * 4 + 4] + .try_into() + .expect("complete packed header word"), + ) + }; + assert_eq!(word(0), 0x3157_4e53); + assert_eq!(word(1), 1); + assert_eq!(word(2), 40); + assert_eq!(word(3) as usize, packed.len()); + let rows = word(4) as usize; + let cols = word(5) as usize; + let cells = word(6) as usize; + let styles = word(7) as usize; + let cond_matches = word(8) as usize; + let strings = word(9) as usize; + assert_eq!(rows.checked_mul(cols), Some(cells)); + assert!(cond_matches == 0 || cond_matches == cells); + + let kinds_start = 40; + let numbers_start = (kinds_start + cells + 7) & !7; + let string_ids_start = numbers_start + cells * 8; + let string_index_start = string_ids_start + cells * 4; + let style_index_start = string_index_start + cells * 4; + let style_dict_start = style_index_start + cells * 4; + let cond_matches_start = style_dict_start + styles * 4; + assert_eq!(cond_matches_start + cond_matches * 4, packed.len()); + + let decode_u32 = |start: usize, len: usize| { + (0..len) + .map(|index| { + u32::from_le_bytes( + packed[start + index * 4..start + index * 4 + 4] + .try_into() + .expect("complete packed u32"), + ) + }) + .collect::>() + }; + let decoded_strings = view.take_strings(); + assert_eq!(decoded_strings.len(), strings); + DecodedWindow { + kinds: packed[kinds_start..kinds_start + cells].to_vec(), + numbers: (0..cells) + .map(|index| { + f64::from_le_bytes( + packed[numbers_start + index * 8..numbers_start + index * 8 + 8] + .try_into() + .expect("complete packed f64"), + ) + }) + .collect(), + string_ids: decode_u32(string_ids_start, cells), + string_index: decode_u32(string_index_start, cells) + .into_iter() + .map(|value| value as i32) + .collect(), + style_index: decode_u32(style_index_start, cells), + style_dict: decode_u32(style_dict_start, styles), + cond_matches: decode_u32(cond_matches_start, cond_matches), + strings: decoded_strings, + } +} + +#[test] +fn formula_error_with_entry_uses_the_supplied_entry_and_preserves_spill_precedence() { + let key = (0, 0); + let mut sheet = SheetData::new(1, 1); + sheet + .formulas + .insert(key, FormulaEntry::error("=stored", FormulaError::Value)); + let supplied = FormulaEntry::error("=supplied", FormulaError::DivZero); + + assert_eq!( + formula_error_with_entry(&sheet, key, Some(&supplied)), + Some(FormulaError::DivZero) + ); + + sheet.spill_errors.insert(key, FormulaError::Spill); + assert_eq!( + formula_error_with_entry(&sheet, key, Some(&supplied)), + Some(FormulaError::Spill) + ); +} + #[test] fn sheet_insert_rows_moves_cells_and_shifts_formulas() { let mut sheet = SheetData::new(2, 3); @@ -464,6 +564,12 @@ fn mixed_spill_errors_materialize_at_their_array_positions() { } assert_eq!(string(&store, sheet, 1, 3).as_deref(), Some("#N/A")); + let view = decode_window(store.get_window(sheet, 1, 2, &[2, 4, 6])); + assert_eq!(view.kinds, vec![KIND_STRING, KIND_STRING, KIND_STRING]); + for index in view.string_index { + assert_eq!(view.strings[index as usize], "#N/A"); + } + let snapshot = store .capture_range(sheet, 0, 2, 3, 1) .expect("mixed-error spill history should capture"); @@ -670,11 +776,12 @@ fn value_results_feed_dependencies_and_windows() { assert_eq!(store.get_cell(sheet, 0, 3).kind(), KIND_BOOL); assert_close(number(&store, sheet, 0, 3), 0.0); - let mut view = store.get_window(sheet, 0, 1, &[0, 1, 2, 3]); - let kinds = view.take_kinds(); - let string_ids = view.take_string_ids(); - let pooled = store.pool_strings(&string_ids); - assert_eq!(kinds, vec![KIND_STRING, KIND_NUMBER, KIND_BOOL, KIND_BOOL]); + let view = decode_window(store.get_window(sheet, 0, 1, &[0, 1, 2, 3])); + let pooled = store.pool_strings(&view.string_ids); + assert_eq!( + view.kinds, + vec![KIND_STRING, KIND_NUMBER, KIND_BOOL, KIND_BOOL] + ); assert_eq!(pooled[0], "hello"); store.set_formula(sheet, 0, 0, r#"="world""#, 3); @@ -1436,26 +1543,31 @@ fn window_view_uses_error_strings_and_consuming_reads() { store.set_formula(sheet, 0, 1, "=1/0", 9); store.recompute(sheet); - let mut view = store.get_window(sheet, 0, 1, &[0, 1]); + let view = store.get_window(sheet, 0, 1, &[0, 1, u32::MAX]); assert_eq!(view.n_rows(), 1); - assert_eq!(view.n_cols(), 2); - - let kinds = view.take_kinds(); - let numbers = view.take_numbers(); - let string_index = view.take_string_index(); - let string_ids = view.take_string_ids(); - let style_index = view.take_style_index(); - let style_dict = view.take_style_dict(); - let strings = view.take_strings(); - let pooled = store.pool_strings(&string_ids); - - assert_eq!(kinds, vec![KIND_STRING, KIND_STRING]); - assert_eq!(numbers, vec![0.0, 0.0]); - assert_eq!(style_index, vec![0, 1]); - assert_eq!(style_dict, vec![7, 9]); + assert_eq!(view.n_cols(), 3); + + let view = decode_window(view); + let pooled = store.pool_strings(&view.string_ids); + + assert_eq!(view.kinds, vec![KIND_STRING, KIND_STRING, KIND_EMPTY]); + assert_eq!(view.numbers, vec![0.0, 0.0, 0.0]); + assert_eq!(view.style_index, vec![0, 1, 0]); + assert_eq!(view.style_dict, vec![7, 9]); assert_eq!(pooled[0], "hello"); - assert_eq!(strings[string_index[1] as usize], "#DIV/0!"); - assert!(view.take_kinds().is_empty()); + assert_eq!(view.strings[view.string_index[1] as usize], "#DIV/0!"); + + let mut consumed = store.get_window(sheet, 0, 1, &[0, 1]); + assert!(!consumed.take_packed().is_empty()); + assert!(consumed.take_packed().is_empty()); + + store.sheets[sheet] + .spill_errors + .insert((0, 1), FormulaError::Spill); + let spill_view = decode_window(store.get_window(sheet, 0, 1, &[1])); + assert_eq!(spill_view.kinds, vec![KIND_STRING]); + let spill_index = spill_view.string_index[0]; + assert_eq!(spill_view.strings[spill_index as usize], "#SPILL!"); } #[test] @@ -2061,12 +2173,11 @@ fn conditional_format_window_masks_cover_predicates_bounds_and_row_order() { &[0, 0, 0, 0, 0, 1], ); - let mut contiguous = store.get_window(sheet, 0, 3, &[0, 1]); - assert_eq!(contiguous.take_cond_matches(), vec![4, 18, 9, 0, 1, 34]); - assert!(contiguous.take_cond_matches().is_empty()); + let contiguous = decode_window(store.get_window(sheet, 0, 3, &[0, 1])); + assert_eq!(contiguous.cond_matches, vec![4, 18, 9, 0, 1, 34]); - let mut reordered = store.get_window_rows(sheet, &[2, 0, 1], &[1, 0]); - assert_eq!(reordered.take_cond_matches(), vec![34, 1, 18, 4, 0, 9]); + let reordered = decode_window(store.get_window_rows(sheet, &[2, 0, 1], &[1, 0])); + assert_eq!(reordered.cond_matches, vec![34, 1, 18, 4, 0, 9]); } #[test] @@ -2086,13 +2197,13 @@ fn conditional_formula_rules_shift_relative_refs_stop_and_follow_dependency_edit &[2, 0], ); - let mut initial = store.get_window(sheet, 0, 3, &[2]); - assert_eq!(initial.take_cond_matches(), vec![2, 1, 1]); + let initial = decode_window(store.get_window(sheet, 0, 3, &[2])); + assert_eq!(initial.cond_matches, vec![2, 1, 1]); store.set_number(sheet, 1, 0, 2.0, 0); store.recompute(sheet); - let mut changed_dependency = store.get_window(sheet, 0, 3, &[2]); - assert_eq!(changed_dependency.take_cond_matches(), vec![2, 2, 1]); + let changed_dependency = decode_window(store.get_window(sheet, 0, 3, &[2])); + assert_eq!(changed_dependency.cond_matches, vec![2, 2, 1]); } #[test] @@ -2517,8 +2628,7 @@ fn columns_fully_loaded_tracks_disjoint_columns_holes_bounds_and_sparse_accounti #[test] fn columns_fully_loaded_reflects_clean_eviction_and_dirty_pinning() { let mut store = CellStore::new(); - let sheet = - store.add_paged_sheet(2, 1_000_000, 4096, 110_000, DEFAULT_MAX_PAGED_DIRTY_CELLS); + let sheet = store.add_paged_sheet(2, 1_000_000, 4096, 110_000, DEFAULT_MAX_PAGED_DIRTY_CELLS); store.begin_page_load(); store.set_column_numbers(sheet, 0, 0, &[1.0], 0); @@ -2550,6 +2660,10 @@ fn paged_formulas_propagate_loading_until_dependencies_arrive() { store.set_formula(sheet, 0, 1, "=A5001+1", 0); store.recompute(sheet); assert_eq!(string(&store, sheet, 0, 1).as_deref(), Some("#LOADING!")); + let loading_view = decode_window(store.get_window(sheet, 0, 1, &[1])); + assert_eq!(loading_view.kinds, vec![KIND_STRING]); + let loading_index = loading_view.string_index[0]; + assert_eq!(loading_view.strings[loading_index as usize], "#LOADING!"); store.begin_page_load(); store.set_column_numbers(sheet, 0, 5000, &[41.0], 0); @@ -3101,8 +3215,20 @@ fn required_formula_regressions_cover_let_lookup_and_criteria_shape() { store.set_formula(sheet, 0, 2, "=SUM(LET(x,SEQUENCE(2),1),2)", 0); store.set_formula(sheet, 0, 4, "=XMATCH(2,A1:A3,0)", 0); store.set_formula(sheet, 0, 5, "=MAXIFS(A1:B1,A1:A2,\">0\")", 0); - store.set_formula(sheet, 1, 3, "=MAXIFS(CHOOSE(1,B1:B3),CHOOSE(1,A1:A3),\">1\")", 0); - store.set_formula(sheet, 1, 4, "=MAXIFS(CHOOSE(1,B1:B3),CHOOSE(1,A1:B2),\">1\")", 0); + store.set_formula( + sheet, + 1, + 3, + "=MAXIFS(CHOOSE(1,B1:B3),CHOOSE(1,A1:A3),\">1\")", + 0, + ); + store.set_formula( + sheet, + 1, + 4, + "=MAXIFS(CHOOSE(1,B1:B3),CHOOSE(1,A1:B2),\">1\")", + 0, + ); store.recompute(sheet); assert_close(number(&store, sheet, 0, 3), 5.0); assert_close(number(&store, sheet, 0, 2), 3.0); @@ -3139,7 +3265,6 @@ fn let_metadata_tracks_only_reachable_reads_and_volatility() { assert_close(number(&store, sheet, 0, 1), 1.0); } - #[test] fn required_control_lookup_reference_and_aggregate_targets_execute_end_to_end() { let mut store = CellStore::new(); @@ -3281,14 +3406,7 @@ fn every_indexed_array_producer_reinstalls_spills_after_dependency_edits() { ("=CHOOSEROWS(A1:A3,2,3)", 1, 20.0, 1, 0, 3.0), ("=LET(x,A1:A3,x)", 0, 9.0, 2, 0, 3.0), ("=CHOOSE(1,A1:A3,SEQUENCE(3))", 0, 9.0, 2, 0, 3.0), - ( - "=LET(x,CHOOSE(1,A1:A3,SEQUENCE(3)),x)", - 0, - 9.0, - 2, - 0, - 3.0, - ), + ("=LET(x,CHOOSE(1,A1:A3,SEQUENCE(3)),x)", 0, 9.0, 2, 0, 3.0), ]; for (source, edit_row, anchor, probe_row, probe_col, probe) in cases { @@ -3306,7 +3424,13 @@ fn every_indexed_array_producer_reinstalls_spills_after_dependency_edits() { assert_close(number(&store, sheet, 0, 4), 0.0); store.set_formula(sheet, 0, 4, source, 0); store.recompute(sheet); - store.set_number(sheet, edit_row, 0, if edit_row == 0 { 9.0 } else { 20.0 }, 0); + store.set_number( + sheet, + edit_row, + 0, + if edit_row == 0 { 9.0 } else { 20.0 }, + 0, + ); store.recompute(sheet); assert_close(number(&store, sheet, 0, 4), anchor); diff --git a/packages/wasm/src/types.rs b/packages/wasm/src/types.rs index 5240c809..413d0c29 100644 --- a/packages/wasm/src/types.rs +++ b/packages/wasm/src/types.rs @@ -8,6 +8,8 @@ use crate::eval::expand_let_reachable_ast; use crate::memory::MemoryOwnerStats; use std::rc::Rc; +// TypeScript mirrors these values in packages/core/src/store/wire-tags.ts; +// packages/core/test/wire-tags.test.ts enforces the pairing. pub(crate) const KIND_EMPTY: u8 = 0; pub(crate) const KIND_NUMBER: u8 = 1; pub(crate) const KIND_STRING: u8 = 2; diff --git a/packages/wasm/src/window.rs b/packages/wasm/src/window.rs index 58ca099a..12b13c83 100644 --- a/packages/wasm/src/window.rs +++ b/packages/wasm/src/window.rs @@ -6,7 +6,7 @@ use wasm_bindgen::prelude::*; use crate::calc::translate_relative_refs; use crate::query::matches_needle; -use crate::sheet::{formula_error_at, CondPred, SheetData}; +use crate::sheet::{formula_error_with_entry, CondPred, SheetData}; use crate::store::CellStore; use crate::types::{ cell_key, AbsCellKey, EvalResult, FormulaError, FormulaValueKind, StringPool, Value, KIND_BOOL, @@ -16,9 +16,9 @@ use crate::types::{ #[wasm_bindgen] impl CellStore { /// One bulk read of a rectangular window for the renderer. Returns - /// contiguous typed arrays (row-major over `rows x cols`) plus the unique - /// strings referenced by the window, so the host paints without crossing - /// the boundary per cell. + /// contiguous packed cell data (row-major over `rows x cols`) plus the + /// unique strings referenced by the window, so the host paints without + /// crossing the boundary per cell. #[wasm_bindgen(js_name = getWindow)] pub fn get_window( &self, @@ -34,7 +34,9 @@ impl CellStore { let row_end = row_end.min(s.row_count); let n_rows = row_end.saturating_sub(row_start); let n_cols = cols.len(); - let cells = n_rows.saturating_mul(n_cols); + let Some(cells) = n_rows.checked_mul(n_cols) else { + return WindowView::empty(); + }; let mut kind = vec![KIND_EMPTY; cells]; let mut num = vec![0.0f64; cells]; @@ -87,9 +89,9 @@ impl CellStore { &strings, ); - WindowView { - n_rows: n_rows as u32, - n_cols: n_cols as u32, + WindowView::new( + n_rows, + n_cols, kind, num, str_local, @@ -98,7 +100,7 @@ impl CellStore { strings, style_dict, cond_matches, - } + ) } /// Bulk read of an explicit row list (sorted/filtered views) — same output @@ -110,7 +112,9 @@ impl CellStore { }; let n_rows = rows.len(); let n_cols = cols.len(); - let cells = n_rows.saturating_mul(n_cols); + let Some(cells) = n_rows.checked_mul(n_cols) else { + return WindowView::empty(); + }; let mut kind = vec![KIND_EMPTY; cells]; let mut num = vec![0.0f64; cells]; @@ -165,9 +169,9 @@ impl CellStore { &strings, ); - WindowView { - n_rows: n_rows as u32, - n_cols: n_cols as u32, + WindowView::new( + n_rows, + n_cols, kind, num, str_local, @@ -176,7 +180,7 @@ impl CellStore { strings, style_dict, cond_matches, - } + ) } } @@ -215,15 +219,14 @@ pub(crate) fn fill_window_cell( } } KIND_FORMULA => { - let error = cell_key(row, col).and_then(|key| formula_error_at(sheet, key)); + let key = cell_key(row, col); + let entry = key.and_then(|key| sheet.formulas.get(&key)); + let error = key.and_then(|key| formula_error_with_entry(sheet, key, entry)); if let Some(error) = error { kind[dst] = KIND_STRING; str_local[dst] = local_error_index(error, error_slots, strings); } else { - let value_kind = cell_key(row, col) - .and_then(|key| sheet.formulas.get(&key)) - .map(|entry| entry.value_kind); - match value_kind { + match entry.map(|entry| entry.value_kind) { Some(FormulaValueKind::Bool) => { kind[dst] = KIND_BOOL; num[dst] = sheet.num_at(src); @@ -396,36 +399,144 @@ fn cell_text<'a>( } } +const WINDOW_PACKED_MAGIC: u32 = 0x3157_4e53; +const WINDOW_PACKED_VERSION: u32 = 1; +const WINDOW_PACKED_HEADER_BYTES: usize = 10 * std::mem::size_of::(); + /// A bulk window of resolved cells, row-major over `n_rows x n_cols`. #[wasm_bindgen] pub struct WindowView { n_rows: u32, n_cols: u32, - kind: Vec, - num: Vec, - str_local: Vec, - style_local: Vec, - string_ids: Vec, + packed: Vec, strings: Vec, - style_dict: Vec, - cond_matches: Vec, } impl WindowView { - pub(crate) fn empty() -> Self { + #[allow(clippy::too_many_arguments)] + fn new( + n_rows: usize, + n_cols: usize, + kind: Vec, + num: Vec, + str_local: Vec, + style_local: Vec, + string_ids: Vec, + strings: Vec, + style_dict: Vec, + cond_matches: Vec, + ) -> Self { + let packed = pack_window( + n_rows, + n_cols, + &kind, + &num, + &str_local, + &style_local, + &string_ids, + style_dict.as_slice(), + &cond_matches, + strings.len(), + ) + .unwrap_or_default(); Self { - n_rows: 0, - n_cols: 0, - kind: Vec::new(), - num: Vec::new(), - str_local: Vec::new(), - style_local: Vec::new(), - string_ids: Vec::new(), - strings: Vec::new(), - style_dict: Vec::new(), - cond_matches: Vec::new(), + n_rows: n_rows.try_into().unwrap_or_default(), + n_cols: n_cols.try_into().unwrap_or_default(), + packed, + strings, } } + + pub(crate) fn empty() -> Self { + Self::new( + 0, + 0, + Vec::new(), + Vec::new(), + Vec::new(), + Vec::new(), + Vec::new(), + Vec::new(), + Vec::new(), + Vec::new(), + ) + } +} + +#[allow(clippy::too_many_arguments)] +fn pack_window( + n_rows: usize, + n_cols: usize, + kind: &[u8], + num: &[f64], + str_local: &[i32], + style_local: &[u32], + string_ids: &[u32], + style_dict: &[u32], + cond_matches: &[u32], + string_count: usize, +) -> Option> { + let cells = n_rows.checked_mul(n_cols)?; + if kind.len() != cells + || num.len() != cells + || str_local.len() != cells + || style_local.len() != cells + || string_ids.len() != cells + || (!cond_matches.is_empty() && cond_matches.len() != cells) + { + return None; + } + + let numbers_start = align_to_8(WINDOW_PACKED_HEADER_BYTES.checked_add(cells)?)?; + let string_ids_start = numbers_start.checked_add(cells.checked_mul(8)?)?; + let string_index_start = string_ids_start.checked_add(cells.checked_mul(4)?)?; + let style_index_start = string_index_start.checked_add(cells.checked_mul(4)?)?; + let style_dict_start = style_index_start.checked_add(cells.checked_mul(4)?)?; + let cond_matches_start = style_dict_start.checked_add(style_dict.len().checked_mul(4)?)?; + let total_bytes = cond_matches_start.checked_add(cond_matches.len().checked_mul(4)?)?; + + let header = [ + WINDOW_PACKED_MAGIC, + WINDOW_PACKED_VERSION, + WINDOW_PACKED_HEADER_BYTES.try_into().ok()?, + total_bytes.try_into().ok()?, + n_rows.try_into().ok()?, + n_cols.try_into().ok()?, + cells.try_into().ok()?, + style_dict.len().try_into().ok()?, + cond_matches.len().try_into().ok()?, + string_count.try_into().ok()?, + ]; + let mut packed = Vec::with_capacity(total_bytes); + for word in header { + packed.extend_from_slice(&word.to_le_bytes()); + } + packed.extend_from_slice(kind); + packed.resize(numbers_start, 0); + for value in num { + packed.extend_from_slice(&value.to_le_bytes()); + } + for value in string_ids { + packed.extend_from_slice(&value.to_le_bytes()); + } + for value in str_local { + packed.extend_from_slice(&value.to_le_bytes()); + } + for value in style_local { + packed.extend_from_slice(&value.to_le_bytes()); + } + for value in style_dict { + packed.extend_from_slice(&value.to_le_bytes()); + } + for value in cond_matches { + packed.extend_from_slice(&value.to_le_bytes()); + } + debug_assert_eq!(packed.len(), total_bytes); + Some(packed) +} + +fn align_to_8(value: usize) -> Option { + value.checked_add(7).map(|end| end & !7) } #[wasm_bindgen] @@ -440,53 +551,27 @@ impl WindowView { self.n_cols } - /// Consume and return the per-cell tag array: 0 empty, 1 number, 2 string. - #[wasm_bindgen(js_name = takeKinds)] - pub fn take_kinds(&mut self) -> Vec { - std::mem::take(&mut self.kind) + /// Consume the complete fixed-width window payload. The returned + /// `Uint8Array` is copied by wasm-bindgen into JS-owned memory. + #[wasm_bindgen(js_name = takePacked)] + pub fn take_packed(&mut self) -> Vec { + std::mem::take(&mut self.packed) } - /// Consume and return per-cell numeric payloads (valid where kind == 1). - #[wasm_bindgen(js_name = takeNumbers)] - pub fn take_numbers(&mut self) -> Vec { - std::mem::take(&mut self.num) - } - - /// Consume and return per-cell indices into `strings` (string cells only). - #[wasm_bindgen(js_name = takeStringIndex)] - pub fn take_string_index(&mut self) -> Vec { - std::mem::take(&mut self.str_local) - } - - /// Consume and return per-cell GLOBAL string-pool ids; `u32::MAX` means none. - #[wasm_bindgen(js_name = takeStringIds)] - pub fn take_string_ids(&mut self) -> Vec { - std::mem::take(&mut self.string_ids) - } - - /// Consume and return per-cell WINDOW-LOCAL style indices into the dict. - #[wasm_bindgen(js_name = takeStyleIndex)] - pub fn take_style_index(&mut self) -> Vec { - std::mem::take(&mut self.style_local) - } - - /// Consume and return the unique global style-dictionary ids referenced by - /// this window, in local-index order; the host maps each to a `CellStyle`. - #[wasm_bindgen(js_name = takeStyleDict)] - pub fn take_style_dict(&mut self) -> Vec { - std::mem::take(&mut self.style_dict) - } - - /// Consume and return unique strings referenced by this window. + /// Consume formula-error sentinel strings referenced by the packed data. #[wasm_bindgen(js_name = takeStrings)] pub fn take_strings(&mut self) -> Vec { std::mem::take(&mut self.strings) } +} + +#[cfg(test)] +mod tests { + use super::pack_window; - /// Consume and return per-cell conditional-format rule bitmasks; empty - /// when the sheet has no rules. - #[wasm_bindgen(js_name = takeCondMatches)] - pub fn take_cond_matches(&mut self) -> Vec { - std::mem::take(&mut self.cond_matches) + #[test] + fn packed_window_rejects_mismatched_cell_buffers() { + assert!(pack_window(1, 1, &[], &[0.0], &[0], &[0], &[0], &[], &[], 0).is_none()); + assert!(pack_window(1, 1, &[0], &[0.0], &[0], &[0], &[0], &[], &[0, 0], 0).is_none()); } } diff --git a/packages/xlsx/CHANGELOG.md b/packages/xlsx/CHANGELOG.md index c826b867..99da4550 100644 --- a/packages/xlsx/CHANGELOG.md +++ b/packages/xlsx/CHANGELOG.md @@ -1,5 +1,27 @@ # @sheetwrite/xlsx +## 0.4.0 + +### Minor Changes + +- Align the framework adapters and XLSX integration with the coordinated Sheetwrite 0.4.0 release. + +### Patch Changes + +- 55b1f35: Stop exporting implementation-only helpers and types from internal modules, and gate package workspaces against new unused internal exports. +- Updated dependencies [8457eca] +- Updated dependencies [dac694a] +- Updated dependencies [0e09ecc] +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [41f6749] +- Updated dependencies [55b1f35] +- Updated dependencies [b225783] +- Updated dependencies [41f6749] +- Updated dependencies [ce1e404] + - @sheetwrite/core@0.4.0 + ## 0.3.1 ### Patch Changes diff --git a/packages/xlsx/package.json b/packages/xlsx/package.json index 144416ea..6c9e23b4 100644 --- a/packages/xlsx/package.json +++ b/packages/xlsx/package.json @@ -1,6 +1,6 @@ { "name": "@sheetwrite/xlsx", - "version": "0.3.1", + "version": "0.4.0", "type": "module", "description": "Optional XLSX table and workbook backends for Sheetwrite.", "license": "MIT", diff --git a/packages/xlsx/src/opc.ts b/packages/xlsx/src/opc.ts index 66df5af7..b0a2054e 100644 --- a/packages/xlsx/src/opc.ts +++ b/packages/xlsx/src/opc.ts @@ -49,7 +49,7 @@ function relationshipSourcePart(part: string): string { return `${match[1] ?? ""}${match[2]}`; } -export function resolveRelationshipTarget(sourcePart: string, rawTarget: string): string { +function resolveRelationshipTarget(sourcePart: string, rawTarget: string): string { let decoded: string; try { decoded = decodeURIComponent(rawTarget); diff --git a/packages/xlsx/src/xml.ts b/packages/xlsx/src/xml.ts index b3b00d9c..e85010ad 100644 --- a/packages/xlsx/src/xml.ts +++ b/packages/xlsx/src/xml.ts @@ -40,7 +40,7 @@ function utf8Length(value: string): number { return bytes; } -export function decodeXmlEntities(value: string, part: string): string { +function decodeXmlEntities(value: string, part: string): string { if (!value.includes("&")) return value; let output = ""; let cursor = 0; diff --git a/packages/xlsx/test/raw-opc.ts b/packages/xlsx/test/raw-opc.ts index 4f0da882..62f945ec 100644 --- a/packages/xlsx/test/raw-opc.ts +++ b/packages/xlsx/test/raw-opc.ts @@ -8,7 +8,7 @@ export const TRANSITIONAL_REL = "http://schemas.openxmlformats.org/officeDocument/2006/relationships"; export const STRICT_REL = "http://purl.oclc.org/ooxml/officeDocument/relationships"; -export interface RawSheet { +interface RawSheet { name?: string; xml: string; state?: "visible" | "hidden" | "veryHidden"; diff --git a/scripts/changeset-ci.ts b/scripts/changeset-ci.ts index 35d4d22c..f5515177 100644 --- a/scripts/changeset-ci.ts +++ b/scripts/changeset-ci.ts @@ -5,6 +5,7 @@ import { PUBLISHABLE_PACKAGE_ORDER } from "./workspace-tooling.js"; const STABLE_VERSION = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/; const REPOSITORY_ROOT = resolve(import.meta.dir, ".."); const PACKAGE_SIZE_HISTORY_PREFIX = "automation/package-size-history-"; +const RELEASE_VERSION_PREFIX = "release/version-"; const REQUIRED_PACKAGE_SIZE_HISTORY_FILES = new Set([ "docs/src/content/docs/guides/performance-resources.md", "scripts/size-history.json", @@ -32,7 +33,11 @@ export function changesetComparisonFromBaseRef( } export function releaseVersionFromHeadRef(headRef: string | undefined): string | undefined { - return headRef !== undefined && STABLE_VERSION.test(headRef) ? headRef : undefined; + if (headRef === undefined) return undefined; + const candidate = headRef.startsWith(RELEASE_VERSION_PREFIX) + ? headRef.slice(RELEASE_VERSION_PREFIX.length) + : headRef; + return STABLE_VERSION.test(candidate) ? candidate : undefined; } export function packageSizeHistoryVersionFromHeadRef( headRef: string | undefined, diff --git a/scripts/check-import-cycles.ts b/scripts/check-import-cycles.ts index c8daaf38..9a5482ef 100644 --- a/scripts/check-import-cycles.ts +++ b/scripts/check-import-cycles.ts @@ -37,6 +37,7 @@ const STORE_EDGES: Readonly> = { "../types/store.ts", ], "wasm-contract.ts": [], + "wire-tags.ts": [], "window-reader.ts": [ "../style-dictionary.ts", "../types/cell.ts", @@ -44,6 +45,7 @@ const STORE_EDGES: Readonly> = { "../types/document.ts", "../types/store.ts", "wasm-contract.ts", + "wire-tags.ts", ], }; @@ -177,8 +179,6 @@ export const PUBLIC_TYPE_DOMAINS: Readonly> = { dependencies: ["cell", "coordinates", "document", "transaction"], exports: [ "CellLoadState", - "ClipboardFormulaEntry", - "ClipboardRefEntry", "ClipboardWindowView", "PagedStoreStats", "QueryCapability", @@ -222,7 +222,6 @@ export const PUBLIC_TYPE_DOMAINS: Readonly> = { "Grid", "GridActions", "GridPresentation", - "HyperlinkActivationEvent", "GridConfig", "GridEvents", "GridOptions", diff --git a/scripts/coverage-thresholds.json b/scripts/coverage-thresholds.json index 145f6147..95fa55bc 100644 --- a/scripts/coverage-thresholds.json +++ b/scripts/coverage-thresholds.json @@ -636,10 +636,12 @@ "packages/core/src/store.ts", "packages/core/src/store/data-engine.ts", "packages/core/src/store/mutation-policy.ts", + "packages/core/src/store/paged-dirty-preflight.ts", "packages/core/src/store/ranges.ts", "packages/core/src/store/snapshot-codec.ts", "packages/core/src/store/view-state.ts", - "packages/core/src/store/window-reader.ts" + "packages/core/src/store/window-reader.ts", + "packages/core/src/store/wire-tags.ts" ], "language": "typescript", "tier": "B", diff --git a/scripts/first-paint-evidence.ts b/scripts/first-paint-evidence.ts new file mode 100644 index 00000000..09f76c8a --- /dev/null +++ b/scripts/first-paint-evidence.ts @@ -0,0 +1,330 @@ +import { readFile } from "node:fs/promises"; +import { type BundlerProvenance, SIZE_PROTOCOL_VERSION } from "./size-report.js"; + +export const FIRST_PAINT_BROTLI_GATE_BYTES = 7_680; +export const FIRST_PAINT_PERCENT_GATE = 10; +export const FIRST_PAINT_MIN_ROUNDS = 10; +export const FIRST_PAINT_DEFERRED_MODULE = "@sheetwrite/core/dist/clipboard-controller.js"; + +export interface FirstPaintSizes { + rawBytes: number; + gzipBytes: number; + brotliBytes: number; +} +export interface FirstPaintDelta { + rawBytes: number; + gzipBytes: number; + brotliBytes: number; + brotliPercent: number; +} + +export interface FirstPaintTiming { + samplesMs: number[]; + medianMs: number; + p95Ms: number; +} + +export interface FirstPaintVariant { + initialJavaScript: FirstPaintSizes; + timing: FirstPaintTiming; + checksum: string; +} + +export interface FirstPaintFixtureEvidence { + bundler: "next" | "vite"; + version: string; + provenance: BundlerProvenance; + eagerImports: ["@sheetwrite/core#createGrid", "@sheetwrite/core#initSheetwrite"]; + baseline: FirstPaintVariant; + candidate: FirstPaintVariant & { + deferredChunk: string; + interaction: { + module: typeof FIRST_PAINT_DEFERRED_MODULE; + loaded: true; + successOutcome: "empty"; + errorOutcome: "unsupported"; + rejected: false; + }; + }; + delta: FirstPaintDelta; +} + +export interface FirstPaintEvidence { + schemaVersion: typeof SIZE_PROTOCOL_VERSION; + kind: "first-paint-counterfactual"; + candidate: { + fixtureOnly: true; + shipping: false; + deferredModules: [typeof FIRST_PAINT_DEFERRED_MODULE]; + }; + thresholds: { + brotliBytes: typeof FIRST_PAINT_BROTLI_GATE_BYTES; + percent: typeof FIRST_PAINT_PERCENT_GATE; + timing: "median-and-p95-no-slower"; + }; + fixtures: [FirstPaintFixtureEvidence, FirstPaintFixtureEvidence]; +} + +function record(value: unknown, message: string): Record { + if (value === null || typeof value !== "object" || Array.isArray(value)) throw new Error(message); + return value as Record; +} + +function positiveInteger(value: unknown): value is number { + return Number.isSafeInteger(value) && (value as number) > 0; +} + +function finiteNonNegative(value: unknown): value is number { + return typeof value === "number" && Number.isFinite(value) && value >= 0; +} + +function sizes(value: unknown, label: string, allowZero = false): FirstPaintSizes { + const input = record(value, `${label} sizes are missing`); + for (const field of ["rawBytes", "gzipBytes", "brotliBytes"] as const) { + if ( + !(allowZero + ? Number.isSafeInteger(input[field]) && (input[field] as number) >= 0 + : positiveInteger(input[field])) + ) { + throw new Error(`${label} ${field} is missing or invalid`); + } + } + return input as unknown as FirstPaintSizes; +} + +function signedSizes(value: unknown, label: string): FirstPaintSizes { + const input = record(value, `${label} sizes are missing`); + for (const field of ["rawBytes", "gzipBytes", "brotliBytes"] as const) { + if (!Number.isSafeInteger(input[field])) { + throw new Error(`${label} ${field} is missing or invalid`); + } + } + return input as unknown as FirstPaintSizes; +} + +function percentile(sorted: readonly number[], fraction: number): number { + return sorted[Math.max(0, Math.ceil(sorted.length * fraction) - 1)]!; +} + +function timing(value: unknown, label: string): FirstPaintTiming { + const input = record(value, `${label} timing is missing`); + if ( + !Array.isArray(input.samplesMs) || + input.samplesMs.length < FIRST_PAINT_MIN_ROUNDS || + !input.samplesMs.every(finiteNonNegative) + ) { + throw new Error(`${label} timing requires ${FIRST_PAINT_MIN_ROUNDS} finite samples`); + } + const samplesMs = [...input.samplesMs].sort((left, right) => left - right) as number[]; + const middle = Math.floor(samplesMs.length / 2); + const expectedMedian = + samplesMs.length % 2 === 0 + ? (samplesMs[middle - 1]! + samplesMs[middle]!) / 2 + : samplesMs[middle]!; + const expectedP95 = percentile(samplesMs, 0.95); + if (input.medianMs !== expectedMedian || input.p95Ms !== expectedP95) { + throw new Error(`${label} timing summary does not match retained samples`); + } + return { samplesMs: input.samplesMs as number[], medianMs: expectedMedian, p95Ms: expectedP95 }; +} + +function variant(value: unknown, label: string): FirstPaintVariant { + const input = record(value, `${label} variant is missing`); + if (typeof input.checksum !== "string" || !/^[a-f0-9]{64}$/.test(input.checksum)) { + throw new Error(`${label} checksum is missing or invalid`); + } + return { + initialJavaScript: sizes(input.initialJavaScript, `${label} initial JavaScript`), + timing: timing(input.timing, `${label} first paint`), + checksum: input.checksum, + }; +} + +function provenance(value: unknown, label: string): BundlerProvenance { + const input = record(value, `${label} provenance is missing`); + const minifier = record(input.minifier, `${label} minifier is missing`); + if ( + input.buildMode !== "production" || + input.minified !== true || + typeof minifier.name !== "string" || + minifier.name.length === 0 || + typeof minifier.version !== "string" || + minifier.version.length === 0 || + !Array.isArray(input.externals) || + !input.externals.every((entry) => typeof entry === "string") || + input.target !== "browser" || + input.sourceMaps !== "hidden-external" || + input.attributionMethod !== "source-map-generated-spans-with-explicit-opaque-assets-v2" + ) { + throw new Error(`${label} provenance is incomplete or incomparable`); + } + return input as unknown as BundlerProvenance; +} + +export function validateFirstPaintEvidence(value: unknown): FirstPaintEvidence { + const input = record(value, "First-paint evidence is malformed"); + if ( + input.schemaVersion !== SIZE_PROTOCOL_VERSION || + input.kind !== "first-paint-counterfactual" + ) { + throw new Error("First-paint evidence protocol mismatch"); + } + const candidate = record(input.candidate, "First-paint candidate metadata is missing"); + if ( + candidate.fixtureOnly !== true || + candidate.shipping !== false || + !Array.isArray(candidate.deferredModules) || + candidate.deferredModules.length !== 1 || + candidate.deferredModules[0] !== FIRST_PAINT_DEFERRED_MODULE + ) { + throw new Error("First-paint candidate must be fixture-only and name its deferred module"); + } + const thresholds = record(input.thresholds, "First-paint thresholds are missing"); + if ( + thresholds.brotliBytes !== FIRST_PAINT_BROTLI_GATE_BYTES || + thresholds.percent !== FIRST_PAINT_PERCENT_GATE || + thresholds.timing !== "median-and-p95-no-slower" + ) { + throw new Error("First-paint thresholds do not match the admission contract"); + } + if (!Array.isArray(input.fixtures) || input.fixtures.length !== 2) { + throw new Error("First-paint evidence requires exactly Next.js and Vite fixtures"); + } + const seen = new Set(); + const fixtures = input.fixtures.map((value, index) => { + const fixture = record(value, `First-paint fixture ${index} is malformed`); + if ((fixture.bundler !== "next" && fixture.bundler !== "vite") || seen.has(fixture.bundler)) { + throw new Error("First-paint evidence requires one Next.js and one Vite fixture"); + } + seen.add(fixture.bundler); + if (typeof fixture.version !== "string" || fixture.version.length === 0) { + throw new Error(`${fixture.bundler} version is missing`); + } + const eagerImports = fixture.eagerImports; + if ( + !Array.isArray(eagerImports) || + eagerImports.length !== 2 || + eagerImports[0] !== "@sheetwrite/core#createGrid" || + eagerImports[1] !== "@sheetwrite/core#initSheetwrite" + ) { + throw new Error(`${fixture.bundler} eager surface is not comparable`); + } + const baseline = variant(fixture.baseline, `${fixture.bundler} baseline`); + const candidateInput = record(fixture.candidate, `${fixture.bundler} candidate is missing`); + const candidateVariant = variant(candidateInput, `${fixture.bundler} candidate`); + if (baseline.checksum !== candidateVariant.checksum) { + throw new Error(`${fixture.bundler} candidate first-paint semantics differ from baseline`); + } + if ( + typeof candidateInput.deferredChunk !== "string" || + candidateInput.deferredChunk.length === 0 + ) { + throw new Error(`${fixture.bundler} candidate deferred chunk is missing`); + } + const interaction = record( + candidateInput.interaction, + `${fixture.bundler} interaction evidence is missing`, + ); + if ( + interaction.module !== FIRST_PAINT_DEFERRED_MODULE || + interaction.loaded !== true || + interaction.successOutcome !== "empty" || + interaction.errorOutcome !== "unsupported" || + interaction.rejected !== false + ) { + throw new Error(`${fixture.bundler} interaction loading/error behavior is incomplete`); + } + const deltaInput = record(fixture.delta, `${fixture.bundler} size delta is missing`); + const deltaSizes = signedSizes(deltaInput, `${fixture.bundler} size delta`); + const expectedDelta = { + rawBytes: baseline.initialJavaScript.rawBytes - candidateVariant.initialJavaScript.rawBytes, + gzipBytes: + baseline.initialJavaScript.gzipBytes - candidateVariant.initialJavaScript.gzipBytes, + brotliBytes: + baseline.initialJavaScript.brotliBytes - candidateVariant.initialJavaScript.brotliBytes, + }; + if ( + deltaSizes.rawBytes !== expectedDelta.rawBytes || + deltaSizes.gzipBytes !== expectedDelta.gzipBytes || + deltaSizes.brotliBytes !== expectedDelta.brotliBytes || + typeof deltaInput.brotliPercent !== "number" || + deltaInput.brotliPercent !== + (expectedDelta.brotliBytes / baseline.initialJavaScript.brotliBytes) * 100 + ) { + throw new Error(`${fixture.bundler} recorded size delta is inconsistent`); + } + return { + bundler: fixture.bundler, + version: fixture.version, + provenance: provenance(fixture.provenance, fixture.bundler), + eagerImports, + baseline, + candidate: { + ...candidateVariant, + deferredChunk: candidateInput.deferredChunk, + interaction, + }, + delta: { ...deltaSizes, brotliPercent: deltaInput.brotliPercent }, + } as FirstPaintFixtureEvidence; + }); + if (!seen.has("next") || !seen.has("vite")) { + throw new Error("First-paint evidence requires one Next.js and one Vite fixture"); + } + const next = fixtures.find((fixture) => fixture.bundler === "next")!; + const vite = fixtures.find((fixture) => fixture.bundler === "vite")!; + for (const field of [ + "buildMode", + "minified", + "target", + "sourceMaps", + "attributionMethod", + ] as const) { + if (next.provenance[field] !== vite.provenance[field]) { + throw new Error(`First-paint fixture provenance differs in ${field}`); + } + } + if (JSON.stringify(next.provenance.externals) !== JSON.stringify(vite.provenance.externals)) { + throw new Error("First-paint fixture provenance uses incomparable externals"); + } + return { + schemaVersion: SIZE_PROTOCOL_VERSION, + kind: "first-paint-counterfactual", + candidate: candidate as unknown as FirstPaintEvidence["candidate"], + thresholds: thresholds as unknown as FirstPaintEvidence["thresholds"], + fixtures: fixtures as FirstPaintEvidence["fixtures"], + }; +} + +export function firstPaintGate(value: unknown): { admitted: boolean; reasons: string[] } { + const evidence = validateFirstPaintEvidence(value); + const reasons: string[] = []; + for (const fixture of evidence.fixtures) { + if (fixture.delta.brotliBytes < FIRST_PAINT_BROTLI_GATE_BYTES) { + reasons.push( + `${fixture.bundler} Brotli reduction is below ${FIRST_PAINT_BROTLI_GATE_BYTES} bytes`, + ); + } + if (fixture.delta.brotliPercent < FIRST_PAINT_PERCENT_GATE) { + reasons.push(`${fixture.bundler} Brotli reduction is below ${FIRST_PAINT_PERCENT_GATE}%`); + } + if (fixture.candidate.timing.medianMs > fixture.baseline.timing.medianMs) { + reasons.push(`${fixture.bundler} candidate median first paint is slower`); + } + if (fixture.candidate.timing.p95Ms > fixture.baseline.timing.p95Ms) { + reasons.push(`${fixture.bundler} candidate p95 first paint is slower`); + } + } + return { admitted: reasons.length === 0, reasons }; +} + +if (import.meta.main) { + if (process.argv[2] !== "check" || process.argv[3] === undefined) { + throw new Error("Usage: bun scripts/first-paint-evidence.ts check "); + } + const evidence = JSON.parse(await readFile(process.argv[3], "utf8")) as unknown; + const decision = firstPaintGate(evidence); + if (!decision.admitted) { + throw new Error(`First-paint candidate rejected:\n${decision.reasons.join("\n")}`); + } + console.log("First-paint candidate passed size and timing gates"); +} diff --git a/scripts/public-api-baseline.json b/scripts/public-api-baseline.json index f1e946da..be595b29 100644 --- a/scripts/public-api-baseline.json +++ b/scripts/public-api-baseline.json @@ -1,5 +1,540 @@ { - "schemaVersion": 1, + "schemaVersion": 2, "manifestFormatVersion": 2, - "sha256": "9cc3fe343edebb80e5eb431b802655092d5ccd02d94ab4dfab76127c312d6192" + "sha256": "53bac9252e6664e7ab153847ffbce109758fb41df63876a219847cd332528114", + "intentionalExports": [ + { + "package": "@sheetwrite/core", + "entryPoint": ".", + "exports": [ + "AggregateOp", + "ApplyTransactionResult", + "BoundaryDirection", + "BoundaryOperationStats", + "BoundaryTransferKind", + "CellAddress", + "CellAlign", + "CellBlock", + "CellBorder", + "CellBorders", + "CellChange", + "CellEditor", + "CellEditorContext", + "CellEditorInstance", + "CellEditorNavigation", + "CellEditorRect", + "CellFormat", + "CellHyperlink", + "CellInputSnapshot", + "CellLoadState", + "CellNote", + "CellPaintContext", + "CellRenderer", + "CellScalar", + "CellStyle", + "CellValue", + "ChangeEvent", + "Column", + "ColumnFilter", + "ColumnarData", + "CommentAdapter", + "CommentAnchor", + "CommentAuthorRef", + "CommentCoordinator", + "CommentCoordinatorEvent", + "CommentCoordinatorOptions", + "CommentListResult", + "CommentMessage", + "CommentMutation", + "CommentMutationRequest", + "CommentMutationResponse", + "CommentThread", + "CommitReason", + "ConditionalFormatPredicate", + "ConditionalFormatRule", + "ContextMenuActionName", + "ContextMenuContext", + "ContextMenuItem", + "ContextMenuItems", + "DEFAULT_DELIMITED_TEXT_RESOURCE_LIMITS", + "DEFAULT_SNAPSHOT_RESOURCE_LIMITS", + "DEFAULT_SYNC_COORDINATOR_LIMITS", + "DEFAULT_THEME", + "DEFAULT_TRANSACTION_RESOURCE_LIMITS", + "DEFAULT_WORKBOOK_TABLE_RESOURCE_LIMITS", + "DEFAULT_XLSX_RESOURCE_LIMITS", + "DataCell", + "DataSource", + "DataSourceCapabilities", + "DataSourceColumnBand", + "DataSourcePage", + "DataSourceRequest", + "DataSourceStorageOptions", + "DataValidationComparison", + "DataValidationCondition", + "DataValidationRule", + "DelimitedTextOperation", + "DelimitedTextOptions", + "DelimitedTextOptionsError", + "DelimitedTextResourceError", + "DelimitedTextResourceLimits", + "DocumentOp", + "DocumentRebaseResult", + "DocumentValidationError", + "DocumentValidationResult", + "Grid", + "GridActions", + "GridCommandName", + "GridCommandState", + "GridCommandStateChangeEvent", + "GridConfig", + "GridEvents", + "GridOptions", + "GridPresentation", + "GridTransaction", + "HighlightRange", + "HyperlinkTarget", + "IncompleteDataError", + "LegacyRowLoader", + "LegacyRowPage", + "MAX_CONDITIONAL_FORMAT_FORMULA_LENGTH", + "MAX_CONDITIONAL_FORMAT_RULES", + "MAX_HYPERLINKS_PER_SHEET", + "MAX_HYPERLINK_DISPLAY_LENGTH", + "MAX_HYPERLINK_ID_LENGTH", + "MAX_HYPERLINK_TARGET_LENGTH", + "MemoryPersistenceAdapter", + "MergeRange", + "MutationIssue", + "MutationPolicyMode", + "NamedRangeSnapshot", + "OperationSource", + "PackedCellBlock", + "PagedStoreStats", + "PendingCommit", + "PendingCommitLoadOptions", + "PendingCommitStorage", + "PersistenceAdapter", + "PersistenceCommitRequest", + "PersistenceCommitResponse", + "PersistenceError", + "PersistenceErrorCode", + "PresenceActor", + "PresenceCoordinator", + "PresenceCoordinatorEvent", + "PresenceCoordinatorOptions", + "PresenceMessage", + "PresenceOverlay", + "PresencePrivacyOptions", + "PresenceTransport", + "ProtectedRange", + "ProtectionRequest", + "ProtectionResolver", + "QueryCapability", + "REF_CYCLE", + "RUNTIME_RESOURCE_SCHEMA_VERSION", + "Range", + "RebaseConflict", + "RebaseConflictCode", + "RemoteOperationOptions", + "RemoteOperationSource", + "ReplaceResult", + "ResolvedCell", + "ResolvedHyperlinkTarget", + "ResourceOwnerBytes", + "RevisionAdapter", + "RevisionCoordinator", + "RevisionCoordinatorEvent", + "RevisionCoordinatorOptions", + "RevisionRestoreRequest", + "RevisionRestoreResponse", + "RevisionSummary", + "RowBridge", + "RowBridgeCell", + "RowBridgeClearDelta", + "RowBridgeColumn", + "RowBridgeDelta", + "RowBridgeFillDelta", + "RowBridgeHandler", + "RowBridgeHostActionDelta", + "RowBridgeId", + "RowBridgeInsertContext", + "RowBridgeMetadataDelta", + "RowBridgeOptions", + "RowBridgePasteDelta", + "RowBridgeProjection", + "RowBridgeRangeDelta", + "RowBridgeReconciliationInput", + "RowBridgeReconciliationStatus", + "RowBridgeRowStructureDelta", + "RowBridgeTransaction", + "RowBridgeUnprojectableDelta", + "RowData", + "RowGroup", + "RowMetadata", + "RuntimeMemoryObservation", + "RuntimeResourceOperation", + "RuntimeResourcePhase", + "RuntimeResourcePhaseDelta", + "RuntimeResourceSnapshot", + "SHEETWRITE_CLIPBOARD_MIME", + "SHEETWRITE_ERROR_CODES", + "SHEETWRITE_ERROR_OPERATIONS", + "STORE_MEMORY_HASH_ESTIMATE_VERSION", + "STORE_MEMORY_PROTOCOL_VERSION", + "SearchOptions", + "SearchResult", + "Selection", + "Sheet", + "SheetId", + "SheetLifecycleIssueCode", + "SheetLifecycleResult", + "SheetNameIssueCode", + "SheetNameValidationResult", + "SheetSnapshot", + "SheetVisibility", + "SheetwriteError", + "SheetwriteErrorCode", + "SheetwriteErrorContext", + "SheetwriteErrorContextValue", + "SheetwriteErrorEnvelope", + "SheetwriteErrorOperation", + "SheetwriteErrorOptions", + "SheetwriteStore", + "SheetwriteStoreOptions", + "SnapshotCell", + "SnapshotGridOptions", + "SnapshotResourceError", + "SnapshotResourceLimits", + "SnapshotStorageMode", + "SnapshotValidationError", + "SnapshotValidationOptions", + "SortKey", + "Store", + "StoreMemoryBreakdown", + "SyncActivityState", + "SyncConnectionState", + "SyncCoordinator", + "SyncCoordinatorEvent", + "SyncCoordinatorLimits", + "SyncCoordinatorOptions", + "SyncMutationRecord", + "SyncMutationStatus", + "SyncPendingCapacityError", + "SyncPendingCapacityState", + "SyncPendingQueueLimits", + "SyncProtocolError", + "SyncProtocolErrorCode", + "SyncStateSnapshot", + "SyncVersionGapRequest", + "Theme", + "ToolbarActionName", + "ToolbarIcon", + "ToolbarItem", + "Transaction", + "TransactionApplicationOptions", + "TransactionResourceLimits", + "TransactionResourceValidationResult", + "TransientResourcePeak", + "ValidationPolicy", + "VersionedCommentEvent", + "VersionedOperation", + "VisibleWindowView", + "WASM_MEMORY_OWNERS", + "WORKBOOK_SCHEMA_VERSION", + "WasmMemoryOwner", + "Workbook", + "WorkbookSnapshot", + "WorkbookTable", + "WorkbookTableColumn", + "WorkbookTableId", + "WorkbookTableNameIssueCode", + "WorkbookTableNameValidationResult", + "WorkbookTablePatch", + "WorkbookTableResourceLimits", + "WorkbookTableStyle", + "WorkbookTableUnsupportedFeature", + "XlsxResourceError", + "XlsxResourceLimits", + "XlsxTableExportBackend", + "XlsxTableImportBackend", + "XlsxWorkbookBackend", + "XlsxWorkbookOptions", + "XlsxWorkbookWarning", + "assertRuntimeResourceSnapshot", + "assertWorkbookTables", + "cellA1", + "cellScalarToText", + "colToA1", + "createGrid", + "createGridFromSnapshot", + "createRowBridge", + "createRuntimeResourceSnapshot", + "dateToSerial", + "decodeStoreMemoryStats", + "diffRuntimeResourcePhases", + "documentOpTarget", + "downloadBytes", + "emptyStoreMemoryStats", + "formatNumber", + "fromCsv", + "fromXlsxTable", + "fromXlsxWorkbook", + "hyperlinkAt", + "initSheetwrite", + "isSafeExternalHyperlink", + "isSheetwriteError", + "isSheetwriteReady", + "isValidCellHyperlink", + "isValidHyperlinkId", + "labelToCol", + "legacyFullWidthDataSource", + "observeRuntimeMemory", + "parseCellInput", + "parseCellLiteralInput", + "parseCsv", + "parseCurrencyInput", + "parseDateInput", + "rangeA1", + "rebaseDocumentOperations", + "resolveHyperlinkTarget", + "resolveThemeFromCss", + "resolveTransactionResourceLimits", + "rowBridgeTransactionId", + "sanitizeCellHyperlink", + "sanitizeHyperlinkStyle", + "serialToDate", + "setXlsxTableExportBackend", + "setXlsxTableImportBackend", + "setXlsxWorkbookBackend", + "sheetNameKey", + "shiftA1Refs", + "toCsv", + "toTsv", + "toXlsxTable", + "toXlsxWorkbook", + "validWorkbookTable", + "validateSheetName", + "validateTransactionResources", + "validateWorkbookSnapshot", + "validateWorkbookTableName", + "workbookTableNameKey" + ] + }, + { + "package": "@sheetwrite/core", + "entryPoint": "./adapter", + "exports": [ + "DEFAULT_SIMPLE_COLUMN_WIDTH", + "GRID_OPTION_POLICY", + "GridAdapterEventHandlers", + "GridController", + "GridControllerHandlers", + "GridReadyEvent", + "GridReadyReason", + "GridResetReason", + "GridSizeProps", + "OptionalGridSizeProps", + "RowBridge", + "RowBridgeCell", + "RowBridgeClearDelta", + "RowBridgeColumn", + "RowBridgeDelta", + "RowBridgeFillDelta", + "RowBridgeHandler", + "RowBridgeHostActionDelta", + "RowBridgeId", + "RowBridgeInsertContext", + "RowBridgeMetadataDelta", + "RowBridgeOptions", + "RowBridgePasteDelta", + "RowBridgeProjection", + "RowBridgeRangeDelta", + "RowBridgeReconciliationInput", + "RowBridgeReconciliationStatus", + "RowBridgeRowStructureDelta", + "RowBridgeTransaction", + "RowBridgeUnprojectableDelta", + "SHEETWRITE_ERROR_CODES", + "SHEETWRITE_ERROR_OPERATIONS", + "SheetwriteError", + "SheetwriteErrorCode", + "SheetwriteErrorContext", + "SheetwriteErrorEnvelope", + "SheetwriteErrorOperation", + "SheetwriteInitializationProps", + "SimpleColumn", + "SimpleGridInput", + "SimpleSheetwriteOptions", + "applyChangedLiveGridOptions", + "createGridController", + "createRowBridge", + "createSimpleGridInput", + "createSimpleRowBridge", + "extractGridOptions", + "getGridResetReason", + "gridSizeStyle", + "isSheetwriteError", + "rowBridgeTransactionId" + ] + }, + { + "package": "@sheetwrite/core", + "entryPoint": "./browser", + "exports": [ + "IndexedDbPendingCommitStorage", + "IndexedDbPendingCommitStorageError", + "IndexedDbPendingCommitStorageErrorCode", + "IndexedDbPendingCommitStorageOptions" + ] + }, + { + "package": "@sheetwrite/core", + "entryPoint": "./shell", + "exports": [ + "FormulaBarOptions", + "FormulaBarPiece", + "NameBoxOptions", + "ShellPiece", + "SpreadsheetShell", + "SpreadsheetShellOptions", + "ToolbarOptions", + "createFormulaBar", + "createNameBox", + "createSelectionStatus", + "createSpreadsheetShell", + "createToolbar", + "describeSelection" + ] + }, + { + "package": "@sheetwrite/core", + "entryPoint": "./testing", + "exports": [ + "CanvasTestStubOptions", + "RecordingContext2D", + "installCanvasTestStubs", + "installDatasourceClockForTest" + ] + }, + { + "package": "@sheetwrite/core", + "entryPoint": "./worker", + "exports": ["WorkerAcknowledgement", "createWorkerMessageHandler"] + }, + { + "package": "@sheetwrite/react", + "entryPoint": ".", + "exports": [ + "CellEditor", + "CellEditorContext", + "CellEditorInstance", + "CellEditorNavigation", + "CellScalar", + "Grid", + "GridCommandName", + "GridCommandState", + "GridReadyEvent", + "RowBridge", + "RowBridgeDelta", + "RowBridgeHandler", + "RowBridgeId", + "RowBridgeProjection", + "Sheetwrite", + "SheetwriteGrid", + "SheetwriteGridProps", + "SheetwriteProps", + "SimpleColumn" + ] + }, + { + "package": "@sheetwrite/svelte", + "entryPoint": ".", + "exports": [ + "CellEditor", + "CellEditorContext", + "CellEditorInstance", + "CellEditorNavigation", + "CellScalar", + "Grid", + "GridCommandName", + "GridCommandState", + "GridReadyEvent", + "RowBridge", + "RowBridgeDelta", + "RowBridgeHandler", + "RowBridgeId", + "RowBridgeProjection", + "Sheetwrite", + "SheetwriteGrid", + "SheetwriteGridProps", + "SheetwriteProps", + "SimpleColumn" + ] + }, + { + "package": "@sheetwrite/vue", + "entryPoint": ".", + "exports": [ + "CellEditor", + "CellEditorContext", + "CellEditorInstance", + "CellEditorNavigation", + "CellScalar", + "Grid", + "GridCommandName", + "GridCommandState", + "GridReadyEvent", + "RowBridge", + "RowBridgeDelta", + "RowBridgeHandler", + "RowBridgeId", + "RowBridgeProjection", + "Sheetwrite", + "SheetwriteComponentConstructor", + "SheetwriteGrid", + "SheetwriteGridEmits", + "SheetwriteGridExpose", + "SheetwriteGridProps", + "SheetwriteProps", + "SimpleColumn" + ] + }, + { + "package": "@sheetwrite/wasm", + "entryPoint": ".", + "exports": [ + "CellOut", + "CellStore", + "DistinctColumn", + "InitInput", + "InitOutput", + "RangeSnapshot", + "SourceSnapshot", + "SyncInitInput", + "WindowView", + "initSync", + "isLoaded", + "load" + ] + }, + { + "package": "@sheetwrite/xlsx", + "entryPoint": ".", + "exports": [ + "XlsxModel", + "XlsxModelCell", + "buildXlsxModel", + "registerXlsxBackends", + "sheetwriteTableExportBackend", + "sheetwriteTableImportBackend", + "sheetwriteWorkbookBackend" + ] + }, + { + "package": "@sheetwrite/xlsx", + "entryPoint": "./register", + "exports": ["registerXlsxBackends"] + } + ] } diff --git a/scripts/public-api.test.ts b/scripts/public-api.test.ts index 91ff748d..c7fc9782 100644 --- a/scripts/public-api.test.ts +++ b/scripts/public-api.test.ts @@ -5,6 +5,9 @@ import { join } from "node:path"; import { analyzePublicApi, checkManifestBaseline, + findUnusedPublicExports, + type PublicApiBaseline, + type PublicApiManifest, publicApiDigest, readPublicApiBaseline, validateManifest, @@ -81,6 +84,42 @@ async function fixture( return root; } +function baselineArtifact(manifest: PublicApiManifest): PublicApiBaseline { + return { + schemaVersion: 2, + manifestFormatVersion: manifest.formatVersion, + sha256: publicApiDigest(manifest), + intentionalExports: manifest.packages + .flatMap((pkg) => + pkg.entryPoints + .filter((entry) => entry.kind === "typescript") + .map((entry) => ({ + package: pkg.name, + entryPoint: entry.subpath, + exports: entry.exports.map((apiExport) => apiExport.name).sort(), + })), + ) + .sort((left, right) => + `${left.package}\0${left.entryPoint}`.localeCompare( + `${right.package}\0${right.entryPoint}`, + ), + ), + }; +} + +async function installBaseline( + root: string, + manifest: PublicApiManifest, +): Promise { + const baseline = baselineArtifact(manifest); + await mkdir(join(root, "scripts"), { recursive: true }); + await writeFile( + join(root, "scripts/public-api-baseline.json"), + `${JSON.stringify(baseline, null, 2)}\n`, + ); + return baseline; +} + afterEach(async () => { await Promise.all(roots.splice(0).map((root) => rm(root, { force: true, recursive: true }))); }); @@ -319,12 +358,14 @@ export class LegacyFailure extends RangeError {}`, ); }); - it("writes and reads an explicit baseline artifact", async () => { + it("writes and reads an explicit baseline artifact without changing reviewed intent", async () => { const root = await fixture(); const { manifest } = await analyzePublicApi(root); + const initial = await installBaseline(root, manifest); const written = await writePublicApiBaseline(root, manifest); expect(written.sha256).toBe(publicApiDigest(manifest)); + expect(written.intentionalExports).toEqual(initial.intentionalExports); expect(await readPublicApiBaseline(root)).toEqual(written); expect( JSON.parse(await readFile(join(root, "scripts/public-api-baseline.json"), "utf8")), @@ -336,13 +377,77 @@ export class LegacyFailure extends RangeError {}`, await mkdir(join(root, "scripts"), { recursive: true }); await writeFile( join(root, "scripts/public-api-baseline.json"), - JSON.stringify({ schemaVersion: 1, manifestFormatVersion: 2, sha256: "not-a-digest" }), + JSON.stringify({ + schemaVersion: 2, + manifestFormatVersion: 2, + sha256: "not-a-digest", + intentionalExports: [], + }), ); await expect(readPublicApiBaseline(root)).rejects.toThrow( "Invalid public API baseline artifact", ); }); + it("rejects an unreachable export outside the reviewed public contract", async () => { + const root = await fixture(); + const initial = await analyzePublicApi(root); + const baseline = await installBaseline(root, initial.manifest); + await writeFile( + join(root, "packages/core/index.d.ts"), + `${canonicalDeclarations}\n/** Accidental fixture export. */\nexport const Unreachable = true;\n`, + ); + const changed = await analyzePublicApi(root); + const refreshed = await writePublicApiBaseline(root, changed.manifest); + + expect(refreshed.intentionalExports).toEqual(baseline.intentionalExports); + + expect(await findUnusedPublicExports(root, changed.manifest, refreshed)).toContainEqual( + expect.objectContaining({ + code: "unused-export", + package: "@sheetwrite/core", + entryPoint: ".", + symbol: "Unreachable", + }), + ); + }); + + it("accepts reviewed exports and only referenced members of a workspace namespace", async () => { + const root = await fixture(); + const initial = await analyzePublicApi(root); + const baseline = baselineArtifact(initial.manifest); + expect(await findUnusedPublicExports(root, initial.manifest, baseline)).toEqual([]); + + await writeFile( + join(root, "packages/core/index.d.ts"), + `${canonicalDeclarations} +/** Consumed fixture export. */ +export const Consumed = true; +/** Unreachable fixture export. */ +export const StillUnreachable = true; +`, + ); + const consumerRoot = join(root, "packages/consumer"); + await mkdir(consumerRoot, { recursive: true }); + await writeFile( + join(consumerRoot, "package.json"), + JSON.stringify({ name: "@fixture/consumer", private: true }), + ); + await writeFile( + join(consumerRoot, "index.ts"), + 'import * as Core from "@sheetwrite/core";\nexport const observed = Core.Consumed;\n', + ); + const changed = await analyzePublicApi(root); + + const issues = await findUnusedPublicExports(root, changed.manifest, baseline); + expect(issues).not.toContainEqual( + expect.objectContaining({ code: "unused-export", symbol: "Consumed" }), + ); + expect(issues).toContainEqual( + expect.objectContaining({ code: "unused-export", symbol: "StillUnreachable" }), + ); + }); + it("detects optionality, union, generic-constraint, export-name, and JSDoc drift", async () => { const baselineRoot = await fixture(); const baseline = await analyzePublicApi(baselineRoot); diff --git a/scripts/public-api.ts b/scripts/public-api.ts index bde710e4..c9f1427b 100644 --- a/scripts/public-api.ts +++ b/scripts/public-api.ts @@ -1,5 +1,5 @@ import { createHash } from "node:crypto"; -import { access, mkdir, readdir, readFile, rename, writeFile } from "node:fs/promises"; +import { access, readdir, readFile, rename, writeFile } from "node:fs/promises"; import { join, relative, resolve, sep } from "node:path"; import * as ts from "typescript-compiler"; import { PUBLIC_TYPE_DOMAINS } from "./check-import-cycles.js"; @@ -54,6 +54,7 @@ export interface ApiIssue { | "unclassified-entry" | "wrong-owner" | "unstable-error-contract" + | "unused-export" | "unresolved-entry"; message: string; package?: string; @@ -809,13 +810,36 @@ export function validateManifest(value: unknown): ApiIssue[] { } return []; } +export interface PublicApiBaselineEntry { + package: string; + entryPoint: string; + exports: string[]; +} + export interface PublicApiBaseline { - schemaVersion: 1; + schemaVersion: 2; manifestFormatVersion: PublicApiManifest["formatVersion"]; sha256: string; + /** Reviewed public intent; baseline refreshes preserve this list rather than accepting new exports. */ + intentionalExports: PublicApiBaselineEntry[]; } const PUBLIC_API_BASELINE_PATH = "scripts/public-api-baseline.json"; +const SOURCE_FILE_PATTERN = /\.(?:[cm]?[jt]sx?|svelte|vue)$/; +const IGNORED_SOURCE_DIRECTORIES: Readonly> = { + ".astro": true, + ".git": true, + ".vercel": true, + coverage: true, + dist: true, + node_modules: true, + pkg: true, + target: true, +}; + +function publicApiEntryKey(packageName: string, entryPoint: string): string { + return `${packageName}\0${entryPoint}`; +} export function publicApiDigest(manifest: PublicApiManifest): string { return createHash("sha256").update(JSON.stringify(manifest)).digest("hex"); @@ -826,19 +850,47 @@ export function parsePublicApiBaseline(value: unknown): PublicApiBaseline { typeof value !== "object" || value === null || !("schemaVersion" in value) || - value.schemaVersion !== 1 || + value.schemaVersion !== 2 || !("manifestFormatVersion" in value) || value.manifestFormatVersion !== 2 || !("sha256" in value) || typeof value.sha256 !== "string" || - !/^[0-9a-f]{64}$/.test(value.sha256) + !/^[0-9a-f]{64}$/.test(value.sha256) || + !("intentionalExports" in value) || + !Array.isArray(value.intentionalExports) ) { throw new TypeError("Invalid public API baseline artifact"); } + const entries: PublicApiBaselineEntry[] = []; + for (const entry of value.intentionalExports) { + if ( + typeof entry !== "object" || + entry === null || + !("package" in entry) || + typeof entry.package !== "string" || + !("entryPoint" in entry) || + typeof entry.entryPoint !== "string" || + !("exports" in entry) || + !Array.isArray(entry.exports) || + entry.exports.some((name: unknown) => typeof name !== "string") + ) { + throw new TypeError("Invalid public API baseline artifact"); + } + const names = entry.exports as string[]; + if (new Set(names).size !== names.length || names.join("\0") !== [...names].sort().join("\0")) { + throw new TypeError("Invalid public API baseline artifact"); + } + entries.push({ package: entry.package, entryPoint: entry.entryPoint, exports: [...names] }); + } + const keys = entries.map((entry) => publicApiEntryKey(entry.package, entry.entryPoint)); + if (new Set(keys).size !== keys.length || keys.join("\0") !== [...keys].sort().join("\0")) { + throw new TypeError("Invalid public API baseline artifact"); + } return { - schemaVersion: 1, + schemaVersion: 2, manifestFormatVersion: 2, sha256: value.sha256, + intentionalExports: entries, }; } @@ -851,14 +903,14 @@ export async function writePublicApiBaseline( repositoryRoot: string, manifest: PublicApiManifest, ): Promise { + const previous = await readPublicApiBaseline(repositoryRoot); const baseline: PublicApiBaseline = { - schemaVersion: 1, + ...previous, manifestFormatVersion: manifest.formatVersion, sha256: publicApiDigest(manifest), }; const path = join(repositoryRoot, PUBLIC_API_BASELINE_PATH); const temporaryPath = `${path}.tmp`; - await mkdir(join(path, ".."), { recursive: true }); await writeFile(temporaryPath, `${JSON.stringify(baseline, null, 2)}\n`); await rename(temporaryPath, path); return baseline; @@ -876,6 +928,246 @@ export function checkManifestBaseline(manifest: PublicApiManifest, expected: str ]; } +async function sourceFiles(directory: string): Promise { + const files: string[] = []; + const entries = await readdir(directory, { withFileTypes: true }); + entries.sort((left, right) => left.name.localeCompare(right.name)); + for (const entry of entries) { + if (entry.isDirectory() && IGNORED_SOURCE_DIRECTORIES[entry.name] === true) continue; + const path = join(directory, entry.name); + if (entry.isDirectory()) files.push(...(await sourceFiles(path))); + else if (entry.isFile() && SOURCE_FILE_PATTERN.test(entry.name)) files.push(path); + } + return files; +} + +function scriptFragments(path: string, source: string): string[] { + if (!/\.(?:svelte|vue)$/.test(path)) return [source]; + return [...source.matchAll(/]*>([\s\S]*?)<\/script>/gi)].map( + (match) => match[1] ?? "", + ); +} + +function collectImportedNames( + sourceFile: ts.SourceFile, + specifiers: ReadonlyMap, + consumed: Map>, +): void { + const record = (specifier: string, name: string): void => { + const key = specifiers.get(specifier); + if (key === undefined) return; + const names = consumed.get(key) ?? new Set(); + names.add(name); + consumed.set(key, names); + }; + const namespaceSpecifiers = new Map(); + const dynamicImportSpecifier = (expression: ts.Expression): string | undefined => { + let current = expression; + while (ts.isAwaitExpression(current) || ts.isParenthesizedExpression(current)) { + current = current.expression; + } + if (!ts.isCallExpression(current) || current.expression.kind !== ts.SyntaxKind.ImportKeyword) { + return undefined; + } + const argument = current.arguments[0]; + return current.arguments.length === 1 && argument !== undefined && ts.isStringLiteral(argument) + ? argument.text + : undefined; + }; + const visit = (node: ts.Node): void => { + if ( + ts.isImportDeclaration(node) && + ts.isStringLiteral(node.moduleSpecifier) && + node.importClause !== undefined + ) { + const specifier = node.moduleSpecifier.text; + if (node.importClause.name !== undefined) record(specifier, "default"); + const bindings = node.importClause.namedBindings; + if (bindings !== undefined) { + if (ts.isNamespaceImport(bindings)) { + namespaceSpecifiers.set(bindings.name.text, specifier); + } else { + for (const element of bindings.elements) { + record(specifier, element.propertyName?.text ?? element.name.text); + } + } + } + } else if ( + ts.isExportDeclaration(node) && + node.moduleSpecifier !== undefined && + ts.isStringLiteral(node.moduleSpecifier) && + node.exportClause !== undefined && + ts.isNamedExports(node.exportClause) + ) { + const specifier = node.moduleSpecifier.text; + for (const element of node.exportClause.elements) { + record(specifier, element.propertyName?.text ?? element.name.text); + } + } else if (ts.isVariableDeclaration(node) && node.initializer !== undefined) { + const dynamicSpecifier = dynamicImportSpecifier(node.initializer); + if (dynamicSpecifier !== undefined) { + if (ts.isIdentifier(node.name)) { + namespaceSpecifiers.set(node.name.text, dynamicSpecifier); + } else if (ts.isObjectBindingPattern(node.name)) { + for (const element of node.name.elements) { + const importedName = element.propertyName ?? element.name; + if (ts.isIdentifier(importedName) || ts.isStringLiteral(importedName)) { + record(dynamicSpecifier, importedName.text); + } + } + } + } else if ( + ts.isObjectBindingPattern(node.name) && + ts.isIdentifier(node.initializer) && + namespaceSpecifiers.has(node.initializer.text) + ) { + const specifier = namespaceSpecifiers.get(node.initializer.text) ?? ""; + for (const element of node.name.elements) { + const importedName = element.propertyName ?? element.name; + if (ts.isIdentifier(importedName) || ts.isStringLiteral(importedName)) { + record(specifier, importedName.text); + } + } + } + } else if (ts.isPropertyAccessExpression(node)) { + const dynamicSpecifier = dynamicImportSpecifier(node.expression); + if (dynamicSpecifier !== undefined) { + record(dynamicSpecifier, node.name.text); + } else if (ts.isIdentifier(node.expression)) { + record(namespaceSpecifiers.get(node.expression.text) ?? "", node.name.text); + } + } else if ( + ts.isElementAccessExpression(node) && + node.argumentExpression !== undefined && + ts.isStringLiteral(node.argumentExpression) + ) { + const dynamicSpecifier = dynamicImportSpecifier(node.expression); + if (dynamicSpecifier !== undefined) { + record(dynamicSpecifier, node.argumentExpression.text); + } else if (ts.isIdentifier(node.expression)) { + record(namespaceSpecifiers.get(node.expression.text) ?? "", node.argumentExpression.text); + } + } else if ( + ts.isQualifiedName(node) && + ts.isIdentifier(node.left) && + namespaceSpecifiers.has(node.left.text) + ) { + record(namespaceSpecifiers.get(node.left.text) ?? "", node.right.text); + } else if ( + ts.isImportTypeNode(node) && + ts.isLiteralTypeNode(node.argument) && + ts.isStringLiteral(node.argument.literal) && + node.qualifier !== undefined + ) { + record(node.argument.literal.text, node.qualifier.getText(sourceFile).split(".")[0] ?? ""); + } + ts.forEachChild(node, visit); + }; + visit(sourceFile); +} + +async function crossWorkspaceConsumers( + repositoryRoot: string, + manifest: PublicApiManifest, +): Promise>> { + const packageRoots = await packageDirectories(repositoryRoot); + const packageWorkspaces = await Promise.all( + packageRoots.map(async (root) => ({ + root, + manifest: await readJson(join(root, "package.json")), + })), + ); + const owningRoots = new Map( + packageWorkspaces + .filter( + (workspace): workspace is { root: string; manifest: PackageJson & { name: string } } => + workspace.manifest.name !== undefined, + ) + .map((workspace) => [workspace.manifest.name, workspace.root]), + ); + const explicitConsumerRoots = await Promise.all( + ["bench", "docs", "scripts", "test"].map(async (directory) => { + const path = join(repositoryRoot, directory); + return (await exists(path)) ? path : undefined; + }), + ); + const consumerRoots = [...new Set([...packageRoots, ...explicitConsumerRoots])].filter( + (root): root is string => root !== undefined, + ); + const consumed = new Map>(); + for (const consumerRoot of consumerRoots) { + const specifiers = new Map(); + for (const pkg of manifest.packages) { + if (owningRoots.get(pkg.name) === consumerRoot) continue; + for (const entry of pkg.entryPoints) { + if (entry.kind !== "typescript") continue; + specifiers.set( + entry.subpath === "." ? pkg.name : `${pkg.name}/${entry.subpath.slice(2)}`, + publicApiEntryKey(pkg.name, entry.subpath), + ); + } + } + if (specifiers.size === 0) continue; + for (const path of await sourceFiles(consumerRoot)) { + const source = await readFile(path, "utf8"); + for (const fragment of scriptFragments(path, source)) { + const sourceFile = ts.createSourceFile( + path, + fragment, + ts.ScriptTarget.Latest, + true, + ts.ScriptKind.TSX, + ); + collectImportedNames(sourceFile, specifiers, consumed); + } + } + } + return consumed; +} + +export async function findUnusedPublicExports( + repositoryRoot: string, + manifest: PublicApiManifest, + baseline: PublicApiBaseline, +): Promise { + const intended = new Map( + baseline.intentionalExports.map((entry) => [ + publicApiEntryKey(entry.package, entry.entryPoint), + new Set(entry.exports), + ]), + ); + const consumed = await crossWorkspaceConsumers(repositoryRoot, manifest); + const issues: ApiIssue[] = []; + for (const pkg of manifest.packages) { + for (const entry of pkg.entryPoints) { + if (entry.kind !== "typescript") continue; + const key = publicApiEntryKey(pkg.name, entry.subpath); + const intentionalNames = intended.get(key); + const consumedNames = consumed.get(key); + for (const apiExport of entry.exports) { + if ( + intentionalNames?.has(apiExport.name) === true || + consumedNames?.has(apiExport.name) === true + ) { + continue; + } + issues.push({ + code: "unused-export", + message: `${pkg.name} ${entry.subpath} exports ${apiExport.name} without an intentional public contract or cross-workspace consumer`, + package: pkg.name, + entryPoint: entry.subpath, + symbol: apiExport.name, + }); + } + } + } + return issues.sort((left, right) => + [left.package ?? "", left.entryPoint ?? "", left.symbol ?? ""] + .join("\0") + .localeCompare([right.package ?? "", right.entryPoint ?? "", right.symbol ?? ""].join("\0")), + ); +} + export async function analyzePublicApi(repositoryRoot: string): Promise<{ manifest: PublicApiManifest; issues: ApiIssue[]; @@ -976,8 +1268,10 @@ function formatIssues(issues: readonly ApiIssue[]): string { if (import.meta.main) { const mode = process.argv[2]; const repositoryRoot = resolve(process.argv[3] ?? join(import.meta.dir, "..")); - if (mode !== "report" && mode !== "check" && mode !== "baseline") { - throw new Error("Usage: bun scripts/public-api.ts [repository-root]"); + if (mode !== "report" && mode !== "check" && mode !== "baseline" && mode !== "unused") { + throw new Error( + "Usage: bun scripts/public-api.ts [repository-root]", + ); } const result = await analyzePublicApi(repositoryRoot); if (mode === "report") { @@ -993,13 +1287,30 @@ if (import.meta.main) { } process.stdout.write(`${JSON.stringify(result.manifest, null, 2)}\n`); } else if (mode === "baseline") { - if (result.issues.length > 0) throw new Error(formatIssues(result.issues)); + const existingBaseline = await readPublicApiBaseline(repositoryRoot); + const unusedIssues = await findUnusedPublicExports( + repositoryRoot, + result.manifest, + existingBaseline, + ); + const issues = [...result.issues, ...unusedIssues]; + if (issues.length > 0) throw new Error(formatIssues(issues)); const baseline = await writePublicApiBaseline(repositoryRoot, result.manifest); console.log(`Public API baseline updated: ${baseline.sha256}`); } else { const baseline = await readPublicApiBaseline(repositoryRoot); - const issues = [...result.issues, ...checkManifestBaseline(result.manifest, baseline.sha256)]; + const unusedIssues = await findUnusedPublicExports(repositoryRoot, result.manifest, baseline); + const issues = + mode === "unused" + ? [...result.issues, ...unusedIssues] + : [ + ...result.issues, + ...unusedIssues, + ...checkManifestBaseline(result.manifest, baseline.sha256), + ]; if (issues.length > 0) throw new Error(formatIssues(issues)); - console.log("Public API policy check passed"); + console.log( + mode === "unused" ? "Unused public export check passed" : "Public API policy check passed", + ); } } diff --git a/scripts/release-artifacts.test.ts b/scripts/release-artifacts.test.ts index 95a65ca2..c603dd9e 100644 --- a/scripts/release-artifacts.test.ts +++ b/scripts/release-artifacts.test.ts @@ -27,7 +27,7 @@ import { WASM_TARGET, } from "./workspace-tooling.js"; -const TEST_RELEASE_VERSION = "0.3.1"; +const TEST_RELEASE_VERSION = "0.4.0"; const temporaryRoots: string[] = []; @@ -97,7 +97,6 @@ const REQUIRED_FILES: Readonly> = { "LICENSE", "dist/index.d.ts", "dist/index.js", - "dist/index.js.map", "dist/worker.d.ts", "dist/worker.js", "styles.css", @@ -187,6 +186,22 @@ describe("canonical release artifacts", () => { expect(() => validateReleaseManifest(manifest())).not.toThrow(); }); + it("rejects source maps in the published core package", () => { + const base = manifest(); + const packages = base.packages.map((artifact) => + artifact.name === "@sheetwrite/core" + ? { + ...artifact, + fileCount: 2, + files: ["dist/index.js.map", "package.json"], + } + : artifact, + ); + expect(() => validateReleaseManifest({ ...base, packages })).toThrow( + "@sheetwrite/core published files must exclude source maps", + ); + }); + it("rewrites workspace ranges and enforces release cleanliness", () => { const versions = new Map([ ["@sheetwrite/core", "0.1.0"], diff --git a/scripts/release-artifacts.ts b/scripts/release-artifacts.ts index cfec3728..d79b9fa1 100644 --- a/scripts/release-artifacts.ts +++ b/scripts/release-artifacts.ts @@ -1,7 +1,7 @@ import { createHash } from "node:crypto"; import { cp, mkdir, mkdtemp, readdir, readFile, rm, stat, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; -import { basename, join, resolve } from "node:path"; +import { basename, dirname, join, resolve } from "node:path"; import { WASM_PACK_VERSION } from "./install-wasm-pack.js"; import { BUN_VERSION, @@ -18,6 +18,14 @@ export const RELEASE_ARTIFACT_SCHEMA_VERSION = 2; export const RELEASE_ARTIFACT_MANIFEST = "release-artifacts.json"; export const RELEASE_BUILD_COMMAND = "bun run build:packages"; +export function assertPublishedFilePolicy(packageName: string, files: readonly string[]): void { + if (packageName !== "@sheetwrite/core") return; + const sourceMap = files.find((path) => path.toLowerCase().endsWith(".map")); + if (sourceMap !== undefined) { + throw new Error(`${packageName} published files must exclude source maps; found ${sourceMap}`); + } +} + interface PackageManifest { readonly name: string; readonly version: string; @@ -322,6 +330,7 @@ export function validateReleaseManifest(manifest: ReleaseArtifactManifest): void if ([...artifact.files].sort().some((path, fileIndex) => path !== artifact.files[fileIndex])) { throw new Error(`${artifact.name} packed file list must be sorted`); } + assertPublishedFilePolicy(artifact.name, artifact.files); assertString(artifact.shasum, `${artifact.name} shasum`); if (!/^[0-9a-f]{40}$/.test(artifact.shasum)) { throw new Error(`${artifact.name} shasum must be SHA-1 hex`); @@ -373,7 +382,6 @@ const REQUIRED_PACKAGE_FILES: Readonly> = { "LICENSE", "dist/index.d.ts", "dist/index.js", - "dist/index.js.map", "dist/worker.d.ts", "dist/worker.js", "styles.css", @@ -415,6 +423,15 @@ function packageTargets(manifest: PackageManifest): string[] { return [...targets]; } +function manifestEntryExists(entry: string, files: readonly string[]): boolean { + const path = entry.replace(/^\.\//, "").replace(/\/$/, ""); + if (/[*?[\]{}]/u.test(path)) { + const glob = new Bun.Glob(path); + return files.some((file) => glob.match(file)); + } + return files.includes(path) || files.some((file) => file.startsWith(`${path}/`)); +} + function validatePackedManifest( artifact: ReleasePackageArtifact, manifest: PackageManifest, @@ -452,8 +469,7 @@ function validatePackedManifest( } } for (const declared of manifest.files ?? []) { - const path = declared.replace(/^\.\//, "").replace(/\/$/, ""); - if (!files.has(path) && !artifact.files.some((file) => file.startsWith(`${path}/`))) { + if (!manifestEntryExists(declared, artifact.files)) { throw new Error( `${artifact.name} declared file target does not exist with exact case: ${declared}`, ); @@ -576,6 +592,31 @@ interface StagedPackage { readonly internalDependencies: Readonly>; } +async function copyManifestEntry( + sourceRoot: string, + packageRoot: string, + entry: string, +): Promise { + if (!/[*?[\]{}]/u.test(entry)) { + await cp(join(sourceRoot, entry), join(packageRoot, entry), { recursive: true }); + return; + } + const matches = Array.from( + new Bun.Glob(entry).scanSync({ + cwd: sourceRoot, + dot: true, + onlyFiles: true, + followSymlinks: false, + }), + ); + if (matches.length === 0) throw new Error(`Package file pattern matched nothing: ${entry}`); + for (const path of matches) { + const target = join(packageRoot, path); + await mkdir(dirname(target), { recursive: true }); + await cp(join(sourceRoot, path), target); + } +} + async function stagePackage( source: { readonly directory: string; readonly manifest: PackageManifest }, stageRoot: string, @@ -585,7 +626,7 @@ async function stagePackage( await mkdir(target, { recursive: true }); const paths = new Set([...(source.manifest.files ?? []), "LICENSE", "README.md"]); for (const path of paths) { - await cp(join(source.directory, path), join(target, path), { recursive: true }); + await copyManifestEntry(source.directory, target, path); } const scripts = { ...source.manifest.scripts }; delete scripts.prepublishOnly; diff --git a/scripts/release-verify.test.ts b/scripts/release-verify.test.ts index 1da083dd..17f9824e 100644 --- a/scripts/release-verify.test.ts +++ b/scripts/release-verify.test.ts @@ -1,4 +1,5 @@ -import { describe, expect, it } from "bun:test"; +import { afterEach, describe, expect, it } from "bun:test"; +import { rmSync } from "node:fs"; import { resolve } from "node:path"; import { type ReleaseCommandContext, @@ -8,6 +9,10 @@ import { const repositoryRoot = resolve(import.meta.dir, ".."); +afterEach(() => { + rmSync(resolve(import.meta.dir, "size-report-failure.json"), { force: true }); +}); + function guardedRun(command: readonly [string, ...string[]]): { readonly exitCode: number; readonly output: string; diff --git a/scripts/size-report-failure.json b/scripts/size-report-failure.json deleted file mode 100644 index e4552f60..00000000 --- a/scripts/size-report-failure.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "schemaVersion": 1, - "tool": { - "name": "sheetwrite-delivery-size", - "version": "1.0.0" - }, - "error": "Artifact-only size reporting requires --artifacts", - "reproduction": "bun run size:report" -} diff --git a/scripts/size-report.json b/scripts/size-report.json index 63c37678..f5eaabba 100644 --- a/scripts/size-report.json +++ b/scripts/size-report.json @@ -1,14 +1,14 @@ { - "schemaVersion": 1, - "protocolVersion": 1, + "schemaVersion": 2, + "protocolVersion": 2, "tool": { "name": "sheetwrite-delivery-size", - "version": "1.0.0" + "version": "2.0.0" }, "meta": { - "commit": "dfc77cbbc29eb32e2fb0d8ffd01c438199223afe", + "commit": "55b1f35c65970352095be655f990d84617bf2e0e", "dirty": true, - "timestamp": "2026-07-22T20:13:22.607Z" + "timestamp": "2026-08-14T08:04:39.995Z" }, "toolchain": { "bun": "1.3.14", @@ -19,6 +19,162 @@ "webpack": "5.102.1" }, "metrics": { + "attribution.next.collaboration.brotliBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "next:@sheetwrite/core/collaboration" + }, + "attribution.next.collaboration.rawBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "next:@sheetwrite/core/collaboration" + }, + "attribution.next.coreFirstPaint.rootBarrelRawBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "next:@sheetwrite/core" + }, + "attribution.next.coreFirstPaint.sheetwriteRawBytes": { + "actual": 433004, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "next:@sheetwrite/core" + }, + "attribution.next.persistence.brotliBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "next:@sheetwrite/core/persistence" + }, + "attribution.next.persistence.rawBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "next:@sheetwrite/core/persistence" + }, + "attribution.next.rebase.brotliBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "next:@sheetwrite/core/rebase" + }, + "attribution.next.rebase.rawBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "next:@sheetwrite/core/rebase" + }, + "attribution.next.sync.brotliBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "next:@sheetwrite/core/sync" + }, + "attribution.next.sync.rawBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "next:@sheetwrite/core/sync" + }, + "attribution.vite.collaboration.brotliBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "vite:@sheetwrite/core/collaboration" + }, + "attribution.vite.collaboration.rawBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "vite:@sheetwrite/core/collaboration" + }, + "attribution.vite.coreFirstPaint.rootBarrelRawBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "vite:@sheetwrite/core" + }, + "attribution.vite.coreFirstPaint.sheetwriteRawBytes": { + "actual": 440639, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "vite:@sheetwrite/core" + }, + "attribution.vite.persistence.brotliBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "vite:@sheetwrite/core/persistence" + }, + "attribution.vite.persistence.rawBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "vite:@sheetwrite/core/persistence" + }, + "attribution.vite.rebase.brotliBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "vite:@sheetwrite/core/rebase" + }, + "attribution.vite.rebase.rawBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "vite:@sheetwrite/core/rebase" + }, + "attribution.vite.sync.brotliBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "vite:@sheetwrite/core/sync" + }, + "attribution.vite.sync.rawBytes": { + "actual": 0, + "unit": "bytes", + "category": "browser-module-attribution", + "owner": "vite:@sheetwrite/core/sync" + }, + "bundler.next.coreAttributionInitial.css.brotliBytes": { + "actual": 2177, + "unit": "bytes", + "category": "browser-css", + "owner": "next:core-attribution-initial" + }, + "bundler.next.coreAttributionInitial.css.gzipBytes": { + "actual": 2508, + "unit": "bytes", + "category": "browser-css", + "owner": "next:core-attribution-initial" + }, + "bundler.next.coreAttributionInitial.css.rawBytes": { + "actual": 12299, + "unit": "bytes", + "category": "browser-css", + "owner": "next:core-attribution-initial" + }, + "bundler.next.coreAttributionInitial.javascript.brotliBytes": { + "actual": 224390, + "unit": "bytes", + "category": "browser-javascript", + "owner": "next:core-attribution-initial" + }, + "bundler.next.coreAttributionInitial.javascript.gzipBytes": { + "actual": 268252, + "unit": "bytes", + "category": "browser-javascript", + "owner": "next:core-attribution-initial" + }, + "bundler.next.coreAttributionInitial.javascript.rawBytes": { + "actual": 917158, + "unit": "bytes", + "category": "browser-javascript", + "owner": "next:core-attribution-initial" + }, "bundler.next.coreInitial.css.brotliBytes": { "actual": 2177, "unit": "bytes", @@ -38,55 +194,55 @@ "owner": "next:core-initial" }, "bundler.next.coreInitial.javascript.brotliBytes": { - "actual": 227446, + "actual": 229373, "unit": "bytes", "category": "browser-javascript", "owner": "next:core-initial" }, "bundler.next.coreInitial.javascript.gzipBytes": { - "actual": 272020, + "actual": 273747, "unit": "bytes", "category": "browser-javascript", "owner": "next:core-initial" }, "bundler.next.coreInitial.javascript.rawBytes": { - "actual": 928973, + "actual": 934706, "unit": "bytes", "category": "browser-javascript", "owner": "next:core-initial" }, "bundler.next.coreInitial.wasm.brotliBytes": { - "actual": 208727, + "actual": 212236, "unit": "bytes", "category": "browser-wasm", "owner": "next:core-initial" }, "bundler.next.coreInitial.wasm.gzipBytes": { - "actual": 268969, + "actual": 274036, "unit": "bytes", "category": "browser-wasm", "owner": "next:core-initial" }, "bundler.next.coreInitial.wasm.rawBytes": { - "actual": 683490, + "actual": 695109, "unit": "bytes", "category": "browser-wasm", "owner": "next:core-initial" }, "bundler.next.nextAsync.javascript.brotliBytes": { - "actual": 83659, + "actual": 83789, "unit": "bytes", "category": "browser-javascript", "owner": "next:next-async" }, "bundler.next.nextAsync.javascript.gzipBytes": { - "actual": 97989, + "actual": 98155, "unit": "bytes", "category": "browser-javascript", "owner": "next:next-async" }, "bundler.next.nextAsync.javascript.rawBytes": { - "actual": 317664, + "actual": 318007, "unit": "bytes", "category": "browser-javascript", "owner": "next:next-async" @@ -110,37 +266,37 @@ "owner": "vite:core-initial" }, "bundler.vite.coreInitial.javascript.brotliBytes": { - "actual": 109149, + "actual": 110480, "unit": "bytes", "category": "browser-javascript", "owner": "vite:core-initial" }, "bundler.vite.coreInitial.javascript.gzipBytes": { - "actual": 129129, + "actual": 130722, "unit": "bytes", "category": "browser-javascript", "owner": "vite:core-initial" }, "bundler.vite.coreInitial.javascript.rawBytes": { - "actual": 458055, + "actual": 463910, "unit": "bytes", "category": "browser-javascript", "owner": "vite:core-initial" }, "bundler.vite.coreInitial.wasm.brotliBytes": { - "actual": 208727, + "actual": 212236, "unit": "bytes", "category": "browser-wasm", "owner": "vite:core-initial" }, "bundler.vite.coreInitial.wasm.gzipBytes": { - "actual": 268969, + "actual": 274036, "unit": "bytes", "category": "browser-wasm", "owner": "vite:core-initial" }, "bundler.vite.coreInitial.wasm.rawBytes": { - "actual": 683490, + "actual": 695109, "unit": "bytes", "category": "browser-wasm", "owner": "vite:core-initial" @@ -164,37 +320,37 @@ "owner": "vite:react-initial" }, "bundler.vite.reactInitial.javascript.brotliBytes": { - "actual": 165099, + "actual": 166506, "unit": "bytes", "category": "browser-javascript", "owner": "vite:react-initial" }, "bundler.vite.reactInitial.javascript.gzipBytes": { - "actual": 193830, + "actual": 195424, "unit": "bytes", "category": "browser-javascript", "owner": "vite:react-initial" }, "bundler.vite.reactInitial.javascript.rawBytes": { - "actual": 662027, + "actual": 667882, "unit": "bytes", "category": "browser-javascript", "owner": "vite:react-initial" }, "bundler.vite.reactInitial.wasm.brotliBytes": { - "actual": 208727, + "actual": 212236, "unit": "bytes", "category": "browser-wasm", "owner": "vite:react-initial" }, "bundler.vite.reactInitial.wasm.gzipBytes": { - "actual": 268969, + "actual": 274036, "unit": "bytes", "category": "browser-wasm", "owner": "vite:react-initial" }, "bundler.vite.reactInitial.wasm.rawBytes": { - "actual": 683490, + "actual": 695109, "unit": "bytes", "category": "browser-wasm", "owner": "vite:react-initial" @@ -218,37 +374,37 @@ "owner": "vite:svelte-initial" }, "bundler.vite.svelteInitial.javascript.brotliBytes": { - "actual": 127928, + "actual": 129261, "unit": "bytes", "category": "browser-javascript", "owner": "vite:svelte-initial" }, "bundler.vite.svelteInitial.javascript.gzipBytes": { - "actual": 149801, + "actual": 151395, "unit": "bytes", "category": "browser-javascript", "owner": "vite:svelte-initial" }, "bundler.vite.svelteInitial.javascript.rawBytes": { - "actual": 513635, + "actual": 519490, "unit": "bytes", "category": "browser-javascript", "owner": "vite:svelte-initial" }, "bundler.vite.svelteInitial.wasm.brotliBytes": { - "actual": 208727, + "actual": 212236, "unit": "bytes", "category": "browser-wasm", "owner": "vite:svelte-initial" }, "bundler.vite.svelteInitial.wasm.gzipBytes": { - "actual": 268969, + "actual": 274036, "unit": "bytes", "category": "browser-wasm", "owner": "vite:svelte-initial" }, "bundler.vite.svelteInitial.wasm.rawBytes": { - "actual": 683490, + "actual": 695109, "unit": "bytes", "category": "browser-wasm", "owner": "vite:svelte-initial" @@ -272,67 +428,67 @@ "owner": "vite:vue-initial" }, "bundler.vite.vueInitial.javascript.brotliBytes": { - "actual": 136703, + "actual": 138080, "unit": "bytes", "category": "browser-javascript", "owner": "vite:vue-initial" }, "bundler.vite.vueInitial.javascript.gzipBytes": { - "actual": 159552, + "actual": 161146, "unit": "bytes", "category": "browser-javascript", "owner": "vite:vue-initial" }, "bundler.vite.vueInitial.javascript.rawBytes": { - "actual": 537956, + "actual": 543811, "unit": "bytes", "category": "browser-javascript", "owner": "vite:vue-initial" }, "bundler.vite.vueInitial.wasm.brotliBytes": { - "actual": 208727, + "actual": 212236, "unit": "bytes", "category": "browser-wasm", "owner": "vite:vue-initial" }, "bundler.vite.vueInitial.wasm.gzipBytes": { - "actual": 268969, + "actual": 274036, "unit": "bytes", "category": "browser-wasm", "owner": "vite:vue-initial" }, "bundler.vite.vueInitial.wasm.rawBytes": { - "actual": 683490, + "actual": 695109, "unit": "bytes", "category": "browser-wasm", "owner": "vite:vue-initial" }, "bundler.vite.workerAsync.javascript.brotliBytes": { - "actual": 8606, + "actual": 8825, "unit": "bytes", "category": "browser-javascript", "owner": "vite:worker-async" }, "bundler.vite.workerAsync.javascript.gzipBytes": { - "actual": 9469, + "actual": 9763, "unit": "bytes", "category": "browser-javascript", "owner": "vite:worker-async" }, "bundler.vite.workerAsync.javascript.rawBytes": { - "actual": 26822, + "actual": 27656, "unit": "bytes", "category": "browser-javascript", "owner": "vite:worker-async" }, "bundler.vite.workerLoaderInitial.javascript.brotliBytes": { - "actual": 441, + "actual": 465, "unit": "bytes", "category": "browser-javascript", "owner": "vite:worker-loader-initial" }, "bundler.vite.workerLoaderInitial.javascript.gzipBytes": { - "actual": 556, + "actual": 553, "unit": "bytes", "category": "browser-javascript", "owner": "vite:worker-loader-initial" @@ -344,7 +500,7 @@ "owner": "vite:worker-loader-initial" }, "bundler.vite.xlsxAsync.javascript.brotliBytes": { - "actual": 32620, + "actual": 32602, "unit": "bytes", "category": "browser-javascript", "owner": "vite:xlsx-async" @@ -362,13 +518,13 @@ "owner": "vite:xlsx-async" }, "bundler.vite.xlsxLoaderInitial.javascript.brotliBytes": { - "actual": 1066, + "actual": 1072, "unit": "bytes", "category": "browser-javascript", "owner": "vite:xlsx-loader-initial" }, "bundler.vite.xlsxLoaderInitial.javascript.gzipBytes": { - "actual": 1280, + "actual": 1278, "unit": "bytes", "category": "browser-javascript", "owner": "vite:xlsx-loader-initial" @@ -380,61 +536,61 @@ "owner": "vite:xlsx-loader-initial" }, "bundler.webpack.coreInitial.javascript.brotliBytes": { - "actual": 6765, + "actual": 6640, "unit": "bytes", "category": "browser-javascript", "owner": "webpack:core-initial" }, "bundler.webpack.coreInitial.javascript.gzipBytes": { - "actual": 7734, + "actual": 7593, "unit": "bytes", "category": "browser-javascript", "owner": "webpack:core-initial" }, "bundler.webpack.coreInitial.javascript.rawBytes": { - "actual": 29855, + "actual": 28818, "unit": "bytes", "category": "browser-javascript", "owner": "webpack:core-initial" }, "bundler.webpack.coreInitial.wasm.brotliBytes": { - "actual": 208727, + "actual": 212236, "unit": "bytes", "category": "browser-wasm", "owner": "webpack:core-initial" }, "bundler.webpack.coreInitial.wasm.gzipBytes": { - "actual": 268969, + "actual": 274036, "unit": "bytes", "category": "browser-wasm", "owner": "webpack:core-initial" }, "bundler.webpack.coreInitial.wasm.rawBytes": { - "actual": 683490, + "actual": 695109, "unit": "bytes", "category": "browser-wasm", "owner": "webpack:core-initial" }, "bundler.webpack.workerAsync.javascript.brotliBytes": { - "actual": 6781, + "actual": 6909, "unit": "bytes", "category": "browser-javascript", "owner": "webpack:worker-async" }, "bundler.webpack.workerAsync.javascript.gzipBytes": { - "actual": 7466, + "actual": 7608, "unit": "bytes", "category": "browser-javascript", "owner": "webpack:worker-async" }, "bundler.webpack.workerAsync.javascript.rawBytes": { - "actual": 19245, + "actual": 19513, "unit": "bytes", "category": "browser-javascript", "owner": "webpack:worker-async" }, "closure.core-xlsx.logicalBytes": { - "actual": 4887429, + "actual": 3539982, "unit": "bytes", "category": "install-closure", "owner": "core-xlsx" @@ -446,7 +602,7 @@ "owner": "core-xlsx" }, "closure.core.logicalBytes": { - "actual": 3650816, + "actual": 2303686, "unit": "bytes", "category": "install-closure", "owner": "core" @@ -464,7 +620,7 @@ "owner": "core" }, "closure.react.logicalBytes": { - "actual": 3855099, + "actual": 2508008, "unit": "bytes", "category": "install-closure", "owner": "react" @@ -482,7 +638,7 @@ "owner": "react" }, "closure.svelte.logicalBytes": { - "actual": 8704597, + "actual": 7357506, "unit": "bytes", "category": "install-closure", "owner": "svelte" @@ -500,7 +656,7 @@ "owner": "svelte" }, "closure.vue.logicalBytes": { - "actual": 20545448, + "actual": 19198357, "unit": "bytes", "category": "install-closure", "owner": "vue" @@ -556,390 +712,390 @@ "package.@sheetwrite/core.cssBytes": { "actual": 19374, "unit": "bytes", - "category": "package-css", + "category": "package-unpacked-css", "owner": "@sheetwrite/core" }, "package.@sheetwrite/core.declarationsBytes": { - "actual": 312860, + "actual": 314567, "unit": "bytes", - "category": "package-declarations", + "category": "package-unpacked-declarations", "owner": "@sheetwrite/core" }, "package.@sheetwrite/core.fileCount": { - "actual": 335, + "actual": 174, "unit": "count", - "category": "package", + "category": "package-files", "owner": "@sheetwrite/core" }, "package.@sheetwrite/core.mapsBytes": { - "actual": 1371090, + "actual": 0, "unit": "bytes", - "category": "package-maps", + "category": "package-unpacked-maps", "owner": "@sheetwrite/core" }, "package.@sheetwrite/core.metadataBytes": { - "actual": 5096, + "actual": 5165, "unit": "bytes", - "category": "package-metadata", + "category": "package-unpacked-metadata", "owner": "@sheetwrite/core" }, "package.@sheetwrite/core.runtimeJsBytes": { - "actual": 1136966, + "actual": 1152347, "unit": "bytes", - "category": "package-runtime-js", + "category": "package-unpacked-runtime-js", "owner": "@sheetwrite/core" }, "package.@sheetwrite/core.runtimeSourceBytes": { "actual": 0, "unit": "bytes", - "category": "package-runtime-source", + "category": "package-unpacked-runtime-source", "owner": "@sheetwrite/core" }, "package.@sheetwrite/core.tarballBytes": { - "actual": 529490, + "actual": 309413, "unit": "bytes", - "category": "package", + "category": "package-tarball", "owner": "@sheetwrite/core" }, "package.@sheetwrite/core.unpackedBytes": { - "actual": 2845386, + "actual": 1491453, "unit": "bytes", - "category": "package", + "category": "package-unpacked", "owner": "@sheetwrite/core" }, "package.@sheetwrite/core.wasmBytes": { "actual": 0, "unit": "bytes", - "category": "package-wasm", + "category": "package-unpacked-wasm", "owner": "@sheetwrite/core" }, "package.@sheetwrite/react.cssBytes": { "actual": 39, "unit": "bytes", - "category": "package-css", + "category": "package-unpacked-css", "owner": "@sheetwrite/react" }, "package.@sheetwrite/react.declarationsBytes": { "actual": 4910, "unit": "bytes", - "category": "package-declarations", + "category": "package-unpacked-declarations", "owner": "@sheetwrite/react" }, "package.@sheetwrite/react.fileCount": { "actual": 8, "unit": "count", - "category": "package", + "category": "package-files", "owner": "@sheetwrite/react" }, "package.@sheetwrite/react.mapsBytes": { "actual": 11885, "unit": "bytes", - "category": "package-maps", + "category": "package-unpacked-maps", "owner": "@sheetwrite/react" }, "package.@sheetwrite/react.metadataBytes": { - "actual": 5243, + "actual": 5282, "unit": "bytes", - "category": "package-metadata", + "category": "package-unpacked-metadata", "owner": "@sheetwrite/react" }, "package.@sheetwrite/react.runtimeJsBytes": { "actual": 10602, "unit": "bytes", - "category": "package-runtime-js", + "category": "package-unpacked-runtime-js", "owner": "@sheetwrite/react" }, "package.@sheetwrite/react.runtimeSourceBytes": { "actual": 0, "unit": "bytes", - "category": "package-runtime-source", + "category": "package-unpacked-runtime-source", "owner": "@sheetwrite/react" }, "package.@sheetwrite/react.tarballBytes": { - "actual": 9399, + "actual": 9412, "unit": "bytes", - "category": "package", + "category": "package-tarball", "owner": "@sheetwrite/react" }, "package.@sheetwrite/react.unpackedBytes": { - "actual": 32679, + "actual": 32718, "unit": "bytes", - "category": "package", + "category": "package-unpacked", "owner": "@sheetwrite/react" }, "package.@sheetwrite/react.wasmBytes": { "actual": 0, "unit": "bytes", - "category": "package-wasm", + "category": "package-unpacked-wasm", "owner": "@sheetwrite/react" }, "package.@sheetwrite/svelte.cssBytes": { "actual": 39, "unit": "bytes", - "category": "package-css", + "category": "package-unpacked-css", "owner": "@sheetwrite/svelte" }, "package.@sheetwrite/svelte.declarationsBytes": { "actual": 823, "unit": "bytes", - "category": "package-declarations", + "category": "package-unpacked-declarations", "owner": "@sheetwrite/svelte" }, "package.@sheetwrite/svelte.fileCount": { "actual": 10, "unit": "count", - "category": "package", + "category": "package-files", "owner": "@sheetwrite/svelte" }, "package.@sheetwrite/svelte.mapsBytes": { "actual": 0, "unit": "bytes", - "category": "package-maps", + "category": "package-unpacked-maps", "owner": "@sheetwrite/svelte" }, "package.@sheetwrite/svelte.metadataBytes": { - "actual": 4572, + "actual": 4611, "unit": "bytes", - "category": "package-metadata", + "category": "package-unpacked-metadata", "owner": "@sheetwrite/svelte" }, "package.@sheetwrite/svelte.runtimeJsBytes": { "actual": 0, "unit": "bytes", - "category": "package-runtime-js", + "category": "package-unpacked-runtime-js", "owner": "@sheetwrite/svelte" }, "package.@sheetwrite/svelte.runtimeSourceBytes": { "actual": 13485, "unit": "bytes", - "category": "package-runtime-source", + "category": "package-unpacked-runtime-source", "owner": "@sheetwrite/svelte" }, "package.@sheetwrite/svelte.tarballBytes": { - "actual": 6354, + "actual": 6364, "unit": "bytes", - "category": "package", + "category": "package-tarball", "owner": "@sheetwrite/svelte" }, "package.@sheetwrite/svelte.unpackedBytes": { - "actual": 18919, + "actual": 18958, "unit": "bytes", - "category": "package", + "category": "package-unpacked", "owner": "@sheetwrite/svelte" }, "package.@sheetwrite/svelte.wasmBytes": { "actual": 0, "unit": "bytes", - "category": "package-wasm", + "category": "package-unpacked-wasm", "owner": "@sheetwrite/svelte" }, "package.@sheetwrite/vue.cssBytes": { "actual": 39, "unit": "bytes", - "category": "package-css", + "category": "package-unpacked-css", "owner": "@sheetwrite/vue" }, "package.@sheetwrite/vue.declarationsBytes": { "actual": 7122, "unit": "bytes", - "category": "package-declarations", + "category": "package-unpacked-declarations", "owner": "@sheetwrite/vue" }, "package.@sheetwrite/vue.fileCount": { "actual": 8, "unit": "count", - "category": "package", + "category": "package-files", "owner": "@sheetwrite/vue" }, "package.@sheetwrite/vue.mapsBytes": { "actual": 14086, "unit": "bytes", - "category": "package-maps", + "category": "package-unpacked-maps", "owner": "@sheetwrite/vue" }, "package.@sheetwrite/vue.metadataBytes": { - "actual": 4788, + "actual": 4827, "unit": "bytes", - "category": "package-metadata", + "category": "package-unpacked-metadata", "owner": "@sheetwrite/vue" }, "package.@sheetwrite/vue.runtimeJsBytes": { "actual": 10543, "unit": "bytes", - "category": "package-runtime-js", + "category": "package-unpacked-runtime-js", "owner": "@sheetwrite/vue" }, "package.@sheetwrite/vue.runtimeSourceBytes": { "actual": 0, "unit": "bytes", - "category": "package-runtime-source", + "category": "package-unpacked-runtime-source", "owner": "@sheetwrite/vue" }, "package.@sheetwrite/vue.tarballBytes": { - "actual": 10354, + "actual": 10369, "unit": "bytes", - "category": "package", + "category": "package-tarball", "owner": "@sheetwrite/vue" }, "package.@sheetwrite/vue.unpackedBytes": { - "actual": 36578, + "actual": 36617, "unit": "bytes", - "category": "package", + "category": "package-unpacked", "owner": "@sheetwrite/vue" }, "package.@sheetwrite/vue.wasmBytes": { "actual": 0, "unit": "bytes", - "category": "package-wasm", + "category": "package-unpacked-wasm", "owner": "@sheetwrite/vue" }, "package.@sheetwrite/wasm.cssBytes": { "actual": 0, "unit": "bytes", - "category": "package-css", + "category": "package-unpacked-css", "owner": "@sheetwrite/wasm" }, "package.@sheetwrite/wasm.declarationsBytes": { - "actual": 46684, + "actual": 44812, "unit": "bytes", - "category": "package-declarations", + "category": "package-unpacked-declarations", "owner": "@sheetwrite/wasm" }, "package.@sheetwrite/wasm.fileCount": { "actual": 12, "unit": "count", - "category": "package", + "category": "package-files", "owner": "@sheetwrite/wasm" }, "package.@sheetwrite/wasm.mapsBytes": { "actual": 0, "unit": "bytes", - "category": "package-maps", + "category": "package-unpacked-maps", "owner": "@sheetwrite/wasm" }, "package.@sheetwrite/wasm.metadataBytes": { - "actual": 3274, + "actual": 3313, "unit": "bytes", - "category": "package-metadata", + "category": "package-unpacked-metadata", "owner": "@sheetwrite/wasm" }, "package.@sheetwrite/wasm.runtimeJsBytes": { - "actual": 71982, + "actual": 68999, "unit": "bytes", - "category": "package-runtime-js", + "category": "package-unpacked-runtime-js", "owner": "@sheetwrite/wasm" }, "package.@sheetwrite/wasm.runtimeSourceBytes": { "actual": 0, "unit": "bytes", - "category": "package-runtime-source", + "category": "package-unpacked-runtime-source", "owner": "@sheetwrite/wasm" }, "package.@sheetwrite/wasm.tarballBytes": { - "actual": 290846, + "actual": 294947, "unit": "bytes", - "category": "package", + "category": "package-tarball", "owner": "@sheetwrite/wasm" }, "package.@sheetwrite/wasm.unpackedBytes": { - "actual": 805430, + "actual": 812233, "unit": "bytes", - "category": "package", + "category": "package-unpacked", "owner": "@sheetwrite/wasm" }, "package.@sheetwrite/wasm.wasmBytes": { - "actual": 683490, + "actual": 695109, "unit": "bytes", - "category": "package-wasm", + "category": "package-unpacked-wasm", "owner": "@sheetwrite/wasm" }, "package.@sheetwrite/xlsx.cssBytes": { "actual": 0, "unit": "bytes", - "category": "package-css", + "category": "package-unpacked-css", "owner": "@sheetwrite/xlsx" }, "package.@sheetwrite/xlsx.declarationsBytes": { - "actual": 9673, + "actual": 9495, "unit": "bytes", - "category": "package-declarations", + "category": "package-unpacked-declarations", "owner": "@sheetwrite/xlsx" }, "package.@sheetwrite/xlsx.fileCount": { "actual": 59, "unit": "count", - "category": "package", + "category": "package-files", "owner": "@sheetwrite/xlsx" }, "package.@sheetwrite/xlsx.mapsBytes": { - "actual": 215835, + "actual": 215671, "unit": "bytes", - "category": "package-maps", + "category": "package-unpacked-maps", "owner": "@sheetwrite/xlsx" }, "package.@sheetwrite/xlsx.metadataBytes": { - "actual": 4701, + "actual": 4740, "unit": "bytes", - "category": "package-metadata", + "category": "package-unpacked-metadata", "owner": "@sheetwrite/xlsx" }, "package.@sheetwrite/xlsx.runtimeJsBytes": { - "actual": 209662, + "actual": 209648, "unit": "bytes", - "category": "package-runtime-js", + "category": "package-unpacked-runtime-js", "owner": "@sheetwrite/xlsx" }, "package.@sheetwrite/xlsx.runtimeSourceBytes": { "actual": 0, "unit": "bytes", - "category": "package-runtime-source", + "category": "package-unpacked-runtime-source", "owner": "@sheetwrite/xlsx" }, "package.@sheetwrite/xlsx.tarballBytes": { - "actual": 87519, + "actual": 87480, "unit": "bytes", - "category": "package", + "category": "package-tarball", "owner": "@sheetwrite/xlsx" }, "package.@sheetwrite/xlsx.unpackedBytes": { - "actual": 439871, + "actual": 439554, "unit": "bytes", - "category": "package", + "category": "package-unpacked", "owner": "@sheetwrite/xlsx" }, "package.@sheetwrite/xlsx.wasmBytes": { "actual": 0, "unit": "bytes", - "category": "package-wasm", + "category": "package-unpacked-wasm", "owner": "@sheetwrite/xlsx" } }, "packages": [ { "name": "@sheetwrite/core", - "tarballBytes": 529490, - "unpackedBytes": 2845386, - "fileCount": 335, + "tarballBytes": 309413, + "unpackedBytes": 1491453, + "fileCount": 174, "categories": { "css": 19374, - "declarations": 312860, - "maps": 1371090, - "metadata": 5096, - "runtime-js": 1136966, + "declarations": 314567, + "maps": 0, + "metadata": 5165, + "runtime-js": 1152347, "runtime-source": 0, "wasm": 0 } }, { "name": "@sheetwrite/react", - "tarballBytes": 9399, - "unpackedBytes": 32679, + "tarballBytes": 9412, + "unpackedBytes": 32718, "fileCount": 8, "categories": { "css": 39, "declarations": 4910, "maps": 11885, - "metadata": 5243, + "metadata": 5282, "runtime-js": 10602, "runtime-source": 0, "wasm": 0 @@ -947,14 +1103,14 @@ }, { "name": "@sheetwrite/svelte", - "tarballBytes": 6354, - "unpackedBytes": 18919, + "tarballBytes": 6364, + "unpackedBytes": 18958, "fileCount": 10, "categories": { "css": 39, "declarations": 823, "maps": 0, - "metadata": 4572, + "metadata": 4611, "runtime-js": 0, "runtime-source": 13485, "wasm": 0 @@ -962,14 +1118,14 @@ }, { "name": "@sheetwrite/vue", - "tarballBytes": 10354, - "unpackedBytes": 36578, + "tarballBytes": 10369, + "unpackedBytes": 36617, "fileCount": 8, "categories": { "css": 39, "declarations": 7122, "maps": 14086, - "metadata": 4788, + "metadata": 4827, "runtime-js": 10543, "runtime-source": 0, "wasm": 0 @@ -977,30 +1133,30 @@ }, { "name": "@sheetwrite/wasm", - "tarballBytes": 290846, - "unpackedBytes": 805430, + "tarballBytes": 294947, + "unpackedBytes": 812233, "fileCount": 12, "categories": { "css": 0, - "declarations": 46684, + "declarations": 44812, "maps": 0, - "metadata": 3274, - "runtime-js": 71982, + "metadata": 3313, + "runtime-js": 68999, "runtime-source": 0, - "wasm": 683490 + "wasm": 695109 } }, { "name": "@sheetwrite/xlsx", - "tarballBytes": 87519, - "unpackedBytes": 439871, + "tarballBytes": 87480, + "unpackedBytes": 439554, "fileCount": 59, "categories": { "css": 0, - "declarations": 9673, - "maps": 215835, - "metadata": 4701, - "runtime-js": 209662, + "declarations": 9495, + "maps": 215671, + "metadata": 4740, + "runtime-js": 209648, "runtime-source": 0, "wasm": 0 } @@ -1010,44 +1166,44 @@ { "name": "core", "packageCount": 2, - "logicalBytes": 3650816, - "packages": ["@sheetwrite/core@0.3.0", "@sheetwrite/wasm@0.3.0"] + "logicalBytes": 2303686, + "packages": ["@sheetwrite/core@0.4.0", "@sheetwrite/wasm@0.4.0"] }, { "name": "core-xlsx", "packageCount": 4, - "logicalBytes": 4887429, + "logicalBytes": 3539982, "packages": [ - "@sheetwrite/core@0.3.0", - "@sheetwrite/wasm@0.3.0", - "@sheetwrite/xlsx@0.3.0", + "@sheetwrite/core@0.4.0", + "@sheetwrite/wasm@0.4.0", + "@sheetwrite/xlsx@0.4.0", "fflate@0.8.3" ] }, { "name": "react", "packageCount": 4, - "logicalBytes": 3855099, + "logicalBytes": 2508008, "packages": [ - "@sheetwrite/core@0.3.0", - "@sheetwrite/react@0.3.0", - "@sheetwrite/wasm@0.3.0", + "@sheetwrite/core@0.4.0", + "@sheetwrite/react@0.4.0", + "@sheetwrite/wasm@0.4.0", "react@19.2.7" ] }, { "name": "svelte", "packageCount": 23, - "logicalBytes": 8704597, + "logicalBytes": 7357506, "packages": [ "@jridgewell/gen-mapping@0.3.13", "@jridgewell/remapping@2.3.5", "@jridgewell/resolve-uri@3.1.2", "@jridgewell/sourcemap-codec@1.5.5", "@jridgewell/trace-mapping@0.3.31", - "@sheetwrite/core@0.3.0", - "@sheetwrite/svelte@0.3.0", - "@sheetwrite/wasm@0.3.0", + "@sheetwrite/core@0.4.0", + "@sheetwrite/svelte@0.4.0", + "@sheetwrite/wasm@0.4.0", "@sveltejs/acorn-typescript@1.0.11", "@types/estree@1.0.9", "@types/trusted-types@2.0.7", @@ -1068,16 +1224,16 @@ { "name": "vue", "packageCount": 26, - "logicalBytes": 20545448, + "logicalBytes": 19198357, "packages": [ "@babel/helper-string-parser@7.29.7", "@babel/helper-validator-identifier@7.29.7", "@babel/parser@7.29.7", "@babel/types@7.29.7", "@jridgewell/sourcemap-codec@1.5.5", - "@sheetwrite/core@0.3.0", - "@sheetwrite/vue@0.3.0", - "@sheetwrite/wasm@0.3.0", + "@sheetwrite/core@0.4.0", + "@sheetwrite/vue@0.4.0", + "@sheetwrite/wasm@0.4.0", "@vue/compiler-core@3.5.39", "@vue/compiler-dom@3.5.39", "@vue/compiler-sfc@3.5.39", @@ -1103,19 +1259,1887 @@ { "name": "next", "version": "15.5.9", + "provenance": { + "buildMode": "production", + "minified": true, + "minifier": { + "name": "next-swc", + "version": "15.5.9" + }, + "externals": [], + "target": "browser", + "sourceMaps": "hidden-external", + "attributionMethod": "source-map-generated-spans-with-explicit-opaque-assets-v2" + }, + "attribution": [ + { + "name": "core-first-paint", + "entry": "app/attribution/page.tsx", + "eagerImports": ["@sheetwrite/core#createGrid", "@sheetwrite/core#initSheetwrite"], + "assets": [ + { + "path": "test/bundler-fixtures/next/.next/static/chunks/255-293e44824f2ec188.js", + "sha256": "4ba8283a24d0bdae7333962d50de4b47a38fdd3b3f6c5125103c8a4bd00d9fc6" + }, + { + "path": "test/bundler-fixtures/next/.next/static/chunks/4bd1b696-c023c6e3521b1417.js", + "sha256": "2c752a401191671d5bbbe7514f5828bbb0a7cc50bfbe77ddaf1b1ccba4412ed2" + }, + { + "path": "test/bundler-fixtures/next/.next/static/chunks/627-1a9744b6d0521212.js", + "sha256": "7d7055f1850a8b9f7eb8d036d39dfe00374fbccd27d0f0df9abb6f4041735516" + }, + { + "path": "test/bundler-fixtures/next/.next/static/chunks/app/attribution/page-0083d7b54fcdc367.js", + "sha256": "59bdc2f60cdb63d87fef293a25b61210a4001a24d5dd359dc73040266185c090" + }, + { + "path": "test/bundler-fixtures/next/.next/static/chunks/main-app-2a3d823058883a9c.js", + "sha256": "32491e30240ce7a785bf9d2b0f39e2f46561a717057bbe8190048c048ac6df69" + }, + { + "path": "test/bundler-fixtures/next/.next/static/chunks/polyfills-42372ed130431b0a.js", + "sha256": "0973c1d64c88adc8e3c950410cb58b288f72118d5965b78049438deb8f2f9683" + }, + { + "path": "test/bundler-fixtures/next/.next/static/chunks/webpack-eab35a71721f8873.js", + "sha256": "4d0142299f56123d5512a7aa6f5f8cd18690043c27648acbaa0c5c18dd06472e" + } + ], + "generatedBytes": 917158, + "modules": [ + { + "id": "@sheetwrite/core/dist/a1.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 1029, + "gzipBytes": 509, + "brotliBytes": 456 + }, + { + "id": "@sheetwrite/core/dist/aria-mirror.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 4306, + "gzipBytes": 1414, + "brotliBytes": 1221 + }, + { + "id": "@sheetwrite/core/dist/canvas-paint.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 10121, + "gzipBytes": 4238, + "brotliBytes": 3855 + }, + { + "id": "@sheetwrite/core/dist/canvas-renderer.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 1960, + "gzipBytes": 772, + "brotliBytes": 660 + }, + { + "id": "@sheetwrite/core/dist/cell-input.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 952, + "gzipBytes": 431, + "brotliBytes": 365 + }, + { + "id": "@sheetwrite/core/dist/clipboard-controller.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 12758, + "gzipBytes": 4395, + "brotliBytes": 3954 + }, + { + "id": "@sheetwrite/core/dist/clipboard.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 213, + "gzipBytes": 169, + "brotliBytes": 150 + }, + { + "id": "@sheetwrite/core/dist/column-index.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 824, + "gzipBytes": 416, + "brotliBytes": 381 + }, + { + "id": "@sheetwrite/core/dist/conditional-format.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 608, + "gzipBytes": 318, + "brotliBytes": 268 + }, + { + "id": "@sheetwrite/core/dist/context-menu.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 4607, + "gzipBytes": 1492, + "brotliBytes": 1291 + }, + { + "id": "@sheetwrite/core/dist/custom-editor.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 4708, + "gzipBytes": 1633, + "brotliBytes": 1415 + }, + { + "id": "@sheetwrite/core/dist/datasource-controller.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 24693, + "gzipBytes": 6832, + "brotliBytes": 6204 + }, + { + "id": "@sheetwrite/core/dist/date-serial.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 902, + "gzipBytes": 455, + "brotliBytes": 421 + }, + { + "id": "@sheetwrite/core/dist/delimited-text.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 4117, + "gzipBytes": 1645, + "brotliBytes": 1481 + }, + { + "id": "@sheetwrite/core/dist/document-controller.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 13204, + "gzipBytes": 3431, + "brotliBytes": 3100 + }, + { + "id": "@sheetwrite/core/dist/document-protocol.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 40545, + "gzipBytes": 10980, + "brotliBytes": 9654 + }, + { + "id": "@sheetwrite/core/dist/dom-overlay.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 10087, + "gzipBytes": 3471, + "brotliBytes": 3067 + }, + { + "id": "@sheetwrite/core/dist/editor.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 3046, + "gzipBytes": 1119, + "brotliBytes": 941 + }, + { + "id": "@sheetwrite/core/dist/errors.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 6790, + "gzipBytes": 2450, + "brotliBytes": 2192 + }, + { + "id": "@sheetwrite/core/dist/export.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 1815, + "gzipBytes": 1017, + "brotliBytes": 843 + }, + { + "id": "@sheetwrite/core/dist/fenwick.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 2834, + "gzipBytes": 928, + "brotliBytes": 849 + }, + { + "id": "@sheetwrite/core/dist/fill-series.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 523, + "gzipBytes": 331, + "brotliBytes": 310 + }, + { + "id": "@sheetwrite/core/dist/find-bar.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 2915, + "gzipBytes": 1023, + "brotliBytes": 875 + }, + { + "id": "@sheetwrite/core/dist/formula-assist.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 5108, + "gzipBytes": 2209, + "brotliBytes": 1915 + }, + { + "id": "@sheetwrite/core/dist/geometry-layout-controller.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 5818, + "gzipBytes": 1699, + "brotliBytes": 1556 + }, + { + "id": "@sheetwrite/core/dist/grid.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 56606, + "gzipBytes": 15173, + "brotliBytes": 13486 + }, + { + "id": "@sheetwrite/core/dist/history.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 3270, + "gzipBytes": 1040, + "brotliBytes": 950 + }, + { + "id": "@sheetwrite/core/dist/hyperlink.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 4644, + "gzipBytes": 1806, + "brotliBytes": 1637 + }, + { + "id": "@sheetwrite/core/dist/input-controller.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 12627, + "gzipBytes": 3778, + "brotliBytes": 3387 + }, + { + "id": "@sheetwrite/core/dist/mutation-revision-index.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 1869, + "gzipBytes": 712, + "brotliBytes": 637 + }, + { + "id": "@sheetwrite/core/dist/number-format.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 5329, + "gzipBytes": 2156, + "brotliBytes": 1955 + }, + { + "id": "@sheetwrite/core/dist/overlay-painter.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 12951, + "gzipBytes": 4287, + "brotliBytes": 3816 + }, + { + "id": "@sheetwrite/core/dist/reference.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 1298, + "gzipBytes": 521, + "brotliBytes": 462 + }, + { + "id": "@sheetwrite/core/dist/render-coordinator.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 8688, + "gzipBytes": 2444, + "brotliBytes": 2221 + }, + { + "id": "@sheetwrite/core/dist/resize.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 228, + "gzipBytes": 173, + "brotliBytes": 150 + }, + { + "id": "@sheetwrite/core/dist/resource-accounting.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 4672, + "gzipBytes": 1870, + "brotliBytes": 1668 + }, + { + "id": "@sheetwrite/core/dist/search-controller.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 4331, + "gzipBytes": 1423, + "brotliBytes": 1289 + }, + { + "id": "@sheetwrite/core/dist/search-replace.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 352, + "gzipBytes": 218, + "brotliBytes": 185 + }, + { + "id": "@sheetwrite/core/dist/selection.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 2605, + "gzipBytes": 883, + "brotliBytes": 804 + }, + { + "id": "@sheetwrite/core/dist/sheet-lifecycle.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 2876, + "gzipBytes": 985, + "brotliBytes": 890 + }, + { + "id": "@sheetwrite/core/dist/sheet-name.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 464, + "gzipBytes": 328, + "brotliBytes": 279 + }, + { + "id": "@sheetwrite/core/dist/sheet-tabs.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 18703, + "gzipBytes": 4906, + "brotliBytes": 4391 + }, + { + "id": "@sheetwrite/core/dist/store.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 11025, + "gzipBytes": 3328, + "brotliBytes": 2948 + }, + { + "id": "@sheetwrite/core/dist/store/data-engine.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 47620, + "gzipBytes": 12335, + "brotliBytes": 10976 + }, + { + "id": "@sheetwrite/core/dist/store/mutation-policy.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 7040, + "gzipBytes": 2221, + "brotliBytes": 2021 + }, + { + "id": "@sheetwrite/core/dist/store/paged-dirty-preflight.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 9331, + "gzipBytes": 3081, + "brotliBytes": 2824 + }, + { + "id": "@sheetwrite/core/dist/store/ranges.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 5063, + "gzipBytes": 1690, + "brotliBytes": 1531 + }, + { + "id": "@sheetwrite/core/dist/store/snapshot-codec.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 2928, + "gzipBytes": 1096, + "brotliBytes": 971 + }, + { + "id": "@sheetwrite/core/dist/store/view-state.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 7131, + "gzipBytes": 2451, + "brotliBytes": 2210 + }, + { + "id": "@sheetwrite/core/dist/store/window-reader.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 11577, + "gzipBytes": 3832, + "brotliBytes": 3500 + }, + { + "id": "@sheetwrite/core/dist/store/wire-tags.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 71, + "gzipBytes": 65, + "brotliBytes": 49 + }, + { + "id": "@sheetwrite/core/dist/style-actions.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 2661, + "gzipBytes": 1045, + "brotliBytes": 961 + }, + { + "id": "@sheetwrite/core/dist/style-dictionary.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 877, + "gzipBytes": 457, + "brotliBytes": 391 + }, + { + "id": "@sheetwrite/core/dist/toolbar.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 5815, + "gzipBytes": 2191, + "brotliBytes": 1909 + }, + { + "id": "@sheetwrite/core/dist/transaction-admission.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 530, + "gzipBytes": 284, + "brotliBytes": 256 + }, + { + "id": "@sheetwrite/core/dist/validation-editor.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 5121, + "gzipBytes": 1689, + "brotliBytes": 1446 + }, + { + "id": "@sheetwrite/core/dist/virtualization.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 468, + "gzipBytes": 244, + "brotliBytes": 214 + }, + { + "id": "@sheetwrite/core/dist/widget-theme.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 452, + "gzipBytes": 218, + "brotliBytes": 178 + }, + { + "id": "@sheetwrite/core/dist/workbook-table.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 3310, + "gzipBytes": 1367, + "brotliBytes": 1222 + }, + { + "id": "@sheetwrite/core/dist/worker-renderer.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 5988, + "gzipBytes": 2093, + "brotliBytes": 1819 + }, + { + "id": "@sheetwrite/wasm/loader-browser.mjs", + "owner": "@sheetwrite/wasm", + "attribution": "source-map", + "rawBytes": 112, + "gzipBytes": 119, + "brotliBytes": 88 + }, + { + "id": "@sheetwrite/wasm/loader-state.mjs", + "owner": "@sheetwrite/wasm", + "attribution": "source-map", + "rawBytes": 429, + "gzipBytes": 269, + "brotliBytes": 212 + }, + { + "id": "@sheetwrite/wasm/pkg/sheetwrite_wasm.js", + "owner": "@sheetwrite/wasm", + "attribution": "source-map", + "rawBytes": 20733, + "gzipBytes": 4548, + "brotliBytes": 3920 + }, + { + "id": "@swc/helpers/esm/_class_private_field_loose_base.js", + "owner": "@swc/helpers", + "attribution": "source-map", + "rawBytes": 241, + "gzipBytes": 205, + "brotliBytes": 155 + }, + { + "id": "@swc/helpers/esm/_class_private_field_loose_key.js", + "owner": "@swc/helpers", + "attribution": "source-map", + "rawBytes": 171, + "gzipBytes": 151, + "brotliBytes": 116 + }, + { + "id": "@swc/helpers/esm/_interop_require_default.js", + "owner": "@swc/helpers", + "attribution": "source-map", + "rawBytes": 102, + "gzipBytes": 116, + "brotliBytes": 90 + }, + { + "id": "@swc/helpers/esm/_interop_require_wildcard.js", + "owner": "@swc/helpers", + "attribution": "source-map", + "rawBytes": 775, + "gzipBytes": 417, + "brotliBytes": 380 + }, + { + "id": "fixture/app/attribution/page.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 145, + "gzipBytes": 149, + "brotliBytes": 120 + }, + { + "id": "fixture/src/client/add-base-path.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 390, + "gzipBytes": 267, + "brotliBytes": 223 + }, + { + "id": "fixture/src/client/app-bootstrap.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 864, + "gzipBytes": 509, + "brotliBytes": 397 + }, + { + "id": "fixture/src/client/app-build-id.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 500, + "gzipBytes": 270, + "brotliBytes": 228 + }, + { + "id": "fixture/src/client/app-call-server.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 606, + "gzipBytes": 364, + "brotliBytes": 306 + }, + { + "id": "fixture/src/client/app-find-source-map-url.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 298, + "gzipBytes": 207, + "brotliBytes": 168 + }, + { + "id": "fixture/src/client/app-globals.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 382, + "gzipBytes": 227, + "brotliBytes": 183 + }, + { + "id": "fixture/src/client/app-index.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 3060, + "gzipBytes": 1453, + "brotliBytes": 1266 + }, + { + "id": "fixture/src/client/app-next.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 344, + "gzipBytes": 246, + "brotliBytes": 210 + }, + { + "id": "fixture/src/client/app-webpack.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 488, + "gzipBytes": 300, + "brotliBytes": 242 + }, + { + "id": "fixture/src/client/assign-location.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 587, + "gzipBytes": 337, + "brotliBytes": 293 + }, + { + "id": "fixture/src/client/components/app-router-announcer.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1477, + "gzipBytes": 757, + "brotliBytes": 614 + }, + { + "id": "fixture/src/client/components/app-router-headers.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1470, + "gzipBytes": 603, + "brotliBytes": 512 + }, + { + "id": "fixture/src/client/components/app-router-instance.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 3620, + "gzipBytes": 1454, + "brotliBytes": 1251 + }, + { + "id": "fixture/src/client/components/app-router.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 6131, + "gzipBytes": 2392, + "brotliBytes": 2098 + }, + { + "id": "fixture/src/client/components/bfcache.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 682, + "gzipBytes": 360, + "brotliBytes": 322 + }, + { + "id": "fixture/src/client/components/builtin/global-error.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1185, + "gzipBytes": 680, + "brotliBytes": 552 + }, + { + "id": "fixture/src/client/components/client-page.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 616, + "gzipBytes": 347, + "brotliBytes": 291 + }, + { + "id": "fixture/src/client/components/client-segment.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 506, + "gzipBytes": 312, + "brotliBytes": 259 + }, + { + "id": "fixture/src/client/components/error-boundary.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1484, + "gzipBytes": 659, + "brotliBytes": 586 + }, + { + "id": "fixture/src/client/components/errors/graceful-degrade-boundary.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1132, + "gzipBytes": 615, + "brotliBytes": 514 + }, + { + "id": "fixture/src/client/components/errors/root-error-boundary.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 711, + "gzipBytes": 396, + "brotliBytes": 358 + }, + { + "id": "fixture/src/client/components/forbidden.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 740, + "gzipBytes": 390, + "brotliBytes": 300 + }, + { + "id": "fixture/src/client/components/handle-isr-error.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 574, + "gzipBytes": 325, + "brotliBytes": 270 + }, + { + "id": "fixture/src/client/components/http-access-fallback/error-boundary.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1774, + "gzipBytes": 807, + "brotliBytes": 697 + }, + { + "id": "fixture/src/client/components/http-access-fallback/http-access-fallback.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1021, + "gzipBytes": 517, + "brotliBytes": 429 + }, + { + "id": "fixture/src/client/components/is-next-router-error.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 479, + "gzipBytes": 288, + "brotliBytes": 229 + }, + { + "id": "fixture/src/client/components/layout-router.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 5109, + "gzipBytes": 2275, + "brotliBytes": 1999 + }, + { + "id": "fixture/src/client/components/links.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 3252, + "gzipBytes": 1318, + "brotliBytes": 1141 + }, + { + "id": "fixture/src/client/components/match-segments.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 387, + "gzipBytes": 242, + "brotliBytes": 193 + }, + { + "id": "fixture/src/client/components/metadata/async-metadata.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 616, + "gzipBytes": 345, + "brotliBytes": 298 + }, + { + "id": "fixture/src/client/components/nav-failure-handler.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 723, + "gzipBytes": 388, + "brotliBytes": 306 + }, + { + "id": "fixture/src/client/components/navigation-untracked.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 500, + "gzipBytes": 281, + "brotliBytes": 236 + }, + { + "id": "fixture/src/client/components/navigation.react-server.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1366, + "gzipBytes": 633, + "brotliBytes": 527 + }, + { + "id": "fixture/src/client/components/navigation.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 2338, + "gzipBytes": 935, + "brotliBytes": 834 + }, + { + "id": "fixture/src/client/components/not-found.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 576, + "gzipBytes": 335, + "brotliBytes": 270 + }, + { + "id": "fixture/src/client/components/promise-queue.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1192, + "gzipBytes": 564, + "brotliBytes": 489 + }, + { + "id": "fixture/src/client/components/redirect-boundary.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1132, + "gzipBytes": 569, + "brotliBytes": 492 + }, + { + "id": "fixture/src/client/components/redirect-error.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 732, + "gzipBytes": 431, + "brotliBytes": 357 + }, + { + "id": "fixture/src/client/components/redirect-status-code.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 530, + "gzipBytes": 289, + "brotliBytes": 224 + }, + { + "id": "fixture/src/client/components/redirect.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1576, + "gzipBytes": 599, + "brotliBytes": 517 + }, + { + "id": "fixture/src/client/components/render-from-template-context.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 431, + "gzipBytes": 294, + "brotliBytes": 250 + }, + { + "id": "fixture/src/client/components/router-reducer/aliased-prefetch-navigations.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 2185, + "gzipBytes": 1114, + "brotliBytes": 1018 + }, + { + "id": "fixture/src/client/components/router-reducer/apply-flight-data.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 805, + "gzipBytes": 454, + "brotliBytes": 408 + }, + { + "id": "fixture/src/client/components/router-reducer/apply-router-state-patch-to-tree.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1122, + "gzipBytes": 605, + "brotliBytes": 542 + }, + { + "id": "fixture/src/client/components/router-reducer/clear-cache-node-data-for-segment-path.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1086, + "gzipBytes": 524, + "brotliBytes": 468 + }, + { + "id": "fixture/src/client/components/router-reducer/compute-changed-path.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1716, + "gzipBytes": 882, + "brotliBytes": 781 + }, + { + "id": "fixture/src/client/components/router-reducer/create-href-from-url.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 547, + "gzipBytes": 283, + "brotliBytes": 238 + }, + { + "id": "fixture/src/client/components/router-reducer/create-initial-router-state.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1612, + "gzipBytes": 918, + "brotliBytes": 815 + }, + { + "id": "fixture/src/client/components/router-reducer/create-router-cache-key.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 440, + "gzipBytes": 295, + "brotliBytes": 243 + }, + { + "id": "fixture/src/client/components/router-reducer/fetch-server-response.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 2889, + "gzipBytes": 1453, + "brotliBytes": 1262 + }, + { + "id": "fixture/src/client/components/router-reducer/fill-cache-with-new-subtree-data.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1443, + "gzipBytes": 744, + "brotliBytes": 679 + }, + { + "id": "fixture/src/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1675, + "gzipBytes": 687, + "brotliBytes": 626 + }, + { + "id": "fixture/src/client/components/router-reducer/handle-mutable.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1493, + "gzipBytes": 640, + "brotliBytes": 562 + }, + { + "id": "fixture/src/client/components/router-reducer/handle-segment-mismatch.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 370, + "gzipBytes": 252, + "brotliBytes": 203 + }, + { + "id": "fixture/src/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 770, + "gzipBytes": 447, + "brotliBytes": 395 + }, + { + "id": "fixture/src/client/components/router-reducer/invalidate-cache-by-router-state.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 565, + "gzipBytes": 327, + "brotliBytes": 286 + }, + { + "id": "fixture/src/client/components/router-reducer/is-navigating-to-new-root-layout.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 612, + "gzipBytes": 331, + "brotliBytes": 282 + }, + { + "id": "fixture/src/client/components/router-reducer/ppr-navigations.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 5775, + "gzipBytes": 2259, + "brotliBytes": 2033 + }, + { + "id": "fixture/src/client/components/router-reducer/prefetch-cache-utils.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 3276, + "gzipBytes": 1274, + "brotliBytes": 1158 + }, + { + "id": "fixture/src/client/components/router-reducer/reducers/find-head-in-cache.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 861, + "gzipBytes": 478, + "brotliBytes": 416 + }, + { + "id": "fixture/src/client/components/router-reducer/reducers/get-segment-value.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 557, + "gzipBytes": 280, + "brotliBytes": 224 + }, + { + "id": "fixture/src/client/components/router-reducer/reducers/has-interception-route-in-current-tree.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 571, + "gzipBytes": 330, + "brotliBytes": 300 + }, + { + "id": "fixture/src/client/components/router-reducer/reducers/hmr-refresh-reducer.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 393, + "gzipBytes": 256, + "brotliBytes": 206 + }, + { + "id": "fixture/src/client/components/router-reducer/reducers/navigate-reducer.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 3416, + "gzipBytes": 1679, + "brotliBytes": 1491 + }, + { + "id": "fixture/src/client/components/router-reducer/reducers/prefetch-reducer.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 562, + "gzipBytes": 329, + "brotliBytes": 288 + }, + { + "id": "fixture/src/client/components/router-reducer/reducers/refresh-reducer.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1666, + "gzipBytes": 961, + "brotliBytes": 854 + }, + { + "id": "fixture/src/client/components/router-reducer/reducers/restore-reducer.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 754, + "gzipBytes": 448, + "brotliBytes": 376 + }, + { + "id": "fixture/src/client/components/router-reducer/reducers/server-action-reducer.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 4330, + "gzipBytes": 2208, + "brotliBytes": 1905 + }, + { + "id": "fixture/src/client/components/router-reducer/reducers/server-patch-reducer.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1155, + "gzipBytes": 643, + "brotliBytes": 565 + }, + { + "id": "fixture/src/client/components/router-reducer/refetch-inactive-parallel-segments.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1318, + "gzipBytes": 681, + "brotliBytes": 611 + }, + { + "id": "fixture/src/client/components/router-reducer/router-reducer-types.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 884, + "gzipBytes": 440, + "brotliBytes": 370 + }, + { + "id": "fixture/src/client/components/router-reducer/router-reducer.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1028, + "gzipBytes": 498, + "brotliBytes": 437 + }, + { + "id": "fixture/src/client/components/router-reducer/set-cache-busting-search-param.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 935, + "gzipBytes": 492, + "brotliBytes": 419 + }, + { + "id": "fixture/src/client/components/router-reducer/should-hard-navigate.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 451, + "gzipBytes": 312, + "brotliBytes": 259 + }, + { + "id": "fixture/src/client/components/segment-cache.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1372, + "gzipBytes": 625, + "brotliBytes": 516 + }, + { + "id": "fixture/src/client/components/unauthorized.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 772, + "gzipBytes": 399, + "brotliBytes": 309 + }, + { + "id": "fixture/src/client/components/unrecognized-action-error.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 585, + "gzipBytes": 301, + "brotliBytes": 245 + }, + { + "id": "fixture/src/client/components/unresolved-thenable.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 304, + "gzipBytes": 213, + "brotliBytes": 172 + }, + { + "id": "fixture/src/client/components/unstable-rethrow.browser.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 528, + "gzipBytes": 317, + "brotliBytes": 269 + }, + { + "id": "fixture/src/client/components/unstable-rethrow.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 452, + "gzipBytes": 259, + "brotliBytes": 219 + }, + { + "id": "fixture/src/client/components/use-action-queue.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 824, + "gzipBytes": 470, + "brotliBytes": 405 + }, + { + "id": "fixture/src/client/flight-data-helpers.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1123, + "gzipBytes": 613, + "brotliBytes": 524 + }, + { + "id": "fixture/src/client/has-base-path.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 479, + "gzipBytes": 273, + "brotliBytes": 222 + }, + { + "id": "fixture/src/client/normalize-trailing-slash.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 548, + "gzipBytes": 339, + "brotliBytes": 278 + }, + { + "id": "fixture/src/client/react-client-callbacks/error-boundary-callbacks.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 953, + "gzipBytes": 497, + "brotliBytes": 428 + }, + { + "id": "fixture/src/client/react-client-callbacks/on-recoverable-error.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 625, + "gzipBytes": 356, + "brotliBytes": 307 + }, + { + "id": "fixture/src/client/react-client-callbacks/report-global-error.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 368, + "gzipBytes": 242, + "brotliBytes": 190 + }, + { + "id": "fixture/src/client/remove-base-path.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 542, + "gzipBytes": 269, + "brotliBytes": 215 + }, + { + "id": "fixture/src/client/request/params.browser.prod.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 559, + "gzipBytes": 333, + "brotliBytes": 274 + }, + { + "id": "fixture/src/client/request/params.browser.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 463, + "gzipBytes": 269, + "brotliBytes": 218 + }, + { + "id": "fixture/src/client/request/search-params.browser.prod.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 473, + "gzipBytes": 315, + "brotliBytes": 260 + }, + { + "id": "fixture/src/client/request/search-params.browser.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 335, + "gzipBytes": 240, + "brotliBytes": 189 + }, + { + "id": "fixture/src/client/route-params.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1756, + "gzipBytes": 840, + "brotliBytes": 730 + }, + { + "id": "fixture/src/client/set-attributes-from-props.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 961, + "gzipBytes": 542, + "brotliBytes": 436 + }, + { + "id": "fixture/src/lib/framework/boundary-components.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 760, + "gzipBytes": 325, + "brotliBytes": 278 + }, + { + "id": "fixture/src/lib/metadata/generate/icon-mark.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 198, + "gzipBytes": 174, + "brotliBytes": 156 + }, + { + "id": "fixture/src/shared/lib/app-router-context.shared-runtime.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 516, + "gzipBytes": 242, + "brotliBytes": 196 + }, + { + "id": "fixture/src/shared/lib/encode-uri-path.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 369, + "gzipBytes": 222, + "brotliBytes": 165 + }, + { + "id": "fixture/src/shared/lib/hash.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 472, + "gzipBytes": 289, + "brotliBytes": 237 + }, + { + "id": "fixture/src/shared/lib/head-manager-context.shared-runtime.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 257, + "gzipBytes": 201, + "brotliBytes": 155 + }, + { + "id": "fixture/src/shared/lib/hooks-client-context.shared-runtime.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 335, + "gzipBytes": 199, + "brotliBytes": 173 + }, + { + "id": "fixture/src/shared/lib/invariant-error.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 309, + "gzipBytes": 242, + "brotliBytes": 188 + }, + { + "id": "fixture/src/shared/lib/is-plain-object.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 565, + "gzipBytes": 280, + "brotliBytes": 231 + }, + { + "id": "fixture/src/shared/lib/is-thenable.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 246, + "gzipBytes": 183, + "brotliBytes": 146 + }, + { + "id": "fixture/src/shared/lib/lazy-dynamic/bailout-to-csr.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 439, + "gzipBytes": 306, + "brotliBytes": 247 + }, + { + "id": "fixture/src/shared/lib/page-path/ensure-leading-slash.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 347, + "gzipBytes": 213, + "brotliBytes": 167 + }, + { + "id": "fixture/src/shared/lib/router/utils/add-path-prefix.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 306, + "gzipBytes": 244, + "brotliBytes": 193 + }, + { + "id": "fixture/src/shared/lib/router/utils/app-paths.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 354, + "gzipBytes": 269, + "brotliBytes": 237 + }, + { + "id": "fixture/src/shared/lib/router/utils/cache-busting-search-param.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 361, + "gzipBytes": 243, + "brotliBytes": 205 + }, + { + "id": "fixture/src/shared/lib/router/utils/disable-smooth-scroll.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 552, + "gzipBytes": 322, + "brotliBytes": 258 + }, + { + "id": "fixture/src/shared/lib/router/utils/html-bots.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 522, + "gzipBytes": 372, + "brotliBytes": 316 + }, + { + "id": "fixture/src/shared/lib/router/utils/interception-routes.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1509, + "gzipBytes": 647, + "brotliBytes": 554 + }, + { + "id": "fixture/src/shared/lib/router/utils/is-bot.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 570, + "gzipBytes": 309, + "brotliBytes": 267 + }, + { + "id": "fixture/src/shared/lib/router/utils/parse-path.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 463, + "gzipBytes": 278, + "brotliBytes": 222 + }, + { + "id": "fixture/src/shared/lib/router/utils/path-has-prefix.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 296, + "gzipBytes": 232, + "brotliBytes": 187 + }, + { + "id": "fixture/src/shared/lib/router/utils/remove-trailing-slash.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 347, + "gzipBytes": 212, + "brotliBytes": 167 + }, + { + "id": "fixture/src/shared/lib/segment-cache/segment-value-encoding.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 1077, + "gzipBytes": 534, + "brotliBytes": 452 + }, + { + "id": "fixture/src/shared/lib/segment.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 739, + "gzipBytes": 369, + "brotliBytes": 309 + }, + { + "id": "fixture/src/shared/lib/server-inserted-html.shared-runtime.tsx", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 227, + "gzipBytes": 174, + "brotliBytes": 137 + }, + { + "id": "fixture/src/shared/lib/server-reference-info.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 675, + "gzipBytes": 407, + "brotliBytes": 345 + }, + { + "id": "fixture/src/shared/lib/utils/reflect-utils.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 701, + "gzipBytes": 433, + "brotliBytes": 353 + }, + { + "id": "fixture/src/shared/lib/utils/warn-once.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 193, + "gzipBytes": 168, + "brotliBytes": 126 + }, + { + "id": "next:opaque/static/chunks/polyfills-42372ed130431b0a.js", + "owner": "next:opaque-framework", + "attribution": "opaque-asset", + "rawBytes": 112594, + "gzipBytes": 39520, + "brotliBytes": 35158 + }, + { + "id": "next:runtime", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 1185, + "gzipBytes": 421, + "brotliBytes": 389 + }, + { + "id": "next:runtime/webpack/bootstrap", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 171, + "gzipBytes": 146, + "brotliBytes": 116 + }, + { + "id": "next:runtime/webpack/runtime/chunk loaded", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 347, + "gzipBytes": 258, + "brotliBytes": 240 + }, + { + "id": "next:runtime/webpack/runtime/create fake namespace object", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 426, + "gzipBytes": 293, + "brotliBytes": 253 + }, + { + "id": "next:runtime/webpack/runtime/define property getters", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 101, + "gzipBytes": 110, + "brotliBytes": 84 + }, + { + "id": "next:runtime/webpack/runtime/ensure chunk", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 78, + "gzipBytes": 93, + "brotliBytes": 72 + }, + { + "id": "next:runtime/webpack/runtime/get javascript chunk filename", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 10, + "gzipBytes": 30, + "brotliBytes": 14 + }, + { + "id": "next:runtime/webpack/runtime/get mini-css chunk filename", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 17, + "gzipBytes": 37, + "brotliBytes": 21 + }, + { + "id": "next:runtime/webpack/runtime/global", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 161, + "gzipBytes": 122, + "brotliBytes": 85 + }, + { + "id": "next:runtime/webpack/runtime/hasOwnProperty shorthand", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 59, + "gzipBytes": 76, + "brotliBytes": 63 + }, + { + "id": "next:runtime/webpack/runtime/jsonp chunk loading", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 794, + "gzipBytes": 512, + "brotliBytes": 460 + }, + { + "id": "next:runtime/webpack/runtime/load script", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 739, + "gzipBytes": 445, + "brotliBytes": 350 + }, + { + "id": "next:runtime/webpack/runtime/make namespace object", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 167, + "gzipBytes": 130, + "brotliBytes": 109 + }, + { + "id": "next:runtime/webpack/runtime/publicPath", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 20, + "gzipBytes": 40, + "brotliBytes": 24 + }, + { + "id": "next:runtime/webpack/runtime/relative url", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 284, + "gzipBytes": 226, + "brotliBytes": 196 + }, + { + "id": "next:runtime/webpack/runtime/trusted types policy", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 173, + "gzipBytes": 146, + "brotliBytes": 114 + }, + { + "id": "next:runtime/webpack/runtime/trusted types script url", + "owner": "next:runtime", + "attribution": "source-map", + "rawBytes": 34, + "gzipBytes": 54, + "brotliBytes": 38 + }, + { + "id": "next/dist/build/deployment-id.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 290, + "gzipBytes": 183, + "brotliBytes": 142 + }, + { + "id": "next/dist/build/polyfills/polyfill-module.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 1540, + "gzipBytes": 664, + "brotliBytes": 585 + }, + { + "id": "next/dist/build/polyfills/process.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 293, + "gzipBytes": 218, + "brotliBytes": 181 + }, + { + "id": "next/dist/compiled/process/browser.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 2011, + "gzipBytes": 883, + "brotliBytes": 778 + }, + { + "id": "next/dist/compiled/react-dom/cjs/react-dom-client.production.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 172924, + "gzipBytes": 54186, + "brotliBytes": 46661 + }, + { + "id": "next/dist/compiled/react-dom/cjs/react-dom.production.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 3428, + "gzipBytes": 1282, + "brotliBytes": 1112 + }, + { + "id": "next/dist/compiled/react-dom/client.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 386, + "gzipBytes": 261, + "brotliBytes": 208 + }, + { + "id": "next/dist/compiled/react-dom/index.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 249, + "gzipBytes": 177, + "brotliBytes": 140 + }, + { + "id": "next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 22974, + "gzipBytes": 7516, + "brotliBytes": 6675 + }, + { + "id": "next/dist/compiled/react-server-dom-webpack/client.browser.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 182, + "gzipBytes": 161, + "brotliBytes": 142 + }, + { + "id": "next/dist/compiled/react/cjs/react-jsx-runtime.production.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 480, + "gzipBytes": 323, + "brotliBytes": 282 + }, + { + "id": "next/dist/compiled/react/cjs/react.production.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 7404, + "gzipBytes": 2851, + "brotliBytes": 2553 + }, + { + "id": "next/dist/compiled/react/index.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 142, + "gzipBytes": 134, + "brotliBytes": 100 + }, + { + "id": "next/dist/compiled/react/jsx-runtime.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 46, + "gzipBytes": 66, + "brotliBytes": 50 + }, + { + "id": "next/dist/compiled/scheduler/cjs/scheduler.production.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 3582, + "gzipBytes": 1546, + "brotliBytes": 1376 + }, + { + "id": "next/dist/compiled/scheduler/index.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 137, + "gzipBytes": 133, + "brotliBytes": 99 + }, + { + "id": "next/dist/lib/framework/boundary-constants.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 555, + "gzipBytes": 285, + "brotliBytes": 237 + }, + { + "id": "next/dist/lib/is-error.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 756, + "gzipBytes": 388, + "brotliBytes": 343 + }, + { + "id": "next/dist/lib/require-instrumentation-client.js", + "owner": "next", + "attribution": "source-map", + "rawBytes": 137, + "gzipBytes": 132, + "brotliBytes": 107 + } + ] + } + ], "assets": [ { - "path": "test/bundler-fixtures/next/.next/static/1_Utdrb8GCiJfm5p160k2/_buildManifest.js", + "path": "test/bundler-fixtures/next/.next/static/0Y6lEjcwW27BCSj-_wjzR/_buildManifest.js", "kind": "javascript", "owner": "next-async", "roles": ["next-async"], - "rawBytes": 506, - "gzipBytes": 299, - "brotliBytes": 257, - "sha256": "549fc1f6f226df947f859689a5217eeedc49d3ff876d9f364976a47ef4aad63d" + "rawBytes": 543, + "gzipBytes": 306, + "brotliBytes": 262, + "sha256": "9de87d6d2d392f8791be55e547eb3eb7764d034dcc178ed624a3c5a339f35807" }, { - "path": "test/bundler-fixtures/next/.next/static/1_Utdrb8GCiJfm5p160k2/_ssgManifest.js", + "path": "test/bundler-fixtures/next/.next/static/0Y6lEjcwW27BCSj-_wjzR/_ssgManifest.js", "kind": "javascript", "owner": "next-async", "roles": ["next-async"], @@ -1127,8 +3151,8 @@ { "path": "test/bundler-fixtures/next/.next/static/chunks/255-293e44824f2ec188.js", "kind": "javascript", - "owner": "core-initial", - "roles": ["core-initial"], + "owner": "shared:core-initial+core-attribution-initial", + "roles": ["core-attribution-initial", "core-initial"], "rawBytes": 172538, "gzipBytes": 46193, "brotliBytes": 37794, @@ -1137,22 +3161,22 @@ { "path": "test/bundler-fixtures/next/.next/static/chunks/4bd1b696-c023c6e3521b1417.js", "kind": "javascript", - "owner": "core-initial", - "roles": ["core-initial"], + "owner": "shared:core-initial+core-attribution-initial", + "roles": ["core-attribution-initial", "core-initial"], "rawBytes": 173019, "gzipBytes": 54423, "brotliBytes": 46749, "sha256": "2c752a401191671d5bbbe7514f5828bbb0a7cc50bfbe77ddaf1b1ccba4412ed2" }, { - "path": "test/bundler-fixtures/next/.next/static/chunks/613-9a95c5fd3d41a111.js", + "path": "test/bundler-fixtures/next/.next/static/chunks/627-1a9744b6d0521212.js", "kind": "javascript", - "owner": "core-initial", - "roles": ["core-initial"], - "rawBytes": 465040, - "gzipBytes": 129007, - "brotliBytes": 105158, - "sha256": "f24f35974220a3f7e759454da6bd7f8397f8ee4e9eaf68ae633d9e26da61d477" + "owner": "shared:core-initial+core-attribution-initial", + "roles": ["core-attribution-initial", "core-initial"], + "rawBytes": 454451, + "gzipBytes": 125830, + "brotliBytes": 102637, + "sha256": "7d7055f1850a8b9f7eb8d036d39dfe00374fbccd27d0f0df9abb6f4041735516" }, { "path": "test/bundler-fixtures/next/.next/static/chunks/app/_not-found/page-52855012294ab07e.js", @@ -1164,6 +3188,16 @@ "brotliBytes": 824, "sha256": "7624a6a8350a8f7b193e867bff0d7b43e4cac83e0473b48f6eeeec8c81a0a20e" }, + { + "path": "test/bundler-fixtures/next/.next/static/chunks/app/attribution/page-0083d7b54fcdc367.js", + "kind": "javascript", + "owner": "core-attribution-initial", + "roles": ["core-attribution-initial"], + "rawBytes": 390, + "gzipBytes": 306, + "brotliBytes": 260, + "sha256": "59bdc2f60cdb63d87fef293a25b61210a4001a24d5dd359dc73040266185c090" + }, { "path": "test/bundler-fixtures/next/.next/static/chunks/app/layout-90900699d2a755fc.js", "kind": "javascript", @@ -1175,14 +3209,14 @@ "sha256": "e6531067acc892c8af51455cd419458fff745be856be3a8eba244a1701c82346" }, { - "path": "test/bundler-fixtures/next/.next/static/chunks/app/page-5c1aceb3849f1e5f.js", + "path": "test/bundler-fixtures/next/.next/static/chunks/app/page-3d492297a1dff877.js", "kind": "javascript", "owner": "core-initial", "roles": ["core-initial"], - "rawBytes": 1616, - "gzipBytes": 897, - "brotliBytes": 795, - "sha256": "b700af30152eaa970b49a97df048a530c5e831526b83f6b49883a062e0e98944" + "rawBytes": 17938, + "gzipBytes": 5801, + "brotliBytes": 5243, + "sha256": "81614eb490033a3dc9e35f62b4671b4fa95d5258d9d4140d1643e316461db5ff" }, { "path": "test/bundler-fixtures/next/.next/static/chunks/framework-acd67e14855de5a2.js", @@ -1207,8 +3241,8 @@ { "path": "test/bundler-fixtures/next/.next/static/chunks/main-app-2a3d823058883a9c.js", "kind": "javascript", - "owner": "core-initial", - "roles": ["core-initial"], + "owner": "shared:core-initial+core-attribution-initial", + "roles": ["core-attribution-initial", "core-initial"], "rawBytes": 557, "gzipBytes": 227, "brotliBytes": 206, @@ -1237,8 +3271,8 @@ { "path": "test/bundler-fixtures/next/.next/static/chunks/polyfills-42372ed130431b0a.js", "kind": "javascript", - "owner": "core-initial", - "roles": ["core-initial"], + "owner": "shared:core-initial+core-attribution-initial", + "roles": ["core-attribution-initial", "core-initial"], "rawBytes": 112594, "gzipBytes": 39494, "brotliBytes": 35158, @@ -1247,8 +3281,8 @@ { "path": "test/bundler-fixtures/next/.next/static/chunks/webpack-eab35a71721f8873.js", "kind": "javascript", - "owner": "core-initial", - "roles": ["core-initial"], + "owner": "shared:core-initial+core-attribution-initial", + "roles": ["core-attribution-initial", "core-initial"], "rawBytes": 3609, "gzipBytes": 1779, "brotliBytes": 1586, @@ -1257,38 +3291,598 @@ { "path": "test/bundler-fixtures/next/.next/static/css/d73f685bd1292336.css", "kind": "css", - "owner": "core-initial", - "roles": ["core-initial"], + "owner": "shared:core-initial+core-attribution-initial", + "roles": ["core-attribution-initial", "core-initial"], "rawBytes": 12299, "gzipBytes": 2508, "brotliBytes": 2177, "sha256": "b2f8184d1e3e64537e8797f6d160c486b692bcd4f17db59a2897448edceea96b" }, { - "path": "test/bundler-fixtures/next/.next/static/media/sheetwrite_wasm_bg.be3aaa14.wasm", + "path": "test/bundler-fixtures/next/.next/static/media/sheetwrite_wasm_bg.7ae8dcfe.wasm", "kind": "wasm", "owner": "core-initial", "roles": ["core-initial"], - "rawBytes": 683490, - "gzipBytes": 268969, - "brotliBytes": 208727, - "sha256": "e22de324008292f9aa4218f0ce7d748c0fcec41a99473ead9f04f56c7862af0f" + "rawBytes": 695109, + "gzipBytes": 274036, + "brotliBytes": 212236, + "sha256": "17ec82bad3101080fcfa79d0107ec0d77ae6254c031faafa67bcdd38351aa329" }, { - "path": "test/bundler-fixtures/next/.next/static/media/worker.3657eea0.js", + "path": "test/bundler-fixtures/next/.next/static/media/worker.a78c3889.js", "kind": "javascript", "owner": "next-async", "roles": ["next-async"], - "rawBytes": 3495, - "gzipBytes": 1345, - "brotliBytes": 1232, - "sha256": "68432482a7a96857a76039090c9f4e4cb00657c2e110a61a09a56df820da4c61" + "rawBytes": 3801, + "gzipBytes": 1504, + "brotliBytes": 1357, + "sha256": "a87eee5b1f570bae57f32065ab637e39df1e55726965343894f52019ce49b625" } ] }, { "name": "vite", "version": "7.2.2", + "provenance": { + "buildMode": "production", + "minified": true, + "minifier": { + "name": "esbuild", + "version": "0.25.12" + }, + "externals": [], + "target": "browser", + "sourceMaps": "hidden-external", + "attributionMethod": "source-map-generated-spans-with-explicit-opaque-assets-v2" + }, + "attribution": [ + { + "name": "core-first-paint", + "entry": "index.html", + "eagerImports": ["@sheetwrite/core#createGrid", "@sheetwrite/core#initSheetwrite"], + "assets": [ + { + "path": "test/bundler-fixtures/vite/dist/assets/core-DPVHP4sz.js", + "sha256": "904de4d3d6b449f209dd11fec78965b6c676974fa058e0f0fad6ad6a088cecda" + }, + { + "path": "test/bundler-fixtures/vite/dist/assets/export-C24LpoPY.js", + "sha256": "1168bb0be17944f7da2202c645a5851d5f22a77f469e8c1022d85f09aa902724" + }, + { + "path": "test/bundler-fixtures/vite/dist/assets/grid-CcxWrpW9.js", + "sha256": "6eeb4018b88f32c84f4c0a9bbd398ecc3b2b37182d64536afb71c116c8daea95" + }, + { + "path": "test/bundler-fixtures/vite/dist/assets/modulepreload-polyfill-B5Qt9EMX.js", + "sha256": "d2a32840421496e872ade591618d2fa5c33797605d1aec04301717e5a90757d0" + } + ], + "generatedBytes": 463910, + "modules": [ + { + "id": "@sheetwrite/core/dist/a1.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 1066, + "gzipBytes": 530, + "brotliBytes": 481 + }, + { + "id": "@sheetwrite/core/dist/aria-mirror.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 4335, + "gzipBytes": 1440, + "brotliBytes": 1249 + }, + { + "id": "@sheetwrite/core/dist/canvas-paint.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 10554, + "gzipBytes": 4438, + "brotliBytes": 4072 + }, + { + "id": "@sheetwrite/core/dist/canvas-renderer.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 1981, + "gzipBytes": 770, + "brotliBytes": 668 + }, + { + "id": "@sheetwrite/core/dist/cell-input.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 977, + "gzipBytes": 437, + "brotliBytes": 372 + }, + { + "id": "@sheetwrite/core/dist/clipboard-controller.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 13069, + "gzipBytes": 4549, + "brotliBytes": 4142 + }, + { + "id": "@sheetwrite/core/dist/clipboard.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 224, + "gzipBytes": 177, + "brotliBytes": 156 + }, + { + "id": "@sheetwrite/core/dist/column-index.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 835, + "gzipBytes": 418, + "brotliBytes": 380 + }, + { + "id": "@sheetwrite/core/dist/conditional-format.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 622, + "gzipBytes": 328, + "brotliBytes": 275 + }, + { + "id": "@sheetwrite/core/dist/context-menu.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 4639, + "gzipBytes": 1492, + "brotliBytes": 1302 + }, + { + "id": "@sheetwrite/core/dist/custom-editor.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 4724, + "gzipBytes": 1642, + "brotliBytes": 1410 + }, + { + "id": "@sheetwrite/core/dist/datasource-controller.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 25113, + "gzipBytes": 7073, + "brotliBytes": 6416 + }, + { + "id": "@sheetwrite/core/dist/date-serial.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 973, + "gzipBytes": 486, + "brotliBytes": 448 + }, + { + "id": "@sheetwrite/core/dist/delimited-text.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 4246, + "gzipBytes": 1700, + "brotliBytes": 1523 + }, + { + "id": "@sheetwrite/core/dist/document-controller.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 13346, + "gzipBytes": 3492, + "brotliBytes": 3157 + }, + { + "id": "@sheetwrite/core/dist/document-protocol.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 40921, + "gzipBytes": 11349, + "brotliBytes": 10060 + }, + { + "id": "@sheetwrite/core/dist/dom-overlay.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 10229, + "gzipBytes": 3532, + "brotliBytes": 3126 + }, + { + "id": "@sheetwrite/core/dist/editor.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 3091, + "gzipBytes": 1109, + "brotliBytes": 949 + }, + { + "id": "@sheetwrite/core/dist/errors.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 6920, + "gzipBytes": 2513, + "brotliBytes": 2262 + }, + { + "id": "@sheetwrite/core/dist/export.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 2898, + "gzipBytes": 1523, + "brotliBytes": 1290 + }, + { + "id": "@sheetwrite/core/dist/fenwick.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 2906, + "gzipBytes": 957, + "brotliBytes": 872 + }, + { + "id": "@sheetwrite/core/dist/fill-series.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 580, + "gzipBytes": 350, + "brotliBytes": 342 + }, + { + "id": "@sheetwrite/core/dist/find-bar.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 2963, + "gzipBytes": 1071, + "brotliBytes": 900 + }, + { + "id": "@sheetwrite/core/dist/formula-assist.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 5158, + "gzipBytes": 2225, + "brotliBytes": 1943 + }, + { + "id": "@sheetwrite/core/dist/geometry-layout-controller.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 5856, + "gzipBytes": 1710, + "brotliBytes": 1573 + }, + { + "id": "@sheetwrite/core/dist/grid.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 57258, + "gzipBytes": 15576, + "brotliBytes": 13854 + }, + { + "id": "@sheetwrite/core/dist/history.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 3349, + "gzipBytes": 1056, + "brotliBytes": 981 + }, + { + "id": "@sheetwrite/core/dist/hyperlink.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 4797, + "gzipBytes": 1870, + "brotliBytes": 1695 + }, + { + "id": "@sheetwrite/core/dist/input-controller.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 12824, + "gzipBytes": 3885, + "brotliBytes": 3476 + }, + { + "id": "@sheetwrite/core/dist/mutation-revision-index.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 1912, + "gzipBytes": 747, + "brotliBytes": 665 + }, + { + "id": "@sheetwrite/core/dist/number-format.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 5439, + "gzipBytes": 2239, + "brotliBytes": 2031 + }, + { + "id": "@sheetwrite/core/dist/overlay-painter.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 13233, + "gzipBytes": 4442, + "brotliBytes": 3960 + }, + { + "id": "@sheetwrite/core/dist/reference.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 1316, + "gzipBytes": 527, + "brotliBytes": 470 + }, + { + "id": "@sheetwrite/core/dist/render-coordinator.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 8753, + "gzipBytes": 2522, + "brotliBytes": 2289 + }, + { + "id": "@sheetwrite/core/dist/resize.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 260, + "gzipBytes": 197, + "brotliBytes": 177 + }, + { + "id": "@sheetwrite/core/dist/resource-accounting.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 4800, + "gzipBytes": 1924, + "brotliBytes": 1717 + }, + { + "id": "@sheetwrite/core/dist/search-controller.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 4391, + "gzipBytes": 1440, + "brotliBytes": 1305 + }, + { + "id": "@sheetwrite/core/dist/search-replace.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 360, + "gzipBytes": 227, + "brotliBytes": 197 + }, + { + "id": "@sheetwrite/core/dist/selection.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 2618, + "gzipBytes": 883, + "brotliBytes": 803 + }, + { + "id": "@sheetwrite/core/dist/sheet-lifecycle.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 2912, + "gzipBytes": 995, + "brotliBytes": 905 + }, + { + "id": "@sheetwrite/core/dist/sheet-name.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 474, + "gzipBytes": 332, + "brotliBytes": 306 + }, + { + "id": "@sheetwrite/core/dist/sheet-tabs.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 18847, + "gzipBytes": 4997, + "brotliBytes": 4476 + }, + { + "id": "@sheetwrite/core/dist/store.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 11105, + "gzipBytes": 3372, + "brotliBytes": 3017 + }, + { + "id": "@sheetwrite/core/dist/store/data-engine.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 48231, + "gzipBytes": 12979, + "brotliBytes": 11529 + }, + { + "id": "@sheetwrite/core/dist/store/mutation-policy.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 7060, + "gzipBytes": 2285, + "brotliBytes": 2082 + }, + { + "id": "@sheetwrite/core/dist/store/paged-dirty-preflight.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 9514, + "gzipBytes": 3260, + "brotliBytes": 2947 + }, + { + "id": "@sheetwrite/core/dist/store/ranges.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 5176, + "gzipBytes": 1704, + "brotliBytes": 1545 + }, + { + "id": "@sheetwrite/core/dist/store/snapshot-codec.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 2914, + "gzipBytes": 1166, + "brotliBytes": 1042 + }, + { + "id": "@sheetwrite/core/dist/store/view-state.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 7225, + "gzipBytes": 2532, + "brotliBytes": 2289 + }, + { + "id": "@sheetwrite/core/dist/store/window-reader.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 11909, + "gzipBytes": 4078, + "brotliBytes": 3697 + }, + { + "id": "@sheetwrite/core/dist/store/wire-tags.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 45, + "gzipBytes": 65, + "brotliBytes": 49 + }, + { + "id": "@sheetwrite/core/dist/style-actions.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 2693, + "gzipBytes": 1061, + "brotliBytes": 981 + }, + { + "id": "@sheetwrite/core/dist/style-dictionary.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 892, + "gzipBytes": 458, + "brotliBytes": 385 + }, + { + "id": "@sheetwrite/core/dist/toolbar.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 5855, + "gzipBytes": 2221, + "brotliBytes": 1945 + }, + { + "id": "@sheetwrite/core/dist/transaction-admission.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 580, + "gzipBytes": 304, + "brotliBytes": 269 + }, + { + "id": "@sheetwrite/core/dist/validation-editor.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 5176, + "gzipBytes": 1686, + "brotliBytes": 1461 + }, + { + "id": "@sheetwrite/core/dist/virtualization.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 506, + "gzipBytes": 255, + "brotliBytes": 224 + }, + { + "id": "@sheetwrite/core/dist/widget-theme.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 456, + "gzipBytes": 224, + "brotliBytes": 178 + }, + { + "id": "@sheetwrite/core/dist/workbook-table.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 3350, + "gzipBytes": 1369, + "brotliBytes": 1225 + }, + { + "id": "@sheetwrite/core/dist/worker-renderer.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 6183, + "gzipBytes": 2187, + "brotliBytes": 1919 + }, + { + "id": "@sheetwrite/wasm/loader-browser.mjs", + "owner": "@sheetwrite/wasm", + "attribution": "source-map", + "rawBytes": 111, + "gzipBytes": 120, + "brotliBytes": 102 + }, + { + "id": "@sheetwrite/wasm/loader-state.mjs", + "owner": "@sheetwrite/wasm", + "attribution": "source-map", + "rawBytes": 470, + "gzipBytes": 290, + "brotliBytes": 242 + }, + { + "id": "@sheetwrite/wasm/pkg/sheetwrite_wasm.js", + "owner": "@sheetwrite/wasm", + "attribution": "source-map", + "rawBytes": 21351, + "gzipBytes": 4679, + "brotliBytes": 4059 + }, + { + "id": "fixture/src/main.ts", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 100, + "gzipBytes": 108, + "brotliBytes": 88 + }, + { + "id": "vite:runtime", + "owner": "vite:runtime", + "attribution": "source-map", + "rawBytes": 1239, + "gzipBytes": 671, + "brotliBytes": 606 + } + ] + } + ], "assets": [ { "path": "test/bundler-fixtures/vite/dist/assets/core-BNMxIhFW.css", @@ -1301,54 +3895,54 @@ "sha256": "80b36f658c4b7f5cee2690544082216149a53601f3c8a81307d99b71fe6f8a19" }, { - "path": "test/bundler-fixtures/vite/dist/assets/core-Br9JSuUS.js", + "path": "test/bundler-fixtures/vite/dist/assets/core-DPVHP4sz.js", "kind": "javascript", "owner": "core-initial", "roles": ["core-initial"], "rawBytes": 220, "gzipBytes": 192, - "brotliBytes": 151, - "sha256": "14b2a44a246d1f987cd04d506201caa57d4c7deecf37f92054725a7159e639c6" + "brotliBytes": 152, + "sha256": "904de4d3d6b449f209dd11fec78965b6c676974fa058e0f0fad6ad6a088cecda" }, { - "path": "test/bundler-fixtures/vite/dist/assets/export-ng0TJT-k.js", + "path": "test/bundler-fixtures/vite/dist/assets/export-C24LpoPY.js", "kind": "javascript", "owner": "shared-initial", "roles": ["core-initial", "react-initial", "svelte-initial", "vue-initial"], - "rawBytes": 182245, - "gzipBytes": 50201, - "brotliBytes": 42752, - "sha256": "8500c3b214c1388477bce477ed99a9a9f80ea6b6832a56eee10d25266b3539ef" + "rawBytes": 184334, + "gzipBytes": 50884, + "brotliBytes": 43396, + "sha256": "1168bb0be17944f7da2202c645a5851d5f22a77f469e8c1022d85f09aa902724" }, { - "path": "test/bundler-fixtures/vite/dist/assets/grid-DbTceVj0.js", + "path": "test/bundler-fixtures/vite/dist/assets/grid-CcxWrpW9.js", "kind": "javascript", "owner": "shared-initial", "roles": ["core-initial", "react-initial", "svelte-initial", "vue-initial"], - "rawBytes": 274879, - "gzipBytes": 78335, - "brotliBytes": 65915, - "sha256": "515c4c42168e9000e00c98f703e6d9f7405874a4a0d45618fdf4e6974eda5698" + "rawBytes": 278645, + "gzipBytes": 79245, + "brotliBytes": 66601, + "sha256": "6eeb4018b88f32c84f4c0a9bbd398ecc3b2b37182d64536afb71c116c8daea95" }, { - "path": "test/bundler-fixtures/vite/dist/assets/index-Bsp4H2Vg.js", + "path": "test/bundler-fixtures/vite/dist/assets/index-DEwymOeA.js", "kind": "javascript", "owner": "xlsx-async", "roles": ["xlsx-async"], "rawBytes": 105506, "gzipBytes": 36963, - "brotliBytes": 32620, - "sha256": "8fcd327243286719da4cb85005cd9f767864682febd0e6da68ea21c35155e5bf" + "brotliBytes": 32602, + "sha256": "4c673c0f6e46efc55484c7143931570c68c3226c16978eb18ccb440cdd4501e1" }, { - "path": "test/bundler-fixtures/vite/dist/assets/lifecycle-Dd9gjJNa.js", + "path": "test/bundler-fixtures/vite/dist/assets/lifecycle-DovMfhQz.js", "kind": "javascript", "owner": "shared-initial", "roles": ["react-initial", "svelte-initial", "vue-initial"], "rawBytes": 13665, - "gzipBytes": 4569, - "brotliBytes": 4104, - "sha256": "969bbe0d673c0153fe2f6dc777b18cd7b8c9c66f8c68a4d567305c87a1a10dab" + "gzipBytes": 4570, + "brotliBytes": 4099, + "sha256": "9aadbe425054d77c1489fb73a73ad78e0ff09bdcfe2d95fbcf003489e39a8aab" }, { "path": "test/bundler-fixtures/vite/dist/assets/modulepreload-polyfill-B5Qt9EMX.js", @@ -1367,6 +3961,16 @@ "brotliBytes": 331, "sha256": "d2a32840421496e872ade591618d2fa5c33797605d1aec04301717e5a90757d0" }, + { + "path": "test/bundler-fixtures/vite/dist/assets/react-8Px03BgG.js", + "kind": "javascript", + "owner": "react-initial", + "roles": ["react-initial"], + "rawBytes": 190527, + "gzipBytes": 60324, + "brotliBytes": 52079, + "sha256": "382bd775172d273cb566605c0b98a700d006073564826c763d10a9dfd23218c1" + }, { "path": "test/bundler-fixtures/vite/dist/assets/react-bn7iQgEK.css", "kind": "css", @@ -1378,123 +3982,410 @@ "sha256": "f83ede118e63b7b6ac9011928df26934042997780b3d0469ec663f73b9853aa8" }, { - "path": "test/bundler-fixtures/vite/dist/assets/react-MPRmVc9a.js", - "kind": "javascript", - "owner": "react-initial", - "roles": ["react-initial"], - "rawBytes": 190527, - "gzipBytes": 60324, - "brotliBytes": 51997, - "sha256": "86326651cc067ac8c9737848ef7091bfe089a3bf2bd1893e54f5f61b225e1c0f" - }, - { - "path": "test/bundler-fixtures/vite/dist/assets/sheetwrite_wasm_bg-CpFKEODg.wasm", + "path": "test/bundler-fixtures/vite/dist/assets/sheetwrite_wasm_bg-DJDVXmlv.wasm", "kind": "wasm", "owner": "shared-initial", "roles": ["core-initial", "react-initial", "svelte-initial", "vue-initial"], - "rawBytes": 683490, - "gzipBytes": 268969, - "brotliBytes": 208727, - "sha256": "e22de324008292f9aa4218f0ce7d748c0fcec41a99473ead9f04f56c7862af0f" + "rawBytes": 695109, + "gzipBytes": 274036, + "brotliBytes": 212236, + "sha256": "17ec82bad3101080fcfa79d0107ec0d77ae6254c031faafa67bcdd38351aa329" }, { - "path": "test/bundler-fixtures/vite/dist/assets/svelte-CKlFB43x.js", + "path": "test/bundler-fixtures/vite/dist/assets/svelte-V1pmmKg4.js", "kind": "javascript", "owner": "svelte-initial", "roles": ["svelte-initial"], "rawBytes": 42135, "gzipBytes": 16295, - "brotliBytes": 14826, - "sha256": "c886e834857030e88041cbcffeb756abe3a336231b7440ec8a2c5f08ed16885a" + "brotliBytes": 14834, + "sha256": "99dc328c286108f7e5cd874f2b442cceb062a7ceaeb012ef2b3cb031260a4b2c" }, { - "path": "test/bundler-fixtures/vite/dist/assets/vue-BakzGof5.js", + "path": "test/bundler-fixtures/vite/dist/assets/vue-CcZwNgb4.js", "kind": "javascript", "owner": "vue-initial", "roles": ["vue-initial"], "rawBytes": 66456, "gzipBytes": 26046, - "brotliBytes": 23601, - "sha256": "a45dbe6644d59a1f44fe160ff2beb98114f0cbca7502b303c9ba7a6a63e1b629" + "brotliBytes": 23653, + "sha256": "117c707bc5477f6f63ab28108197ee65275325f3621d6353cfc60f2220a29777" }, { - "path": "test/bundler-fixtures/vite/dist/assets/worker-BAwzmSxl.js", + "path": "test/bundler-fixtures/vite/dist/assets/worker-B7mJ3QkU.js", "kind": "javascript", "owner": "worker-loader-initial", "roles": ["worker-loader-initial"], "rawBytes": 158, - "gzipBytes": 155, - "brotliBytes": 110, - "sha256": "3d93ba89b5c98860ead4289804270e7a7125c78ecdc0a66963b66c2cd3d4fbbb" + "gzipBytes": 152, + "brotliBytes": 134, + "sha256": "31c7b408f382717752f705e400d04d8dd9f87c3b412b38f7e7a41b90d8749098" }, { - "path": "test/bundler-fixtures/vite/dist/assets/worker-D699GEvh.js", + "path": "test/bundler-fixtures/vite/dist/assets/worker-jZA7ANVi.js", "kind": "javascript", "owner": "worker-async", "roles": ["worker-async"], - "rawBytes": 7337, - "gzipBytes": 1833, - "brotliBytes": 1632, - "sha256": "6f192d766bc5b31f639e9810317064c5f2f396ed46a6410fc84dd645251649ca" + "rawBytes": 7910, + "gzipBytes": 1992, + "brotliBytes": 1758, + "sha256": "bee28024b06c35206b58e978c099a024182a9f0cb8830e7e6dc3b1a2043682d7" }, { - "path": "test/bundler-fixtures/vite/dist/assets/xlsx-DbZE9eQm.js", + "path": "test/bundler-fixtures/vite/dist/assets/xlsx-BtccAyir.js", "kind": "javascript", "owner": "xlsx-loader-initial", "roles": ["xlsx-loader-initial"], "rawBytes": 1543, - "gzipBytes": 879, - "brotliBytes": 735, - "sha256": "521f85931a002649d7e2e1a6bad71a34c52a14808030bb134d02ab3e9c937d22" + "gzipBytes": 877, + "brotliBytes": 741, + "sha256": "58e2bfc1886487709ba59b34c37638a725180f99cd9015f9ee4e17e9617daca5" }, { - "path": "test/bundler-fixtures/vite/dist/recipe-worker-4zUNFFOW.js", + "path": "test/bundler-fixtures/vite/dist/recipe-worker-uE0NR-65.js", "kind": "javascript", "owner": "worker-async", "roles": ["worker-async"], - "rawBytes": 19485, - "gzipBytes": 7636, - "brotliBytes": 6974, - "sha256": "1f16ecc27a7d2ef610a36a998e15a17d617893b7e048c06c8a7d8f28f4337042" + "rawBytes": 19746, + "gzipBytes": 7771, + "brotliBytes": 7067, + "sha256": "5ca5b3437b07651a1e90c08b05035c5c550c69076c5d1cc9b4768ef6c3dc710a" } ] }, { "name": "webpack", "version": "5.102.1", + "provenance": { + "buildMode": "production", + "minified": true, + "minifier": { + "name": "terser-webpack-plugin", + "version": "5.6.1" + }, + "externals": [], + "target": "browser", + "sourceMaps": "hidden-external", + "attributionMethod": "source-map-generated-spans-with-explicit-opaque-assets-v2" + }, + "attribution": [ + { + "name": "core-first-paint", + "entry": "src/main.js", + "eagerImports": ["@sheetwrite/core#initSheetwrite"], + "assets": [ + { + "path": "test/bundler-fixtures/webpack/dist/main.js", + "sha256": "085a2abde87bc5fa8f082a3ab7c8f0f10b3bcd9247a7477ce2ae69de8f4e7c51" + } + ], + "generatedBytes": 28818, + "modules": [ + { + "id": "@sheetwrite/core/dist/errors.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 4870, + "gzipBytes": 1841, + "brotliBytes": 1620 + }, + { + "id": "@sheetwrite/core/dist/grid.js", + "owner": "@sheetwrite/core", + "attribution": "source-map", + "rawBytes": 98, + "gzipBytes": 101, + "brotliBytes": 74 + }, + { + "id": "@sheetwrite/wasm/loader-browser.mjs", + "owner": "@sheetwrite/wasm", + "attribution": "source-map", + "rawBytes": 94, + "gzipBytes": 108, + "brotliBytes": 87 + }, + { + "id": "@sheetwrite/wasm/loader-state.mjs", + "owner": "@sheetwrite/wasm", + "attribution": "source-map", + "rawBytes": 439, + "gzipBytes": 274, + "brotliBytes": 217 + }, + { + "id": "@sheetwrite/wasm/pkg/sheetwrite_wasm.js", + "owner": "@sheetwrite/wasm", + "attribution": "source-map", + "rawBytes": 21073, + "gzipBytes": 4585, + "brotliBytes": 3944 + }, + { + "id": "fixture/src/main.js", + "owner": "fixture", + "attribution": "source-map", + "rawBytes": 225, + "gzipBytes": 202, + "brotliBytes": 179 + }, + { + "id": "webpack:runtime", + "owner": "webpack:runtime", + "attribution": "source-map", + "rawBytes": 23, + "gzipBytes": 43, + "brotliBytes": 27 + }, + { + "id": "webpack:runtime/webpack/bootstrap", + "owner": "webpack:runtime", + "attribution": "source-map", + "rawBytes": 128, + "gzipBytes": 114, + "brotliBytes": 92 + }, + { + "id": "webpack:runtime/webpack/runtime/async module", + "owner": "webpack:runtime", + "attribution": "source-map", + "rawBytes": 946, + "gzipBytes": 521, + "brotliBytes": 485 + }, + { + "id": "webpack:runtime/webpack/runtime/define property getters", + "owner": "webpack:runtime", + "attribution": "source-map", + "rawBytes": 101, + "gzipBytes": 111, + "brotliBytes": 85 + }, + { + "id": "webpack:runtime/webpack/runtime/get javascript chunk filename", + "owner": "webpack:runtime", + "attribution": "source-map", + "rawBytes": 46, + "gzipBytes": 66, + "brotliBytes": 47 + }, + { + "id": "webpack:runtime/webpack/runtime/global", + "owner": "webpack:runtime", + "attribution": "source-map", + "rawBytes": 165, + "gzipBytes": 126, + "brotliBytes": 92 + }, + { + "id": "webpack:runtime/webpack/runtime/hasOwnProperty shorthand", + "owner": "webpack:runtime", + "attribution": "source-map", + "rawBytes": 59, + "gzipBytes": 76, + "brotliBytes": 63 + }, + { + "id": "webpack:runtime/webpack/runtime/jsonp chunk loading", + "owner": "webpack:runtime", + "attribution": "source-map", + "rawBytes": 71, + "gzipBytes": 84, + "brotliBytes": 61 + }, + { + "id": "webpack:runtime/webpack/runtime/publicPath", + "owner": "webpack:runtime", + "attribution": "source-map", + "rawBytes": 469, + "gzipBytes": 321, + "brotliBytes": 249 + }, + { + "id": "webpack:runtime/webpack/startup", + "owner": "webpack:runtime", + "attribution": "source-map", + "rawBytes": 11, + "gzipBytes": 31, + "brotliBytes": 15 + } + ] + } + ], "assets": [ { - "path": "test/bundler-fixtures/webpack/dist/assets/sheetwrite_wasm_bg-c2bcdba09f8dbe875a2b.wasm", + "path": "test/bundler-fixtures/webpack/dist/assets/sheetwrite_wasm_bg-e7d58d00f6347c2dfbf6.wasm", "kind": "wasm", "owner": "core-initial", "roles": ["core-initial"], - "rawBytes": 683490, - "gzipBytes": 268969, - "brotliBytes": 208727, - "sha256": "e22de324008292f9aa4218f0ce7d748c0fcec41a99473ead9f04f56c7862af0f" + "rawBytes": 695109, + "gzipBytes": 274036, + "brotliBytes": 212236, + "sha256": "17ec82bad3101080fcfa79d0107ec0d77ae6254c031faafa67bcdd38351aa329" }, { "path": "test/bundler-fixtures/webpack/dist/main.js", "kind": "javascript", "owner": "core-initial", "roles": ["core-initial"], - "rawBytes": 29855, - "gzipBytes": 7734, - "brotliBytes": 6765, - "sha256": "4ed915ffcfdad2404f919b9f2e331468386e3fcd88a584cc29a9305947f5807c" + "rawBytes": 28818, + "gzipBytes": 7593, + "brotliBytes": 6640, + "sha256": "085a2abde87bc5fa8f082a3ab7c8f0f10b3bcd9247a7477ce2ae69de8f4e7c51" }, { - "path": "test/bundler-fixtures/webpack/dist/worker-878-3756ccb083d655fdf3cc.js", + "path": "test/bundler-fixtures/webpack/dist/worker-566-d1e2cf43b18349bf337f.js", "kind": "javascript", "owner": "worker-async", "roles": ["worker-async"], - "rawBytes": 19245, - "gzipBytes": 7466, - "brotliBytes": 6781, - "sha256": "7fb1c6eefd60f0d45758724e7b57cac8268be95d3cb14e0419cc9288b6b7cd69" + "rawBytes": 19513, + "gzipBytes": 7608, + "brotliBytes": 6909, + "sha256": "1c5b998db3bdcf2997410c53e09753e50200b689fd3c6d412f4dcc97c99c6455" } ] } ], + "attributionFindings": { + "comparison": { + "entry": "core-first-paint", + "buildMode": "production", + "minified": true, + "externals": [], + "target": "browser", + "sourceMaps": "hidden-external", + "attributionMethod": "source-map-generated-spans-with-explicit-opaque-assets-v2", + "minifiers": { + "next": { + "name": "next-swc", + "version": "15.5.9" + }, + "vite": { + "name": "esbuild", + "version": "0.25.12" + } + }, + "fixtureAndConfigurationDifferences": [ + { + "bundler": "next", + "eagerImports": ["@sheetwrite/core#createGrid", "@sheetwrite/core#initSheetwrite"], + "nonSheetwriteRawBytes": 484154, + "opaqueFrameworkRawBytes": 112594 + }, + { + "bundler": "vite", + "eagerImports": ["@sheetwrite/core#createGrid", "@sheetwrite/core#initSheetwrite"], + "nonSheetwriteRawBytes": 23271, + "opaqueFrameworkRawBytes": 0 + } + ] + }, + "firstPaint": [ + { + "bundler": "next", + "generatedBytes": 917158, + "sheetwriteRawBytes": 433004, + "rootBarrelRawBytes": 0, + "eagerImports": ["@sheetwrite/core#createGrid", "@sheetwrite/core#initSheetwrite"] + }, + { + "bundler": "vite", + "generatedBytes": 463910, + "sheetwriteRawBytes": 440639, + "rootBarrelRawBytes": 0, + "eagerImports": ["@sheetwrite/core#createGrid", "@sheetwrite/core#initSheetwrite"] + } + ], + "subpaths": [ + { + "subpath": "sync", + "publicExportAdded": false, + "decision": "retain-root-export", + "reason": "Neither comparable first-paint graph retains this module, so a dedicated public subpath has no measured initial-bundle benefit.", + "retainedModules": [ + { + "bundler": "next", + "rawBytes": 0, + "brotliBytes": 0 + }, + { + "bundler": "vite", + "rawBytes": 0, + "brotliBytes": 0 + } + ], + "materialWinThreshold": { + "brotliBytes": 7680, + "percent": 10 + } + }, + { + "subpath": "collaboration", + "publicExportAdded": false, + "decision": "retain-root-export", + "reason": "Neither comparable first-paint graph retains this module, so a dedicated public subpath has no measured initial-bundle benefit.", + "retainedModules": [ + { + "bundler": "next", + "rawBytes": 0, + "brotliBytes": 0 + }, + { + "bundler": "vite", + "rawBytes": 0, + "brotliBytes": 0 + } + ], + "materialWinThreshold": { + "brotliBytes": 7680, + "percent": 10 + } + }, + { + "subpath": "rebase", + "publicExportAdded": false, + "decision": "retain-root-export", + "reason": "Neither comparable first-paint graph retains this module, so a dedicated public subpath has no measured initial-bundle benefit.", + "retainedModules": [ + { + "bundler": "next", + "rawBytes": 0, + "brotliBytes": 0 + }, + { + "bundler": "vite", + "rawBytes": 0, + "brotliBytes": 0 + } + ], + "materialWinThreshold": { + "brotliBytes": 7680, + "percent": 10 + } + }, + { + "subpath": "persistence", + "publicExportAdded": false, + "decision": "retain-root-export", + "reason": "Neither comparable first-paint graph retains this module, so a dedicated public subpath has no measured initial-bundle benefit.", + "retainedModules": [ + { + "bundler": "next", + "rawBytes": 0, + "brotliBytes": 0 + }, + { + "bundler": "vite", + "rawBytes": 0, + "brotliBytes": 0 + } + ], + "materialWinThreshold": { + "brotliBytes": 7680, + "percent": 10 + } + } + ] + }, "reproduction": "bun run size:report" } diff --git a/scripts/size-report.test.ts b/scripts/size-report.test.ts index 9579aa49..23893e1d 100644 --- a/scripts/size-report.test.ts +++ b/scripts/size-report.test.ts @@ -3,6 +3,16 @@ import { mkdir, mkdtemp, rm, symlink, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { + FIRST_PAINT_BROTLI_GATE_BYTES, + FIRST_PAINT_DEFERRED_MODULE, + firstPaintGate, + validateFirstPaintEvidence, +} from "./first-paint-evidence.js"; +import { + addPackageSizeMetrics, + assertAttributionAssetsFresh, + BUNDLER_SOURCE_MAP_MODE, + buildAttributionFindings, classifyPackedPath, compressedSizes, formatMetricDelta, @@ -13,6 +23,7 @@ import { SIZE_PROTOCOL_VERSION, summarizePack, validateBundlerEvidence, + validateComparableAttribution, validateSizeHistory, walkLogicalBytes, } from "./size-report.js"; @@ -39,15 +50,99 @@ function packJson(overrides: Record = {}): string { ]); } -function evidence(assets: unknown[]) { +function evidence( + assets: unknown[], + overrides: Record = {}, +): Record { + const initialPath = + (assets as Array<{ path?: unknown; kind?: unknown; roles?: unknown }>).find( + (asset) => + asset.kind === "javascript" && + Array.isArray(asset.roles) && + asset.roles.includes("core-initial"), + )?.path ?? "dist/main.js"; return { schemaVersion: SIZE_PROTOCOL_VERSION, bundler: "webpack", version: "5.102.1", assets, + provenance: { + buildMode: "production", + minified: true, + minifier: { name: "terser-webpack-plugin", version: "5.3.14" }, + externals: [], + target: "browser", + sourceMaps: BUNDLER_SOURCE_MAP_MODE, + attributionMethod: "source-map-generated-spans-with-explicit-opaque-assets-v2", + }, + attribution: [ + { + name: "core-first-paint", + entry: "src/main.js", + eagerImports: ["@sheetwrite/core#createGrid", "@sheetwrite/core#initSheetwrite"], + assets: [{ path: initialPath, sha256: "a".repeat(64) }], + generatedBytes: 10, + modules: [ + { + id: "@sheetwrite/core/dist/index.js", + owner: "@sheetwrite/core", + attribution: "source-map", + rawBytes: 10, + gzipBytes: 8, + brotliBytes: 6, + }, + ], + }, + ], + ...overrides, }; } +function comparableEvidence(bundler: "next" | "vite", overrides: Record = {}) { + const roles = + bundler === "next" + ? ["core-initial"] + : [ + "core-initial", + "react-initial", + "vue-initial", + "svelte-initial", + "worker-async", + "xlsx-async", + ]; + const assets = roles.map((role) => ({ + path: `dist/${role}.js`, + kind: "javascript", + owner: role, + roles: [role], + })); + assets.push({ + path: "dist/runtime.wasm", + kind: "wasm", + owner: "core-initial", + roles: ["core-initial"], + }); + return validateBundlerEvidence( + evidence(assets, { + bundler, + version: bundler === "next" ? "15.5.9" : "7.2.2", + provenance: { + buildMode: "production", + minified: true, + minifier: { + name: bundler === "next" ? "next-swc" : "esbuild", + version: bundler === "next" ? "15.5.9" : "0.25.12", + }, + externals: [], + target: "browser", + sourceMaps: BUNDLER_SOURCE_MAP_MODE, + attributionMethod: "source-map-generated-spans-with-explicit-opaque-assets-v2", + }, + ...overrides, + }), + ); +} + describe("npm pack parsing and classification", () => { it("parses a complete npm pack result and classifies packed bytes", () => { const result = parsePackJson(packJson()); @@ -62,6 +157,20 @@ describe("npm pack parsing and classification", () => { expect(classifyPackedPath("src/Grid.svelte")).toBe("runtime-source"); }); + it("rejects source maps in the published core package", () => { + const result = parsePackJson( + packJson({ + files: [ + { path: "dist/index.js.map", size: 2 }, + { path: "package.json", size: 1 }, + ], + }), + ); + expect(() => summarizePack("@sheetwrite/core", result)).toThrow( + "@sheetwrite/core published files must exclude source maps", + ); + }); + it("fails closed on malformed, duplicate, and unclassified pack data", () => { expect(() => parsePackJson("not-json")).toThrow("Malformed npm pack JSON"); expect(() => parsePackJson("[]")).toThrow("exactly one result"); @@ -83,6 +192,22 @@ describe("npm pack parsing and classification", () => { }); }); +describe("package size metric surfaces", () => { + it("labels transfer and install bytes separately from browser payload bytes", () => { + const metrics: Record = {}; + addPackageSizeMetrics(metrics, summarizePack("@sheetwrite/test", parsePackJson(packJson()))); + + expect(metrics["package.@sheetwrite/test.tarballBytes"]?.category).toBe("package-tarball"); + expect(metrics["package.@sheetwrite/test.unpackedBytes"]?.category).toBe("package-unpacked"); + expect(metrics["package.@sheetwrite/test.runtimeJsBytes"]?.category).toBe( + "package-unpacked-runtime-js", + ); + expect(Object.values(metrics).some((metric) => metric.category.startsWith("browser-"))).toBe( + false, + ); + }); +}); + describe("deterministic transfer and install bytes", () => { it("uses stable gzip and Brotli settings", () => { const input = new TextEncoder().encode("sheetwrite".repeat(100)); @@ -163,6 +288,95 @@ describe("manifest ownership", () => { ), ).toThrow("leaked into an initial entry"); }); + + it("rejects absent or incomplete module attribution", () => { + expect(() => validateBundlerEvidence(evidence(complete, { attribution: [] }))).toThrow( + "missing module attribution", + ); + const incomplete = evidence(complete); + const attribution = incomplete.attribution as Array<{ + modules: Array<{ owner?: string }>; + }>; + delete attribution[0]?.modules[0]?.owner; + expect(() => validateBundlerEvidence(incomplete)).toThrow("lacks ownership or sizes"); + }); + + it("requires explicit ownership for opaque framework assets", () => { + const opaque = evidence(complete); + const modules = opaque.attribution as Array<{ + modules: Array<{ id: string; owner: string; attribution: string }>; + }>; + const module = modules[0]?.modules[0]; + if (module === undefined) throw new Error("Attribution fixture lost its module"); + module.id = "webpack:opaque/polyfills.js"; + module.owner = "webpack:opaque-framework"; + module.attribution = "opaque-asset"; + expect(validateBundlerEvidence(opaque).attribution[0]?.modules[0]?.attribution).toBe( + "opaque-asset", + ); + module.owner = "fixture"; + expect(() => validateBundlerEvidence(opaque)).toThrow("invalid opaque ownership"); + }); + it("rejects attribution without an asset digest", () => { + const missingHash = evidence(complete); + const attributedAssets = missingHash.attribution as Array<{ + assets: Array<{ sha256?: string }>; + }>; + delete attributedAssets[0]?.assets[0]?.sha256; + expect(() => validateBundlerEvidence(missingHash)).toThrow("attribution entry 0 is incomplete"); + }); + + it("rejects stale same-length attribution by asset digest", () => { + const parsed = validateBundlerEvidence(evidence(complete)); + const path = parsed.attribution[0]?.assets[0]?.path; + if (path === undefined) throw new Error("Attribution fixture lost its initial asset"); + expect(() => + assertAttributionAssetsFresh(parsed, [{ path, rawBytes: 10, sha256: "a".repeat(64) }]), + ).not.toThrow(); + expect(() => + assertAttributionAssetsFresh(parsed, [{ path, rawBytes: 10, sha256: "b".repeat(64) }]), + ).toThrow("attribution asset SHA-256 changed"); + }); + + it("accepts controlled Next.js and Vite provenance and separates measured causes", () => { + const next = comparableEvidence("next"); + const vite = comparableEvidence("vite"); + expect(() => validateComparableAttribution([next, vite])).not.toThrow(); + + const findings = buildAttributionFindings([next, vite]); + expect(findings.comparison.minifiers).toEqual({ + next: { name: "next-swc", version: "15.5.9" }, + vite: { name: "esbuild", version: "0.25.12" }, + }); + expect(findings.firstPaint.map((entry) => entry.rootBarrelRawBytes)).toEqual([10, 10]); + expect(findings.subpaths.every((entry) => entry.decision === "retain-root-export")).toBe(true); + }); + + it("rejects incomparable modes, externals, and eager imports", () => { + const next = comparableEvidence("next"); + const vite = comparableEvidence("vite"); + const development = comparableEvidence("vite", { + provenance: { ...vite.provenance, buildMode: "development" }, + }); + expect(() => validateComparableAttribution([next, development])).toThrow( + "not a minified production browser build", + ); + const externalized = comparableEvidence("vite", { + provenance: { ...vite.provenance, externals: ["react"] }, + }); + expect(() => validateComparableAttribution([next, externalized])).toThrow( + "incomparable externals", + ); + const differentImports = comparableEvidence("vite", { + attribution: vite.attribution.map((entry) => ({ + ...entry, + eagerImports: ["@sheetwrite/core#createGrid"], + })), + }); + expect(() => validateComparableAttribution([next, differentImports])).toThrow( + "eager imports differ", + ); + }); }); describe("release size history", () => { @@ -200,3 +414,148 @@ describe("release size history", () => { ).toThrow("Duplicate size release"); }); }); + +function firstPaintEvidence(): Record { + const fixture = (bundler: "next" | "vite") => ({ + bundler, + version: bundler === "next" ? "15.5.9" : "7.2.2", + provenance: { + buildMode: "production", + minified: true, + minifier: { + name: bundler === "next" ? "next-swc" : "esbuild", + version: bundler === "next" ? "15.5.9" : "0.25.12", + }, + externals: [], + target: "browser", + sourceMaps: BUNDLER_SOURCE_MAP_MODE, + attributionMethod: "source-map-generated-spans-with-explicit-opaque-assets-v2", + }, + eagerImports: ["@sheetwrite/core#createGrid", "@sheetwrite/core#initSheetwrite"], + baseline: { + initialJavaScript: { rawBytes: 200_000, gzipBytes: 70_000, brotliBytes: 60_000 }, + timing: { samplesMs: new Array(10).fill(20), medianMs: 20, p95Ms: 20 }, + checksum: "a".repeat(64), + }, + candidate: { + initialJavaScript: { rawBytes: 160_000, gzipBytes: 56_000, brotliBytes: 50_000 }, + timing: { samplesMs: new Array(10).fill(19), medianMs: 19, p95Ms: 19 }, + checksum: "a".repeat(64), + deferredChunk: "assets/clipboard-controller.js", + interaction: { + module: FIRST_PAINT_DEFERRED_MODULE, + loaded: true, + successOutcome: "empty", + errorOutcome: "unsupported", + rejected: false, + }, + }, + delta: { + rawBytes: 40_000, + gzipBytes: 14_000, + brotliBytes: 10_000, + brotliPercent: (10_000 / 60_000) * 100, + }, + }); + return { + schemaVersion: SIZE_PROTOCOL_VERSION, + kind: "first-paint-counterfactual", + candidate: { + fixtureOnly: true, + shipping: false, + deferredModules: [FIRST_PAINT_DEFERRED_MODULE], + }, + thresholds: { + brotliBytes: FIRST_PAINT_BROTLI_GATE_BYTES, + percent: 10, + timing: "median-and-p95-no-slower", + }, + fixtures: [fixture("next"), fixture("vite")], + }; +} + +describe("first-paint counterfactual evidence", () => { + it("admits complete comparable evidence only when both size and timing gates pass", () => { + const evidence = firstPaintEvidence(); + expect(validateFirstPaintEvidence(evidence).fixtures).toHaveLength(2); + expect(firstPaintGate(evidence)).toEqual({ admitted: true, reasons: [] }); + }); + + it("rejects missing size, timing, checksum, and interaction fields", () => { + for (const field of ["initialJavaScript", "timing", "checksum"] as const) { + const evidence = structuredClone(firstPaintEvidence()); + const baseline = (evidence.fixtures as Array>)[0]!.baseline as Record< + string, + unknown + >; + delete baseline[field]; + expect(() => validateFirstPaintEvidence(evidence)).toThrow(); + } + const evidence = structuredClone(firstPaintEvidence()); + delete ( + (evidence.fixtures as Array>)[0]!.candidate as Record + ).interaction; + expect(() => validateFirstPaintEvidence(evidence)).toThrow("interaction evidence is missing"); + }); + + it("rejects incomparable semantics, provenance, samples, and recorded deltas", () => { + const mutations = [ + (evidence: Record) => { + const fixture = (evidence.fixtures as Array>)[0]!; + (fixture.candidate as Record).checksum = "b".repeat(64); + }, + (evidence: Record) => { + const fixture = (evidence.fixtures as Array>)[0]!; + (fixture.provenance as Record).buildMode = "development"; + }, + (evidence: Record) => { + const fixture = (evidence.fixtures as Array>)[0]!; + const candidate = fixture.candidate as Record; + (candidate.timing as Record).samplesMs = [19]; + }, + (evidence: Record) => { + const fixture = (evidence.fixtures as Array>)[0]!; + (fixture.delta as Record).brotliBytes = 9_999; + }, + ]; + for (const mutate of mutations) { + const evidence = structuredClone(firstPaintEvidence()); + mutate(evidence); + expect(() => validateFirstPaintEvidence(evidence)).toThrow(); + } + }); + + it("fails closed on either insufficient reduction or slower first paint", () => { + const evidence = firstPaintEvidence(); + const vite = (evidence.fixtures as Array>)[1]!; + const baseline = vite.baseline as Record; + const candidate = vite.candidate as Record; + candidate.initialJavaScript = { + rawBytes: 210_000, + gzipBytes: 75_000, + brotliBytes: 62_000, + }; + vite.delta = { + rawBytes: -10_000, + gzipBytes: -5_000, + brotliBytes: -2_000, + brotliPercent: (-2_000 / 60_000) * 100, + }; + candidate.timing = { + samplesMs: new Array(10).fill(21), + medianMs: 21, + p95Ms: 21, + }; + baseline.timing = { + samplesMs: new Array(10).fill(20), + medianMs: 20, + p95Ms: 20, + }; + const decision = firstPaintGate(evidence); + expect(decision.admitted).toBe(false); + expect(decision.reasons).toContain("vite Brotli reduction is below 7680 bytes"); + expect(decision.reasons).toContain("vite Brotli reduction is below 10%"); + expect(decision.reasons).toContain("vite candidate median first paint is slower"); + expect(decision.reasons).toContain("vite candidate p95 first paint is slower"); + }); +}); diff --git a/scripts/size-report.ts b/scripts/size-report.ts index 612abb22..6d96d1e0 100644 --- a/scripts/size-report.ts +++ b/scripts/size-report.ts @@ -12,14 +12,19 @@ import { writeFile, } from "node:fs/promises"; import { tmpdir } from "node:os"; -import { basename, join, relative, resolve, sep } from "node:path"; +import { basename, dirname, join, relative, resolve, sep } from "node:path"; import { brotliCompressSync, constants, gzipSync } from "node:zlib"; -import { readReleaseManifestDigest, verifyReleaseArtifacts } from "./release-artifacts.js"; +import { + assertPublishedFilePolicy, + readReleaseManifestDigest, + verifyReleaseArtifacts, +} from "./release-artifacts.js"; import { bindCanonicalTarballIntegrities } from "./release-lock-integrity.mjs"; -export const SIZE_PROTOCOL_VERSION = 1; +export const SIZE_PROTOCOL_VERSION = 2; export const SIZE_TOOL_NAME = "sheetwrite-delivery-size"; -export const SIZE_TOOL_VERSION = "1.0.0"; +export const SIZE_TOOL_VERSION = "2.0.0"; +export const BUNDLER_SOURCE_MAP_MODE = "hidden-external"; export type MetricUnit = "bytes" | "count"; export type PackedCategory = @@ -69,12 +74,45 @@ export interface BundlerAsset { owner: string; roles: string[]; } +export interface BundlerProvenance { + buildMode: string; + minified: boolean; + minifier: { name: string; version: string }; + externals: string[]; + target: string; + sourceMaps: string; + attributionMethod: string; +} + +export interface BundlerModuleAttribution { + id: string; + owner: string; + attribution: "source-map" | "opaque-asset"; + rawBytes: number; + gzipBytes: number; + brotliBytes: number; +} +export interface BundlerAttributedAsset { + path: string; + sha256: string; +} + +export interface BundlerEntryAttribution { + name: string; + entry: string; + eagerImports: string[]; + assets: BundlerAttributedAsset[]; + generatedBytes: number; + modules: BundlerModuleAttribution[]; +} export interface BundlerEvidence { schemaVersion: number; bundler: "next" | "vite" | "webpack"; version: string; assets: BundlerAsset[]; + provenance: BundlerProvenance; + attribution: BundlerEntryAttribution[]; } export interface PackageReport { @@ -98,6 +136,43 @@ export interface AssetReport extends BundlerAsset { brotliBytes: number; sha256: string; } +export interface AttributionFindings { + comparison: { + entry: "core-first-paint"; + buildMode: string; + minified: true; + externals: string[]; + target: string; + sourceMaps: string; + attributionMethod: string; + minifiers: Record<"next" | "vite", { name: string; version: string }>; + fixtureAndConfigurationDifferences: Array<{ + bundler: "next" | "vite"; + eagerImports: string[]; + nonSheetwriteRawBytes: number; + opaqueFrameworkRawBytes: number; + }>; + }; + firstPaint: Array<{ + bundler: "next" | "vite"; + generatedBytes: number; + sheetwriteRawBytes: number; + rootBarrelRawBytes: number; + eagerImports: string[]; + }>; + subpaths: Array<{ + subpath: "sync" | "collaboration" | "rebase" | "persistence"; + publicExportAdded: false; + decision: "retain-root-export" | "requires-isolated-subpath-proof"; + reason: string; + retainedModules: Array<{ + bundler: "next" | "vite"; + rawBytes: number; + brotliBytes: number; + }>; + materialWinThreshold: { brotliBytes: 7680; percent: 10 }; + }>; +} export interface SizeReport { schemaVersion: number; @@ -112,8 +187,11 @@ export interface SizeReport { bundlers: Array<{ name: BundlerEvidence["bundler"]; version: string; + provenance: BundlerProvenance; + attribution: BundlerEntryAttribution[]; assets: AssetReport[]; }>; + attributionFindings: AttributionFindings; reproduction: string; } @@ -157,6 +235,9 @@ const requiredBundlerRoles: Record file.path), + ); const categories: Record = { css: 0, declarations: 0, @@ -319,7 +404,11 @@ export function validateBundlerEvidence(value: unknown): BundlerEvidence { if (!(["next", "vite", "webpack"] as unknown[]).includes(candidate.bundler)) { throw new Error(`Unknown bundler evidence owner: ${String(candidate.bundler)}`); } - if (typeof candidate.version !== "string" || !Array.isArray(candidate.assets)) { + if ( + typeof candidate.version !== "string" || + candidate.version.length === 0 || + !Array.isArray(candidate.assets) + ) { throw new Error("Bundler evidence has invalid version or assets"); } const bundler = candidate.bundler as BundlerEvidence["bundler"]; @@ -368,7 +457,299 @@ export function validateBundlerEvidence(value: unknown): BundlerEvidence { throw new Error(`${bundler} async asset ${asset.path} leaked into an initial entry`); } } - return { schemaVersion: SIZE_PROTOCOL_VERSION, bundler, version: candidate.version, assets }; + + if (candidate.provenance === null || typeof candidate.provenance !== "object") { + throw new Error(`${bundler} is missing build provenance`); + } + const provenanceValue = candidate.provenance as Record; + const minifierValue = provenanceValue.minifier; + if ( + typeof provenanceValue.buildMode !== "string" || + provenanceValue.buildMode.length === 0 || + typeof provenanceValue.minified !== "boolean" || + minifierValue === null || + typeof minifierValue !== "object" || + typeof (minifierValue as Record).name !== "string" || + (minifierValue as Record).name === "" || + typeof (minifierValue as Record).version !== "string" || + (minifierValue as Record).version === "" || + !Array.isArray(provenanceValue.externals) || + !provenanceValue.externals.every( + (external) => typeof external === "string" && external.length > 0, + ) || + typeof provenanceValue.target !== "string" || + provenanceValue.target.length === 0 || + provenanceValue.sourceMaps !== BUNDLER_SOURCE_MAP_MODE || + provenanceValue.attributionMethod !== ATTRIBUTION_METHOD + ) { + throw new Error(`${bundler} build provenance is malformed or unsupported`); + } + const externals = provenanceValue.externals as string[]; + if (new Set(externals).size !== externals.length) { + throw new Error(`${bundler} build provenance contains duplicate externals`); + } + const provenance: BundlerProvenance = { + buildMode: provenanceValue.buildMode, + minified: provenanceValue.minified, + minifier: { + name: (minifierValue as Record).name as string, + version: (minifierValue as Record).version as string, + }, + externals: [...externals].sort(), + target: provenanceValue.target, + sourceMaps: provenanceValue.sourceMaps, + attributionMethod: provenanceValue.attributionMethod, + }; + + if (!Array.isArray(candidate.attribution) || candidate.attribution.length === 0) { + throw new Error(`${bundler} is missing module attribution`); + } + const assetByPath = new Map(assets.map((asset) => [asset.path, asset])); + const seenEntries = new Set(); + const attribution = candidate.attribution.map((value, entryIndex) => { + if (value === null || typeof value !== "object") { + throw new Error(`${bundler} attribution entry ${entryIndex} is malformed`); + } + const entry = value as Record; + if ( + typeof entry.name !== "string" || + entry.name.length === 0 || + typeof entry.entry !== "string" || + entry.entry.length === 0 || + !Array.isArray(entry.eagerImports) || + entry.eagerImports.length === 0 || + !entry.eagerImports.every( + (specifier) => typeof specifier === "string" && specifier.length > 0, + ) || + !Array.isArray(entry.assets) || + entry.assets.length === 0 || + !entry.assets.every( + (asset) => + asset !== null && + typeof asset === "object" && + typeof (asset as Record).path === "string" && + ((asset as Record).path as string).length > 0 && + typeof (asset as Record).sha256 === "string" && + /^[a-f0-9]{64}$/.test((asset as Record).sha256 as string), + ) || + !isNonNegativeInteger(entry.generatedBytes) || + entry.generatedBytes === 0 || + !Array.isArray(entry.modules) || + entry.modules.length === 0 + ) { + throw new Error(`${bundler} attribution entry ${entryIndex} is incomplete`); + } + if (seenEntries.has(entry.name)) { + throw new Error(`${bundler} contains duplicate attribution entry ${entry.name}`); + } + seenEntries.add(entry.name); + const attributedAssets = (entry.assets as Array>).map((asset) => ({ + path: asset.path as string, + sha256: asset.sha256 as string, + })); + const attributedPaths = attributedAssets.map((asset) => asset.path); + if (new Set(attributedPaths).size !== attributedPaths.length) { + throw new Error(`${bundler} ${entry.name} contains duplicate attributed assets`); + } + for (const { path } of attributedAssets) { + const asset = assetByPath.get(path); + if (asset === undefined || asset.kind !== "javascript") { + throw new Error(`${bundler} ${entry.name} attributes unknown JavaScript asset ${path}`); + } + } + const seenModules = new Set(); + const modules = entry.modules.map((value, moduleIndex) => { + if (value === null || typeof value !== "object") { + throw new Error(`${bundler} ${entry.name} module ${moduleIndex} is malformed`); + } + const module = value as Record; + if ( + typeof module.id !== "string" || + module.id.length === 0 || + typeof module.owner !== "string" || + module.owner.length === 0 || + module.owner === "unclassified" || + !(module.attribution === "source-map" || module.attribution === "opaque-asset") || + !isNonNegativeInteger(module.rawBytes) || + module.rawBytes === 0 || + !isNonNegativeInteger(module.gzipBytes) || + module.gzipBytes === 0 || + !isNonNegativeInteger(module.brotliBytes) || + module.brotliBytes === 0 + ) { + throw new Error(`${bundler} ${entry.name} module ${moduleIndex} lacks ownership or sizes`); + } + const opaqueIdentity = + module.owner === `${bundler}:opaque-framework` && + (module.id as string).startsWith(`${bundler}:opaque/`); + if ((module.attribution === "opaque-asset") !== opaqueIdentity) { + throw new Error( + `${bundler} ${entry.name} module ${moduleIndex} has invalid opaque ownership`, + ); + } + if (seenModules.has(module.id)) { + throw new Error(`${bundler} ${entry.name} contains duplicate module ${module.id}`); + } + seenModules.add(module.id); + return { + id: module.id, + owner: module.owner, + attribution: module.attribution, + rawBytes: module.rawBytes, + gzipBytes: module.gzipBytes, + brotliBytes: module.brotliBytes, + } as BundlerModuleAttribution; + }); + const attributedBytes = modules.reduce((sum, module) => sum + module.rawBytes, 0); + if (attributedBytes !== entry.generatedBytes) { + throw new Error( + `${bundler} ${entry.name} module bytes ${attributedBytes} do not equal generated bytes ${entry.generatedBytes}`, + ); + } + return { + name: entry.name, + entry: entry.entry, + eagerImports: [...new Set(entry.eagerImports as string[])].sort(), + assets: attributedAssets.sort((left, right) => left.path.localeCompare(right.path)), + generatedBytes: entry.generatedBytes, + modules: modules.sort((left, right) => left.id.localeCompare(right.id)), + } as BundlerEntryAttribution; + }); + if (!seenEntries.has(COMPARABLE_ENTRY)) { + throw new Error(`${bundler} is missing ${COMPARABLE_ENTRY} module attribution`); + } + return { + schemaVersion: SIZE_PROTOCOL_VERSION, + bundler, + version: candidate.version, + assets, + provenance, + attribution, + }; +} + +export function validateComparableAttribution(evidence: readonly BundlerEvidence[]): void { + const byBundler = new Map(evidence.map((entry) => [entry.bundler, entry])); + const next = byBundler.get("next"); + const vite = byBundler.get("vite"); + if (next === undefined || vite === undefined) { + throw new Error("Comparable attribution requires both Next.js and Vite evidence"); + } + for (const entry of [next, vite]) { + if ( + entry.provenance.buildMode !== "production" || + entry.provenance.minified !== true || + entry.provenance.target !== "browser" || + entry.provenance.sourceMaps !== BUNDLER_SOURCE_MAP_MODE || + entry.provenance.attributionMethod !== ATTRIBUTION_METHOD + ) { + throw new Error(`${entry.bundler} attribution is not a minified production browser build`); + } + } + for (const field of [ + "buildMode", + "minified", + "target", + "sourceMaps", + "attributionMethod", + ] as const) { + if (next.provenance[field] !== vite.provenance[field]) { + throw new Error(`Next.js and Vite attribution differ in ${field}`); + } + } + if (JSON.stringify(next.provenance.externals) !== JSON.stringify(vite.provenance.externals)) { + throw new Error("Next.js and Vite attribution use incomparable externals"); + } + const nextEntry = next.attribution.find((entry) => entry.name === COMPARABLE_ENTRY); + const viteEntry = vite.attribution.find((entry) => entry.name === COMPARABLE_ENTRY); + if (nextEntry === undefined || viteEntry === undefined) { + throw new Error(`Comparable attribution is missing ${COMPARABLE_ENTRY}`); + } + if (JSON.stringify(nextEntry.eagerImports) !== JSON.stringify(viteEntry.eagerImports)) { + throw new Error("Next.js and Vite first-paint eager imports differ"); + } +} +export function buildAttributionFindings( + evidence: readonly BundlerEvidence[], +): AttributionFindings { + validateComparableAttribution(evidence); + const comparable = (bundler: "next" | "vite") => { + const owner = evidence.find((entry) => entry.bundler === bundler); + const entry = owner?.attribution.find((candidate) => candidate.name === COMPARABLE_ENTRY); + if (owner === undefined || entry === undefined) { + throw new Error(`Missing ${bundler} ${COMPARABLE_ENTRY} attribution`); + } + return { owner, entry }; + }; + const next = comparable("next"); + const vite = comparable("vite"); + const pairs = [next, vite] as const; + const firstPaint = pairs.map(({ owner, entry }) => ({ + bundler: owner.bundler as "next" | "vite", + generatedBytes: entry.generatedBytes, + sheetwriteRawBytes: entry.modules + .filter((module) => module.owner === "@sheetwrite/core") + .reduce((sum, module) => sum + module.rawBytes, 0), + rootBarrelRawBytes: entry.modules + .filter( + (module) => + module.owner === "@sheetwrite/core" && + /(?:^|\/)(?:dist\/index\.js|src\/index\.ts)$/.test(module.id), + ) + .reduce((sum, module) => sum + module.rawBytes, 0), + eagerImports: entry.eagerImports, + })); + const subpaths: AttributionFindings["subpaths"] = SUBPATH_CANDIDATES.map((subpath) => { + const modulePattern = new RegExp(`(?:^|/)(?:dist/${subpath}\\.js|src/${subpath}\\.ts)$`); + const retainedModules = pairs.map(({ owner, entry }) => { + const modules = entry.modules.filter( + (module) => module.owner === "@sheetwrite/core" && modulePattern.test(module.id), + ); + return { + bundler: owner.bundler as "next" | "vite", + rawBytes: modules.reduce((sum, module) => sum + module.rawBytes, 0), + brotliBytes: modules.reduce((sum, module) => sum + module.brotliBytes, 0), + }; + }); + const retained = retainedModules.some((measurement) => measurement.rawBytes > 0); + return { + subpath, + publicExportAdded: false, + decision: retained ? "requires-isolated-subpath-proof" : "retain-root-export", + reason: retained + ? "The module is present in a comparable first-paint graph, but attribution alone does not prove the counterfactual bundle saving required for a public subpath." + : "Neither comparable first-paint graph retains this module, so a dedicated public subpath has no measured initial-bundle benefit.", + retainedModules, + materialWinThreshold: { brotliBytes: 7680, percent: 10 }, + }; + }); + return { + comparison: { + entry: COMPARABLE_ENTRY, + buildMode: next.owner.provenance.buildMode, + minified: true, + externals: next.owner.provenance.externals, + target: next.owner.provenance.target, + sourceMaps: next.owner.provenance.sourceMaps, + attributionMethod: next.owner.provenance.attributionMethod, + minifiers: { + next: next.owner.provenance.minifier, + vite: vite.owner.provenance.minifier, + }, + fixtureAndConfigurationDifferences: pairs.map(({ owner, entry }) => ({ + bundler: owner.bundler as "next" | "vite", + eagerImports: entry.eagerImports, + nonSheetwriteRawBytes: entry.modules + .filter((module) => module.owner !== "@sheetwrite/core") + .reduce((sum, module) => sum + module.rawBytes, 0), + opaqueFrameworkRawBytes: entry.modules + .filter((module) => module.attribution === "opaque-asset") + .reduce((sum, module) => sum + module.rawBytes, 0), + })), + }, + firstPaint, + subpaths, + }; } function processEnvironment(): Record { @@ -420,6 +801,31 @@ function rewriteWorkspaceRanges( ); } +async function copyManifestEntry( + sourceRoot: string, + packageRoot: string, + entry: string, +): Promise { + if (!/[*?[\]{}]/u.test(entry)) { + await cp(join(sourceRoot, entry), join(packageRoot, entry), { recursive: true }); + return; + } + const matches = Array.from( + new Bun.Glob(entry).scanSync({ + cwd: sourceRoot, + dot: true, + onlyFiles: true, + followSymlinks: false, + }), + ); + if (matches.length === 0) throw new Error(`Package file pattern matched nothing: ${entry}`); + for (const path of matches) { + const target = join(packageRoot, path); + await mkdir(dirname(target), { recursive: true }); + await cp(join(sourceRoot, path), target); + } +} + async function packPackages(temporaryRoot: string): Promise { const stageRoot = join(temporaryRoot, "stage"); const tarballRoot = join(temporaryRoot, "tarballs"); @@ -444,7 +850,7 @@ async function packPackages(temporaryRoot: string): Promise { const packageRoot = join(stageRoot, basename(directory)); await mkdir(packageRoot, { recursive: true }); for (const path of sourceManifest.files ?? []) { - await cp(join(sourceRoot, path), join(packageRoot, path), { recursive: true }); + await copyManifestEntry(sourceRoot, packageRoot, path); } await cp(join(repositoryRoot, "LICENSE"), join(packageRoot, "LICENSE")); await cp(join(sourceRoot, "README.md"), join(packageRoot, "README.md")); @@ -604,6 +1010,7 @@ async function loadBundlerEvidence( const path = join(bundlerEvidenceRoot, `${bundler}.json`); evidence.push(validateBundlerEvidence(await readJson(path))); } + validateComparableAttribution(evidence); return evidence; } @@ -620,11 +1027,82 @@ async function reportAsset(asset: BundlerAsset): Promise { sha256: createHash("sha256").update(content).digest("hex"), }; } +export function assertAttributionAssetsFresh( + evidence: Pick, + assets: readonly Pick[], +): void { + const assetByPath = new Map(assets.map((asset) => [asset.path, asset])); + for (const entry of evidence.attribution) { + let generatedBytes = 0; + for (const attributed of entry.assets) { + const asset = assetByPath.get(attributed.path); + if (asset === undefined) { + throw new Error( + `${evidence.bundler} ${entry.name} attribution asset disappeared: ${attributed.path}`, + ); + } + if (asset.sha256 !== attributed.sha256) { + throw new Error( + `${evidence.bundler} ${entry.name} attribution asset SHA-256 changed: ${attributed.path}`, + ); + } + generatedBytes += asset.rawBytes; + } + if (generatedBytes !== entry.generatedBytes) { + throw new Error( + `${evidence.bundler} ${entry.name} generated bytes changed after attribution`, + ); + } + } +} function metricSegment(value: string): string { return value.replace(/[^a-zA-Z0-9]+(.)/g, (_, next: string) => next.toUpperCase()); } +export function addPackageSizeMetrics( + metrics: Record, + report: PackageReport, +): void { + const prefix = `package.${report.name}`; + addMetric( + metrics, + `${prefix}.tarballBytes`, + report.tarballBytes, + "bytes", + "package-tarball", + report.name, + ); + addMetric( + metrics, + `${prefix}.unpackedBytes`, + report.unpackedBytes, + "bytes", + "package-unpacked", + report.name, + ); + addMetric( + metrics, + `${prefix}.fileCount`, + report.fileCount, + "count", + "package-files", + report.name, + ); + for (const [category, bytes] of Object.entries(report.categories).sort(([left], [right]) => + left.localeCompare(right), + )) { + addMetric( + metrics, + `${prefix}.${metricSegment(category)}Bytes`, + bytes, + "bytes", + `package-unpacked-${category}`, + report.name, + ); + } +} + async function buildSizeReport( reuseBundlers: boolean, artifactDirectory?: string, @@ -666,54 +1144,24 @@ async function buildSizeReport( } const bundlerEvidence = await loadBundlerEvidence(reuseBundlers, artifactDirectory); + const attributionFindings = buildAttributionFindings(bundlerEvidence); const bundlers: SizeReport["bundlers"] = []; for (const evidence of bundlerEvidence) { const assets = await Promise.all(evidence.assets.map(reportAsset)); assets.sort((left, right) => left.path.localeCompare(right.path)); - bundlers.push({ name: evidence.bundler, version: evidence.version, assets }); + assertAttributionAssetsFresh(evidence, assets); + bundlers.push({ + name: evidence.bundler, + version: evidence.version, + provenance: evidence.provenance, + attribution: evidence.attribution, + assets, + }); } bundlers.sort((left, right) => left.name.localeCompare(right.name)); const metrics: Record = {}; - for (const entry of packedPackages) { - const prefix = `package.${entry.name}`; - addMetric( - metrics, - `${prefix}.tarballBytes`, - entry.report.tarballBytes, - "bytes", - "package", - entry.name, - ); - addMetric( - metrics, - `${prefix}.unpackedBytes`, - entry.report.unpackedBytes, - "bytes", - "package", - entry.name, - ); - addMetric( - metrics, - `${prefix}.fileCount`, - entry.report.fileCount, - "count", - "package", - entry.name, - ); - for (const [category, bytes] of Object.entries(entry.report.categories).sort( - ([left], [right]) => left.localeCompare(right), - )) { - addMetric( - metrics, - `${prefix}.${metricSegment(category)}Bytes`, - bytes, - "bytes", - `package-${category}`, - entry.name, - ); - } - } + for (const entry of packedPackages) addPackageSizeMetrics(metrics, entry.report); for (const closure of closures) { const prefix = `closure.${closure.name}`; addMetric( @@ -783,6 +1231,44 @@ async function buildSizeReport( } } } + for (const entry of attributionFindings.firstPaint) { + addMetric( + metrics, + `attribution.${entry.bundler}.coreFirstPaint.sheetwriteRawBytes`, + entry.sheetwriteRawBytes, + "bytes", + "browser-module-attribution", + `${entry.bundler}:@sheetwrite/core`, + ); + addMetric( + metrics, + `attribution.${entry.bundler}.coreFirstPaint.rootBarrelRawBytes`, + entry.rootBarrelRawBytes, + "bytes", + "browser-module-attribution", + `${entry.bundler}:@sheetwrite/core`, + ); + } + for (const candidate of attributionFindings.subpaths) { + for (const retained of candidate.retainedModules) { + addMetric( + metrics, + `attribution.${retained.bundler}.${candidate.subpath}.rawBytes`, + retained.rawBytes, + "bytes", + "browser-module-attribution", + `${retained.bundler}:@sheetwrite/core/${candidate.subpath}`, + ); + addMetric( + metrics, + `attribution.${retained.bundler}.${candidate.subpath}.brotliBytes`, + retained.brotliBytes, + "bytes", + "browser-module-attribution", + `${retained.bundler}:@sheetwrite/core/${candidate.subpath}`, + ); + } + } for (const [name, path] of [ ["styles", join(repositoryRoot, "packages/core/styles.css")], ["shell", join(repositoryRoot, "packages/core/shell.css")], @@ -829,6 +1315,7 @@ async function buildSizeReport( .sort((left, right) => left.name.localeCompare(right.name)), closures: closures.sort((left, right) => left.name.localeCompare(right.name)), bundlers, + attributionFindings, reproduction: "bun run size:report", }; } finally { diff --git a/scripts/verify-packed-consumer.ts b/scripts/verify-packed-consumer.ts index b7df6b25..120e6f50 100644 --- a/scripts/verify-packed-consumer.ts +++ b/scripts/verify-packed-consumer.ts @@ -4,7 +4,11 @@ import { tmpdir } from "node:os"; import { basename, dirname, join, resolve } from "node:path"; import { pathToFileURL } from "node:url"; import { chromium } from "@playwright/test"; -import { readReleaseManifestDigest, verifyReleaseArtifacts } from "./release-artifacts.js"; +import { + assertPublishedFilePolicy, + readReleaseManifestDigest, + verifyReleaseArtifacts, +} from "./release-artifacts.js"; import { bindCanonicalTarballIntegrities } from "./release-lock-integrity.mjs"; interface PackageManifest { @@ -62,21 +66,13 @@ const packageSpecs: PackageSpec[] = [ "dist/index.d.ts", "dist/index.js", "dist/types/cell.d.ts", - "dist/types/cell.d.ts.map", "dist/types/coordinates.d.ts", - "dist/types/coordinates.d.ts.map", "dist/types/data.d.ts", - "dist/types/data.d.ts.map", "dist/types/document.d.ts", - "dist/types/document.d.ts.map", "dist/types/grid.d.ts", - "dist/types/grid.d.ts.map", "dist/types/render.d.ts", - "dist/types/render.d.ts.map", "dist/types/store.d.ts", - "dist/types/store.d.ts.map", "dist/types/transaction.d.ts", - "dist/types/transaction.d.ts.map", "dist/worker.d.ts", "dist/worker.js", "dist/shell.d.ts", @@ -213,6 +209,31 @@ function rewriteWorkspaceRanges( ); } +async function copyManifestEntry( + sourceRoot: string, + packageRoot: string, + entry: string, +): Promise { + if (!/[*?[\]{}]/u.test(entry)) { + await cp(join(sourceRoot, entry), join(packageRoot, entry), { recursive: true }); + return; + } + const matches = Array.from( + new Bun.Glob(entry).scanSync({ + cwd: sourceRoot, + dot: true, + onlyFiles: true, + followSymlinks: false, + }), + ); + if (matches.length === 0) throw new Error(`Package file pattern matched nothing: ${entry}`); + for (const path of matches) { + const target = join(packageRoot, path); + await mkdir(dirname(target), { recursive: true }); + await cp(join(sourceRoot, path), target); + } +} + async function stagePackage( spec: PackageSpec, stageRoot: string, @@ -224,7 +245,7 @@ async function stagePackage( await mkdir(packageRoot, { recursive: true }); for (const path of [...(manifest.files ?? []), "LICENSE", "README.md"]) { - await cp(join(sourceRoot, path), join(packageRoot, path), { recursive: true }); + await copyManifestEntry(sourceRoot, packageRoot, path); } const stagedManifest: PackageManifest = { @@ -262,6 +283,7 @@ async function assertTarball( extractRoot: string, ): Promise { const packedFiles = new Set(result.files.map((file) => file.path)); + assertPublishedFilePolicy(manifest.name, [...packedFiles]); for (const requiredFile of spec.requiredFiles) { if (!packedFiles.has(requiredFile)) { throw new Error(`${manifest.name} tarball is missing ${requiredFile}`); diff --git a/scripts/wasm-profile-matrix.ts b/scripts/wasm-profile-matrix.ts new file mode 100644 index 00000000..e7c422a4 --- /dev/null +++ b/scripts/wasm-profile-matrix.ts @@ -0,0 +1,428 @@ +import { createHash } from "node:crypto"; +import { copyFileSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; +import { hostname, tmpdir } from "node:os"; +import { basename, dirname, join, resolve } from "node:path"; +import { brotliCompressSync, gzipSync, constants as zlibConstants } from "node:zlib"; +import { + assertCleanMatrixCapture, + decideWasmProfile, + type MatrixGateEvidence, + parseWasmProfileMatrix, + type StoreOnlyProbe, + WASM_OPT_PROFILES, + type WasmOptProfile, +} from "../bench/src/wasm-profile-matrix.js"; + +const ROOT = resolve(import.meta.dir, ".."); +const WASM_CRATE = resolve(ROOT, "packages/wasm"); +const STORE_ONLY_COMMAND = [ + "cargo", + "check", + "--target", + "wasm32-unknown-unknown", + "--no-default-features", + "--message-format=json", +] as const; +const STORE_ONLY_SENTINEL = "SHEETWRITE_STORE_ONLY_BLOCKED"; + +interface CommandResult { + readonly exitCode: number; + readonly stdout: Uint8Array; + readonly stderr: Uint8Array; +} + +interface BuildVariant { + readonly wasmOpt: WasmOptProfile; + readonly inputWasmSha256: string; + readonly artifactPath: string; + readonly artifact: { + readonly rawBytes: number; + readonly gzipBytes: number; + readonly brotliBytes: number; + readonly sha256: string; + }; +} + +interface BuildCapture { + readonly schemaVersion: number; + readonly protocol: string; + readonly provenance: { readonly commit: string; readonly dirty: false }; + readonly rustProfile: unknown; + readonly postLink: unknown; + readonly variants: readonly BuildVariant[]; +} + +interface GateCapture extends MatrixGateEvidence { + readonly wasmOpt: WasmOptProfile; +} + +interface GateCaptureManifest { + readonly schemaVersion: number; + readonly protocol: string; + readonly gate: "formula" | "render"; + readonly captures: readonly GateCapture[]; +} + +function gateEvidence(capture: GateCapture): MatrixGateEvidence { + return { + status: capture.status, + commands: capture.commands, + exitCode: capture.exitCode, + artifactPath: capture.artifactPath, + evidenceSha256: capture.evidenceSha256, + wasmSha256: capture.wasmSha256, + commit: capture.commit, + runnerFingerprint: capture.runnerFingerprint, + }; +} + +function sha256(value: Uint8Array | string): string { + return createHash("sha256").update(value).digest("hex"); +} + +function run(command: readonly string[], cwd = ROOT): CommandResult { + const result = Bun.spawnSync([...command], { cwd, stdout: "pipe", stderr: "pipe" }); + return { + exitCode: result.exitCode, + stdout: result.stdout, + stderr: result.stderr, + }; +} + +function successfulOutput(command: readonly string[], cwd = ROOT): string { + const result = run(command, cwd); + if (result.exitCode !== 0) { + throw new Error( + `${command.join(" ")} failed: ${Buffer.from(result.stderr).toString("utf8").trim()}`, + ); + } + return Buffer.from(result.stdout).toString("utf8").trim(); +} + +function argument(args: readonly string[], name: string): string { + const index = args.indexOf(name); + const value = index < 0 ? undefined : args[index + 1]; + if (!value || value.startsWith("--")) throw new Error(`${name} is required`); + return value; +} + +function optionalArgument(args: readonly string[], name: string): string | undefined { + const index = args.indexOf(name); + const value = index < 0 ? undefined : args[index + 1]; + if (index >= 0 && (!value || value.startsWith("--"))) throw new Error(`${name} requires a value`); + return value; +} + +function writeJson(path: string, value: unknown): void { + mkdirSync(dirname(path), { recursive: true }); + writeFileSync(path, `${JSON.stringify(value, null, 2)}\n`); +} + +function assertControlledCargoProfile(): void { + const cargo = readFileSync(resolve(WASM_CRATE, "Cargo.toml"), "utf8"); + const release = cargo.match(/\[profile\.release\]([\s\S]*?)(?=\n\[|$)/u)?.[1] ?? ""; + if ( + !/^opt-level\s*=\s*3\s*$/mu.test(release) || + !/^lto\s*=\s*"fat"\s*$/mu.test(release) || + !/^codegen-units\s*=\s*1\s*$/mu.test(release) + ) { + throw new Error("Cargo release profile must remain opt-level=3, lto=fat, codegen-units=1"); + } +} + +function assertCleanTree(): string { + const commit = successfulOutput(["git", "rev-parse", "HEAD"]); + if (!/^[0-9a-f]{40}$/u.test(commit)) throw new Error("git returned a non-full commit hash"); + assertCleanMatrixCapture( + successfulOutput(["git", "status", "--porcelain", "--untracked-files=all"]), + ); + return commit; +} + +function compressedSizes(data: Uint8Array): { + rawBytes: number; + gzipBytes: number; + brotliBytes: number; +} { + return { + rawBytes: data.byteLength, + gzipBytes: gzipSync(data, { level: 9 }).byteLength, + brotliBytes: brotliCompressSync(data, { + params: { + [zlibConstants.BROTLI_PARAM_MODE]: zlibConstants.BROTLI_MODE_GENERIC, + [zlibConstants.BROTLI_PARAM_QUALITY]: 11, + [zlibConstants.BROTLI_PARAM_SIZE_HINT]: data.byteLength, + }, + }).byteLength, + }; +} + +function postLink( + wasmOptPath: string, + inputPath: string, + outputDirectory: string, + outputRoot: string, +): BuildVariant[] { + const input = readFileSync(inputPath); + const inputWasmSha256 = sha256(input); + const variants: BuildVariant[] = []; + for (const wasmOpt of WASM_OPT_PROFILES) { + const label = wasmOpt.slice(1).toLowerCase(); + const temporaryOutput = resolve(outputDirectory, `sheetwrite-${label}.wasm`); + const result = run([wasmOptPath, inputPath, wasmOpt, "-o", temporaryOutput]); + if (result.exitCode !== 0) { + throw new Error(`${wasmOpt} failed: ${Buffer.from(result.stderr).toString("utf8").trim()}`); + } + const artifact = readFileSync(temporaryOutput); + const artifactPath = resolve(outputRoot, "artifacts", `sheetwrite-${label}.wasm`); + mkdirSync(dirname(artifactPath), { recursive: true }); + copyFileSync(temporaryOutput, artifactPath); + variants.push({ + wasmOpt, + inputWasmSha256, + artifactPath, + artifact: { + ...compressedSizes(artifact), + sha256: sha256(artifact), + }, + }); + } + return variants; +} + +function captureBuild(args: readonly string[]): void { + assertControlledCargoProfile(); + const commit = assertCleanTree(); + const wasmOptPath = resolve(argument(args, "--wasm-opt")); + const output = resolve(argument(args, "--output")); + const outputRoot = dirname(output); + const temporary = mkdtempSync(join(tmpdir(), "sheetwrite-wasm-profile-")); + try { + const buildDirectory = resolve(temporary, "unoptimized"); + const build = run( + [ + "wasm-pack", + "build", + "--target", + "web", + "--release", + "--no-opt", + "--out-dir", + buildDirectory, + ], + WASM_CRATE, + ); + if (build.exitCode !== 0) { + throw new Error( + `wasm-pack build failed: ${Buffer.from(build.stderr).toString("utf8").trim()}`, + ); + } + const inputPath = resolve(buildDirectory, "sheetwrite_wasm_bg.wasm"); + const variants = postLink(wasmOptPath, inputPath, temporary, outputRoot); + const wasmOptBytes = readFileSync(wasmOptPath); + const capture = { + schemaVersion: 1, + protocol: "wasm-post-link-build-capture-v1", + provenance: { + commit, + dirty: false, + timestamp: new Date().toISOString(), + host: hostname(), + rustc: successfulOutput(["rustc", "--version"]), + cargo: successfulOutput(["cargo", "--version"]), + wasmPack: successfulOutput(["wasm-pack", "--version"]), + wasmOptVersion: successfulOutput([wasmOptPath, "--version"]), + wasmOptSha256: sha256(wasmOptBytes), + bun: Bun.version, + }, + rustProfile: { optLevel: 3, lto: "fat", codegenUnits: 1 }, + postLink: { + inputWasmSha256: variants[0]!.inputWasmSha256, + compression: { gzipLevel: 9, brotliQuality: 11, brotliMode: "generic" }, + }, + variants, + completion: { + status: "gates-required", + required: ["formulaGate", "renderGate", "storeOnlyProbe"], + }, + }; + writeJson(output, capture); + process.stdout.write(`${output}\n`); + } finally { + rmSync(temporary, { force: true, recursive: true }); + } +} + +function captureStoreOnlyProbe(args: readonly string[]): void { + const commit = assertCleanTree(); + const output = resolve(argument(args, "--output")); + const result = run(STORE_ONLY_COMMAND, WASM_CRATE); + const stdoutText = Buffer.from(result.stdout).toString("utf8"); + const stderrText = Buffer.from(result.stderr).toString("utf8"); + const recognizedBlock = + result.exitCode !== 0 && `${stdoutText}\n${stderrText}`.includes(STORE_ONLY_SENTINEL); + const outcome: StoreOnlyProbe["outcome"] = + result.exitCode === 0 ? "compiled" : recognizedBlock ? "blocked" : "failed"; + const blockers: StoreOnlyProbe["blockers"] = recognizedBlock + ? [ + { + id: "formula-entry-ast", + kind: "dependency-cycle", + owner: "types::FormulaEntry::ast", + dependency: "calc::Ast", + reason: "stored formula syntax is owned by the data-store type graph", + }, + { + id: "dependency-index", + kind: "dependency-cycle", + owner: "store::CellStore::dep_index", + dependency: "eval::DepIndex", + reason: "recalculation dependency state is owned directly by CellStore", + }, + ] + : []; + const probe: StoreOnlyProbe = { + provenance: { + commit, + dirty: false, + timestamp: new Date().toISOString(), + }, + command: STORE_ONLY_COMMAND, + outcome, + exitCode: result.exitCode, + stdoutSha256: sha256(result.stdout), + stderrSha256: sha256(result.stderr), + blockers, + }; + writeJson(output, probe); + process.stdout.write(`${output}: ${outcome}\n`); + if (outcome === "failed") process.exitCode = 1; +} + +function readGateManifest(path: string, expectedGate: "formula" | "render"): GateCaptureManifest { + const manifest = JSON.parse(readFileSync(path, "utf8")) as GateCaptureManifest; + if ( + manifest.schemaVersion !== 1 || + manifest.protocol !== "wasm-post-link-gate-capture-v1" || + manifest.gate !== expectedGate || + !Array.isArray(manifest.captures) + ) { + throw new Error(`${expectedGate} gate manifest has the wrong protocol or gate kind`); + } + const modes = manifest.captures.map(({ wasmOpt }) => wasmOpt); + if ( + modes.length !== WASM_OPT_PROFILES.length || + new Set(modes).size !== WASM_OPT_PROFILES.length || + !WASM_OPT_PROFILES.every((profile) => modes.includes(profile)) + ) { + throw new Error(`${expectedGate} gate manifest must capture -O3, -Os, and -Oz exactly once`); + } + return manifest; +} + +function assertCaptureFiles(build: BuildCapture, manifests: readonly GateCaptureManifest[]): void { + for (const variant of build.variants) { + const actual = sha256(readFileSync(resolve(ROOT, variant.artifactPath))); + if (actual !== variant.artifact.sha256) { + throw new Error(`${variant.wasmOpt} build artifact hash no longer matches its capture`); + } + } + for (const manifest of manifests) { + for (const capture of manifest.captures) { + const actual = sha256(readFileSync(resolve(ROOT, capture.artifactPath))); + if (actual !== capture.evidenceSha256) { + throw new Error( + `${manifest.gate}/${capture.wasmOpt} evidence hash does not match its file`, + ); + } + } + } +} + +function assemble(args: readonly string[]): void { + const build = JSON.parse( + readFileSync(resolve(argument(args, "--build")), "utf8"), + ) as BuildCapture; + if ( + build.schemaVersion !== 1 || + build.protocol !== "wasm-post-link-build-capture-v1" || + !Array.isArray(build.variants) + ) { + throw new Error("build input is not a WASM post-link build capture"); + } + const formula = readGateManifest(resolve(argument(args, "--formula-gates")), "formula"); + const render = readGateManifest(resolve(argument(args, "--render-gates")), "render"); + const storeOnlyProbe = JSON.parse( + readFileSync(resolve(argument(args, "--store-probe")), "utf8"), + ) as StoreOnlyProbe; + if ( + storeOnlyProbe.provenance.dirty !== false || + storeOnlyProbe.provenance.commit !== build.provenance.commit + ) { + throw new Error("store-only probe must come from the clean build capture commit"); + } + assertCaptureFiles(build, [formula, render]); + const formulaByProfile = new Map(formula.captures.map((capture) => [capture.wasmOpt, capture])); + const renderByProfile = new Map(render.captures.map((capture) => [capture.wasmOpt, capture])); + const matrix = { + schemaVersion: 1, + protocol: "wasm-post-link-profile-matrix-v1", + provenance: build.provenance, + rustProfile: build.rustProfile, + postLink: build.postLink, + decisionPolicy: { + sizeMetric: "brotliBytes", + requireFormulaGate: true, + requireRenderGate: true, + }, + captureOrder: { + formula: formula.captures.map(({ wasmOpt }) => wasmOpt), + render: render.captures.map(({ wasmOpt }) => wasmOpt), + }, + variants: build.variants.map((variant) => { + const formulaCapture = formulaByProfile.get(variant.wasmOpt); + const renderCapture = renderByProfile.get(variant.wasmOpt); + if (!formulaCapture || !renderCapture) { + throw new Error(`${variant.wasmOpt} is missing gate evidence`); + } + const formulaGate = gateEvidence(formulaCapture); + const renderGate = gateEvidence(renderCapture); + return { + wasmOpt: variant.wasmOpt, + inputWasmSha256: variant.inputWasmSha256, + artifact: variant.artifact, + formulaGate, + renderGate, + }; + }), + storeOnlyProbe, + }; + const parsed = parseWasmProfileMatrix(matrix); + const output = resolve(argument(args, "--output")); + writeJson(output, parsed); + const decision = decideWasmProfile(parsed); + process.stdout.write(`${output}\n${JSON.stringify(decision, null, 2)}\n`); + if (decision.status === "blocked") process.exitCode = 1; +} + +function decide(args: readonly string[]): void { + const input = resolve(argument(args, "--input")); + const raw = JSON.parse(readFileSync(input, "utf8")) as unknown; + const evidence = parseWasmProfileMatrix(raw); + const decision = decideWasmProfile(evidence); + const output = optionalArgument(args, "--output"); + if (output) writeJson(resolve(output), decision); + process.stdout.write(`${JSON.stringify(decision, null, 2)}\n`); + if (decision.status === "blocked") process.exitCode = 1; +} + +const [command, ...args] = process.argv.slice(2); +if (command === "build") captureBuild(args); +else if (command === "probe-store") captureStoreOnlyProbe(args); +else if (command === "assemble") assemble(args); +else if (command === "decide") decide(args); +else { + throw new Error( + `usage:\n ${basename(process.argv[1] ?? "wasm-profile-matrix.ts")} build --wasm-opt PATH --output PATH\n ${basename(process.argv[1] ?? "wasm-profile-matrix.ts")} probe-store --output PATH\n ${basename(process.argv[1] ?? "wasm-profile-matrix.ts")} assemble --build PATH --formula-gates PATH --render-gates PATH --store-probe PATH --output PATH\n ${basename(process.argv[1] ?? "wasm-profile-matrix.ts")} decide --input PATH [--output PATH]`, + ); +} diff --git a/scripts/workflow-contract.test.ts b/scripts/workflow-contract.test.ts index 221277e4..7407bac3 100644 --- a/scripts/workflow-contract.test.ts +++ b/scripts/workflow-contract.test.ts @@ -192,10 +192,18 @@ describe("CI and release workflow contracts", () => { const projectByName = Object.fromEntries( (playwrightConfig.projects ?? []).map((project) => [project.name, project]), ); - expect(Object.keys(projectByName)).toEqual(["chromium", "firefox", "webkit"]); + expect(Object.keys(projectByName)).toEqual([ + "chromium", + "firefox", + "webkit", + "chromium-engine-dpr2", + "webkit-engine-dpr2", + ]); expect(projectByName.chromium?.grep).toBeUndefined(); expect(String(projectByName.firefox?.grep)).toBe("/@portability/"); expect(String(projectByName.webkit?.grep)).toBe("/@portability/"); + expect(String(projectByName["chromium-engine-dpr2"]?.grep)).toBe("/@dpr2-render/"); + expect(String(projectByName["webkit-engine-dpr2"]?.grep)).toBe("/@dpr2-render/"); }); it("applies the canonical JavaScript toolchain to the trusted publishing job", () => { diff --git a/scripts/workspace-tooling.test.ts b/scripts/workspace-tooling.test.ts index 7a18baa2..46d3f94a 100644 --- a/scripts/workspace-tooling.test.ts +++ b/scripts/workspace-tooling.test.ts @@ -250,6 +250,7 @@ describe("changeset workspace contract", () => { it("runs the release-aware Changesets status command", () => { expect(releaseVersionFromHeadRef("0.3.1")).toBe("0.3.1"); + expect(releaseVersionFromHeadRef("release/version-0.4.0")).toBe("0.4.0"); expect(releaseVersionFromHeadRef("feature/docs")).toBeUndefined(); expect(packageSizeHistoryVersionFromHeadRef("automation/package-size-history-0.3.1")).toBe( "0.3.1", @@ -285,18 +286,18 @@ describe("changeset workspace contract", () => { "scripts/size-history.json", ]), ).toBeFalse(); - expect(() => validateReleasePackageVersions("0.3.1")).not.toThrow(); - expect(() => validateReleasePackageVersions("0.3.2")).toThrow( - "Release branch 0.3.2 requires @sheetwrite/wasm@0.3.2", + expect(() => validateReleasePackageVersions("0.4.0")).not.toThrow(); + expect(() => validateReleasePackageVersions("0.4.1")).toThrow( + "Release branch 0.4.1 requires @sheetwrite/wasm@0.4.1", ); const root = resolve(import.meta.dir, ".."); const result = Bun.spawnSync(["bun", "run", "changeset:ci"], { cwd: root, - env: { ...process.env, GITHUB_HEAD_REF: "0.3.1" }, + env: { ...process.env, GITHUB_HEAD_REF: "0.4.0" }, stderr: "pipe", stdout: "pipe", }); expect(result.exitCode, result.stderr.toString()).toBe(0); - expect(result.stdout.toString()).toContain("Release package versions match branch 0.3.1"); + expect(result.stdout.toString()).toContain("Release package versions match branch 0.4.0"); }); }); diff --git a/test/browser/playwright.config.ts b/test/browser/playwright.config.ts index ac7c316d..d2cb1a4c 100644 --- a/test/browser/playwright.config.ts +++ b/test/browser/playwright.config.ts @@ -30,6 +30,7 @@ export default defineConfig({ projects: [ { name: "chromium", + grepInvert: /@dpr2-render/, use: { browserName: "chromium" }, }, { @@ -42,6 +43,37 @@ export default defineConfig({ grep: /@portability/, use: { browserName: "webkit" }, }, + // These projects exercise Playwright browser engines at a real DPR 2. + // Their names deliberately make no OS-browser claim: native macOS Safari + // hardware verification remains an external release check. + { + name: "chromium-engine-dpr2", + grep: /@dpr2-render/, + metadata: { + automationEngine: "Playwright Chromium", + hostPlatform: `${process.platform}-${process.arch}`, + nativeMacOSSafariHardwareVerification: "external", + }, + use: { + browserName: "chromium", + deviceScaleFactor: 2, + viewport: { width: 1_568, height: 900 }, + }, + }, + { + name: "webkit-engine-dpr2", + grep: /@dpr2-render/, + metadata: { + automationEngine: "Playwright WebKit (not macOS Safari)", + hostPlatform: `${process.platform}-${process.arch}`, + nativeMacOSSafariHardwareVerification: "external", + }, + use: { + browserName: "webkit", + deviceScaleFactor: 2, + viewport: { width: 1_568, height: 900 }, + }, + }, ], webServer: { command: `PORT=${SITE_PORT} bun scripts/serve-docs.ts`, diff --git a/test/browser/vanilla-workbench.spec.ts b/test/browser/vanilla-workbench.spec.ts index 0970e408..1b32c16d 100644 --- a/test/browser/vanilla-workbench.spec.ts +++ b/test/browser/vanilla-workbench.spec.ts @@ -70,6 +70,50 @@ async function canvasBodyPainted(page: Page): Promise { return hasOpaqueForeground(rgba); } +interface DprCanvasEvidence { + backingHeight: number; + backingWidth: number; + cssHeight: number; + cssWidth: number; + devicePixelRatio: number; + sample: number[]; + sampleHeight: number; + sampleWidth: number; +} + +async function readDprCanvasEvidence(page: Page): Promise { + return page.locator(CANVAS).evaluate((element) => { + const canvas = element as HTMLCanvasElement; + const context = canvas.getContext("2d"); + const bounds = canvas.getBoundingClientRect(); + if (!context) throw new Error("Main-thread canvas 2D context is unavailable"); + if (bounds.width <= 0 || bounds.height <= 0) { + throw new Error("Main-thread canvas has no CSS dimensions"); + } + + const scaleX = canvas.width / bounds.width; + const scaleY = canvas.height / bounds.height; + const left = Math.ceil(64 * scaleX); + const top = Math.ceil(40 * scaleY); + const sampleWidth = Math.min(Math.ceil(256 * scaleX), canvas.width - left); + const sampleHeight = Math.min(Math.ceil(160 * scaleY), canvas.height - top); + if (sampleWidth <= 0 || sampleHeight <= 0) { + throw new Error("Main-thread canvas body sample is empty"); + } + + return { + backingHeight: canvas.height, + backingWidth: canvas.width, + cssHeight: bounds.height, + cssWidth: bounds.width, + devicePixelRatio: window.devicePixelRatio, + sample: Array.from(context.getImageData(left, top, sampleWidth, sampleHeight).data), + sampleHeight, + sampleWidth, + }; + }); +} + async function waitForLive(page: Page): Promise { await expect(page.getByTestId("lifecycle")).toHaveAttribute("data-phase", "live", { timeout: 20_000, @@ -171,6 +215,94 @@ test("boots product-first, paints, and exposes the ownership instruments", async expect(errors.console).toEqual([]); }); +test( + "main-thread production canvas paints cells in a DPR 2 backing store", + { + tag: "@dpr2-render", + }, + async ({ browser, browserName, page }, testInfo) => { + const errors = collectErrors(page); + await page.goto(`${VANILLA_URL}?renderer=canvas`); + await waitForLive(page); + await expect(page.getByTestId("renderer")).toContainText( + "Requested: Main thread · Active: Main thread", + ); + await expect + .poll(async () => hasOpaqueForeground((await readDprCanvasEvidence(page)).sample), { + timeout: 15_000, + message: "DPR 2 main-thread canvas body never painted cell foreground", + }) + .toBe(true); + + const evidence = await readDprCanvasEvidence(page); + const visibleCells = await gridCellTexts(page); + const runtimeIdentity = await page.evaluate(() => ({ + navigatorPlatform: navigator.platform, + userAgent: navigator.userAgent, + vendor: navigator.vendor, + })); + const opaqueColors = new Set(); + let opaquePixels = 0; + for (let offset = 0; offset + 3 < evidence.sample.length; offset += 4) { + if (evidence.sample[offset + 3] !== 255) continue; + opaquePixels += 1; + opaqueColors.add( + `${evidence.sample[offset]},${evidence.sample[offset + 1]},${evidence.sample[offset + 2]}`, + ); + } + const expectedBackingWidth = Math.max(1, Math.round(evidence.cssWidth * 2)); + const expectedBackingHeight = Math.max(1, Math.round(evidence.cssHeight * 2)); + const renderEvidence = { + automation: { + browserEngine: browserName, + browserVersion: browser.version(), + hostPlatform: `${process.platform}-${process.arch}`, + project: testInfo.project.name, + projectMetadata: testInfo.project.metadata, + ...runtimeIdentity, + }, + canvas: { + backingHeight: evidence.backingHeight, + backingWidth: evidence.backingWidth, + cssHeight: evidence.cssHeight, + cssWidth: evidence.cssWidth, + devicePixelRatio: evidence.devicePixelRatio, + expectedBackingHeight, + expectedBackingWidth, + }, + cells: { + expectedVisibleValue: FIRST_ACCOUNT, + foregroundPainted: hasOpaqueForeground(evidence.sample), + opaqueColorCount: opaqueColors.size, + opaquePixels, + sampleHeight: evidence.sampleHeight, + sampleWidth: evidence.sampleWidth, + }, + }; + await testInfo.attach("dpr2-main-thread-render-evidence", { + body: Buffer.from(JSON.stringify(renderEvidence, null, 2)), + contentType: "application/json", + }); + + expect(["chromium", "webkit"]).toContain(browserName); + expect(testInfo.project.name).toBe(`${browserName}-engine-dpr2`); + expect(testInfo.project.metadata).toMatchObject({ + automationEngine: + browserName === "chromium" ? "Playwright Chromium" : "Playwright WebKit (not macOS Safari)", + hostPlatform: `${process.platform}-${process.arch}`, + nativeMacOSSafariHardwareVerification: "external", + }); + expect(evidence.devicePixelRatio).toBe(2); + expect(evidence.backingWidth).toBe(expectedBackingWidth); + expect(evidence.backingHeight).toBe(expectedBackingHeight); + expect(hasOpaqueForeground(evidence.sample)).toBe(true); + expect(visibleCells).toContain(FIRST_ACCOUNT); + expect(errors.page).toEqual([]); + expect(errors.worker).toEqual([]); + expect(errors.console).toEqual([]); + }, +); + test("scenario tabs support keyboard focus and drive real construction options", async ({ page, }) => { @@ -299,6 +431,190 @@ test("renderer selection is construction-bound and deep-linked", { expect(errors.console).toEqual([]); }); +test("DPR-only changes repaint both main-thread and Worker canvases", { + tag: "@portability", +}, async ({ page }) => { + const errors = collectErrors(page); + await page.addInitScript(() => { + const nativeMatchMedia = window.matchMedia.bind(window); + const resolutionQueries = new Set(); + let dpr = 1; + + Object.defineProperty(window, "devicePixelRatio", { + configurable: true, + get: () => dpr, + }); + window.matchMedia = ((media: string): MediaQueryList => { + if (!media.startsWith("(resolution: ")) return nativeMatchMedia(media); + + const target = new EventTarget(); + Object.defineProperties(target, { + matches: { + configurable: true, + get: () => media === `(resolution: ${dpr}dppx)`, + }, + media: { configurable: true, value: media }, + onchange: { configurable: true, writable: true, value: null }, + }); + Object.assign(target, { + addListener(listener: EventListener): void { + target.addEventListener("change", listener); + }, + removeListener(listener: EventListener): void { + target.removeEventListener("change", listener); + }, + }); + const query = target as MediaQueryList; + resolutionQueries.add(query); + return query; + }) as typeof window.matchMedia; + Object.defineProperty(window, "__sheetwriteSetDpr", { + configurable: true, + value: (next: number): void => { + dpr = next; + for (const query of Array.from(resolutionQueries)) { + if (!query.matches) query.dispatchEvent(new Event("change")); + } + }, + }); + }); + + await page.goto(VANILLA_URL); + await waitForLive(page); + const canvas = page.locator(CANVAS); + const backingScale = () => + canvas.evaluate((element) => { + const node = element as HTMLCanvasElement; + return node.width / node.getBoundingClientRect().width; + }); + await expect.poll(backingScale).toBeCloseTo(1, 1); + + await page.evaluate(() => { + ( + window as typeof window & { + __sheetwriteSetDpr: (next: number) => void; + } + ).__sheetwriteSetDpr(2); + }); + await expect.poll(backingScale).toBeCloseTo(2, 1); + await expect.poll(() => canvasBodyPainted(page)).toBe(true); + + await page.evaluate(() => { + ( + window as typeof window & { + __sheetwriteSetDpr: (next: number) => void; + } + ).__sheetwriteSetDpr(1); + }); + await expect.poll(backingScale).toBeCloseTo(1, 1); + + await page.getByRole("radio", { name: "Web Worker" }).click(); + await expect(page.getByTestId("renderer")).toContainText( + "Requested: Web Worker · Active: Web Worker", + { timeout: 20_000 }, + ); + await expect(page.getByTestId("renderer")).toHaveAttribute("data-fallback-count", "0"); + await expect + .poll(async () => Number((await canvas.getAttribute("data-worker-frame")) ?? 0), { + timeout: 20_000, + message: "Worker never acknowledged its initial frame", + }) + .toBeGreaterThan(0); + const firstWorkerFrame = Number((await canvas.getAttribute("data-worker-frame")) ?? 0); + + await page.evaluate(() => { + ( + window as typeof window & { + __sheetwriteSetDpr: (next: number) => void; + } + ).__sheetwriteSetDpr(2); + }); + await expect + .poll(async () => Number((await canvas.getAttribute("data-worker-frame")) ?? 0), { + timeout: 20_000, + message: "Worker did not repaint after the DPR-only change", + }) + .toBeGreaterThan(firstWorkerFrame); + await expect.poll(() => canvasBodyPainted(page)).toBe(true); + + const secondWorkerFrame = Number((await canvas.getAttribute("data-worker-frame")) ?? 0); + await page.evaluate(() => { + ( + window as typeof window & { + __sheetwriteSetDpr: (next: number) => void; + } + ).__sheetwriteSetDpr(1); + }); + await expect + .poll(async () => Number((await canvas.getAttribute("data-worker-frame")) ?? 0), { + timeout: 20_000, + message: "Worker did not repaint after the rearmed DPR query changed", + }) + .toBeGreaterThan(secondWorkerFrame); + + expect(errors.page).toEqual([]); + expect(errors.worker).toEqual([]); + expect(errors.console).toEqual([]); +}); + +test("worker repaint keeps a cached non-shared view painted after a sub-row scroll", { + tag: "@portability", +}, async ({ page }) => { + const errors = collectErrors(page); + await page.goto(`${VANILLA_URL}?renderer=worker`); + await waitForLive(page); + await expect(page.getByTestId("renderer")).toContainText( + "Requested: Web Worker · Active: Web Worker", + { timeout: 20_000 }, + ); + await expect(page.getByTestId("renderer")).toHaveAttribute("data-fallback-count", "0"); + await expect + .poll(async () => Number((await page.locator(CANVAS).getAttribute("data-worker-frame")) ?? 0), { + timeout: 20_000, + message: "Worker never acknowledged the initial frame", + }) + .toBeGreaterThan(0); + await expect.poll(() => canvasBodyPainted(page), { timeout: 20_000 }).toBe(true); + expect(await page.evaluate(() => globalThis.crossOriginIsolated)).toBe(false); + + const scroller = page.locator(`${GRID} .sheetwrite-scroller`); + await scroller.hover(); + const initialFrame = Number((await page.locator(CANVAS).getAttribute("data-worker-frame")) ?? 0); + await page.mouse.wheel(0, 8); + await expect.poll(() => scroller.evaluate((element) => element.scrollTop)).toBeGreaterThan(0); + await expect + .poll(async () => Number((await page.locator(CANVAS).getAttribute("data-worker-frame")) ?? 0), { + timeout: 20_000, + message: "Worker did not paint the first sub-row scroll", + }) + .toBeGreaterThan(initialFrame); + + const frameBeforeCachedPaint = Number( + (await page.locator(CANVAS).getAttribute("data-worker-frame")) ?? 0, + ); + const cellsBeforeCachedPaint = await gridCellTexts(page); + const scrollBeforeCachedPaint = await scroller.evaluate((element) => element.scrollTop); + await page.mouse.wheel(0, 8); + await expect + .poll(() => scroller.evaluate((element) => element.scrollTop)) + .toBeGreaterThan(scrollBeforeCachedPaint); + const scrollAfterCachedPaint = await scroller.evaluate((element) => element.scrollTop); + expect(scrollAfterCachedPaint - scrollBeforeCachedPaint).toBeLessThan(20); + // The second fractional scroll stays inside the same row window, so the data + // signature and visible cells stay fixed while another Worker frame paints. + expect(await gridCellTexts(page)).toEqual(cellsBeforeCachedPaint); + await expect + .poll(async () => Number((await page.locator(CANVAS).getAttribute("data-worker-frame")) ?? 0), { + timeout: 20_000, + message: "Worker did not repaint the cached view after a sub-row scroll", + }) + .toBeGreaterThan(frameBeforeCachedPaint); + await expect.poll(() => canvasBodyPainted(page), { timeout: 20_000 }).toBe(true); + expect(errors.page).toEqual([]); + expect(errors.worker).toEqual([]); + expect(errors.console).toEqual([]); +}); + test("a failed Worker boot falls back honestly to the main thread", { tag: "@portability", }, async ({ page }) => { diff --git a/test/bundler-fixtures/first-paint/candidate-package.mjs b/test/bundler-fixtures/first-paint/candidate-package.mjs new file mode 100644 index 00000000..0590f411 --- /dev/null +++ b/test/bundler-fixtures/first-paint/candidate-package.mjs @@ -0,0 +1,72 @@ +import { rename, writeFile } from "node:fs/promises"; +import { resolve } from "node:path"; + +export const deferredModule = "@sheetwrite/core/dist/clipboard-controller.js"; +const originalName = "clipboard-controller.js"; +const deferredName = "clipboard-controller.first-interaction.js"; + +const proxySource = `const loadEvent = "sheetwrite:first-interaction-module"; + +function publish(detail) { + globalThis.dispatchEvent?.(new CustomEvent(loadEvent, { detail })); +} + +export const SHEETWRITE_CLIPBOARD_MIME = "application/x-sheetwrite+json"; + +export class ClipboardController { + #deps; + #controller; + + constructor(deps) { + this.#deps = deps; + } + + async #load() { + if (this.#controller === undefined) { + publish({ module: ${JSON.stringify(deferredModule)}, state: "loading" }); + this.#controller = import("./${deferredName}") + .then(({ ClipboardController: DeferredClipboardController }) => { + publish({ module: ${JSON.stringify(deferredModule)}, state: "loaded" }); + return new DeferredClipboardController(this.#deps); + }) + .catch((error) => { + publish({ + module: ${JSON.stringify(deferredModule)}, + state: "error", + message: error instanceof Error ? error.message : String(error), + }); + return null; + }); + } + return this.#controller; + } + + async copy() { + const controller = await this.#load(); + return controller === null ? "unsupported" : controller.copy(); + } + + async cut() { + const controller = await this.#load(); + return controller === null ? "unsupported" : controller.cut(); + } + + async paste() { + const controller = await this.#load(); + return controller === null ? "unsupported" : controller.paste(); + } + + async pasteValues() { + const controller = await this.#load(); + return controller === null ? "unsupported" : controller.pasteValues(); + } +} +`; + +export async function installFixtureOnlyCandidate(corePackageRoot) { + const coreDist = resolve(corePackageRoot, "dist"); + const originalPath = resolve(coreDist, originalName); + const deferredPath = resolve(coreDist, deferredName); + await rename(originalPath, deferredPath); + await writeFile(originalPath, proxySource); +} diff --git a/test/bundler-fixtures/first-paint/next/app/layout.tsx b/test/bundler-fixtures/first-paint/next/app/layout.tsx new file mode 100644 index 00000000..a5ae26e3 --- /dev/null +++ b/test/bundler-fixtures/first-paint/next/app/layout.tsx @@ -0,0 +1,9 @@ +import "@sheetwrite/core/styles.css"; + +export default function Layout({ children }: Readonly<{ children: React.ReactNode }>) { + return ( + + {children} + + ); +} diff --git a/test/bundler-fixtures/first-paint/next/app/page.tsx b/test/bundler-fixtures/first-paint/next/app/page.tsx new file mode 100644 index 00000000..f786b54d --- /dev/null +++ b/test/bundler-fixtures/first-paint/next/app/page.tsx @@ -0,0 +1,76 @@ +"use client"; + +import { + type ColumnarData, + createGrid, + type Grid, + initSheetwrite, + type Workbook, +} from "@sheetwrite/core"; +import { useEffect, useRef } from "react"; + +declare global { + interface Window { + __sheetwriteFirstPaint?: { + grid: Grid; + readyMs: number; + surface: readonly ["createGrid", "initSheetwrite"]; + }; + } +} + +const workbook: Workbook = { + activeSheet: "first-paint", + sheets: [ + { + id: "first-paint", + name: "First paint", + rowCount: 3, + columns: [ + { key: "name", header: "Name", width: 160, type: "text" }, + { key: "amount", header: "Amount", width: 120, type: "number" }, + ], + }, + ], +}; +const data: ColumnarData = { + rowCount: 3, + columns: { + name: ["Alpha", "Beta", "Gamma"], + amount: new Float64Array([1, 2, 3]), + }, +}; + +export default function Page() { + const hostRef = useRef(null); + useEffect(() => { + const host = hostRef.current; + if (host === null) throw new Error("First-paint fixture host is unavailable"); + let cancelled = false; + let grid: Grid | undefined; + void (async () => { + await initSheetwrite(); + if (cancelled) return; + grid = createGrid(host, { + data, + workbook, + config: { contextMenu: false, find: false, toolbar: false }, + }); + await new Promise((resolve) => + requestAnimationFrame(() => requestAnimationFrame(() => resolve())), + ); + if (cancelled) return; + window.__sheetwriteFirstPaint = { + grid, + readyMs: performance.now(), + surface: ["createGrid", "initSheetwrite"], + }; + })(); + return () => { + cancelled = true; + grid?.destroy(); + delete window.__sheetwriteFirstPaint; + }; + }, []); + return
; +} diff --git a/test/bundler-fixtures/first-paint/next/next-env.d.ts b/test/bundler-fixtures/first-paint/next/next-env.d.ts new file mode 100644 index 00000000..830fb594 --- /dev/null +++ b/test/bundler-fixtures/first-paint/next/next-env.d.ts @@ -0,0 +1,6 @@ +/// +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/test/bundler-fixtures/first-paint/next/next.config.mjs b/test/bundler-fixtures/first-paint/next/next.config.mjs new file mode 100644 index 00000000..93e75a99 --- /dev/null +++ b/test/bundler-fixtures/first-paint/next/next.config.mjs @@ -0,0 +1,15 @@ +/** @type {import("next").NextConfig} */ +const nextConfig = { + output: "export", + productionBrowserSourceMaps: true, + outputFileTracingRoot: import.meta.dirname, + webpack(config, { dev, isServer }) { + const core = process.env.SHEETWRITE_FIRST_PAINT_CORE; + if (!core) throw new Error("SHEETWRITE_FIRST_PAINT_CORE is required"); + config.resolve.alias["@sheetwrite/core"] = core; + if (!dev && !isServer) config.devtool = "hidden-source-map"; + return config; + }, +}; + +export default nextConfig; diff --git a/test/bundler-fixtures/first-paint/next/node_modules b/test/bundler-fixtures/first-paint/next/node_modules new file mode 120000 index 00000000..0c8c7006 --- /dev/null +++ b/test/bundler-fixtures/first-paint/next/node_modules @@ -0,0 +1 @@ +/home/vvin/learn/sheetwrite/test/bundler-fixtures/next/node_modules \ No newline at end of file diff --git a/test/bundler-fixtures/first-paint/next/package.json b/test/bundler-fixtures/first-paint/next/package.json new file mode 100644 index 00000000..f884151e --- /dev/null +++ b/test/bundler-fixtures/first-paint/next/package.json @@ -0,0 +1,13 @@ +{ + "private": true, + "scripts": { + "build": "next build" + }, + "dependencies": { + "@sheetwrite/core": "0.3.1", + "@sheetwrite/wasm": "0.3.1", + "next": "15.5.9", + "react": "19.1.0", + "react-dom": "19.1.0" + } +} diff --git a/test/bundler-fixtures/first-paint/next/tsconfig.json b/test/bundler-fixtures/first-paint/next/tsconfig.json new file mode 100644 index 00000000..6fc42e00 --- /dev/null +++ b/test/bundler-fixtures/first-paint/next/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": false, + "noEmit": true, + "incremental": true, + "module": "esnext", + "esModuleInterop": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "plugins": [{ "name": "next" }] + }, + "include": ["next-env.d.ts", ".next/types/**/*.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/test/bundler-fixtures/first-paint/run.mjs b/test/bundler-fixtures/first-paint/run.mjs new file mode 100644 index 00000000..15e2023f --- /dev/null +++ b/test/bundler-fixtures/first-paint/run.mjs @@ -0,0 +1,385 @@ +import { spawn } from "node:child_process"; +import { createHash } from "node:crypto"; +import { cp, mkdir, readFile, rm, symlink, writeFile } from "node:fs/promises"; +import { createServer } from "node:http"; +import { extname, relative, resolve, sep } from "node:path"; +import { brotliCompressSync, constants, gzipSync } from "node:zlib"; +import { chromium } from "@playwright/test"; +import { deferredModule, installFixtureOnlyCandidate } from "./candidate-package.mjs"; + +const fixtureRoot = resolve(import.meta.dirname, ".."); +const repositoryRoot = resolve(fixtureRoot, "../.."); +const outputRoot = resolve(repositoryRoot, "test-results/bundlers/first-paint"); +const viteDependencyRoot = resolve(fixtureRoot, "vite"); +const nextDependencyRoot = resolve(fixtureRoot, "next"); +const viteFixtureRoot = resolve(import.meta.dirname, "vite"); +const nextFixtureRoot = resolve(import.meta.dirname, "next"); +const rounds = 10; + +function run(command, args, cwd, environment = {}) { + return new Promise((resolveRun, reject) => { + const child = spawn(command, args, { + cwd, + env: { ...process.env, ...environment }, + stdio: "inherit", + }); + child.once("error", reject); + child.once("exit", (code, signal) => { + if (code === 0) resolveRun(); + else reject(new Error(`${command} ${args.join(" ")} failed (${code ?? signal})`)); + }); + }); +} + +async function replaceNodeModulesLink(target, source) { + await rm(target, { recursive: true, force: true }); + await symlink(source, target, "dir"); +} + +async function buildVite(variant, corePackageRoot) { + const output = resolve(outputRoot, "vite", variant); + await rm(output, { recursive: true, force: true }); + await run( + resolve(viteDependencyRoot, "node_modules/.bin/vite"), + ["build", "--config", resolve(viteFixtureRoot, "vite.config.ts")], + viteFixtureRoot, + { + SHEETWRITE_FIRST_PAINT_CORE: corePackageRoot, + SHEETWRITE_FIRST_PAINT_OUTPUT: output, + }, + ); +} + +async function buildNext(variant, corePackageRoot) { + await rm(resolve(nextFixtureRoot, ".next"), { recursive: true, force: true }); + await rm(resolve(nextFixtureRoot, "out"), { recursive: true, force: true }); + await run(resolve(nextDependencyRoot, "node_modules/.bin/next"), ["build"], nextFixtureRoot, { + SHEETWRITE_FIRST_PAINT_CORE: corePackageRoot, + }); + const output = resolve(outputRoot, "next", variant); + await rm(output, { recursive: true, force: true }); + await cp(resolve(nextFixtureRoot, "out"), output, { recursive: true }); +} + +async function buildPair(name, dependencyRoot, build) { + const baselineCore = resolve(dependencyRoot, "node_modules/@sheetwrite/core"); + const candidateCore = resolve(outputRoot, ".candidate-core", name.toLowerCase()); + await mkdir(resolve(outputRoot, ".candidate-core"), { recursive: true }); + await rm(candidateCore, { recursive: true, force: true }); + await cp(baselineCore, candidateCore, { recursive: true }); + const candidateScope = resolve(candidateCore, "node_modules/@sheetwrite"); + await mkdir(candidateScope, { recursive: true }); + await symlink( + resolve(dependencyRoot, "node_modules/@sheetwrite/wasm"), + resolve(candidateScope, "wasm"), + "dir", + ); + await installFixtureOnlyCandidate(candidateCore); + await build("baseline", baselineCore); + await build("candidate", candidateCore); + console.log(`${name} first-paint baseline/candidate built`); +} + +async function withServer(root, callback) { + const server = createServer(async (request, response) => { + try { + const url = new URL(request.url ?? "/", "http://127.0.0.1"); + const pathname = decodeURIComponent(url.pathname); + const requested = pathname.endsWith("/") ? `${pathname}index.html` : pathname; + const file = resolve(root, `.${requested}`); + if (file !== root && !file.startsWith(`${root}${sep}`)) { + response.writeHead(403).end(); + return; + } + const bytes = await readFile(file); + const contentType = + extname(file) === ".html" + ? "text/html; charset=utf-8" + : extname(file) === ".js" + ? "text/javascript; charset=utf-8" + : extname(file) === ".css" + ? "text/css; charset=utf-8" + : extname(file) === ".wasm" + ? "application/wasm" + : "application/octet-stream"; + response.writeHead(200, { "content-type": contentType }).end(bytes); + } catch { + response.writeHead(404).end(); + } + }); + const listening = Promise.withResolvers(); + server.once("error", listening.reject); + server.listen(0, "127.0.0.1", listening.resolve); + await listening.promise; + const address = server.address(); + if (address === null || typeof address === "string") throw new Error("Static server has no port"); + try { + return await callback(`http://127.0.0.1:${address.port}`); + } finally { + const closed = Promise.withResolvers(); + server.close(closed.resolve); + await closed.promise; + } +} + +function summarizeBytes(chunks) { + const totals = { rawBytes: 0, gzipBytes: 0, brotliBytes: 0 }; + for (const chunk of chunks) { + totals.rawBytes += chunk.byteLength; + totals.gzipBytes += gzipSync(chunk, { level: 9, mtime: 0 }).byteLength; + totals.brotliBytes += brotliCompressSync(chunk, { + params: { [constants.BROTLI_PARAM_QUALITY]: 11 }, + }).byteLength; + } + return totals; +} + +async function capturePage(browser, root, path = "/") { + return withServer(root, async (origin) => { + const page = await browser.newPage({ + deviceScaleFactor: 1, + viewport: { height: 500, width: 800 }, + }); + const errors = []; + page.on("pageerror", (error) => errors.push(error.message)); + await page.goto(`${origin}${path}`, { waitUntil: "domcontentloaded" }); + await page.waitForFunction(() => window.__sheetwriteFirstPaint !== undefined, undefined, { + timeout: 20_000, + }); + const state = await page.evaluate(() => ({ + readyMs: window.__sheetwriteFirstPaint.readyMs, + surface: window.__sheetwriteFirstPaint.surface, + scripts: performance + .getEntriesByType("resource") + .map((entry) => entry.name) + .filter((name) => new URL(name).pathname.endsWith(".js")), + })); + if (JSON.stringify(state.surface) !== JSON.stringify(["createGrid", "initSheetwrite"])) { + throw new Error("Fixture did not preserve the createGrid/initSheetwrite surface"); + } + const host = page.locator("[data-sheetwrite-first-paint-host]"); + const screenshot = await host.screenshot({ animations: "disabled" }); + const checksum = createHash("sha256").update(screenshot).digest("hex"); + if (errors.length > 0) throw new Error(`First-paint fixture failed:\n${errors.join("\n")}`); + await page.close(); + const scripts = await Promise.all( + state.scripts.map((url) => readFile(resolve(root, `.${new URL(url).pathname}`))), + ); + return { checksum, initialJavaScript: summarizeBytes(scripts), readyMs: state.readyMs }; + }); +} + +async function interactionEvidence(browser, root, path = "/") { + return withServer(root, async (origin) => { + const page = await browser.newPage(); + await page.goto(`${origin}${path}`, { waitUntil: "domcontentloaded" }); + await page.waitForFunction(() => window.__sheetwriteFirstPaint !== undefined); + const before = await page.evaluate(() => + performance.getEntriesByType("resource").map((entry) => entry.name), + ); + const success = await page.evaluate(async () => { + const events = []; + globalThis.addEventListener("sheetwrite:first-interaction-module", (event) => + events.push(event.detail), + ); + let rejected = false; + let outcome; + try { + outcome = await window.__sheetwriteFirstPaint.grid.actions.copy(); + } catch { + rejected = true; + } + return { events, outcome, rejected }; + }); + const after = await page.evaluate(() => + performance.getEntriesByType("resource").map((entry) => entry.name), + ); + const deferredUrl = after.find( + (url) => !before.includes(url) && new URL(url).pathname.endsWith(".js"), + ); + if ( + deferredUrl === undefined || + success.outcome !== "empty" || + success.rejected || + !success.events.some((event) => event.module === deferredModule && event.state === "loaded") + ) { + throw new Error("Candidate did not load the named clipboard module on first interaction"); + } + await page.close(); + + const errorPage = await browser.newPage(); + await errorPage.route(deferredUrl, (route) => route.abort("failed")); + await errorPage.goto(`${origin}${path}`, { waitUntil: "domcontentloaded" }); + await errorPage.waitForFunction(() => window.__sheetwriteFirstPaint !== undefined); + const failure = await errorPage.evaluate(async () => { + const events = []; + globalThis.addEventListener("sheetwrite:first-interaction-module", (event) => + events.push(event.detail), + ); + let rejected = false; + let outcome; + try { + outcome = await window.__sheetwriteFirstPaint.grid.actions.copy(); + } catch { + rejected = true; + } + return { events, outcome, rejected }; + }); + await errorPage.close(); + if ( + failure.outcome !== "unsupported" || + failure.rejected || + !failure.events.some((event) => event.module === deferredModule && event.state === "error") + ) { + throw new Error("Candidate did not fail closed when its interaction chunk was unavailable"); + } + return { + deferredChunk: new URL(deferredUrl).pathname, + interaction: { + module: deferredModule, + loaded: true, + successOutcome: success.outcome, + errorOutcome: failure.outcome, + rejected: failure.rejected, + }, + }; + }); +} + +function timing(samplesMs) { + const sorted = [...samplesMs].sort((left, right) => left - right); + const middle = Math.floor(sorted.length / 2); + return { + samplesMs, + medianMs: sorted.length % 2 === 0 ? (sorted[middle - 1] + sorted[middle]) / 2 : sorted[middle], + p95Ms: sorted[Math.ceil(sorted.length * 0.95) - 1], + }; +} + +async function captureFixture(browser, bundler, version, provenance, path) { + const roots = { + baseline: resolve(outputRoot, bundler, "baseline"), + candidate: resolve(outputRoot, bundler, "candidate"), + }; + const observations = { baseline: [], candidate: [] }; + for (let round = 0; round < rounds; round++) { + const order = round % 2 === 0 ? ["baseline", "candidate"] : ["candidate", "baseline"]; + for (const variant of order) { + observations[variant].push(await capturePage(browser, roots[variant], path)); + } + } + const baseline = observations.baseline[0]; + const candidate = observations.candidate[0]; + if (observations.baseline.some((entry) => entry.checksum !== baseline.checksum)) { + throw new Error(`${bundler} baseline first-paint checksum was unstable`); + } + if (observations.candidate.some((entry) => entry.checksum !== candidate.checksum)) { + throw new Error(`${bundler} candidate first-paint checksum was unstable`); + } + const interaction = await interactionEvidence(browser, roots.candidate, path); + const delta = { + rawBytes: baseline.initialJavaScript.rawBytes - candidate.initialJavaScript.rawBytes, + gzipBytes: baseline.initialJavaScript.gzipBytes - candidate.initialJavaScript.gzipBytes, + brotliBytes: baseline.initialJavaScript.brotliBytes - candidate.initialJavaScript.brotliBytes, + }; + return { + bundler, + version, + provenance, + eagerImports: ["@sheetwrite/core#createGrid", "@sheetwrite/core#initSheetwrite"], + baseline: { + initialJavaScript: baseline.initialJavaScript, + timing: timing(observations.baseline.map((entry) => entry.readyMs)), + checksum: baseline.checksum, + }, + candidate: { + initialJavaScript: candidate.initialJavaScript, + timing: timing(observations.candidate.map((entry) => entry.readyMs)), + checksum: candidate.checksum, + ...interaction, + }, + delta: { + ...delta, + brotliPercent: (delta.brotliBytes / baseline.initialJavaScript.brotliBytes) * 100, + }, + }; +} + +for (const [fixture, dependency] of [ + [viteFixtureRoot, viteDependencyRoot], + [nextFixtureRoot, nextDependencyRoot], +]) { + await replaceNodeModulesLink( + resolve(fixture, "node_modules"), + resolve(dependency, "node_modules"), + ); +} +await rm(outputRoot, { recursive: true, force: true }); +await mkdir(outputRoot, { recursive: true }); +await buildPair("Vite", viteDependencyRoot, buildVite); +await buildPair("Next.js", nextDependencyRoot, buildNext); + +const vitePackage = JSON.parse(await readFile(resolve(viteDependencyRoot, "package.json"), "utf8")); +const nextPackage = JSON.parse(await readFile(resolve(nextDependencyRoot, "package.json"), "utf8")); +const browser = await chromium.launch({ headless: true }); +let fixtures; +try { + fixtures = [ + await captureFixture( + browser, + "next", + nextPackage.dependencies.next, + { + buildMode: "production", + minified: true, + minifier: { name: "next-swc", version: nextPackage.dependencies.next }, + externals: [], + target: "browser", + sourceMaps: "hidden-external", + attributionMethod: "source-map-generated-spans-with-explicit-opaque-assets-v2", + }, + "/", + ), + await captureFixture( + browser, + "vite", + vitePackage.dependencies.vite, + { + buildMode: "production", + minified: true, + minifier: { name: "esbuild", version: "0.25.12" }, + externals: [], + target: "browser", + sourceMaps: "hidden-external", + attributionMethod: "source-map-generated-spans-with-explicit-opaque-assets-v2", + }, + "/", + ), + ]; +} finally { + await browser.close(); +} + +const evidence = { + schemaVersion: 2, + kind: "first-paint-counterfactual", + candidate: { + fixtureOnly: true, + shipping: false, + deferredModules: [deferredModule], + }, + thresholds: { + brotliBytes: 7_680, + percent: 10, + timing: "median-and-p95-no-slower", + }, + fixtures, +}; +const evidencePath = resolve(repositoryRoot, "test-results/bundlers/first-paint.json"); +await writeFile(evidencePath, `${JSON.stringify(evidence, null, 2)}\n`); +await run( + "bun", + ["scripts/first-paint-evidence.ts", "check", relative(repositoryRoot, evidencePath)], + repositoryRoot, +); +console.log(`First-paint evidence: ${relative(repositoryRoot, evidencePath)}`); diff --git a/test/bundler-fixtures/first-paint/vite/index.html b/test/bundler-fixtures/first-paint/vite/index.html new file mode 100644 index 00000000..ae7bf8f7 --- /dev/null +++ b/test/bundler-fixtures/first-paint/vite/index.html @@ -0,0 +1,5 @@ + + + First paint fixture + + diff --git a/test/bundler-fixtures/first-paint/vite/node_modules b/test/bundler-fixtures/first-paint/vite/node_modules new file mode 120000 index 00000000..23816241 --- /dev/null +++ b/test/bundler-fixtures/first-paint/vite/node_modules @@ -0,0 +1 @@ +/home/vvin/learn/sheetwrite/test/bundler-fixtures/vite/node_modules \ No newline at end of file diff --git a/test/bundler-fixtures/first-paint/vite/src/main.ts b/test/bundler-fixtures/first-paint/vite/src/main.ts new file mode 100644 index 00000000..254891ea --- /dev/null +++ b/test/bundler-fixtures/first-paint/vite/src/main.ts @@ -0,0 +1,59 @@ +import { + type ColumnarData, + createGrid, + type Grid, + initSheetwrite, + type Workbook, +} from "@sheetwrite/core"; +import "@sheetwrite/core/styles.css"; + +declare global { + interface Window { + __sheetwriteFirstPaint?: { + grid: Grid; + readyMs: number; + surface: readonly ["createGrid", "initSheetwrite"]; + }; + } +} + +const workbook: Workbook = { + activeSheet: "first-paint", + sheets: [ + { + id: "first-paint", + name: "First paint", + rowCount: 3, + columns: [ + { key: "name", header: "Name", width: 160, type: "text" }, + { key: "amount", header: "Amount", width: 120, type: "number" }, + ], + }, + ], +}; +const data: ColumnarData = { + rowCount: 3, + columns: { + name: ["Alpha", "Beta", "Gamma"], + amount: new Float64Array([1, 2, 3]), + }, +}; + +await initSheetwrite(); +const host = document.createElement("div"); +host.dataset.sheetwriteFirstPaintHost = ""; +host.style.cssText = "width:640px;height:320px"; +document.body.append(host); +const grid = createGrid(host, { + data, + workbook, + config: { contextMenu: false, find: false, toolbar: false }, +}); +await new Promise((resolve) => + requestAnimationFrame(() => requestAnimationFrame(() => resolve())), +); +window.__sheetwriteFirstPaint = { + grid, + readyMs: performance.now(), + surface: ["createGrid", "initSheetwrite"], +}; diff --git a/test/bundler-fixtures/first-paint/vite/vite.config.ts b/test/bundler-fixtures/first-paint/vite/vite.config.ts new file mode 100644 index 00000000..977d9aea --- /dev/null +++ b/test/bundler-fixtures/first-paint/vite/vite.config.ts @@ -0,0 +1,22 @@ +import { resolve } from "node:path"; +import { defineConfig } from "vite"; + +const output = process.env.SHEETWRITE_FIRST_PAINT_OUTPUT; +const core = process.env.SHEETWRITE_FIRST_PAINT_CORE; +if (!output || !core) { + throw new Error("SHEETWRITE_FIRST_PAINT_OUTPUT and SHEETWRITE_FIRST_PAINT_CORE are required"); +} + +export default defineConfig({ + resolve: { + alias: { + "@sheetwrite/core": resolve(core), + }, + }, + build: { + manifest: true, + minify: "esbuild", + outDir: resolve(output), + sourcemap: "hidden", + }, +}); diff --git a/test/bundler-fixtures/module-attribution.mjs b/test/bundler-fixtures/module-attribution.mjs new file mode 100644 index 00000000..96d7f532 --- /dev/null +++ b/test/bundler-fixtures/module-attribution.mjs @@ -0,0 +1,272 @@ +import { createHash } from "node:crypto"; +import { readFile } from "node:fs/promises"; +import { dirname, relative, resolve, sep } from "node:path"; +import { brotliCompressSync, constants, gzipSync } from "node:zlib"; + +const SOURCE_MAPS_MODE = "hidden-external"; +const BASE64 = Object.fromEntries( + [..."ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"].map( + (character, index) => [character, index], + ), +); +const ATTRIBUTION_METHOD = "source-map-generated-spans-with-explicit-opaque-assets-v2"; + +function compressedSizes(data) { + return { + rawBytes: data.byteLength, + gzipBytes: gzipSync(data, { level: 9, mtime: 0 }).byteLength, + brotliBytes: brotliCompressSync(data, { + params: { + [constants.BROTLI_PARAM_MODE]: constants.BROTLI_MODE_GENERIC, + [constants.BROTLI_PARAM_QUALITY]: 11, + [constants.BROTLI_PARAM_SIZE_HINT]: data.byteLength, + }, + }).byteLength, + }; +} + +function decodeVlq(segment) { + const values = []; + let value = 0; + let shift = 0; + for (const character of segment) { + const digit = BASE64[character]; + if (digit === undefined) throw new Error(`Invalid source-map VLQ character ${character}`); + value += (digit & 31) << shift; + if ((digit & 32) !== 0) { + shift += 5; + continue; + } + const negative = (value & 1) === 1; + const decoded = value >> 1; + values.push(negative ? -decoded : decoded); + value = 0; + shift = 0; + } + if (shift !== 0) throw new Error(`Truncated source-map VLQ segment ${segment}`); + return values; +} + +function decodedMappings(map) { + if (map.version !== 3 || !Array.isArray(map.sources) || typeof map.mappings !== "string") { + throw new Error("Module attribution requires a non-indexed source map v3"); + } + const lines = []; + let sourceIndex = 0; + for (const encodedLine of map.mappings.split(";")) { + let generatedColumn = 0; + const mappings = []; + for (const encodedSegment of encodedLine.split(",")) { + if (encodedSegment.length === 0) continue; + const fields = decodeVlq(encodedSegment); + if (fields.length !== 1 && fields.length !== 4 && fields.length !== 5) { + throw new Error(`Unsupported source-map segment width ${fields.length}`); + } + generatedColumn += fields[0]; + let source; + if (fields.length >= 4) { + sourceIndex += fields[1]; + source = map.sources[sourceIndex]; + if (typeof source !== "string") { + throw new Error(`Source-map segment references missing source ${sourceIndex}`); + } + } + mappings.push({ generatedColumn, source }); + } + lines.push(mappings); + } + return lines; +} + +function normalizeSource(source, bundler) { + const decoded = decodeURIComponent(source).replaceAll("\\", "/").split("!").at(-1).split("?")[0]; + const nodeModules = decoded.lastIndexOf("/node_modules/"); + if (nodeModules >= 0) { + const packagePath = decoded + .slice(nodeModules + "/node_modules/".length) + .replace(/^\.pnpm\/[^/]+\/node_modules\//, ""); + const segments = packagePath.split("/").filter(Boolean); + const packageName = segments[0]?.startsWith("@") + ? `${segments[0]}/${segments[1] ?? "missing"}` + : (segments[0] ?? "missing"); + return { id: packagePath, owner: packageName }; + } + const workspaceCore = decoded.lastIndexOf("/packages/core/"); + if (workspaceCore >= 0) { + return { + id: `@sheetwrite/core/${decoded.slice(workspaceCore + "/packages/core/".length)}`, + owner: "@sheetwrite/core", + }; + } + const fixture = decoded.lastIndexOf("/test/bundler-fixtures/"); + if (fixture >= 0) { + return { + id: `fixture/${decoded.slice(fixture + "/test/bundler-fixtures/".length)}`, + owner: "fixture", + }; + } + const sourceIndex = decoded.lastIndexOf("/src/"); + if (sourceIndex >= 0) { + return { id: `fixture${decoded.slice(sourceIndex)}`, owner: "fixture" }; + } + const stableFixture = decoded.replace(/^webpack:\/\/[^/]*\//, "").replace(/^\.\//, ""); + if (stableFixture.startsWith("app/")) { + return { id: `fixture/${stableFixture}`, owner: "fixture" }; + } + const stable = decoded + .replace(/^webpack:\/\/[^/]*\//, "") + .replace(/^file:\/\//, "") + .replace(/^(?:\.\.\/)+/, "") + .replace(/^\.\//, "") + .replaceAll("\0", "virtual:"); + return { + id: + stable.length === 0 + ? `${bundler}:runtime` + : stable.startsWith("/") + ? `${bundler}:runtime/absolute` + : `${bundler}:runtime/${stable}`, + owner: `${bundler}:runtime`, + }; +} + +async function sourceMapFor(assetPath, source) { + const match = source.match(/\n?\/\/[#@] sourceMappingURL=([^\s]+)\s*$/); + const mapPath = + match === null || match[1].startsWith("data:") + ? `${assetPath}.map` + : resolve(dirname(assetPath), decodeURIComponent(match[1])); + try { + return JSON.parse(await readFile(mapPath, "utf8")); + } catch (error) { + throw new Error(`Module attribution requires an external source map for ${assetPath}`, { + cause: error, + }); + } +} + +function appendSpan(spans, identity, text) { + if (text.length === 0) return; + const key = `${identity.owner}\0${identity.id}`; + const previous = spans.get(key); + if (previous === undefined) spans.set(key, { ...identity, parts: [text] }); + else previous.parts.push(text); +} + +function attributeSource(source, map, bundler) { + const spans = new Map(); + const mappingLines = decodedMappings(map); + const generatedLines = source.split("\n"); + const runtime = { id: `${bundler}:runtime`, owner: `${bundler}:runtime` }; + for (let lineIndex = 0; lineIndex < generatedLines.length; lineIndex++) { + const line = generatedLines[lineIndex] + (lineIndex + 1 < generatedLines.length ? "\n" : ""); + const contentLength = generatedLines[lineIndex].length; + const mappings = mappingLines[lineIndex] ?? []; + let cursor = 0; + let owner = runtime; + for (const mapping of mappings) { + if (mapping.generatedColumn < cursor || mapping.generatedColumn > contentLength) { + throw new Error(`Source-map generated column escapes line ${lineIndex + 1}`); + } + appendSpan(spans, owner, line.slice(cursor, mapping.generatedColumn)); + owner = + mapping.source === undefined + ? runtime + : normalizeSource(`${map.sourceRoot ?? ""}${mapping.source}`, bundler); + cursor = mapping.generatedColumn; + } + appendSpan(spans, owner, line.slice(cursor)); + } + return spans; +} + +function mergeSpans(target, source) { + for (const [key, identity] of source) { + const previous = target.get(key); + if (previous === undefined) target.set(key, identity); + else previous.parts.push(...identity.parts); + } +} + +export async function attributeEntry({ + assetFiles, + bundler, + eagerImports, + opaqueAssetFiles = [], + entry, + name, + repositoryRoot, + root, +}) { + const selected = [...new Set(assetFiles)].sort(); + const opaque = new Set(opaqueAssetFiles); + for (const file of opaque) { + if (!selected.includes(file)) { + throw new Error(`${bundler} ${name} declares a non-initial opaque asset ${file}`); + } + } + if (selected.length === 0) throw new Error(`${bundler} ${name} has no initial JavaScript assets`); + const spans = new Map(); + let generatedBytes = 0; + const attributedAssets = []; + for (const file of selected) { + if (!file.endsWith(".js")) throw new Error(`Cannot attribute non-JavaScript asset ${file}`); + const assetPath = resolve(root, file); + if (assetPath !== root && !assetPath.startsWith(`${root}${sep}`)) { + throw new Error(`Attribution asset escapes fixture output: ${file}`); + } + const content = await readFile(assetPath); + const source = content.toString("utf8"); + generatedBytes += content.byteLength; + attributedAssets.push({ + path: relative(repositoryRoot, assetPath).replaceAll("\\", "/"), + sha256: createHash("sha256").update(content).digest("hex"), + }); + if (opaque.has(file)) { + appendSpan( + spans, + { id: `${bundler}:opaque/${file}`, owner: `${bundler}:opaque-framework` }, + source, + ); + } else { + mergeSpans(spans, attributeSource(source, await sourceMapFor(assetPath, source), bundler)); + } + } + const modules = [...spans.values()] + .map(({ id, owner, parts }) => ({ + id, + owner, + attribution: owner === `${bundler}:opaque-framework` ? "opaque-asset" : "source-map", + ...compressedSizes(Buffer.from(parts.join(""))), + })) + .filter((module) => module.rawBytes > 0) + .sort( + (left, right) => left.id.localeCompare(right.id) || left.owner.localeCompare(right.owner), + ); + const attributedBytes = modules.reduce((sum, module) => sum + module.rawBytes, 0); + if (attributedBytes !== generatedBytes) { + throw new Error( + `${bundler} ${name} attributed ${attributedBytes} of ${generatedBytes} generated bytes`, + ); + } + return { + name, + entry, + eagerImports: [...new Set(eagerImports)].sort(), + assets: attributedAssets, + generatedBytes, + modules, + }; +} + +export function attributionProvenance({ minifier, version }) { + return { + buildMode: "production", + minified: true, + minifier: { name: minifier, version }, + externals: [], + target: "browser", + sourceMaps: SOURCE_MAPS_MODE, + attributionMethod: ATTRIBUTION_METHOD, + }; +} diff --git a/test/bundler-fixtures/next/app/attribution/page.tsx b/test/bundler-fixtures/next/app/attribution/page.tsx new file mode 100644 index 00000000..6aed753c --- /dev/null +++ b/test/bundler-fixtures/next/app/attribution/page.tsx @@ -0,0 +1,11 @@ +"use client"; + +import { createGrid, initSheetwrite } from "@sheetwrite/core"; + +const eagerImports = [createGrid, initSheetwrite] as const; + +export default function AttributionPage() { + return ( + {eagerImports.map((value) => value.name).join(",")} + ); +} diff --git a/test/bundler-fixtures/next/check.mjs b/test/bundler-fixtures/next/check.mjs index 8633ced9..441d518f 100644 --- a/test/bundler-fixtures/next/check.mjs +++ b/test/bundler-fixtures/next/check.mjs @@ -1,5 +1,6 @@ import { mkdir, readdir, readFile, writeFile } from "node:fs/promises"; import { relative, resolve } from "node:path"; +import { attributeEntry, attributionProvenance } from "../module-attribution.mjs"; const repositoryRoot = resolve("../../.."); const nextRoot = resolve(".next"); @@ -26,31 +27,63 @@ const wasm = staticAssets.filter((path) => path.endsWith(".wasm")); if (wasm.length !== 1) throw new Error(`Expected one browser Next.js WASM asset, got ${wasm.length}`); const selected = [...new Set(staticAssets)].sort(); -const html = await readFile(resolve("out/index.html"), "utf8"); -const initialUrls = new Set( - [...html.matchAll(/(?:src|href)="([^"]+\.(?:css|js|wasm)(?:\?[^"]*)?)"/g)].map((match) => - match[1].split("?")[0].replace(/^\/_next\//, ""), - ), +function initialUrls(html) { + return new Set( + [...html.matchAll(/(?:src|href)="([^"]+\.(?:css|js|wasm)(?:\?[^"]*)?)"/g)].map((match) => + match[1].split("?")[0].replace(/^\/_next\//, ""), + ), + ); +} + +const lifecycleInitialUrls = initialUrls(await readFile(resolve("out/index.html"), "utf8")); +const attributionHtml = await readFile(resolve("out/attribution.html"), "utf8").catch(() => + readFile(resolve("out/attribution/index.html"), "utf8"), ); +const attributionInitialUrls = initialUrls(attributionHtml); const assets = selected.map((path) => { const nextRelative = relative(nextRoot, path).replaceAll("\\", "/"); const kind = path.endsWith(".js") ? "javascript" : path.endsWith(".css") ? "css" : "wasm"; - const isInitial = kind === "wasm" || initialUrls.has(nextRelative); + const roles = []; + if (kind === "wasm" || lifecycleInitialUrls.has(nextRelative)) roles.push("core-initial"); + if (attributionInitialUrls.has(nextRelative)) roles.push("core-attribution-initial"); + if (roles.length === 0) roles.push("next-async"); return { path: relative(repositoryRoot, path).replaceAll("\\", "/"), kind, - owner: isInitial ? "core-initial" : "next-async", - roles: [isInitial ? "core-initial" : "next-async"], + owner: roles.length === 1 ? roles[0] : `shared:${roles.join("+")}`, + roles, }; }); -if (!assets.some((asset) => asset.kind === "javascript" && asset.owner === "core-initial")) { +if (!assets.some((asset) => asset.kind === "javascript" && asset.roles.includes("core-initial"))) { throw new Error("Next.js manifest identified no initial browser JavaScript"); } +const attributionAssetFiles = selected + .map((path) => relative(nextRoot, path).replaceAll("\\", "/")) + .filter((path) => path.endsWith(".js") && attributionInitialUrls.has(path)); +const attribution = [ + await attributeEntry({ + assetFiles: attributionAssetFiles, + bundler: "next", + eagerImports: ["@sheetwrite/core#createGrid", "@sheetwrite/core#initSheetwrite"], + entry: "app/attribution/page.tsx", + name: "core-first-paint", + opaqueAssetFiles: attributionAssetFiles.filter((path) => + /(?:^|\/)polyfills-[^/]+\.js$/.test(path), + ), + repositoryRoot, + root: nextRoot, + }), +]; const evidence = { - schemaVersion: 1, + schemaVersion: 2, bundler: "next", version: packageManifest.dependencies.next, assets, + provenance: attributionProvenance({ + minifier: "next-swc", + version: packageManifest.dependencies.next, + }), + attribution, }; const evidencePath = resolve(repositoryRoot, "test-results/bundlers/next.json"); await mkdir(resolve(evidencePath, ".."), { recursive: true }); diff --git a/test/bundler-fixtures/next/next.config.mjs b/test/bundler-fixtures/next/next.config.mjs index b62e5573..6574d11c 100644 --- a/test/bundler-fixtures/next/next.config.mjs +++ b/test/bundler-fixtures/next/next.config.mjs @@ -1,7 +1,12 @@ /** @type {import('next').NextConfig} */ const nextConfig = { output: "export", + productionBrowserSourceMaps: true, outputFileTracingRoot: import.meta.dirname, + webpack(config, { dev, isServer }) { + if (!dev && !isServer) config.devtool = "hidden-source-map"; + return config; + }, }; export default nextConfig; diff --git a/test/bundler-fixtures/next/package-lock.json b/test/bundler-fixtures/next/package-lock.json index a3517c4e..7765e167 100644 --- a/test/bundler-fixtures/next/package-lock.json +++ b/test/bundler-fixtures/next/package-lock.json @@ -5,9 +5,9 @@ "packages": { "": { "dependencies": { - "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/react": "file:../.packed/sheetwrite-react-0.3.1.tgz", - "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", + "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/react": "file:../.packed/sheetwrite-react-0.4.0.tgz", + "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.4.0.tgz", "@types/node": "24.10.1", "@types/react": "19.2.2", "next": "15.5.9", @@ -687,30 +687,30 @@ } }, "node_modules/@sheetwrite/core": { - "version": "0.3.1", - "resolved": "file:../.packed/sheetwrite-core-0.3.1.tgz", - "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", + "version": "0.4.0", + "resolved": "file:../.packed/sheetwrite-core-0.4.0.tgz", + "integrity": "sha512-c1S/G+dYzOfcVFBG8hTvuoHiGFuJgY76DiROfJkgyslXKit6qLetQ2Oh/3z6qUz/QK22XzJkaAwAZNl1J1iQ3Q==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.1" + "@sheetwrite/wasm": "0.4.0" } }, "node_modules/@sheetwrite/react": { - "version": "0.3.1", - "resolved": "file:../.packed/sheetwrite-react-0.3.1.tgz", - "integrity": "sha512-nODukyQhX7xaU8O1IuRCkS36p7rITZ1EliV7VBQrC73qKRHc23qR/Y3qVCPDzqrj5N+fAuSAVvA8qVSkXjNbmw==", + "version": "0.4.0", + "resolved": "file:../.packed/sheetwrite-react-0.4.0.tgz", + "integrity": "sha512-o/qBNvcRkZmiQek08yRqDMZH8uhUht3LpC9trT9usrp+SiPp4YQvDGZheIsQPj+vMSSNeOvMluJO6J49wlIv0g==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.1" + "@sheetwrite/core": "0.4.0" }, "peerDependencies": { "react": ">=18" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.1", - "resolved": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", - "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", + "version": "0.4.0", + "resolved": "file:../.packed/sheetwrite-wasm-0.4.0.tgz", + "integrity": "sha512-Ldt/Esjf9z3K4VwO/xiSHDlopcLCMOpn9wW0YlkP6NygGIDP6eNpEoIubaLGhCkIUv6Vu+G1/hPO3GZHnnygRA==", "license": "MIT" }, "node_modules/@swc/helpers": { @@ -783,9 +783,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.16", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", - "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", "funding": [ { "type": "github", diff --git a/test/bundler-fixtures/next/package.json b/test/bundler-fixtures/next/package.json index b7ac8a0f..b734ab71 100644 --- a/test/bundler-fixtures/next/package.json +++ b/test/bundler-fixtures/next/package.json @@ -5,9 +5,9 @@ "build": "npm ci --ignore-scripts --no-audit --no-fund && npm run bundle && node check.mjs" }, "dependencies": { - "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/react": "file:../.packed/sheetwrite-react-0.3.1.tgz", - "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", + "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/react": "file:../.packed/sheetwrite-react-0.4.0.tgz", + "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.4.0.tgz", "next": "15.5.9", "react": "19.1.0", "react-dom": "19.1.0", diff --git a/test/bundler-fixtures/run.mjs b/test/bundler-fixtures/run.mjs index 572c9512..cbbbec6c 100644 --- a/test/bundler-fixtures/run.mjs +++ b/test/bundler-fixtures/run.mjs @@ -1,8 +1,8 @@ import { spawn } from "node:child_process"; import { createHash } from "node:crypto"; -import { cp, mkdir, readFile, rm, writeFile } from "node:fs/promises"; +import { cp, glob, mkdir, readFile, rm, writeFile } from "node:fs/promises"; import { createServer } from "node:http"; -import { basename, extname, join, resolve, sep } from "node:path"; +import { basename, dirname, extname, join, resolve, sep } from "node:path"; import { fileURLToPath } from "node:url"; import { chromium } from "@playwright/test"; import { bindCanonicalTarballIntegrities } from "../../scripts/release-lock-integrity.mjs"; @@ -66,6 +66,21 @@ function run(command, args, cwd) { }); } +async function copyPublishEntry(sourceRoot, packageRoot, entry) { + if (!/[*?[\]{}]/u.test(entry)) { + await cp(join(sourceRoot, entry), join(packageRoot, entry), { recursive: true }); + return; + } + const matches = []; + for await (const path of glob(entry, { cwd: sourceRoot })) matches.push(path); + if (matches.length === 0) throw new Error(`Package file pattern matched nothing: ${entry}`); + for (const path of matches) { + const target = join(packageRoot, path); + await mkdir(dirname(target), { recursive: true }); + await cp(join(sourceRoot, path), target); + } +} + async function stageAndPack(packageDirectory, filename) { const sourceRoot = join(repositoryRoot, packageDirectory); const packageRoot = join(stagingRoot, basename(packageDirectory)); @@ -73,7 +88,7 @@ async function stageAndPack(packageDirectory, filename) { const publishFiles = [...(manifest.files ?? []), "README.md"]; await mkdir(packageRoot, { recursive: true }); for (const path of publishFiles) { - await cp(join(sourceRoot, path), join(packageRoot, path), { recursive: true }); + await copyPublishEntry(sourceRoot, packageRoot, path); } await cp(join(repositoryRoot, "LICENSE"), join(packageRoot, "LICENSE")); if (manifest.dependencies) { diff --git a/test/bundler-fixtures/vite/check.mjs b/test/bundler-fixtures/vite/check.mjs index 2bf1ebbe..2d4f88eb 100644 --- a/test/bundler-fixtures/vite/check.mjs +++ b/test/bundler-fixtures/vite/check.mjs @@ -1,10 +1,12 @@ import { mkdir, readdir, readFile, writeFile } from "node:fs/promises"; import { relative, resolve } from "node:path"; +import { attributeEntry, attributionProvenance } from "../module-attribution.mjs"; const repositoryRoot = resolve("../../.."); const root = resolve("dist"); const manifest = JSON.parse(await readFile(resolve(root, ".vite/manifest.json"), "utf8")); const packageManifest = JSON.parse(await readFile("package.json", "utf8")); +const packageLock = JSON.parse(await readFile("package-lock.json", "utf8")); const rolesByFile = new Map(); const kindByFile = new Map(); const initialRoles = ["core-initial", "react-initial", "svelte-initial", "vue-initial"]; @@ -82,8 +84,11 @@ const entryRoles = { "xlsx.html": "xlsx-loader-initial", }; const defaultInitialChunks = new Set(); +const staticGraphsByHtml = new Map(); for (const [html, role] of Object.entries(entryRoles)) { - for (const key of staticGraph(findEntry(html))) { + const graph = staticGraph(findEntry(html)); + staticGraphsByHtml.set(html, graph); + for (const key of graph) { addChunk(key, role); if (initialRoles.includes(role)) defaultInitialChunks.add(key); } @@ -157,11 +162,30 @@ const assets = publicFiles.map((file) => { roles, }; }); +const coreGraph = staticGraphsByHtml.get("index.html"); +if (coreGraph === undefined) throw new Error("Vite core entry graph was not recorded"); +const attribution = [ + await attributeEntry({ + assetFiles: [...coreGraph] + .map((key) => manifest[key]?.file) + .filter((file) => typeof file === "string" && file.endsWith(".js")), + bundler: "vite", + eagerImports: ["@sheetwrite/core#createGrid", "@sheetwrite/core#initSheetwrite"], + entry: "index.html", + name: "core-first-paint", + repositoryRoot, + root, + }), +]; +const esbuildVersion = packageLock.packages?.["node_modules/esbuild"]?.version; +if (typeof esbuildVersion !== "string") throw new Error("Vite fixture lock is missing esbuild"); const evidence = { - schemaVersion: 1, + schemaVersion: 2, bundler: "vite", version: packageManifest.dependencies.vite, assets, + provenance: attributionProvenance({ minifier: "esbuild", version: esbuildVersion }), + attribution, }; const evidencePath = resolve(repositoryRoot, "test-results/bundlers/vite.json"); await mkdir(resolve(evidencePath, ".."), { recursive: true }); diff --git a/test/bundler-fixtures/vite/package-lock.json b/test/bundler-fixtures/vite/package-lock.json index 9d2685cc..847a7040 100644 --- a/test/bundler-fixtures/vite/package-lock.json +++ b/test/bundler-fixtures/vite/package-lock.json @@ -5,12 +5,12 @@ "packages": { "": { "dependencies": { - "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/react": "file:../.packed/sheetwrite-react-0.3.1.tgz", - "@sheetwrite/svelte": "file:../.packed/sheetwrite-svelte-0.3.1.tgz", - "@sheetwrite/vue": "file:../.packed/sheetwrite-vue-0.3.1.tgz", - "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", - "@sheetwrite/xlsx": "file:../.packed/sheetwrite-xlsx-0.3.1.tgz", + "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/react": "file:../.packed/sheetwrite-react-0.4.0.tgz", + "@sheetwrite/svelte": "file:../.packed/sheetwrite-svelte-0.4.0.tgz", + "@sheetwrite/vue": "file:../.packed/sheetwrite-vue-0.4.0.tgz", + "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.4.0.tgz", + "@sheetwrite/xlsx": "file:../.packed/sheetwrite-xlsx-0.4.0.tgz", "@sveltejs/vite-plugin-svelte": "6.2.4", "react": "19.1.0", "react-dom": "19.1.0", @@ -869,63 +869,63 @@ ] }, "node_modules/@sheetwrite/core": { - "version": "0.3.1", - "resolved": "file:../.packed/sheetwrite-core-0.3.1.tgz", - "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", + "version": "0.4.0", + "resolved": "file:../.packed/sheetwrite-core-0.4.0.tgz", + "integrity": "sha512-c1S/G+dYzOfcVFBG8hTvuoHiGFuJgY76DiROfJkgyslXKit6qLetQ2Oh/3z6qUz/QK22XzJkaAwAZNl1J1iQ3Q==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.1" + "@sheetwrite/wasm": "0.4.0" } }, "node_modules/@sheetwrite/react": { - "version": "0.3.1", - "resolved": "file:../.packed/sheetwrite-react-0.3.1.tgz", - "integrity": "sha512-nODukyQhX7xaU8O1IuRCkS36p7rITZ1EliV7VBQrC73qKRHc23qR/Y3qVCPDzqrj5N+fAuSAVvA8qVSkXjNbmw==", + "version": "0.4.0", + "resolved": "file:../.packed/sheetwrite-react-0.4.0.tgz", + "integrity": "sha512-o/qBNvcRkZmiQek08yRqDMZH8uhUht3LpC9trT9usrp+SiPp4YQvDGZheIsQPj+vMSSNeOvMluJO6J49wlIv0g==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.1" + "@sheetwrite/core": "0.4.0" }, "peerDependencies": { "react": ">=18" } }, "node_modules/@sheetwrite/svelte": { - "version": "0.3.1", - "resolved": "file:../.packed/sheetwrite-svelte-0.3.1.tgz", - "integrity": "sha512-EefOFUSh941LB1Ppfi8mv/kQouJ3FA8kQGL52UbTPzutMPSCZs1XJM0Csq7NjFdapoGWnmqGAiOAr95WjccJUw==", + "version": "0.4.0", + "resolved": "file:../.packed/sheetwrite-svelte-0.4.0.tgz", + "integrity": "sha512-bZDldDSKoVBm7Yr+7nVb6QZb/I23e3lKC9DFTtZkElp5KveMCzxBadXCLWwEK4VRm40a5zhPhuU/yVplT3La0Q==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.1" + "@sheetwrite/core": "0.4.0" }, "peerDependencies": { "svelte": ">=5" } }, "node_modules/@sheetwrite/vue": { - "version": "0.3.1", - "resolved": "file:../.packed/sheetwrite-vue-0.3.1.tgz", - "integrity": "sha512-ZOouRq6JZg0zxeqbCq0Hgo9d15mZ+00XlCkAp35xekAiPO36U/o6zPR5xgm6auFRkf5HvILeZeurB3Rd50gfjg==", + "version": "0.4.0", + "resolved": "file:../.packed/sheetwrite-vue-0.4.0.tgz", + "integrity": "sha512-Rqg5fTKf8+0hZHtkxW3CUJbXTf8NSXEsprEM4OyILO4qs0X1miKbsu3+55fFpOWZ3TPF3/lk1B2WACy06/V+rQ==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.1" + "@sheetwrite/core": "0.4.0" }, "peerDependencies": { "vue": ">=3.4" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.1", - "resolved": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", - "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", + "version": "0.4.0", + "resolved": "file:../.packed/sheetwrite-wasm-0.4.0.tgz", + "integrity": "sha512-Ldt/Esjf9z3K4VwO/xiSHDlopcLCMOpn9wW0YlkP6NygGIDP6eNpEoIubaLGhCkIUv6Vu+G1/hPO3GZHnnygRA==", "license": "MIT" }, "node_modules/@sheetwrite/xlsx": { - "version": "0.3.1", - "resolved": "file:../.packed/sheetwrite-xlsx-0.3.1.tgz", - "integrity": "sha512-rKF4a+10pe1dCbfkPdxzwPKvIdFLUAt4s2QsTtubimIYkuHmECM79YXFZ3qBv+FJWalx/gtTEfaUAYHl9pQyIQ==", + "version": "0.4.0", + "resolved": "file:../.packed/sheetwrite-xlsx-0.4.0.tgz", + "integrity": "sha512-+FjK4Uqcy5XIprPJc1ShCWTKYXMRdbjS0vGlI3g9/o4yH3TgrXkDTKAoAql2aw9gr08VrklvuLOQZ7TgEaHAug==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.1", + "@sheetwrite/core": "0.4.0", "fflate": "0.8.3" } }, @@ -1229,7 +1229,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.16", + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", "funding": [ { "type": "github", diff --git a/test/bundler-fixtures/vite/package.json b/test/bundler-fixtures/vite/package.json index c54ec7e2..4c64267a 100644 --- a/test/bundler-fixtures/vite/package.json +++ b/test/bundler-fixtures/vite/package.json @@ -6,12 +6,12 @@ "build": "npm ci --ignore-scripts --no-audit --no-fund && npm run bundle && node check.mjs" }, "dependencies": { - "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/react": "file:../.packed/sheetwrite-react-0.3.1.tgz", - "@sheetwrite/xlsx": "file:../.packed/sheetwrite-xlsx-0.3.1.tgz", - "@sheetwrite/svelte": "file:../.packed/sheetwrite-svelte-0.3.1.tgz", - "@sheetwrite/vue": "file:../.packed/sheetwrite-vue-0.3.1.tgz", - "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", + "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/react": "file:../.packed/sheetwrite-react-0.4.0.tgz", + "@sheetwrite/xlsx": "file:../.packed/sheetwrite-xlsx-0.4.0.tgz", + "@sheetwrite/svelte": "file:../.packed/sheetwrite-svelte-0.4.0.tgz", + "@sheetwrite/vue": "file:../.packed/sheetwrite-vue-0.4.0.tgz", + "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.4.0.tgz", "@sveltejs/vite-plugin-svelte": "6.2.4", "react": "19.1.0", "react-dom": "19.1.0", diff --git a/test/bundler-fixtures/vite/vite.config.ts b/test/bundler-fixtures/vite/vite.config.ts index 768af3b6..c277d22b 100644 --- a/test/bundler-fixtures/vite/vite.config.ts +++ b/test/bundler-fixtures/vite/vite.config.ts @@ -5,7 +5,9 @@ import { defineConfig } from "vite"; export default defineConfig({ plugins: [svelte()], build: { + sourcemap: "hidden", manifest: true, + minify: "esbuild", rollupOptions: { input: { core: resolve(import.meta.dirname, "index.html"), diff --git a/test/bundler-fixtures/webpack/check.mjs b/test/bundler-fixtures/webpack/check.mjs index 9e828f28..c9257d8e 100644 --- a/test/bundler-fixtures/webpack/check.mjs +++ b/test/bundler-fixtures/webpack/check.mjs @@ -1,9 +1,11 @@ import { mkdir, readdir, readFile, writeFile } from "node:fs/promises"; import { relative, resolve } from "node:path"; +import { attributeEntry, attributionProvenance } from "../module-attribution.mjs"; const repositoryRoot = resolve("../../.."); const root = resolve("dist"); const packageManifest = JSON.parse(await readFile("package.json", "utf8")); +const packageLock = JSON.parse(await readFile("package-lock.json", "utf8")); async function walk(directory) { const entries = await readdir(directory, { withFileTypes: true }); @@ -49,11 +51,31 @@ const assets = publicFiles.map((file) => { roles, }; }); +const attribution = [ + await attributeEntry({ + assetFiles: ["main.js"], + bundler: "webpack", + eagerImports: ["@sheetwrite/core#initSheetwrite"], + entry: "src/main.js", + name: "core-first-paint", + repositoryRoot, + root, + }), +]; +const terserVersion = packageLock.packages?.["node_modules/terser-webpack-plugin"]?.version; +if (typeof terserVersion !== "string") { + throw new Error("webpack fixture lock is missing terser-webpack-plugin"); +} const evidence = { - schemaVersion: 1, + schemaVersion: 2, bundler: "webpack", version: packageManifest.dependencies.webpack, assets, + provenance: attributionProvenance({ + minifier: "terser-webpack-plugin", + version: terserVersion, + }), + attribution, }; const evidencePath = resolve(repositoryRoot, "test-results/bundlers/webpack.json"); await mkdir(resolve(evidencePath, ".."), { recursive: true }); diff --git a/test/bundler-fixtures/webpack/package-lock.json b/test/bundler-fixtures/webpack/package-lock.json index d5d9d0bd..712f14dc 100644 --- a/test/bundler-fixtures/webpack/package-lock.json +++ b/test/bundler-fixtures/webpack/package-lock.json @@ -5,8 +5,8 @@ "packages": { "": { "dependencies": { - "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", + "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.4.0.tgz", "webpack": "5.102.1", "webpack-cli": "6.0.1" } @@ -66,18 +66,18 @@ } }, "node_modules/@sheetwrite/core": { - "version": "0.3.1", - "resolved": "file:../.packed/sheetwrite-core-0.3.1.tgz", - "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", + "version": "0.4.0", + "resolved": "file:../.packed/sheetwrite-core-0.4.0.tgz", + "integrity": "sha512-c1S/G+dYzOfcVFBG8hTvuoHiGFuJgY76DiROfJkgyslXKit6qLetQ2Oh/3z6qUz/QK22XzJkaAwAZNl1J1iQ3Q==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.1" + "@sheetwrite/wasm": "0.4.0" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.1", - "resolved": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", - "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", + "version": "0.4.0", + "resolved": "file:../.packed/sheetwrite-wasm-0.4.0.tgz", + "integrity": "sha512-Ldt/Esjf9z3K4VwO/xiSHDlopcLCMOpn9wW0YlkP6NygGIDP6eNpEoIubaLGhCkIUv6Vu+G1/hPO3GZHnnygRA==", "license": "MIT" }, "node_modules/@types/eslint": { diff --git a/test/bundler-fixtures/webpack/package.json b/test/bundler-fixtures/webpack/package.json index 27c01d35..2dfc8bf8 100644 --- a/test/bundler-fixtures/webpack/package.json +++ b/test/bundler-fixtures/webpack/package.json @@ -6,8 +6,8 @@ "build": "npm ci --ignore-scripts --no-audit --no-fund && npm run bundle && node check.mjs" }, "dependencies": { - "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", + "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.4.0.tgz", "webpack": "5.102.1", "webpack-cli": "6.0.1" } diff --git a/test/bundler-fixtures/webpack/webpack.config.js b/test/bundler-fixtures/webpack/webpack.config.js index 5b1c2d01..25aa339a 100644 --- a/test/bundler-fixtures/webpack/webpack.config.js +++ b/test/bundler-fixtures/webpack/webpack.config.js @@ -3,7 +3,7 @@ import { resolve } from "node:path"; export default { mode: "production", entry: "./src/main.js", - devtool: false, + devtool: "hidden-source-map", output: { path: resolve("dist"), filename: "main.js", diff --git a/test/consumer/package-lock.json b/test/consumer/package-lock.json index 62f16dea..d88ed39d 100644 --- a/test/consumer/package-lock.json +++ b/test/consumer/package-lock.json @@ -6,12 +6,12 @@ "": { "name": "sheetwrite-packed-consumer", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/react": "file:artifacts/sheetwrite-react-0.3.1.tgz", - "@sheetwrite/svelte": "file:artifacts/sheetwrite-svelte-0.3.1.tgz", - "@sheetwrite/vue": "file:artifacts/sheetwrite-vue-0.3.1.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", - "@sheetwrite/xlsx": "file:artifacts/sheetwrite-xlsx-0.3.1.tgz", + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/react": "file:artifacts/sheetwrite-react-0.4.0.tgz", + "@sheetwrite/svelte": "file:artifacts/sheetwrite-svelte-0.4.0.tgz", + "@sheetwrite/vue": "file:artifacts/sheetwrite-vue-0.4.0.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.4.0.tgz", + "@sheetwrite/xlsx": "file:artifacts/sheetwrite-xlsx-0.4.0.tgz", "react": "19.2.7", "react-dom": "19.2.7", "svelte": "5.56.4", @@ -949,63 +949,63 @@ ] }, "node_modules/@sheetwrite/core": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "integrity": "sha512-c1S/G+dYzOfcVFBG8hTvuoHiGFuJgY76DiROfJkgyslXKit6qLetQ2Oh/3z6qUz/QK22XzJkaAwAZNl1J1iQ3Q==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.1" + "@sheetwrite/wasm": "0.4.0" } }, "node_modules/@sheetwrite/react": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-react-0.3.1.tgz", - "integrity": "sha512-nODukyQhX7xaU8O1IuRCkS36p7rITZ1EliV7VBQrC73qKRHc23qR/Y3qVCPDzqrj5N+fAuSAVvA8qVSkXjNbmw==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-react-0.4.0.tgz", + "integrity": "sha512-o/qBNvcRkZmiQek08yRqDMZH8uhUht3LpC9trT9usrp+SiPp4YQvDGZheIsQPj+vMSSNeOvMluJO6J49wlIv0g==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.1" + "@sheetwrite/core": "0.4.0" }, "peerDependencies": { "react": ">=18" } }, "node_modules/@sheetwrite/svelte": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-svelte-0.3.1.tgz", - "integrity": "sha512-EefOFUSh941LB1Ppfi8mv/kQouJ3FA8kQGL52UbTPzutMPSCZs1XJM0Csq7NjFdapoGWnmqGAiOAr95WjccJUw==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-svelte-0.4.0.tgz", + "integrity": "sha512-bZDldDSKoVBm7Yr+7nVb6QZb/I23e3lKC9DFTtZkElp5KveMCzxBadXCLWwEK4VRm40a5zhPhuU/yVplT3La0Q==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.1" + "@sheetwrite/core": "0.4.0" }, "peerDependencies": { "svelte": ">=5" } }, "node_modules/@sheetwrite/vue": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-vue-0.3.1.tgz", - "integrity": "sha512-ZOouRq6JZg0zxeqbCq0Hgo9d15mZ+00XlCkAp35xekAiPO36U/o6zPR5xgm6auFRkf5HvILeZeurB3Rd50gfjg==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-vue-0.4.0.tgz", + "integrity": "sha512-Rqg5fTKf8+0hZHtkxW3CUJbXTf8NSXEsprEM4OyILO4qs0X1miKbsu3+55fFpOWZ3TPF3/lk1B2WACy06/V+rQ==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.1" + "@sheetwrite/core": "0.4.0" }, "peerDependencies": { "vue": ">=3.4" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", - "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-wasm-0.4.0.tgz", + "integrity": "sha512-Ldt/Esjf9z3K4VwO/xiSHDlopcLCMOpn9wW0YlkP6NygGIDP6eNpEoIubaLGhCkIUv6Vu+G1/hPO3GZHnnygRA==", "license": "MIT" }, "node_modules/@sheetwrite/xlsx": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-xlsx-0.3.1.tgz", - "integrity": "sha512-rKF4a+10pe1dCbfkPdxzwPKvIdFLUAt4s2QsTtubimIYkuHmECM79YXFZ3qBv+FJWalx/gtTEfaUAYHl9pQyIQ==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-xlsx-0.4.0.tgz", + "integrity": "sha512-+FjK4Uqcy5XIprPJc1ShCWTKYXMRdbjS0vGlI3g9/o4yH3TgrXkDTKAoAql2aw9gr08VrklvuLOQZ7TgEaHAug==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.1", + "@sheetwrite/core": "0.4.0", "fflate": "0.8.3" } }, @@ -1433,9 +1433,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.16", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", - "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", "funding": [ { "type": "github", diff --git a/test/consumer/package.json b/test/consumer/package.json index 57ab7693..a9c0e3b7 100644 --- a/test/consumer/package.json +++ b/test/consumer/package.json @@ -9,12 +9,12 @@ "bundle:frameworks": "vite build" }, "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/react": "file:artifacts/sheetwrite-react-0.3.1.tgz", - "@sheetwrite/svelte": "file:artifacts/sheetwrite-svelte-0.3.1.tgz", - "@sheetwrite/vue": "file:artifacts/sheetwrite-vue-0.3.1.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", - "@sheetwrite/xlsx": "file:artifacts/sheetwrite-xlsx-0.3.1.tgz", + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/react": "file:artifacts/sheetwrite-react-0.4.0.tgz", + "@sheetwrite/svelte": "file:artifacts/sheetwrite-svelte-0.4.0.tgz", + "@sheetwrite/vue": "file:artifacts/sheetwrite-vue-0.4.0.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.4.0.tgz", + "@sheetwrite/xlsx": "file:artifacts/sheetwrite-xlsx-0.4.0.tgz", "react": "19.2.7", "react-dom": "19.2.7", "svelte": "5.56.4", diff --git a/test/release-locks/core-xlsx/package-lock.json b/test/release-locks/core-xlsx/package-lock.json index 97e0a516..47463064 100644 --- a/test/release-locks/core-xlsx/package-lock.json +++ b/test/release-locks/core-xlsx/package-lock.json @@ -8,33 +8,33 @@ "name": "sheetwrite-release-core-xlsx", "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", - "@sheetwrite/xlsx": "file:artifacts/sheetwrite-xlsx-0.3.1.tgz" + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.4.0.tgz", + "@sheetwrite/xlsx": "file:artifacts/sheetwrite-xlsx-0.4.0.tgz" } }, "node_modules/@sheetwrite/core": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "integrity": "sha512-c1S/G+dYzOfcVFBG8hTvuoHiGFuJgY76DiROfJkgyslXKit6qLetQ2Oh/3z6qUz/QK22XzJkaAwAZNl1J1iQ3Q==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.1" + "@sheetwrite/wasm": "0.4.0" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", - "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-wasm-0.4.0.tgz", + "integrity": "sha512-Ldt/Esjf9z3K4VwO/xiSHDlopcLCMOpn9wW0YlkP6NygGIDP6eNpEoIubaLGhCkIUv6Vu+G1/hPO3GZHnnygRA==", "license": "MIT" }, "node_modules/@sheetwrite/xlsx": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-xlsx-0.3.1.tgz", - "integrity": "sha512-rKF4a+10pe1dCbfkPdxzwPKvIdFLUAt4s2QsTtubimIYkuHmECM79YXFZ3qBv+FJWalx/gtTEfaUAYHl9pQyIQ==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-xlsx-0.4.0.tgz", + "integrity": "sha512-+FjK4Uqcy5XIprPJc1ShCWTKYXMRdbjS0vGlI3g9/o4yH3TgrXkDTKAoAql2aw9gr08VrklvuLOQZ7TgEaHAug==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.1", + "@sheetwrite/core": "0.4.0", "fflate": "0.8.3" } }, diff --git a/test/release-locks/core-xlsx/package.json b/test/release-locks/core-xlsx/package.json index 4ad12dcc..a81f08a9 100644 --- a/test/release-locks/core-xlsx/package.json +++ b/test/release-locks/core-xlsx/package.json @@ -3,8 +3,8 @@ "private": true, "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", - "@sheetwrite/xlsx": "file:artifacts/sheetwrite-xlsx-0.3.1.tgz" + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.4.0.tgz", + "@sheetwrite/xlsx": "file:artifacts/sheetwrite-xlsx-0.4.0.tgz" } } diff --git a/test/release-locks/core/package-lock.json b/test/release-locks/core/package-lock.json index 620cc089..02b916cb 100644 --- a/test/release-locks/core/package-lock.json +++ b/test/release-locks/core/package-lock.json @@ -8,23 +8,23 @@ "name": "sheetwrite-release-core", "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz" + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.4.0.tgz" } }, "node_modules/@sheetwrite/core": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "integrity": "sha512-c1S/G+dYzOfcVFBG8hTvuoHiGFuJgY76DiROfJkgyslXKit6qLetQ2Oh/3z6qUz/QK22XzJkaAwAZNl1J1iQ3Q==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.1" + "@sheetwrite/wasm": "0.4.0" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", - "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-wasm-0.4.0.tgz", + "integrity": "sha512-Ldt/Esjf9z3K4VwO/xiSHDlopcLCMOpn9wW0YlkP6NygGIDP6eNpEoIubaLGhCkIUv6Vu+G1/hPO3GZHnnygRA==", "license": "MIT" } } diff --git a/test/release-locks/core/package.json b/test/release-locks/core/package.json index 0a9a8e0a..6919bfb5 100644 --- a/test/release-locks/core/package.json +++ b/test/release-locks/core/package.json @@ -3,7 +3,7 @@ "private": true, "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz" + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.4.0.tgz" } } diff --git a/test/release-locks/react/package-lock.json b/test/release-locks/react/package-lock.json index 8bf0ea08..18d09c5e 100644 --- a/test/release-locks/react/package-lock.json +++ b/test/release-locks/react/package-lock.json @@ -8,37 +8,37 @@ "name": "sheetwrite-release-react", "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/react": "file:artifacts/sheetwrite-react-0.3.1.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/react": "file:artifacts/sheetwrite-react-0.4.0.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.4.0.tgz", "react": "19.2.7" } }, "node_modules/@sheetwrite/core": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "integrity": "sha512-c1S/G+dYzOfcVFBG8hTvuoHiGFuJgY76DiROfJkgyslXKit6qLetQ2Oh/3z6qUz/QK22XzJkaAwAZNl1J1iQ3Q==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.1" + "@sheetwrite/wasm": "0.4.0" } }, "node_modules/@sheetwrite/react": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-react-0.3.1.tgz", - "integrity": "sha512-nODukyQhX7xaU8O1IuRCkS36p7rITZ1EliV7VBQrC73qKRHc23qR/Y3qVCPDzqrj5N+fAuSAVvA8qVSkXjNbmw==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-react-0.4.0.tgz", + "integrity": "sha512-o/qBNvcRkZmiQek08yRqDMZH8uhUht3LpC9trT9usrp+SiPp4YQvDGZheIsQPj+vMSSNeOvMluJO6J49wlIv0g==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.1" + "@sheetwrite/core": "0.4.0" }, "peerDependencies": { "react": ">=18" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", - "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-wasm-0.4.0.tgz", + "integrity": "sha512-Ldt/Esjf9z3K4VwO/xiSHDlopcLCMOpn9wW0YlkP6NygGIDP6eNpEoIubaLGhCkIUv6Vu+G1/hPO3GZHnnygRA==", "license": "MIT" }, "node_modules/react": { diff --git a/test/release-locks/react/package.json b/test/release-locks/react/package.json index f0d3d94c..7d30d9cd 100644 --- a/test/release-locks/react/package.json +++ b/test/release-locks/react/package.json @@ -3,9 +3,9 @@ "private": true, "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/react": "file:artifacts/sheetwrite-react-0.3.1.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/react": "file:artifacts/sheetwrite-react-0.4.0.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.4.0.tgz", "react": "19.2.7" } } diff --git a/test/release-locks/svelte/package-lock.json b/test/release-locks/svelte/package-lock.json index 93c13f33..7b5f177c 100644 --- a/test/release-locks/svelte/package-lock.json +++ b/test/release-locks/svelte/package-lock.json @@ -8,9 +8,9 @@ "name": "sheetwrite-release-svelte", "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/svelte": "file:artifacts/sheetwrite-svelte-0.3.1.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/svelte": "file:artifacts/sheetwrite-svelte-0.4.0.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.4.0.tgz", "svelte": "5.56.4" } }, @@ -60,30 +60,30 @@ } }, "node_modules/@sheetwrite/core": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "integrity": "sha512-c1S/G+dYzOfcVFBG8hTvuoHiGFuJgY76DiROfJkgyslXKit6qLetQ2Oh/3z6qUz/QK22XzJkaAwAZNl1J1iQ3Q==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.1" + "@sheetwrite/wasm": "0.4.0" } }, "node_modules/@sheetwrite/svelte": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-svelte-0.3.1.tgz", - "integrity": "sha512-EefOFUSh941LB1Ppfi8mv/kQouJ3FA8kQGL52UbTPzutMPSCZs1XJM0Csq7NjFdapoGWnmqGAiOAr95WjccJUw==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-svelte-0.4.0.tgz", + "integrity": "sha512-bZDldDSKoVBm7Yr+7nVb6QZb/I23e3lKC9DFTtZkElp5KveMCzxBadXCLWwEK4VRm40a5zhPhuU/yVplT3La0Q==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.1" + "@sheetwrite/core": "0.4.0" }, "peerDependencies": { "svelte": ">=5" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", - "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-wasm-0.4.0.tgz", + "integrity": "sha512-Ldt/Esjf9z3K4VwO/xiSHDlopcLCMOpn9wW0YlkP6NygGIDP6eNpEoIubaLGhCkIUv6Vu+G1/hPO3GZHnnygRA==", "license": "MIT" }, "node_modules/@sveltejs/acorn-typescript": { diff --git a/test/release-locks/svelte/package.json b/test/release-locks/svelte/package.json index f4a27e19..63c37df8 100644 --- a/test/release-locks/svelte/package.json +++ b/test/release-locks/svelte/package.json @@ -3,9 +3,9 @@ "private": true, "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/svelte": "file:artifacts/sheetwrite-svelte-0.3.1.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/svelte": "file:artifacts/sheetwrite-svelte-0.4.0.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.4.0.tgz", "svelte": "5.56.4" } } diff --git a/test/release-locks/vue/package-lock.json b/test/release-locks/vue/package-lock.json index 3f8378db..c679ac7c 100644 --- a/test/release-locks/vue/package-lock.json +++ b/test/release-locks/vue/package-lock.json @@ -8,9 +8,9 @@ "name": "sheetwrite-release-vue", "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/vue": "file:artifacts/sheetwrite-vue-0.3.1.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/vue": "file:artifacts/sheetwrite-vue-0.4.0.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.4.0.tgz", "vue": "3.5.39" } }, @@ -67,30 +67,30 @@ "license": "MIT" }, "node_modules/@sheetwrite/core": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "integrity": "sha512-c1S/G+dYzOfcVFBG8hTvuoHiGFuJgY76DiROfJkgyslXKit6qLetQ2Oh/3z6qUz/QK22XzJkaAwAZNl1J1iQ3Q==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.1" + "@sheetwrite/wasm": "0.4.0" } }, "node_modules/@sheetwrite/vue": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-vue-0.3.1.tgz", - "integrity": "sha512-ZOouRq6JZg0zxeqbCq0Hgo9d15mZ+00XlCkAp35xekAiPO36U/o6zPR5xgm6auFRkf5HvILeZeurB3Rd50gfjg==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-vue-0.4.0.tgz", + "integrity": "sha512-Rqg5fTKf8+0hZHtkxW3CUJbXTf8NSXEsprEM4OyILO4qs0X1miKbsu3+55fFpOWZ3TPF3/lk1B2WACy06/V+rQ==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.1" + "@sheetwrite/core": "0.4.0" }, "peerDependencies": { "vue": ">=3.4" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.1", - "resolved": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", - "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", + "version": "0.4.0", + "resolved": "file:artifacts/sheetwrite-wasm-0.4.0.tgz", + "integrity": "sha512-Ldt/Esjf9z3K4VwO/xiSHDlopcLCMOpn9wW0YlkP6NygGIDP6eNpEoIubaLGhCkIUv6Vu+G1/hPO3GZHnnygRA==", "license": "MIT" }, "node_modules/@vue/compiler-core": { @@ -227,9 +227,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.16", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", - "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", "funding": [ { "type": "github", diff --git a/test/release-locks/vue/package.json b/test/release-locks/vue/package.json index ac7ba0a4..7fc0b064 100644 --- a/test/release-locks/vue/package.json +++ b/test/release-locks/vue/package.json @@ -3,9 +3,9 @@ "private": true, "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", - "@sheetwrite/vue": "file:artifacts/sheetwrite-vue-0.3.1.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.4.0.tgz", + "@sheetwrite/vue": "file:artifacts/sheetwrite-vue-0.4.0.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.4.0.tgz", "vue": "3.5.39" } }
Entry pointClassificationSymbols
@sheetwrite/coresupported314
@sheetwrite/coresupported312
@sheetwrite/core/adaptersupported51
@sheetwrite/core/browsersupported4
@sheetwrite/core/shellsupported13