@adobe/data 0.9.53 → 0.9.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,214 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+ import { createECS } from "../old-ecs/index.js";
3
+ import { F32, True, U32 } from "../schema/index.js";
4
+ import * as assembly from "../../dist/assembly/index.js";
5
+ import { createWasmMemoryAllocator } from "../cache/memory-allocator.js";
6
+ // const COUNT = 1_000_000;
7
+ // const SIZEOF_F32 = 4;
8
+ // const SIZEOF_BOOLEAN = 1;
9
+ // const OBJECT_OVERHEAD = 16;
10
+ // // Expected 50 Mb
11
+ // const EXPECTED_MEMORY = (8 * SIZEOF_F32 + 2 * SIZEOF_BOOLEAN + OBJECT_OVERHEAD) * COUNT;
12
+ function createECSWithParticles(count, batch = true) {
13
+ const ecs = createECS({
14
+ allocator: createWasmMemoryAllocator(assembly.memory),
15
+ })
16
+ .withComponents({
17
+ color: U32.schema,
18
+ enabled: True.schema,
19
+ mass: F32.schema,
20
+ positionX: F32.schema,
21
+ positionY: F32.schema,
22
+ positionZ: F32.schema,
23
+ velocityX: F32.schema,
24
+ velocityY: F32.schema,
25
+ velocityZ: F32.schema,
26
+ visible: True.schema,
27
+ })
28
+ .withArchetypes({
29
+ VisibleEnabled: [
30
+ "id",
31
+ "color",
32
+ "enabled",
33
+ "mass",
34
+ "positionX",
35
+ "positionY",
36
+ "positionZ",
37
+ "velocityX",
38
+ "velocityY",
39
+ "velocityZ",
40
+ "visible",
41
+ ],
42
+ InvisibleEnabled: [
43
+ "id",
44
+ "color",
45
+ "enabled",
46
+ "mass",
47
+ "positionX",
48
+ "positionY",
49
+ "positionZ",
50
+ "velocityX",
51
+ "velocityY",
52
+ "velocityZ",
53
+ ],
54
+ VisibleDisabled: [
55
+ "id",
56
+ "color",
57
+ "mass",
58
+ "positionX",
59
+ "positionY",
60
+ "positionZ",
61
+ "velocityX",
62
+ "velocityY",
63
+ "velocityZ",
64
+ "visible",
65
+ ],
66
+ InvisibleDisabled: [
67
+ "id",
68
+ "color",
69
+ "mass",
70
+ "positionX",
71
+ "positionY",
72
+ "positionZ",
73
+ "velocityX",
74
+ "velocityY",
75
+ "velocityZ",
76
+ ]
77
+ });
78
+ const particle_archetypes = [
79
+ ecs.archetypes.VisibleEnabled,
80
+ ecs.archetypes.VisibleDisabled,
81
+ ecs.archetypes.InvisibleEnabled,
82
+ ecs.archetypes.InvisibleDisabled,
83
+ ];
84
+ if (batch) {
85
+ const particle_count_per_table = Math.ceil(count / 4);
86
+ const particle_tables = particle_archetypes.map(archetype => ecs.createBatch(archetype, particle_count_per_table));
87
+ for (let tableIndex = 0; tableIndex < particle_tables.length; tableIndex++) {
88
+ const table = particle_tables[tableIndex];
89
+ const positionX = table.columns.positionX.native;
90
+ const positionY = table.columns.positionY.native;
91
+ const positionZ = table.columns.positionZ.native;
92
+ const velocityX = table.columns.velocityX.native;
93
+ const velocityY = table.columns.velocityY.native;
94
+ const velocityZ = table.columns.velocityZ.native;
95
+ const color = table.columns.color.native;
96
+ const mass = table.columns.mass.native;
97
+ for (let k = 0; k < particle_count_per_table; k++) {
98
+ const i = tableIndex + k * 4;
99
+ color[k] = 0xff00ff;
100
+ mass[k] = 10;
101
+ positionX[k] = i + 1;
102
+ positionY[k] = i + 1;
103
+ positionZ[k] = i + 1;
104
+ velocityX[k] = -i;
105
+ velocityY[k] = -i;
106
+ velocityZ[k] = -i;
107
+ }
108
+ }
109
+ }
110
+ else {
111
+ for (let i = 0; i < count; i++) {
112
+ ecs.createEntity(particle_archetypes[i % 4], {
113
+ color: 0xff00ff,
114
+ mass: 10,
115
+ positionX: i + 1,
116
+ positionY: i + 1,
117
+ positionZ: i + 1,
118
+ velocityX: -i,
119
+ velocityY: -i,
120
+ velocityZ: -i,
121
+ visible: (i >> 0) % 2 === 0 ? true : false,
122
+ enabled: (i >> 1) % 2 === 0 ? true : false,
123
+ });
124
+ }
125
+ }
126
+ return ecs;
127
+ }
128
+ const create = (batch) => {
129
+ let count = 0;
130
+ const setup = async (n) => {
131
+ count = n;
132
+ };
133
+ const run = () => {
134
+ createECSWithParticles(count, batch);
135
+ };
136
+ const cleanup = async () => { };
137
+ return { setup, run: run, cleanup, type: "create" };
138
+ };
139
+ function addManagedArrays(a, b, rows, addWasm) {
140
+ const aptr = a.native.byteOffset.valueOf();
141
+ const bptr = b.native.byteOffset.valueOf();
142
+ addWasm(aptr, bptr, rows);
143
+ }
144
+ function createMoveParticlesPerformanceTest(options) {
145
+ let ecs;
146
+ const setup = async (n) => {
147
+ ecs = createECSWithParticles(n);
148
+ };
149
+ const run = () => {
150
+ let total = 0;
151
+ const addWasm = typeof options.mode === "function" ? options.mode : null;
152
+ for (const table of ecs.getTables(ecs.archetypes.VisibleEnabled, {
153
+ mode: "write",
154
+ })) {
155
+ const { rows, columns } = table;
156
+ total += rows;
157
+ if (addWasm) {
158
+ addManagedArrays(columns.positionX, columns.velocityX, rows, addWasm);
159
+ addManagedArrays(columns.positionY, columns.velocityY, rows, addWasm);
160
+ addManagedArrays(columns.positionZ, columns.velocityZ, rows, addWasm);
161
+ }
162
+ else if (options.mode === "column") {
163
+ const { positionX, positionY, positionZ, velocityX, velocityY, velocityZ, } = columns;
164
+ for (let i = 0; i < rows; i++) {
165
+ positionX.set(i, positionX.get(i) + velocityX.get(i));
166
+ positionY.set(i, positionY.get(i) + velocityY.get(i));
167
+ positionZ.set(i, positionZ.get(i) + velocityZ.get(i));
168
+ }
169
+ }
170
+ else if (options.mode === "native") {
171
+ const positionX = columns.positionX.native;
172
+ const positionY = columns.positionY.native;
173
+ const positionZ = columns.positionZ.native;
174
+ const velocityX = columns.velocityX.native;
175
+ const velocityY = columns.velocityY.native;
176
+ const velocityZ = columns.velocityZ.native;
177
+ for (let i = 0; i < rows; i++) {
178
+ positionX[i] += velocityX[i];
179
+ positionY[i] += velocityY[i];
180
+ positionZ[i] += velocityZ[i];
181
+ }
182
+ }
183
+ }
184
+ };
185
+ const getVisibleEnabledPositions = () => {
186
+ const values = [];
187
+ for (const table of ecs.getTables(ecs.archetypes.VisibleEnabled, {
188
+ mode: "read",
189
+ })) {
190
+ const { rows, columns } = table;
191
+ const { positionX, positionY, positionZ } = columns;
192
+ for (let i = 0; i < rows; i++) {
193
+ values.push(positionX.get(i), positionY.get(i), positionZ.get(i));
194
+ }
195
+ }
196
+ return values;
197
+ };
198
+ const cleanup = async () => { };
199
+ // Lock N to 1M so every ecs*:move_* row exercises the same memory-hierarchy
200
+ // pressure (~24 MB working set, well past L2). Otherwise the auto-tuner
201
+ // picks different N per test based on cold-probe time, and "ecs2:move_column
202
+ // is faster than ecs1:move_native" turns out to be cache-locality, not code.
203
+ return { setup, run: run, cleanup, getVisibleEnabledPositions, type: "move", startN: 1_000_000 };
204
+ }
205
+ export const ecs1 = {
206
+ create: create(false),
207
+ create_batch: create(true),
208
+ move_column: createMoveParticlesPerformanceTest({ mode: "column" }),
209
+ move_native: createMoveParticlesPerformanceTest({ mode: "native" }),
210
+ move_wasm: createMoveParticlesPerformanceTest({ mode: assembly.addF32Arrays }),
211
+ move_wasm_simd4: createMoveParticlesPerformanceTest({ mode: assembly.addF32ArraysSimd4 }),
212
+ move_wasm_simd4_unrolled: createMoveParticlesPerformanceTest({ mode: assembly.addF32ArraysSimd4Unrolled }),
213
+ };
214
+ //# sourceMappingURL=ecs1-perf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecs1-perf.js","sourceRoot":"","sources":["../../src/perftest/ecs1-perf.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { PerformanceTest } from "./perf-test.js";
2
+ export declare const ecs2: {
3
+ create: PerformanceTest;
4
+ move_column: PerformanceTest;
5
+ };
@@ -0,0 +1,162 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+ import { Store } from "../ecs/store/index.js";
3
+ import { F32, True, U32 } from "../schema/index.js";
4
+ // Mirror of ecs1-perf.ts on the new ECS, using createStore directly so we
5
+ // measure raw column read/write cost — no plugin, no transactions, no undo
6
+ // machinery. The legacy suite also bypasses transactions, so this matches.
7
+ //
8
+ // Dropped vs ecs1: move_native (no .native typed-array view exposed) and
9
+ // move_wasm* (no custom WASM allocator yet). Add them back here when the
10
+ // new ECS gains those surfaces.
11
+ const storeSchema = Store.Schema.create({
12
+ components: {
13
+ color: U32.schema,
14
+ enabled: True.schema,
15
+ mass: F32.schema,
16
+ positionX: F32.schema,
17
+ positionY: F32.schema,
18
+ positionZ: F32.schema,
19
+ velocityX: F32.schema,
20
+ velocityY: F32.schema,
21
+ velocityZ: F32.schema,
22
+ visible: True.schema,
23
+ },
24
+ archetypes: {
25
+ VisibleEnabled: [
26
+ "color", "enabled", "mass",
27
+ "positionX", "positionY", "positionZ",
28
+ "velocityX", "velocityY", "velocityZ",
29
+ "visible",
30
+ ],
31
+ InvisibleEnabled: [
32
+ "color", "enabled", "mass",
33
+ "positionX", "positionY", "positionZ",
34
+ "velocityX", "velocityY", "velocityZ",
35
+ ],
36
+ VisibleDisabled: [
37
+ "color", "mass",
38
+ "positionX", "positionY", "positionZ",
39
+ "velocityX", "velocityY", "velocityZ",
40
+ "visible",
41
+ ],
42
+ InvisibleDisabled: [
43
+ "color", "mass",
44
+ "positionX", "positionY", "positionZ",
45
+ "velocityX", "velocityY", "velocityZ",
46
+ ],
47
+ },
48
+ });
49
+ // The Archetype.insert signatures differ by component-set type, so the
50
+ // archetype refs can't share a typed array. Cast at the call site — this
51
+ // perftest just needs to fill the rows.
52
+ function seedAll(store, count) {
53
+ const perTable = Math.ceil(count / 4);
54
+ const archetypes = [
55
+ store.archetypes.VisibleEnabled,
56
+ store.archetypes.VisibleDisabled,
57
+ store.archetypes.InvisibleEnabled,
58
+ store.archetypes.InvisibleDisabled,
59
+ ];
60
+ for (let archIndex = 0; archIndex < archetypes.length; archIndex++) {
61
+ const arch = archetypes[archIndex];
62
+ for (let k = 0; k < perTable; k++) {
63
+ const i = archIndex + k * 4;
64
+ arch.insert({
65
+ color: 0xff00ff,
66
+ mass: 10,
67
+ positionX: i + 1,
68
+ positionY: i + 1,
69
+ positionZ: i + 1,
70
+ velocityX: -i,
71
+ velocityY: -i,
72
+ velocityZ: -i,
73
+ });
74
+ }
75
+ }
76
+ }
77
+ function seedSingle(store, count) {
78
+ const archetypes = [
79
+ store.archetypes.VisibleEnabled,
80
+ store.archetypes.VisibleDisabled,
81
+ store.archetypes.InvisibleEnabled,
82
+ store.archetypes.InvisibleDisabled,
83
+ ];
84
+ for (let i = 0; i < count; i++) {
85
+ archetypes[i % 4].insert({
86
+ color: 0xff00ff,
87
+ mass: 10,
88
+ positionX: i + 1,
89
+ positionY: i + 1,
90
+ positionZ: i + 1,
91
+ velocityX: -i,
92
+ velocityY: -i,
93
+ velocityZ: -i,
94
+ });
95
+ }
96
+ }
97
+ const create = () => {
98
+ let count = 0;
99
+ const setup = async (n) => { count = n; };
100
+ const run = () => {
101
+ const store = Store.create(storeSchema);
102
+ seedSingle(store, count);
103
+ };
104
+ const cleanup = async () => { };
105
+ return { setup, run, cleanup, type: "create" };
106
+ };
107
+ const createMoveParticlesPerformanceTest = () => {
108
+ let store;
109
+ const setup = async (n) => {
110
+ store = Store.create(storeSchema);
111
+ seedAll(store, n);
112
+ };
113
+ const run = () => {
114
+ const archetypes = store.queryArchetypes([
115
+ "positionX", "positionY", "positionZ",
116
+ "velocityX", "velocityY", "velocityZ",
117
+ "visible", "enabled",
118
+ ]);
119
+ for (const archetype of archetypes) {
120
+ const { columns, rowCount } = archetype;
121
+ const positionX = columns.positionX;
122
+ const positionY = columns.positionY;
123
+ const positionZ = columns.positionZ;
124
+ const velocityX = columns.velocityX;
125
+ const velocityY = columns.velocityY;
126
+ const velocityZ = columns.velocityZ;
127
+ for (let i = 0; i < rowCount; i++) {
128
+ positionX.set(i, positionX.get(i) + velocityX.get(i));
129
+ positionY.set(i, positionY.get(i) + velocityY.get(i));
130
+ positionZ.set(i, positionZ.get(i) + velocityZ.get(i));
131
+ }
132
+ }
133
+ };
134
+ const getVisibleEnabledPositions = () => {
135
+ const values = [];
136
+ const archetypes = store.queryArchetypes([
137
+ "positionX", "positionY", "positionZ",
138
+ "visible", "enabled",
139
+ ]);
140
+ for (const archetype of archetypes) {
141
+ const { columns, rowCount } = archetype;
142
+ const positionX = columns.positionX;
143
+ const positionY = columns.positionY;
144
+ const positionZ = columns.positionZ;
145
+ for (let i = 0; i < rowCount; i++) {
146
+ values.push(positionX.get(i), positionY.get(i), positionZ.get(i));
147
+ }
148
+ }
149
+ return values;
150
+ };
151
+ const cleanup = async () => { };
152
+ // Lock N to 1M to match ecs1's move tests so cache pressure is the
153
+ // same on both sides — otherwise the auto-tuner picks different N
154
+ // based on cold-probe time and the comparison becomes about cache,
155
+ // not code. See ecs1-perf.ts for the matching note.
156
+ return { setup, run, cleanup, getVisibleEnabledPositions, type: "move", startN: 1_000_000 };
157
+ };
158
+ export const ecs2 = {
159
+ create: create(),
160
+ move_column: createMoveParticlesPerformanceTest(),
161
+ };
162
+ //# sourceMappingURL=ecs2-perf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecs2-perf.js","sourceRoot":"","sources":["../../src/perftest/ecs2-perf.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAGpD,0EAA0E;AAC1E,2EAA2E;AAC3E,2EAA2E;AAC3E,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AACzE,gCAAgC;AAEhC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IACpC,UAAU,EAAE;QACR,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,OAAO,EAAE,IAAI,CAAC,MAAM;QACpB,IAAI,EAAE,GAAG,CAAC,MAAM;QAChB,SAAS,EAAE,GAAG,CAAC,MAAM;QACrB,SAAS,EAAE,GAAG,CAAC,MAAM;QACrB,SAAS,EAAE,GAAG,CAAC,MAAM;QACrB,SAAS,EAAE,GAAG,CAAC,MAAM;QACrB,SAAS,EAAE,GAAG,CAAC,MAAM;QACrB,SAAS,EAAE,GAAG,CAAC,MAAM;QACrB,OAAO,EAAE,IAAI,CAAC,MAAM;KACvB;IACD,UAAU,EAAE;QACR,cAAc,EAAE;YACZ,OAAO,EAAE,SAAS,EAAE,MAAM;YAC1B,WAAW,EAAE,WAAW,EAAE,WAAW;YACrC,WAAW,EAAE,WAAW,EAAE,WAAW;YACrC,SAAS;SACZ;QACD,gBAAgB,EAAE;YACd,OAAO,EAAE,SAAS,EAAE,MAAM;YAC1B,WAAW,EAAE,WAAW,EAAE,WAAW;YACrC,WAAW,EAAE,WAAW,EAAE,WAAW;SACxC;QACD,eAAe,EAAE;YACb,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,WAAW,EAAE,WAAW;YACrC,WAAW,EAAE,WAAW,EAAE,WAAW;YACrC,SAAS;SACZ;QACD,iBAAiB,EAAE;YACf,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,WAAW,EAAE,WAAW;YACrC,WAAW,EAAE,WAAW,EAAE,WAAW;SACxC;KACJ;CACJ,CAAC,CAAC;AAIH,uEAAuE;AACvE,yEAAyE;AACzE,wCAAwC;AAExC,SAAS,OAAO,CAAC,KAAoB,EAAE,KAAa;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG;QACf,KAAK,CAAC,UAAU,CAAC,cAAc;QAC/B,KAAK,CAAC,UAAU,CAAC,eAAe;QAChC,KAAK,CAAC,UAAU,CAAC,gBAAgB;QACjC,KAAK,CAAC,UAAU,CAAC,iBAAiB;KACnB,CAAC;IACpB,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;QACjE,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC;gBACR,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,EAAE;gBACR,SAAS,EAAE,CAAC,GAAG,CAAC;gBAChB,SAAS,EAAE,CAAC,GAAG,CAAC;gBAChB,SAAS,EAAE,CAAC,GAAG,CAAC;gBAChB,SAAS,EAAE,CAAC,CAAC;gBACb,SAAS,EAAE,CAAC,CAAC;gBACb,SAAS,EAAE,CAAC,CAAC;aAChB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,KAAoB,EAAE,KAAa;IACnD,MAAM,UAAU,GAAG;QACf,KAAK,CAAC,UAAU,CAAC,cAAc;QAC/B,KAAK,CAAC,UAAU,CAAC,eAAe;QAChC,KAAK,CAAC,UAAU,CAAC,gBAAgB;QACjC,KAAK,CAAC,UAAU,CAAC,iBAAiB;KACnB,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YACrB,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,EAAE;YACR,SAAS,EAAE,CAAC,GAAG,CAAC;YAChB,SAAS,EAAE,CAAC,GAAG,CAAC;YAChB,SAAS,EAAE,CAAC,GAAG,CAAC;YAChB,SAAS,EAAE,CAAC,CAAC;YACb,SAAS,EAAE,CAAC,CAAC;YACb,SAAS,EAAE,CAAC,CAAC;SAChB,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,MAAM,MAAM,GAAG,GAAoB,EAAE;IACjC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,KAAK,GAAG,KAAK,EAAE,CAAS,EAAE,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACxC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC;IAChC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,kCAAkC,GAAG,GAAoB,EAAE;IAC7D,IAAI,KAAoB,CAAC;IACzB,MAAM,KAAK,GAAG,KAAK,EAAE,CAAS,EAAE,EAAE;QAC9B,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,KAAK,CAAC,eAAe,CAAC;YACrC,WAAW,EAAE,WAAW,EAAE,WAAW;YACrC,WAAW,EAAE,WAAW,EAAE,WAAW;YACrC,SAAS,EAAE,SAAS;SACd,CAAC,CAAC;QACZ,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACjC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;YACxC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACpC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACpC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACpC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACpC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACpC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtD,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtD,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,CAAC;QACL,CAAC;IACL,CAAC,CAAC;IACF,MAAM,0BAA0B,GAAG,GAAa,EAAE;QAC9C,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,eAAe,CAAC;YACrC,WAAW,EAAE,WAAW,EAAE,WAAW;YACrC,SAAS,EAAE,SAAS;SACd,CAAC,CAAC;QACZ,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACjC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;YACxC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACpC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACpC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtE,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC;IAChC,mEAAmE;IACnE,kEAAkE;IAClE,mEAAmE;IACnE,oDAAoD;IACpD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,0BAA0B,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAChG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG;IAChB,MAAM,EAAE,MAAM,EAAE;IAChB,WAAW,EAAE,kCAAkC,EAAE;CACpD,CAAC"}
@@ -1,12 +1,17 @@
1
1
  // © 2026 Adobe. MIT License. See /LICENSE for details.
