@adobe/ecs 0.2.1 → 0.2.4

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.
Files changed (330) hide show
  1. package/README.md +2 -2
  2. package/dist/implementation/compiler/body-access.d.ts +18 -1
  3. package/dist/implementation/compiler/body-access.js +104 -15
  4. package/dist/implementation/compiler/body-access.js.map +1 -1
  5. package/dist/implementation/compiler/describe.d.ts +1 -1
  6. package/dist/implementation/compiler/describe.js +3 -3
  7. package/dist/implementation/compiler/describe.js.map +1 -1
  8. package/dist/implementation/compiler/estree.d.ts +5 -2
  9. package/dist/implementation/compiler/estree.js +8 -5
  10. package/dist/implementation/compiler/estree.js.map +1 -1
  11. package/dist/implementation/compiler/inferred.js +4 -2
  12. package/dist/implementation/compiler/inferred.js.map +1 -1
  13. package/dist/implementation/compiler/signature.js +1 -1
  14. package/dist/implementation/compiler/transform.js +6 -5
  15. package/dist/implementation/compiler/transform.js.map +1 -1
  16. package/dist/implementation/world/activate.js +14 -2
  17. package/dist/implementation/world/activate.js.map +1 -1
  18. package/dist/implementation/world/buffer.d.ts +7 -0
  19. package/dist/implementation/world/buffer.js +7 -0
  20. package/dist/implementation/world/buffer.js.map +1 -1
  21. package/dist/implementation/world/cascade.d.ts +10 -3
  22. package/dist/implementation/world/cascade.js +48 -23
  23. package/dist/implementation/world/cascade.js.map +1 -1
  24. package/dist/implementation/world/commands.js +86 -2
  25. package/dist/implementation/world/commands.js.map +1 -1
  26. package/dist/implementation/world/create.js +53 -2
  27. package/dist/implementation/world/create.js.map +1 -1
  28. package/dist/implementation/world/entities.d.ts +2 -0
  29. package/dist/implementation/world/entities.js +6 -0
  30. package/dist/implementation/world/entities.js.map +1 -1
  31. package/dist/implementation/world/execute.d.ts +4 -4
  32. package/dist/implementation/world/execute.js +132 -83
  33. package/dist/implementation/world/execute.js.map +1 -1
  34. package/dist/implementation/world/finalizers.d.ts +2 -0
  35. package/dist/implementation/world/finalizers.js +24 -3
  36. package/dist/implementation/world/finalizers.js.map +1 -1
  37. package/dist/implementation/world/join.js +22 -4
  38. package/dist/implementation/world/join.js.map +1 -1
  39. package/dist/implementation/world/register.js +2 -2
  40. package/dist/implementation/world/resource-changes.d.ts +18 -0
  41. package/dist/implementation/world/resource-changes.js +66 -0
  42. package/dist/implementation/world/resource-changes.js.map +1 -0
  43. package/dist/implementation/world/rows.d.ts +1 -1
  44. package/dist/implementation/world/rows.js +23 -13
  45. package/dist/implementation/world/rows.js.map +1 -1
  46. package/dist/implementation/world/run-changes.d.ts +38 -0
  47. package/dist/implementation/world/run-changes.js +138 -0
  48. package/dist/implementation/world/run-changes.js.map +1 -0
  49. package/dist/implementation/world/runner.js +19 -15
  50. package/dist/implementation/world/runner.js.map +1 -1
  51. package/dist/implementation/world/sharing.js +1 -1
  52. package/dist/implementation/world/staging.d.ts +4 -0
  53. package/dist/implementation/world/staging.js +15 -3
  54. package/dist/implementation/world/staging.js.map +1 -1
  55. package/dist/implementation/world/state.d.ts +13 -0
  56. package/dist/implementation/world/state.js +13 -1
  57. package/dist/implementation/world/state.js.map +1 -1
  58. package/dist/implementation/world/synchronize.js +72 -22
  59. package/dist/implementation/world/synchronize.js.map +1 -1
  60. package/dist/implementation/world/tables-read.d.ts +9 -0
  61. package/dist/implementation/world/tables-read.js +72 -0
  62. package/dist/implementation/world/tables-read.js.map +1 -0
  63. package/dist/implementation/world/tables.d.ts +10 -0
  64. package/dist/implementation/world/tables.js +401 -0
  65. package/dist/implementation/world/tables.js.map +1 -0
  66. package/dist/implementation/world/thread-observer.js +1 -1
  67. package/dist/implementation/world/thread-observer.js.map +1 -1
  68. package/dist/implementation/world/thread-systems.js +11 -6
  69. package/dist/implementation/world/thread-systems.js.map +1 -1
  70. package/dist/implementation/world/up.js +7 -1
  71. package/dist/implementation/world/up.js.map +1 -1
  72. package/dist/implementation/world/where.d.ts +8 -0
  73. package/dist/implementation/world/where.js +40 -11
  74. package/dist/implementation/world/where.js.map +1 -1
  75. package/dist/index.d.ts +8 -28
  76. package/dist/index.js +4 -9
  77. package/dist/index.js.map +1 -1
  78. package/dist/interface/component/declarations.d.ts +4 -0
  79. package/dist/interface/component/declarations.js +8 -0
  80. package/dist/interface/component/declarations.js.map +1 -0
  81. package/dist/interface/component/declared.d.ts +12 -0
  82. package/dist/interface/component/declared.js +2 -0
  83. package/dist/interface/component/declared.js.map +1 -0
  84. package/dist/interface/component/index.d.ts +2 -0
  85. package/dist/interface/component/index.js +1 -1
  86. package/dist/interface/component/index.js.map +1 -1
  87. package/dist/interface/finalizer/body.d.ts +18 -3
  88. package/dist/interface/finalizer/create.d.ts +7 -5
  89. package/dist/interface/finalizer/create.js +8 -5
  90. package/dist/interface/finalizer/create.js.map +1 -1
  91. package/dist/interface/finalizer/declaration.d.ts +4 -2
  92. package/dist/interface/indexes/declaration-of.d.ts +17 -0
  93. package/dist/interface/indexes/declaration-of.js +20 -0
  94. package/dist/interface/indexes/declaration-of.js.map +1 -0
  95. package/dist/interface/indexes/index.d.ts +1 -0
  96. package/dist/interface/indexes/index.js +1 -0
  97. package/dist/interface/indexes/index.js.map +1 -1
  98. package/dist/interface/registry/names.d.ts +2 -0
  99. package/dist/interface/registry/names.js +9 -0
  100. package/dist/interface/registry/names.js.map +1 -1
  101. package/dist/interface/registry/schedule.d.ts +31 -4
  102. package/dist/interface/registry/schedule.js +185 -24
  103. package/dist/interface/registry/schedule.js.map +1 -1
  104. package/dist/interface/resource/declarations.d.ts +4 -0
  105. package/dist/interface/resource/declarations.js +8 -0
  106. package/dist/interface/resource/declarations.js.map +1 -0
  107. package/dist/interface/resource/index.d.ts +2 -0
  108. package/dist/interface/resource/index.js +1 -1
  109. package/dist/interface/resource/index.js.map +1 -1
  110. package/dist/interface/system/access.d.ts +15 -0
  111. package/dist/interface/system/body.d.ts +11 -6
  112. package/dist/interface/system/check.d.ts +8 -1
  113. package/dist/interface/system/check.js +42 -12
  114. package/dist/interface/system/check.js.map +1 -1
  115. package/dist/interface/system/commands.d.ts +37 -0
  116. package/dist/interface/system/create-resolved.js +1 -1
  117. package/dist/interface/system/create-resolved.js.map +1 -1
  118. package/dist/interface/system/create.d.ts +31 -15
  119. package/dist/interface/system/create.js +8 -7
  120. package/dist/interface/system/create.js.map +1 -1
  121. package/dist/interface/system/declaration.d.ts +9 -2
  122. package/dist/interface/system/describe.d.ts +120 -0
  123. package/dist/interface/system/describe.js +116 -0
  124. package/dist/interface/system/describe.js.map +1 -0
  125. package/dist/interface/system/index.d.ts +1 -0
  126. package/dist/interface/system/index.js +1 -0
  127. package/dist/interface/system/index.js.map +1 -1
  128. package/dist/interface/system/leaf.d.ts +6 -0
  129. package/dist/interface/system/render.js +1 -0
  130. package/dist/interface/system/render.js.map +1 -1
  131. package/dist/interface/system/resolve.d.ts +5 -1
  132. package/dist/interface/system/resolve.js +19 -1
  133. package/dist/interface/system/resolve.js.map +1 -1
  134. package/dist/interface/system/shared-only.d.ts +7 -0
  135. package/dist/interface/system/shared-only.js +2 -0
  136. package/dist/interface/system/shared-only.js.map +1 -0
  137. package/dist/interface/system/tables.d.ts +28 -0
  138. package/dist/interface/system/tables.js +2 -0
  139. package/dist/interface/system/tables.js.map +1 -0
  140. package/dist/interface/world/index.d.ts +1 -1
  141. package/dist/interface/world/table/index.d.ts +27 -0
  142. package/dist/interface/world/table/index.js +3 -0
  143. package/dist/interface/world/table/index.js.map +1 -0
  144. package/dist/interface/world/table/table.d.ts +11 -0
  145. package/dist/interface/world/table/table.js +2 -0
  146. package/dist/interface/world/table/table.js.map +1 -0
  147. package/dist/interface/world/world.d.ts +25 -10
  148. package/dist/world.d.ts +27 -0
  149. package/dist/world.js +27 -0
  150. package/dist/world.js.map +1 -0
  151. package/package.json +11 -2
  152. package/src/exports.test.ts +1 -1
  153. package/src/guide/00-keys.ts +1 -1
  154. package/src/guide/01-resources.md +1 -1
  155. package/src/guide/01-resources.ts +1 -1
  156. package/src/guide/02-entities.ts +2 -2
  157. package/src/guide/03-systems.md +2 -2
  158. package/src/guide/03-systems.out +1 -1
  159. package/src/guide/03-systems.ts +3 -3
  160. package/src/guide/04-ticks.md +1 -1
  161. package/src/guide/04-ticks.ts +3 -3
  162. package/src/guide/05-scheduling.ts +1 -1
  163. package/src/guide/06-sync-points.md +18 -7
  164. package/src/guide/06-sync-points.out +1 -2
  165. package/src/guide/06-sync-points.ts +10 -6
  166. package/src/guide/07-change-filters.ts +2 -2
  167. package/src/guide/08-input.ts +1 -1
  168. package/src/guide/09-rules.ts +1 -1
  169. package/src/guide/11-traits.ts +3 -3
  170. package/src/guide/12-lookups.ts +2 -2
  171. package/src/guide/13-indexes.ts +4 -4
  172. package/src/guide/14-kernels.ts +1 -1
  173. package/src/guide/15-reductions.ts +1 -1
  174. package/src/guide/16-gpu.ts +1 -1
  175. package/src/guide/17-hierarchies.ts +1 -1
  176. package/src/guide/18-identity.out +1 -1
  177. package/src/guide/19-threads.md +4 -2
  178. package/src/guide/19-threads.ts +2 -2
  179. package/src/guide/20-shared.ts +3 -3
  180. package/src/guide/21-dom.md +2 -2
  181. package/src/guide/21-dom.ts +1 -1
  182. package/src/guide/22-canvas.md +1 -1
  183. package/src/guide/22-canvas.ts +1 -1
  184. package/src/guide/CLAUDE.md +1 -1
  185. package/src/guide/guide.test.ts +9 -154
  186. package/src/implementation/compiler/body-access.ts +102 -12
  187. package/src/implementation/compiler/describe.test-helper.ts +1 -1
  188. package/src/implementation/compiler/describe.test.ts +1 -1
  189. package/src/implementation/compiler/describe.ts +3 -3
  190. package/src/implementation/compiler/estree.ts +9 -6
  191. package/src/implementation/compiler/hygiene.test.ts +1 -1
  192. package/src/implementation/compiler/inferred.test.ts +1 -1
  193. package/src/implementation/compiler/inferred.ts +4 -2
  194. package/src/implementation/compiler/plugin.test.ts +2 -2
  195. package/src/implementation/compiler/signature.ts +1 -1
  196. package/src/implementation/compiler/transform.test.ts +43 -23
  197. package/src/implementation/compiler/transform.ts +6 -4
  198. package/src/implementation/world/activate.ts +11 -2
  199. package/src/implementation/world/batches.test.ts +3 -3
  200. package/src/implementation/world/buffer.ts +7 -0
  201. package/src/implementation/world/cascade.ts +46 -22
  202. package/src/implementation/world/change-blocks.test.ts +1 -1
  203. package/src/implementation/world/commands.ts +76 -2
  204. package/src/implementation/world/create.test.ts +8 -8
  205. package/src/implementation/world/create.ts +57 -2
  206. package/src/implementation/world/defaults.test.ts +1 -1
  207. package/src/implementation/world/despawn-where.test.ts +287 -0
  208. package/src/implementation/world/entities.ts +6 -0
  209. package/src/implementation/world/execute.ts +125 -78
  210. package/src/implementation/world/finalizers.test.ts +1 -1
  211. package/src/implementation/world/finalizers.ts +27 -4
  212. package/src/implementation/world/ids.test.ts +1 -1
  213. package/src/implementation/world/index-changed.test.ts +2 -2
  214. package/src/implementation/world/index-joined.test.ts +5 -5
  215. package/src/implementation/world/index-order.test.ts +1 -1
  216. package/src/implementation/world/indexes.test.ts +2 -1
  217. package/src/implementation/world/join.test.ts +23 -4
  218. package/src/implementation/world/join.ts +26 -4
  219. package/src/implementation/world/joined-observer.test.ts +1 -1
  220. package/src/implementation/world/joining-worker.fixture.ts +1 -1
  221. package/src/implementation/world/joining.fixture.ts +1 -1
  222. package/src/implementation/world/joining.test-helper.ts +1 -1
  223. package/src/implementation/world/kernel-spawns.test.ts +1 -1
  224. package/src/implementation/world/names.test.ts +1 -2
  225. package/src/implementation/world/observe-factories.test.ts +2 -2
  226. package/src/implementation/world/observe-ticks-cases.test.ts +1 -1
  227. package/src/implementation/world/observe.test-helper.ts +1 -1
  228. package/src/implementation/world/observer-contained-worker.fixture.ts +1 -1
  229. package/src/implementation/world/observer-contained.test-helper.ts +1 -1
  230. package/src/implementation/world/observer-contained.test.ts +2 -2
  231. package/src/implementation/world/observer-joined.test-helper.ts +4 -4
  232. package/src/implementation/world/observer-joined.test.ts +23 -15
  233. package/src/implementation/world/observer.browser.test.ts +2 -2
  234. package/src/implementation/world/observer.test.ts +8 -8
  235. package/src/implementation/world/optional-workers.fixture.ts +1 -1
  236. package/src/implementation/world/optional.test.ts +7 -7
  237. package/src/implementation/world/perf.md +3 -1
  238. package/src/implementation/world/reclaim.test.ts +3 -3
  239. package/src/implementation/world/register.ts +2 -2
  240. package/src/implementation/world/remote-objects.test-helper.ts +1 -1
  241. package/src/implementation/world/resource-changes.test.ts +61 -0
  242. package/src/implementation/world/resource-changes.ts +67 -0
  243. package/src/implementation/world/rows.ts +24 -13
  244. package/src/implementation/world/rules.test.ts +37 -0
  245. package/src/implementation/world/run-changes.test.ts +88 -0
  246. package/src/implementation/world/run-changes.ts +160 -0
  247. package/src/implementation/world/run-results.test.ts +10 -10
  248. package/src/implementation/world/runner.ts +20 -16
  249. package/src/implementation/world/shared-gpu.browser.test.ts +2 -2
  250. package/src/implementation/world/shared-kernels.test.ts +2 -2
  251. package/src/implementation/world/shared-workers.fixture.ts +2 -2
  252. package/src/implementation/world/shared.test.ts +10 -10
  253. package/src/implementation/world/sharing.ts +1 -1
  254. package/src/implementation/world/staging.ts +16 -3
  255. package/src/implementation/world/state.ts +19 -0
  256. package/src/implementation/world/sync-points.test.ts +135 -0
  257. package/src/implementation/world/synchronize.ts +65 -18
  258. package/src/implementation/world/tables-read.ts +70 -0
  259. package/src/implementation/world/tables.test.ts +369 -0
  260. package/src/implementation/world/tables.ts +368 -0
  261. package/src/implementation/world/tails.test.ts +1 -1
  262. package/src/implementation/world/target.test.ts +2 -2
  263. package/src/implementation/world/thread-observer.ts +1 -1
  264. package/src/implementation/world/thread-systems.test-helper.ts +3 -3
  265. package/src/implementation/world/thread-systems.ts +11 -6
  266. package/src/implementation/world/up.test.ts +13 -1
  267. package/src/implementation/world/up.ts +6 -1
  268. package/src/implementation/world/where.test.ts +4 -4
  269. package/src/implementation/world/where.ts +38 -10
  270. package/src/implementation/world/workers.fixture.ts +2 -2
  271. package/src/index.ts +4 -29
  272. package/src/interface/component/declarations.ts +11 -0
  273. package/src/interface/component/declared.ts +9 -0
  274. package/src/interface/component/index.ts +2 -0
  275. package/src/interface/finalizer/body.ts +13 -3
  276. package/src/interface/finalizer/create.test.ts +3 -1
  277. package/src/interface/finalizer/create.ts +12 -7
  278. package/src/interface/finalizer/declaration.ts +4 -2
  279. package/src/interface/index.type-test.ts +2 -2
  280. package/src/interface/indexes/create.test.ts +10 -0
  281. package/src/interface/indexes/declaration-of.ts +34 -0
  282. package/src/interface/indexes/index.ts +1 -0
  283. package/src/interface/indexes/index.type-test.ts +1 -1
  284. package/src/interface/registry/names.ts +8 -0
  285. package/src/interface/registry/schedule.ts +200 -27
  286. package/src/interface/resource/declarations.ts +11 -0
  287. package/src/interface/resource/index.ts +2 -0
  288. package/src/interface/system/access.ts +16 -0
  289. package/src/interface/system/body.ts +7 -5
  290. package/src/interface/system/check.ts +37 -10
  291. package/src/interface/system/commands.ts +33 -0
  292. package/src/interface/system/commands.type-test.ts +31 -0
  293. package/src/interface/system/create-resolved.ts +1 -1
  294. package/src/interface/system/create.test.ts +21 -13
  295. package/src/interface/system/create.ts +24 -15
  296. package/src/interface/system/declaration.ts +9 -2
  297. package/src/interface/system/describe.test.ts +79 -0
  298. package/src/interface/system/describe.ts +122 -0
  299. package/src/interface/system/index.ts +1 -0
  300. package/src/interface/system/leaf.ts +6 -0
  301. package/src/interface/system/lists.type-test.ts +1 -1
  302. package/src/interface/system/optional.type-test.ts +1 -1
  303. package/src/interface/system/render.ts +1 -0
  304. package/src/interface/system/resolve.ts +25 -2
  305. package/src/interface/system/shared-only.ts +5 -0
  306. package/src/interface/system/shared.type-test.ts +1 -1
  307. package/src/interface/system/system.type-test.ts +26 -20
  308. package/src/interface/system/tables.ts +27 -0
  309. package/src/interface/system/up.type-test.ts +3 -3
  310. package/src/interface/world/index.ts +2 -2
  311. package/src/interface/world/run.type-test.ts +14 -4
  312. package/src/interface/world/table/index.ts +20 -0
  313. package/src/interface/world/table/table.ts +12 -0
  314. package/src/interface/world/world.ts +23 -10
  315. package/src/observe/entity.ts +2 -2
  316. package/src/observe/resource.ts +2 -2
  317. package/src/observe/select.ts +4 -4
  318. package/src/observe/world-state.ts +3 -3
  319. package/src/perftest/benchmarks.ts +19 -1
  320. package/src/perftest/indexes.ts +3 -3
  321. package/src/perftest/loop.ts +1 -1
  322. package/src/perftest/observer.ts +4 -4
  323. package/src/perftest/reads.ts +2 -2
  324. package/src/perftest/remote.ts +5 -5
  325. package/src/perftest/strings.ts +1 -1
  326. package/src/perftest/structural.ts +20 -0
  327. package/src/perftest/suite.ts +1 -1
  328. package/src/perftest/tables.ts +107 -0
  329. package/src/world.test.ts +2 -2
  330. package/src/world.ts +32 -0