2
2
  import * as vanilla_tests from "./vanilla-perf.js";
3
- import * as ecs_tests from "./ecs-perf.js";
3
+ import * as horizon_tests from "./horizon-perf.js";
4
+ import * as ecs1_tests from "./ecs1-perf.js";
5
+ import * as ecs2_tests from "./ecs2-perf.js";
6
+ import * as typed_buffer_tests from "./typed-buffer-perf.js";
4
7
  import { runTests } from "./perf-test.js";
5
8
  export function run() {
6
9
  runTests({
7
- ...ecs_tests,
10
+ ...ecs1_tests,
11
+ ...ecs2_tests,
8
12
  ...vanilla_tests,
9
- // ...horizon_tests,
13
+ ...horizon_tests,
14
+ ...typed_buffer_tests,
10
15
  });
11
16
  }
12
17
  if (typeof globalThis.process === "object" && import.meta.url === `file://${process?.argv[1]}`) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/perftest/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,KAAK,aAAa,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,UAAU,GAAG;IACjB,QAAQ,CAAC;QACP,GAAG,SAAS;QACZ,GAAG,aAAa;QAChB,oBAAoB;KACrB,CAAC,CAAC;AACL,CAAC;AAED,IAAI,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC/F,GAAG,EAAE,CAAC;AACR,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/perftest/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,KAAK,aAAa,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,aAAa,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,kBAAkB,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,UAAU,GAAG;IACjB,QAAQ,CAAC;QACP,GAAG,UAAU;QACb,GAAG,UAAU;QACb,GAAG,aAAa;QAChB,GAAG,aAAa;QAChB,GAAG,kBAAkB;KACtB,CAAC,CAAC;AACL,CAAC;AAED,IAAI,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC/F,GAAG,EAAE,CAAC;AACR,CAAC"}
@@ -14,5 +14,12 @@ export interface PerformanceTest {
14
14
  getVisibleEnabledPositions?: () => number[];
15
15
  type: "create" | "move";
16
16
  cleanup: () => Promise<void>;
17
+ /**
18
+ * Optional starting `n` for the auto-tuner. Tests whose per-iteration cost
19
+ * is known to be very high at the default `n` should set this lower so the
20
+ * harness doesn't waste a probe attempt at the default before scaling down.
21
+ * Auto-tune may still adjust this upward or downward as usual.
22
+ */
23
+ startN?: number;
17
24
  }
18
25
  export declare function runTests(testSuites: Record<string, Record<string, PerformanceTest>>): Promise<void>;
@@ -55,16 +55,25 @@ export async function runTests(testSuites) {
55
55
  }
56
56
  // console.log(JSON.stringify(finalPositions));
57
57
  }
58
- const n = test.getVisibleEnabledPositions ? 100_000 : 100_000;
59
- await test.setup(n);
58
+ // Auto-tune n so each measured iteration falls in TARGET_BAND.
59
+ // Tests already in band keep their starting n. Tests can override
60
+ // the seed via `startN` when they know their per-iter cost is far
61
+ // from the default.
62
+ const n = await tuneN(test, test.startN ?? 100_000);
63
+ garbageCollect();
64
+ // Warmup so V8 has fully optimized before any sample is recorded.
65
+ const warmupEnd = getTime() + WARMUP_MS;
66
+ while (getTime() < warmupEnd) {
67
+ test.run();
68
+ }
60
69
  garbageCollect();