@@ -19,10 +19,10 @@ const noChunks = [];
19
19
  /** The report of a run with nothing to report. */
20
20
  export const clean = { failures: none, skipped: none, dropped: 0, warnings: none };
21
21
  /**
22
- * Runs a schedule tier by tier, then applies one sync point, and reports what went wrong. Within a tier, kernels start
23
- * first so workers run while main-thread systems do; commands merge in tier order, then chunk order, whichever thread
24
- * ran them. A failing system stops the run after its tier finishes: later tiers are skipped, and commands so far still
25
- * apply. `system` is the one the run was given, which the GPU's errors are reported under.
22
+ * Runs a schedule tier by tier, applying a sync point after each tier its schedule says and after the last, and reports
23
+ * what went wrong. Within a tier, kernels start first so workers run while main-thread systems do; commands merge in
24
+ * tier order, then chunk order, whichever thread ran them. A failing system stops the run after its tier finishes:
25
+ * later tiers are skipped, and commands so far still apply. `system` is the one the run was given, which the GPU's errors are reported under.
26
26
  */
27
27
  export const execute = (context, schedule, args, system) => {
28
28
  const { gpu } = context.state;
@@ -75,6 +75,7 @@ const tailingOf = (context, schedule) => {
75
75
  const leaves = [];
76
76
  const tiers = [];
77
77
  const rest = [];
78
+ const syncs = [];
78
79
  schedule.tiers.forEach((tier, t) => {
79
80
  const kept = tier.filter((leaf, i) => {
80
81
  if (!flags[t][i])
@@ -85,10 +86,15 @@ const tailingOf = (context, schedule) => {
85
86
  });
86
87
  if (kept.length > 0)
87
88
  rest.push(kept);
89
+ // A sync point after a tier left empty follows the tier kept before it.
90
+ const reasons = schedule.syncs[t];
91
+ if (reasons !== null && rest.length > 0)
92
+ syncs[rest.length - 1] = [...syncs[rest.length - 1] ?? [], ...reasons];
88
93
  });
89
94
  if (leaves.length === 0)
90
95
  return null;
91
- return { schedule: { tiers: rest, reductions: schedule.reductions, observer: schedule.observer }, runners: leaves.map(context.runnerOf), leaves, tiers };
96
+ const kept = rest.map((_, t) => t < rest.length - 1 ? syncs[t] ?? null : null);
97
+ return { schedule: { tiers: rest, reductions: schedule.reductions, observer: schedule.observer, syncs: kept }, runners: leaves.map(context.runnerOf), leaves, tiers };
92
98
  };
93
99
  const preparedBy = new WeakMap();
94
100
  const preparedFor = (context, schedule) => {
@@ -101,7 +107,7 @@ const preparedFor = (context, schedule) => {
101
107
  runners: schedule.tiers.map(tier => tier.map(context.runnerOf)), remotes: schedule.tiers.map(() => 0), uses: schedule.tiers.map(() => []), version: -1,
102
108
  started: schedule.tiers.map(tier => new Array(tier.length)),
103
109
  systems: [], tiers: [], tasks: new Map(), warnings: [], warningCount: 0, warned: null, outcome: { failures: null, skipped: null },
104
- placement: -1, tailing: null, settling: 0, chunk: 0, error: undefined, tierFailed: false,
110
+ placement: -1, tailing: null, settling: 0, chunk: 0, error: undefined, tierFailed: false, dropped: 0,
105
111
  };
106
112
  bySchedule.set(schedule, prepared);
107
113
  }
@@ -256,8 +262,8 @@ const runFused = async (context, schedule, prepared, folds, args, first, channel
256
262
  let last = first;
257
263
  if (prepared.version !== state.runnersVersion)
258
264
  refresh(context, schedule, prepared);
259
- // A tier using an index starts a task of its own, after the index is refreshed for it.
260
- while (last + 1 < schedule.tiers.length && allOn(prepared.runners[last + 1], channel) && prepared.uses[last + 1].length === 0)
265
+ // A tier using an index starts a task of its own, after the index is refreshed for it, as does one after a sync point.
266
+ while (last + 1 < schedule.tiers.length && schedule.syncs[last] === null && allOn(prepared.runners[last + 1], channel) && prepared.uses[last + 1].length === 0)
261
267
  last++;
262
268
  if (channel.busy())
263
269
  await channel.idle();
@@ -392,7 +398,7 @@ const endTier = (state, gpu, prepared, schedule, t) => {
392
398
  return true;
393
399
  };
394
400
  /**
395
- * Runs a schedule tier by tier, then applies one sync point, and reports what went wrong (`execute`). Runs with no GPU,
401
+ * Runs a schedule tier by tier with its sync points, and reports what went wrong (`execute`). Runs with no GPU,
396
402
  * tails or observer posts awaiting nothing, so a run that waits for nothing allocates no async frame: at the first
397
403
  * tier on a joined thread, index build across the pool or chunk on workers, `executeFrom` goes on from there.
398
404
  */
@@ -417,12 +423,12 @@ const executeTiers = (context, whole, args) => {
417
423
  (folds ??= new Map()).set(key, { target: null, values: [], remaining: contributors, ran: false, failed: false });
418
424
  const { outcome } = prepared;
419
425
  prepared.warningCount = 0;
426
+ prepared.dropped = 0;
420
427
  outcome.failures = null;
421
428
  outcome.skipped = null;
422
429
  if (state.gpu !== null || tailing !== null || state.tails.length !== 0 || state.observer.posts.length !== 0)
423
430
  return executeFrom(context, schedule, prepared, folds, args, tailing, 0, null, null);
424
431
  let handed = null;
425
- let dropped = 0;
426
432
  try {
427
433
  for (let t = 0; t < schedule.tiers.length; t++) {
428
434
  // A tick in progress takes up runners replaced since it started from its next tier on.
@@ -444,51 +450,50 @@ const executeTiers = (context, whole, args) => {
444
450
  return handed = executeFrom(context, schedule, prepared, folds, args, null, t, null, waiting);
445
451
  if (endTier(state, null, prepared, schedule, t))
446
452
  break;
453
+ if (schedule.syncs[t] !== null)
454
+ syncNow(context, prepared, false);
447
455
  }
448
456
  }
449
457
  finally {
450
458
  if (handed === null)
451
- dropped = finishSync(context, prepared);
459
+ syncNow(context, prepared, true);
452
460
  }
453
- return reportOf(state, prepared, dropped);
461
+ return reportOf(state, prepared);
454
462
  };
455
463
  /**
456
- * A run's sync point with nothing to wait for: no GPU, tails or observer posts, which `executeTiers` checked before
457
- * each tier and bodies can't add. Returns how many commands it dropped.
464
+ * A sync point with nothing to wait for: no GPU, tails or observer posts, which `executeTiers` checked before each
465
+ * tier and bodies can't add. The run's `last` lets go of strings no reader holds.
458
466
  */
459
- const finishSync = (context, prepared) => {
467
+ const syncNow = (context, prepared, last) => {
460
468
  const { state, workers, publish } = context;
461
- const { outcome } = prepared;
462
- let dropped = 0;
463
- // This run's tasks on joined threads are done: they return to their event loops while its sync point applies.
469
+ // The run's tasks on joined threads so far are done: they return to their event loops while its sync point applies.
464
470
  for (let k = 0; k < state.logs.length; k++)
465
471
  markRun(state.logs[k]);
466
472
  try {
467
473
  if (prepareSync(state)) {
468
- dropped = state.plan.dropped;
474
+ prepared.dropped += state.plan.dropped;
469
475
  for (const { finalizer, error, kind } of applySync(state))
470
- (outcome.failures ??= []).push(failureOf(kind ?? "finalizer", finalizer, error));
476
+ (prepared.outcome.failures ??= []).push(failureOf(kind ?? "finalizer", finalizer, error));
471
477
  }
472
478
  }
473
479
  finally {
474
480
  // Strings let go before the last run's sync point have no reader left: this run's waited for every one.
475
- state.strings?.settle();
481
+ if (last)
482
+ state.strings?.settle();
476
483
  rewind(state, workers);
477
484
  publish();
478
485
  }
479
- return dropped;
480
486
  };
481
487
  /**
482
488
  * `executeTiers` from tier `first` on, awaiting what it needs to: from the tier's start, or once `building`, its
483
489
  * indexes' build, is done, or once `settling`, what settling it waits for, settles.
484
490
  */
485
491
  const executeFrom = async (context, schedule, prepared, folds, args, tailing, first, building, settling) => {
486
- const { state, workers, publish } = context;
492
+ const { state, workers } = context;
487
493
  const { gpu } = state;
488
494
  const { outcome } = prepared;
489
495
  let built = building;
490
496
  let waited = settling;
491
- let dropped = 0;
492
497
  try {
493
498
  for (let t = first; t < schedule.tiers.length; t++) {
494
499
  const tier = schedule.tiers[t];
@@ -531,6 +536,11 @@ const executeFrom = async (context, schedule, prepared, folds, args, tailing, fi
531
536
  if (last < 0)
532
537
  break;
533
538
  t = last;
539
+ if (schedule.syncs[t] !== null) {
540
+ const pending = syncPoint(context, prepared, false);
541
+ if (pending !== null)
542
+ await pending;
543
+ }
534
544
  continue;
535
545
  }
536
546
  if (gpu !== null)
@@ -561,65 +571,17 @@ const executeFrom = async (context, schedule, prepared, folds, args, tailing, fi
561
571
  waiting = settleTier(state, folds, prepared, tier, t, await waiting);
562
572
  if (endTier(state, gpu, prepared, schedule, t))
563
573
  break;
574
+ if (schedule.syncs[t] !== null) {
575
+ const pending = syncPoint(context, prepared, false);
576
+ if (pending !== null)
577
+ await pending;
578
+ }
564
579
  }
565
580
  }
566
581
  finally {
567
- // This run's tasks on joined threads are done: they return to their event loops while its sync point applies.
568
- for (let k = 0; k < state.logs.length; k++)
569
- markRun(state.logs[k]);
570
- try {
571
- if (gpu !== null) {
572
- gpu.submit();
573
- gpu.beforeSync();
574
- }
575
- try {
576
- // A sync point counts as a write to everything a tail still reads.
577
- if (state.tails.length !== 0) {
578
- activate(state);
579
- const waiting = syncPending(state) ? settleAll(state) : null;
580
- if (waiting !== null)
581
- await waiting;
582
- }
583
- // Each sync point waits for observer systems on joined threads in progress, and cancels the rest.
584
- if (state.observer.posts.length !== 0) {
585
- const waiting = settlePosts(state);
586
- if (waiting !== null)
587
- await waiting;
588
- }
589
- if (prepareSync(state)) {
590
- try {
591
- if (gpu !== null) {
592
- // The sync point moves and writes existing rows of these archetypes on the CPU, and
593
- // finalizers read them, so it needs the GPU's writes there first.
594
- const disturbed = disturbedBy(state);
595
- gpu.disturb(disturbed.archetypes);
596
- if (gpu.anyAhead())
597
- await gpu.readback(disturbed.storages);
598
- }
599
- }
600
- finally {
601
- // Applied even when the readback fails, which only a lost device makes it do: the CPU state
602
- // stays whole.
603
- dropped = state.plan.dropped;
604
- for (const { finalizer, error, kind } of applySync(state))
605
- (outcome.failures ??= []).push(failureOf(kind ?? "finalizer", finalizer, error));
606
- }
607
- }
608
- }
609
- finally {
610
- // Even a sync point that failed partway moved rows.
611
- if (gpu !== null && state.touched !== null) {
612
- gpu.touched(state.touched);
613
- state.touched.clear();
614
- }
615
- }
616
- }
617
- finally {
618
- // Strings let go before the last run's sync point have no reader left: this run's waited for every one.
619
- state.strings?.settle();
620
- rewind(state, workers);
621
- publish();
622
- }
582
+ const pending = syncPoint(context, prepared, true);
583
+ if (pending !== null)
584
+ await pending;
623
585
  }
624
586
  if (tailing !== null) {
625
587
  // Placed again since, as when a joined thread is gone: they're found again next run.
@@ -636,11 +598,98 @@ const executeFrom = async (context, schedule, prepared, folds, args, tailing, fi
636
598
  countRan(state, tailing.runners);
637
599
  }
638
600
  }
639
- return reportOf(state, prepared, dropped);
601
+ return reportOf(state, prepared);
602
+ };
603
+ /**
604
+ * Applies the commands so far as a sync point, once what it changes is read: by tails and observer systems on joined
605
+ * threads still reading it, and where it moves rows, by the GPU. One within a run lets the tiers after it see them;
606
+ * the run's `last` lets go of strings no reader holds. Returns what to wait for, or null once it applied, so a sync
607
+ * point with nothing to wait for takes no turn of the event loop before what follows it.
608
+ */
609
+ const syncPoint = (context, prepared, last) => {
610
+ const { state } = context;
611
+ const { gpu } = state;
612
+ // The run's tasks on joined threads so far are done: they return to their event loops while its sync point applies.
613
+ for (let k = 0; k < state.logs.length; k++)
614
+ markRun(state.logs[k]);
615
+ let pending = null;
616
+ try {
617
+ if (gpu !== null) {
618
+ gpu.submit();
619
+ gpu.beforeSync();
620
+ }
621
+ const reading = readersDone(state);
622
+ pending = reading === null ? applyOnDevice(state, prepared) : reading.then(() => applyOnDevice(state, prepared) ?? undefined);
623
+ }
624
+ finally {
625
+ if (pending === null)
626
+ afterSync(context, last);
627
+ }
628
+ return pending === null ? null : pending.finally(() => afterSync(context, last));
629
+ };
630
+ /**
631
+ * Waits for the readers a sync point changes what they read for: tails, as it counts as a write to everything they
632
+ * read, then observer systems on joined threads in progress, cancelling the rest; null when none needs waiting for.
633
+ */
634
+ const readersDone = (state) => {
635
+ if (state.tails.length !== 0) {
636
+ activate(state);
637
+ const waiting = syncPending(state) ? settleAll(state) : null;
638
+ if (waiting !== null)
639
+ return waiting.then(() => (state.observer.posts.length === 0 ? null : settlePosts(state)) ?? undefined);
640
+ }
641
+ return state.observer.posts.length === 0 ? null : settlePosts(state);
642
+ };
643
+ /**
644
+ * Prepares and applies a sync point, reading back first what the GPU wrote where it moves and writes existing rows,
645
+ * which finalizers read too; applied even when the readback fails, which only a lost device makes it do, so the CPU
646
+ * state stays whole.
647
+ */
648
+ const applyOnDevice = (state, prepared) => {
649
+ if (!prepareSync(state))
650
+ return null;
651
+ const { gpu } = state;
652
+ let reading = null;
653
+ try {
654
+ if (gpu !== null) {
655
+ const disturbed = disturbedBy(state);
656
+ gpu.disturb(disturbed.archetypes);
657
+ if (gpu.anyAhead())
658
+ reading = gpu.readback(disturbed.storages);
659
+ }
660
+ }
661
+ finally {
662
+ if (reading === null)
663
+ apply(state, prepared);
664
+ }
665
+ return reading === null ? null : reading.finally(() => apply(state, prepared));
666
+ };
667
+ const apply = (state, prepared) => {
668
+ prepared.dropped += state.plan.dropped;
669
+ for (const { finalizer, error, kind } of applySync(state))
670
+ (prepared.outcome.failures ??= []).push(failureOf(kind ?? "finalizer", finalizer, error));
671
+ };
672
+ /** Once a sync point applied or failed: the rows it moved, even partway, the strings it let go, and its buffers. */
673
+ const afterSync = (context, last) => {
674
+ const { state, workers, publish } = context;
675
+ const { gpu } = state;
676
+ try {
677
+ if (gpu !== null && state.touched !== null) {
678
+ gpu.touched(state.touched);
679
+ state.touched.clear();
680
+ }
681
+ }
682
+ finally {
683
+ // Strings let go before the last run's sync point have no reader left: this run's waited for every one.
684
+ if (last)
685
+ state.strings?.settle();
686
+ rewind(state, workers);
687
+ publish();
688
+ }
640
689
  };
641
690
  /** A run's report once its sync point applied, its index conflicts included: a shared one when nothing went wrong. */
642
- const reportOf = (state, prepared, dropped) => {
643
- const { outcome } = prepared;
691
+ const reportOf = (state, prepared) => {
692
+ const { outcome, dropped } = prepared;
644
693
  // Conflicts unique indexes found while refreshing for finalizers.
645
694
  if (state.indexFailures.length !== 0)
646
695
  (outcome.failures ??= []).push(...state.indexFailures.splice(0));
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/implementation/world/execute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/implementation/world/execute.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,8 @@ export type FinalizerRunner = {
14
14
  readonly excluded: readonly number[];
15
15
  /** For a changes finalizer: whether it watches a component, by id. */
16
16
  readonly watches: (id: number) => boolean;
17
+ /** For a changes finalizer: the resources it watches, by id. */
18
+ readonly resourceWatches: readonly number[];
17
19
  /** By archetype id: 1 if it matches, 2 if not, 0 until known. */
18
20
  readonly matches: number[];
19
21
  readonly context: Context;
@@ -8,6 +8,7 @@ import { newestKeyOf, threadOf } from '../../interface/registry/index.js';
8
8
  import { resourceOffsetsOf, writeStops } from './stop-lists.js';
9
9
  import { acquireLookups, refreshUses } from './indexes.js';
10
10
  import { indexWatchesOf } from './lookup-keys.js';
11
+ import { takeResourceChanges, watchResource } from './resource-changes.js';
11
12
  /** Before a sync point's finalizers run, or every live match's once the world is disposed: refreshes the indexes they look up through. */
12
13
  export const refreshFinalizerIndexes = (state) => {
13
14
  for (const runner of state.finalizers)
@@ -23,9 +24,17 @@ export const createFinalizerRunner = (state, finalizer) => {
23
24
  // the objects a joined thread fills, whose storage here holds only tags.
24
25
  let watches = (id) => !state.derived[id] && !state.resources.has(id) && state.remote[id] === undefined;
25
26
  const watch = finalizer.kind === "changes" ? finalizer.declaration.watch : undefined;
27
+ const resourceWatches = [];
26
28
  if (watch !== undefined) {
27
29
  // `Finalizer.changes` rejected derived components.
28
30
  const watched = new Set(watch.map(key => idOf(state, key)));
31
+ for (const id of watched) {
32
+ if (!state.resources.has(id))
33
+ continue;
34
+ watched.delete(id);
35
+ resourceWatches.push(id);
36
+ watchResource(state, id);
37
+ }
29
38
  watches = id => watched.has(id);
30
39
  }
31
40
  const target = { buffer: createBuffer() };
@@ -42,6 +51,7 @@ export const createFinalizerRunner = (state, finalizer) => {
42
51
  required: [...new Set([...reads, ...query?.has ?? []])].filter(key => !(query?.optional ?? []).includes(key)).map(key => idOf(state, key)),
43
52
  excluded: (query?.not ?? []).map(key => idOf(state, key)),
44
53
  watches,
54
+ resourceWatches,
45
55
  matches: [],
46
56
  context: createContext(state, declaration, commanding ? { commands, indexes: indexes.byName } : { indexes: indexes.byName }),
47
57
  target,
@@ -211,8 +221,13 @@ export const isMissing = (value) => value === missing;
211
221
  const essential = (state, id) => newestKeyOf(state.keys[id]);
212
222
  /** No components, shared by every group that replaces none. */
213
223
  const none = [];
214
- /** The sync point's structural changes to a changes finalizer's components, grouped by how they changed. */
215
- const changesOf = (state, runner, queued) => {
224
+ const noResources = [];
225
+ const noResourceChanges = [];
226
+ /**
227
+ * The sync point's structural changes to a changes finalizer's components, grouped by how they changed, and of
228
+ * `written`, the resources it watches.
229
+ */
230
+ const changesOf = (state, runner, queued, written) => {
216
231
  const { plan, archetypes, entities } = state;
217
232
  const { watches } = runner;
218
233
  const names = (archetype) => archetype === null ? null : archetype.components.filter(watches).map(id => essential(state, id));
@@ -346,8 +361,12 @@ const changesOf = (state, runner, queued) => {
346
361
  const value = commandValue(state, queued, entry, id);
347
362
  return isMissing(value) ? live(entity, id) : value;
348
363
  };
364
+ const resources = written.length === 0 || runner.resourceWatches.length === 0 ? noResources
365
+ : written.filter(change => runner.resourceWatches.includes(change.id)).map(({ id, previous, next }) => ({ key: newestKeyOf(state.keys[id]), previous, next }));
349
366
  return {
350
367
  groups: [...groups.values()],
368
+ // Stored values match each resource's registered schema, so they have its type.
369
+ resources: resources,
351
370
  // Stored and commanded values match each component's registered schema, so they have its type.
352
371
  previous: (entity, key) => (bornHere(entity) ? null : live(entity, idOf(state, key))),
353
372
  next: (entity, key) => next(entity, idOf(state, key)),
@@ -368,6 +387,8 @@ const staged = (state) => {
368
387
  export const runFinalizers = (state, queued, born, tick) => {
369
388
  const errors = [];
370
389
  state.born = born;
390
+ // Taken before any finalizer runs, so what finalizers write is seen at the next sync point.
391
+ const written = state.resourcesSeen.size === 0 ? noResourceChanges : takeResourceChanges(state);
371
392
  try {
372
393
  for (const runner of state.finalizers) {
373
394
  const { finalizer, remote } = runner;
@@ -381,7 +402,7 @@ export const runFinalizers = (state, queued, born, tick) => {
381
402
  else {
382
403
  // The context is built to the finalizer's declaration, so its body accepts it.
383
404
  const changes = finalizer;
384
- guarded(state, errors, finalizer, () => changes.body(changesOf(state, runner, queued), runner.context.value));
405
+ guarded(state, errors, finalizer, () => changes.body(changesOf(state, runner, queued, written), runner.context.value));
385
406
  }
386
407
  if (runner.target.buffer.count > 0) {
387
408
  state.queued.push({ buffer: runner.target.buffer, guarded: true });