61
70
  const baselineMemory = getMemory();
62
71
  const timeStart = getTime();
63
72
  // only run for 1 second
64
- while (getTime() - timeStart < 100) {
73
+ while (getTime() - timeStart < 1000) {
65
74
  const result = runOnce(test.run, test);
66
75
  result.memoryKb -= baselineMemory;
67
- testResults.push({ ...result, flops: n * typeToFlops[test.type] });
76
+ testResults.push({ ...result, flops: n * typeToFlops[test.type], n });
68
77
  }
69
78
  await test.cleanup();
70
79
  garbageCollect();
@@ -86,6 +95,7 @@ export async function runTests(testSuites) {
86
95
  const totalFlops = testResults.reduce((a, b) => a + b.flops, 0);
87
96
  const averageFlopsPerSecond = (totalFlops * 1000) / totalTime;
88
97
  tableValues[`${display(suite)}:${display(name)}`] = {
98
+ N: testResults[0]?.n ?? 0,
89
99
  Passes: memoryKb.length,
90
100
  // 'Mem Min (Mb)': Math.min(...memoryKb).toFixed(2),
91
101
  // 'Mem Max (Mb)': Math.max(...memoryKb).toFixed(2),
@@ -113,12 +123,64 @@ export async function runTests(testSuites) {
113
123
  }
114
124
  }
115
125
  }
126
+ // Browsers without cross-origin isolation clamp performance.now() to ~0.1ms
127
+ // resolution, so very fast operations register as 0ms. For move tests we
128
+ // inner-loop until the elapsed time exceeds this threshold and report the
129
+ // per-iteration average. Create tests are not inner-looped because some
130
+ // allocate WASM-backed memory that is not reclaimed between calls.
131
+ const MIN_SAMPLE_MS = 2;
132
+ // Target per-iteration time band. Tests faster than the lower bound get
133
+ // their n scaled up so each call does meaningful work and dominates
134
+ // timing-call overhead. Tests slower than the upper bound get their n
135
+ // scaled down so we collect enough samples within the 1s budget. Setting
136
+ // TARGET_MAX_MS conservatively (250ms) keeps moderate-cost tests
137
+ // (ecs1:create at ~65ms, horizon:create at ~200ms) at their original n;
138
+ // only pathologically slow tests get down-scaled.
139
+ const TARGET_MIN_MS = 0.5;
140
+ const TARGET_MAX_MS = 250;
141
+ const MIN_AUTO_N = 100;
142
+ const MAX_AUTO_N = 1_000_000;
143
+ const WARMUP_MS = 50;
144
+ async function tuneN(test, startN) {
145
+ let n = startN;
146
+ for (let attempt = 0; attempt < 4; attempt++) {
147
+ await test.setup(n);
148
+ const probe = runOnce(test.run, test);
149
+ const probeMs = Math.max(probe.timeMs, 0.001);
150
+ if (probeMs >= TARGET_MIN_MS && probeMs <= TARGET_MAX_MS) {
151
+ return n;
152
+ }
153
+ const target = (TARGET_MIN_MS + TARGET_MAX_MS) / 2;
154
+ const ratio = target / probeMs;
155
+ const scaled = Math.round(n * ratio);
156
+ const newN = Math.max(MIN_AUTO_N, Math.min(MAX_AUTO_N, scaled));
157
+ if (newN === n) {
158
+ return n;
159
+ }
160
+ await test.cleanup();
161
+ n = newN;
162
+ }
163
+ return n;
164
+ }
116
165
  function runOnce(fn, test) {
117
166
  const start = getTime();
118
- const result = fn();
119
- const end = getTime();
167
+ let result;
168
+ let iterations = 0;
169
+ let now = start;
170
+ if (test.type === "move") {
171
+ do {
172
+ result = fn();
173
+ iterations++;
174
+ now = getTime();
175
+ } while (now - start < MIN_SAMPLE_MS);
176
+ }
177
+ else {
178
+ result = fn();
179
+ iterations = 1;
180
+ now = getTime();
181
+ }
120
182
  const after = getMemory();
121
- const timeMs = end - start;
183
+ const timeMs = (now - start) / iterations;
122
184
  return { memoryKb: after, timeMs, result };
123
185
  }
124
186
  //# sourceMappingURL=perf-test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"perf-test.js","sourceRoot":"","sources":["../../src/perftest/perf-test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"perf-test.js","sourceRoot":"","sources":["../../src/perftest/perf-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { PerformanceTest } from "./perf-test.js";
2
+ export declare const typed_buffer: {
3
+ number_get_set: PerformanceTest;
4
+ array_get: PerformanceTest;
5
+ struct_get: PerformanceTest;
6
+ struct_set: PerformanceTest;
7
+ struct_round_trip: PerformanceTest;
8
+ };