@oasys/oecs 0.5.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1399 -276
- package/README.md +327 -169
- package/dist/core/ecs/access_check.d.cts +31 -31
- package/dist/core/ecs/access_check.d.ts +31 -31
- package/dist/core/ecs/access_check.d.ts.map +1 -1
- package/dist/core/ecs/archetype.d.cts +273 -205
- package/dist/core/ecs/archetype.d.ts +273 -205
- package/dist/core/ecs/archetype.d.ts.map +1 -1
- package/dist/core/ecs/archetype_closure.d.cts +23 -0
- package/dist/core/ecs/archetype_closure.d.ts +23 -0
- package/dist/core/ecs/archetype_closure.d.ts.map +1 -0
- package/dist/core/ecs/archetype_graph.d.cts +34 -34
- package/dist/core/ecs/archetype_graph.d.ts +34 -34
- package/dist/core/ecs/archetype_graph.d.ts.map +1 -1
- package/dist/core/ecs/archetype_types.d.cts +55 -0
- package/dist/core/ecs/archetype_types.d.ts +55 -0
- package/dist/core/ecs/archetype_types.d.ts.map +1 -0
- package/dist/core/ecs/change_feed.d.cts +53 -0
- package/dist/core/ecs/change_feed.d.ts +53 -0
- package/dist/core/ecs/change_feed.d.ts.map +1 -0
- package/dist/core/ecs/changed_query.d.cts +36 -0
- package/dist/core/ecs/changed_query.d.ts +36 -0
- package/dist/core/ecs/changed_query.d.ts.map +1 -0
- package/dist/core/ecs/chunk_columns.d.cts +49 -0
- package/dist/core/ecs/chunk_columns.d.ts +49 -0
- package/dist/core/ecs/chunk_columns.d.ts.map +1 -0
- package/dist/core/ecs/command_log.d.cts +30 -30
- package/dist/core/ecs/command_log.d.ts +30 -30
- package/dist/core/ecs/command_log.d.ts.map +1 -1
- package/dist/core/ecs/component.d.cts +45 -44
- package/dist/core/ecs/component.d.ts +45 -44
- package/dist/core/ecs/component.d.ts.map +1 -1
- package/dist/core/ecs/component_registry.d.cts +53 -0
- package/dist/core/ecs/component_registry.d.ts +53 -0
- package/dist/core/ecs/component_registry.d.ts.map +1 -0
- package/dist/core/ecs/compute_backend.d.cts +18 -7
- package/dist/core/ecs/compute_backend.d.ts +18 -7
- package/dist/core/ecs/compute_backend.d.ts.map +1 -1
- package/dist/core/ecs/deferred_commands.d.cts +15 -14
- package/dist/core/ecs/deferred_commands.d.ts +15 -14
- package/dist/core/ecs/deferred_commands.d.ts.map +1 -1
- package/dist/core/ecs/dispatch_trace.d.cts +32 -31
- package/dist/core/ecs/dispatch_trace.d.ts +32 -31
- package/dist/core/ecs/dispatch_trace.d.ts.map +1 -1
- package/dist/core/ecs/ecs.d.cts +337 -276
- package/dist/core/ecs/ecs.d.ts +337 -276
- package/dist/core/ecs/ecs.d.ts.map +1 -1
- package/dist/core/ecs/ecs_memory.d.cts +134 -136
- package/dist/core/ecs/ecs_memory.d.ts +134 -136
- package/dist/core/ecs/ecs_memory.d.ts.map +1 -1
- package/dist/core/ecs/ecs_options.d.cts +89 -0
- package/dist/core/ecs/ecs_options.d.ts +89 -0
- package/dist/core/ecs/ecs_options.d.ts.map +1 -0
- package/dist/core/ecs/entity.d.cts +4 -4
- package/dist/core/ecs/entity.d.ts +4 -4
- package/dist/core/ecs/entity_allocator.d.cts +24 -22
- package/dist/core/ecs/entity_allocator.d.ts +24 -22
- package/dist/core/ecs/entity_allocator.d.ts.map +1 -1
- package/dist/core/ecs/event.d.cts +37 -23
- package/dist/core/ecs/event.d.ts +37 -23
- package/dist/core/ecs/event.d.ts.map +1 -1
- package/dist/core/ecs/facades.d.cts +12 -126
- package/dist/core/ecs/facades.d.ts +12 -126
- package/dist/core/ecs/facades.d.ts.map +1 -1
- package/dist/core/ecs/frame_stepper.d.cts +12 -12
- package/dist/core/ecs/frame_stepper.d.ts +12 -12
- package/dist/core/ecs/frame_stepper.d.ts.map +1 -1
- package/dist/core/ecs/frame_trace.d.cts +34 -34
- package/dist/core/ecs/frame_trace.d.ts +34 -34
- package/dist/core/ecs/frame_trace.d.ts.map +1 -1
- package/dist/core/ecs/host_commands.d.cts +107 -89
- package/dist/core/ecs/host_commands.d.ts +107 -89
- package/dist/core/ecs/host_commands.d.ts.map +1 -1
- package/dist/core/ecs/index.d.cts +22 -12
- package/dist/core/ecs/index.d.ts +22 -12
- package/dist/core/ecs/index.d.ts.map +1 -1
- package/dist/core/ecs/observer.d.cts +41 -122
- package/dist/core/ecs/observer.d.ts +41 -122
- package/dist/core/ecs/observer.d.ts.map +1 -1
- package/dist/core/ecs/phase.d.cts +79 -0
- package/dist/core/ecs/phase.d.ts +79 -0
- package/dist/core/ecs/phase.d.ts.map +1 -0
- package/dist/core/ecs/plugin.d.cts +125 -0
- package/dist/core/ecs/plugin.d.ts +125 -0
- package/dist/core/ecs/plugin.d.ts.map +1 -0
- package/dist/core/ecs/plugin_slots.d.cts +26 -0
- package/dist/core/ecs/plugin_slots.d.ts +26 -0
- package/dist/core/ecs/plugin_slots.d.ts.map +1 -0
- package/dist/core/ecs/query.d.cts +219 -568
- package/dist/core/ecs/query.d.ts +219 -568
- package/dist/core/ecs/query.d.ts.map +1 -1
- package/dist/core/ecs/query_cache.d.cts +130 -0
- package/dist/core/ecs/query_cache.d.ts +130 -0
- package/dist/core/ecs/query_cache.d.ts.map +1 -0
- package/dist/core/ecs/query_registry.d.cts +47 -0
- package/dist/core/ecs/query_registry.d.ts +47 -0
- package/dist/core/ecs/query_registry.d.ts.map +1 -0
- package/dist/core/ecs/query_terms.d.cts +126 -0
- package/dist/core/ecs/query_terms.d.ts +126 -0
- package/dist/core/ecs/query_terms.d.ts.map +1 -0
- package/dist/core/ecs/ref.d.cts +129 -16
- package/dist/core/ecs/ref.d.ts +129 -16
- package/dist/core/ecs/ref.d.ts.map +1 -1
- package/dist/core/ecs/relation.d.cts +105 -186
- package/dist/core/ecs/relation.d.ts +105 -186
- package/dist/core/ecs/relation.d.ts.map +1 -1
- package/dist/core/ecs/resource.d.cts +14 -14
- package/dist/core/ecs/resource.d.ts +14 -14
- package/dist/core/ecs/resource_registry.d.cts +6 -6
- package/dist/core/ecs/resource_registry.d.ts +6 -6
- package/dist/core/ecs/resource_registry.d.ts.map +1 -1
- package/dist/core/ecs/row_kinds.d.cts +24 -0
- package/dist/core/ecs/row_kinds.d.ts +24 -0
- package/dist/core/ecs/row_kinds.d.ts.map +1 -0
- package/dist/core/ecs/run_condition.d.cts +23 -23
- package/dist/core/ecs/run_condition.d.ts +23 -23
- package/dist/core/ecs/run_condition.d.ts.map +1 -1
- package/dist/core/ecs/schedule.d.cts +98 -114
- package/dist/core/ecs/schedule.d.ts +98 -114
- package/dist/core/ecs/schedule.d.ts.map +1 -1
- package/dist/core/ecs/schedule_plan.d.cts +33 -0
- package/dist/core/ecs/schedule_plan.d.ts +33 -0
- package/dist/core/ecs/schedule_plan.d.ts.map +1 -0
- package/dist/core/ecs/snapshot.d.cts +77 -0
- package/dist/core/ecs/snapshot.d.ts +77 -0
- package/dist/core/ecs/snapshot.d.ts.map +1 -0
- package/dist/core/ecs/snapshot_mount.d.cts +42 -0
- package/dist/core/ecs/snapshot_mount.d.ts +42 -0
- package/dist/core/ecs/snapshot_mount.d.ts.map +1 -0
- package/dist/core/ecs/sparse_store.d.cts +110 -53
- package/dist/core/ecs/sparse_store.d.ts +110 -53
- package/dist/core/ecs/sparse_store.d.ts.map +1 -1
- package/dist/core/ecs/store.d.cts +644 -511
- package/dist/core/ecs/store.d.ts +644 -511
- package/dist/core/ecs/store.d.ts.map +1 -1
- package/dist/core/ecs/store_layout_listener.d.cts +8 -8
- package/dist/core/ecs/store_layout_listener.d.ts +8 -8
- package/dist/core/ecs/store_types.d.cts +122 -0
- package/dist/core/ecs/store_types.d.ts +122 -0
- package/dist/core/ecs/store_types.d.ts.map +1 -0
- package/dist/core/ecs/system.d.cts +151 -66
- package/dist/core/ecs/system.d.ts +151 -66
- package/dist/core/ecs/system.d.ts.map +1 -1
- package/dist/core/ecs/system_context.d.cts +296 -0
- package/dist/core/ecs/system_context.d.ts +296 -0
- package/dist/core/ecs/system_context.d.ts.map +1 -0
- package/dist/core/ecs/system_set.d.cts +48 -0
- package/dist/core/ecs/system_set.d.ts +48 -0
- package/dist/core/ecs/system_set.d.ts.map +1 -0
- package/dist/core/ecs/utils/arrays.d.cts +15 -1
- package/dist/core/ecs/utils/arrays.d.ts +15 -1
- package/dist/core/ecs/utils/arrays.d.ts.map +1 -1
- package/dist/core/ecs/utils/error.d.cts +87 -4
- package/dist/core/ecs/utils/error.d.ts +87 -4
- package/dist/core/ecs/utils/error.d.ts.map +1 -1
- package/dist/core/ecs/utils/plugin_error.d.cts +10 -0
- package/dist/core/ecs/utils/plugin_error.d.ts +10 -0
- package/dist/core/ecs/utils/plugin_error.d.ts.map +1 -0
- package/dist/core/restore_errors.d.cts +30 -0
- package/dist/core/restore_errors.d.ts +30 -0
- package/dist/core/restore_errors.d.ts.map +1 -0
- package/dist/core/store/action_ring.d.cts +48 -49
- package/dist/core/store/action_ring.d.ts +48 -49
- package/dist/core/store/action_ring.d.ts.map +1 -1
- package/dist/core/store/allocator.d.cts +166 -114
- package/dist/core/store/allocator.d.ts +166 -114
- package/dist/core/store/allocator.d.ts.map +1 -1
- package/dist/core/store/buffer_backed_column.d.cts +21 -22
- package/dist/core/store/buffer_backed_column.d.ts +21 -22
- package/dist/core/store/buffer_backed_column.d.ts.map +1 -1
- package/dist/core/store/column_store.d.cts +138 -100
- package/dist/core/store/column_store.d.ts +138 -100
- package/dist/core/store/column_store.d.ts.map +1 -1
- package/dist/core/store/command_dispatch.d.cts +14 -15
- package/dist/core/store/command_dispatch.d.ts +14 -15
- package/dist/core/store/command_dispatch.d.ts.map +1 -1
- package/dist/core/store/command_ring.d.cts +41 -45
- package/dist/core/store/command_ring.d.ts +41 -45
- package/dist/core/store/command_ring.d.ts.map +1 -1
- package/dist/core/store/descriptor.d.cts +35 -18
- package/dist/core/store/descriptor.d.ts +35 -18
- package/dist/core/store/descriptor.d.ts.map +1 -1
- package/dist/core/store/entity_index.d.cts +34 -35
- package/dist/core/store/entity_index.d.ts +34 -35
- package/dist/core/store/entity_index.d.ts.map +1 -1
- package/dist/core/store/event_ring.d.cts +40 -42
- package/dist/core/store/event_ring.d.ts +40 -42
- package/dist/core/store/event_ring.d.ts.map +1 -1
- package/dist/core/store/extend.d.cts +15 -9
- package/dist/core/store/extend.d.ts +15 -9
- package/dist/core/store/extend.d.ts.map +1 -1
- package/dist/core/store/grow.d.cts +3 -3
- package/dist/core/store/grow.d.ts +3 -3
- package/dist/core/store/grow.d.ts.map +1 -1
- package/dist/core/store/header.d.cts +37 -33
- package/dist/core/store/header.d.ts +37 -33
- package/dist/core/store/header.d.ts.map +1 -1
- package/dist/core/store/index.d.cts +10 -10
- package/dist/core/store/index.d.ts +10 -10
- package/dist/core/store/index.d.ts.map +1 -1
- package/dist/core/store/layout_ops.d.cts +72 -63
- package/dist/core/store/layout_ops.d.ts +72 -63
- package/dist/core/store/layout_ops.d.ts.map +1 -1
- package/dist/core/store/region_table.d.cts +28 -21
- package/dist/core/store/region_table.d.ts +28 -21
- package/dist/core/store/region_table.d.ts.map +1 -1
- package/dist/core/store/snapshot.d.cts +31 -16
- package/dist/core/store/snapshot.d.ts +31 -16
- package/dist/core/store/snapshot.d.ts.map +1 -1
- package/dist/core/store/state_hash.d.cts +14 -14
- package/dist/core/store/state_hash.d.ts +14 -14
- package/dist/core/store/state_hash.d.ts.map +1 -1
- package/dist/core/store/store_regions.d.cts +10 -10
- package/dist/core/store/store_regions.d.ts +10 -10
- package/dist/core/store/store_regions.d.ts.map +1 -1
- package/dist/core/store/vendored_abi/abi.d.cts +27 -2
- package/dist/core/store/vendored_abi/abi.d.ts +27 -2
- package/dist/core/store/vendored_abi/abi.d.ts.map +1 -1
- package/dist/host_commands-B2KMx8O2.cjs +1 -0
- package/dist/host_commands-ClVPvhSa.cjs +2 -0
- package/dist/host_commands-CwxVQS1z.js +1524 -0
- package/dist/host_commands-nJvTy88E.js +1667 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +16 -11
- package/dist/index.d.ts +16 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.development.cjs +1 -1
- package/dist/index.development.js +6709 -5729
- package/dist/index.js +5664 -4743
- package/dist/internal.cjs +2 -2
- package/dist/internal.d.cts +5 -2
- package/dist/internal.d.ts +5 -2
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.development.cjs +1 -1
- package/dist/internal.development.js +70 -20
- package/dist/internal.js +138 -83
- package/dist/plugins/abi-D3V-QUSf.cjs +1 -0
- package/dist/plugins/abi-NP8pNxpd.js +42 -0
- package/dist/plugins/arrays-Dr_1hCjL.js +28 -0
- package/dist/plugins/arrays-Dt-Joc4i.cjs +1 -0
- package/dist/plugins/assertions-gtDVfbnQ.js +6 -0
- package/dist/plugins/assertions-z5GQd_bB.cjs +1 -0
- package/dist/{extensions → plugins}/editor/editor.d.cts +56 -56
- package/dist/{extensions → plugins}/editor/editor.d.ts +56 -56
- package/dist/plugins/editor/editor.d.ts.map +1 -0
- package/dist/{extensions → plugins}/editor/field_handle.d.cts +13 -13
- package/dist/{extensions → plugins}/editor/field_handle.d.ts +13 -13
- package/dist/plugins/editor/field_handle.d.ts.map +1 -0
- package/dist/plugins/editor/index.d.cts +22 -0
- package/dist/plugins/editor/index.d.ts +22 -0
- package/dist/plugins/editor/index.d.ts.map +1 -0
- package/dist/plugins/editor.cjs +1 -0
- package/dist/plugins/editor.d.cts +1 -0
- package/dist/plugins/editor.d.ts +1 -0
- package/dist/plugins/editor.development.cjs +1 -0
- package/dist/{extensions/editor/index.development.js → plugins/editor.development.js} +83 -66
- package/dist/{extensions/editor/index.js → plugins/editor.js} +83 -66
- package/dist/plugins/events/event_channel.d.cts +13 -0
- package/dist/plugins/events/event_channel.d.ts +13 -0
- package/dist/plugins/events/event_channel.d.ts.map +1 -0
- package/dist/plugins/events/event_registry.d.cts +22 -0
- package/dist/plugins/events/event_registry.d.ts +22 -0
- package/dist/plugins/events/event_registry.d.ts.map +1 -0
- package/dist/plugins/events/facade.d.cts +26 -0
- package/dist/plugins/events/facade.d.ts +26 -0
- package/dist/plugins/events/facade.d.ts.map +1 -0
- package/dist/plugins/events/index.d.cts +10 -0
- package/dist/plugins/events/index.d.ts +10 -0
- package/dist/plugins/events/index.d.ts.map +1 -0
- package/dist/plugins/events.cjs +1 -0
- package/dist/plugins/events.d.cts +1 -0
- package/dist/plugins/events.d.ts +1 -0
- package/dist/plugins/events.development.cjs +1 -0
- package/dist/plugins/events.development.js +174 -0
- package/dist/plugins/events.js +159 -0
- package/dist/plugins/observers/index.d.cts +23 -0
- package/dist/plugins/observers/index.d.ts +23 -0
- package/dist/plugins/observers/index.d.ts.map +1 -0
- package/dist/plugins/observers/observer_registry.d.cts +101 -0
- package/dist/plugins/observers/observer_registry.d.ts +101 -0
- package/dist/plugins/observers/observer_registry.d.ts.map +1 -0
- package/dist/plugins/observers.cjs +1 -0
- package/dist/plugins/observers.d.cts +1 -0
- package/dist/plugins/observers.d.ts +1 -0
- package/dist/plugins/observers.development.cjs +1 -0
- package/dist/plugins/observers.development.js +431 -0
- package/dist/plugins/observers.js +403 -0
- package/dist/plugins/relation_store-BsoegrZh.js +313 -0
- package/dist/plugins/relation_store-DQKSnxsm.cjs +1 -0
- package/dist/plugins/relation_store-RBhpcE28.cjs +1 -0
- package/dist/plugins/relation_store-RqW5Snx6.js +328 -0
- package/dist/plugins/relations/builtin_relations.d.cts +48 -0
- package/dist/plugins/relations/builtin_relations.d.ts +48 -0
- package/dist/plugins/relations/builtin_relations.d.ts.map +1 -0
- package/dist/plugins/relations/facade.d.cts +73 -0
- package/dist/plugins/relations/facade.d.ts +73 -0
- package/dist/plugins/relations/facade.d.ts.map +1 -0
- package/dist/plugins/relations/index.d.cts +11 -0
- package/dist/plugins/relations/index.d.ts +11 -0
- package/dist/plugins/relations/index.d.ts.map +1 -0
- package/dist/{core/ecs → plugins/relations}/relation_service.d.cts +93 -105
- package/dist/{core/ecs → plugins/relations}/relation_service.d.ts +93 -105
- package/dist/plugins/relations/relation_service.d.ts.map +1 -0
- package/dist/plugins/relations/relation_store.d.cts +177 -0
- package/dist/plugins/relations/relation_store.d.ts +177 -0
- package/dist/plugins/relations/relation_store.d.ts.map +1 -0
- package/dist/plugins/relations.cjs +1 -0
- package/dist/plugins/relations.d.cts +1 -0
- package/dist/plugins/relations.d.ts +1 -0
- package/dist/plugins/relations.development.cjs +1 -0
- package/dist/plugins/relations.development.js +603 -0
- package/dist/plugins/relations.js +553 -0
- package/dist/plugins/snapshots/index.d.cts +33 -0
- package/dist/plugins/snapshots/index.d.ts +33 -0
- package/dist/plugins/snapshots/index.d.ts.map +1 -0
- package/dist/plugins/snapshots/resume.d.cts +57 -0
- package/dist/plugins/snapshots/resume.d.ts +57 -0
- package/dist/plugins/snapshots/resume.d.ts.map +1 -0
- package/dist/plugins/snapshots/snapshot_service.d.cts +59 -0
- package/dist/plugins/snapshots/snapshot_service.d.ts +59 -0
- package/dist/plugins/snapshots/snapshot_service.d.ts.map +1 -0
- package/dist/plugins/snapshots.cjs +1 -0
- package/dist/plugins/snapshots.d.cts +1 -0
- package/dist/plugins/snapshots.d.ts +1 -0
- package/dist/plugins/snapshots.development.cjs +1 -0
- package/dist/plugins/snapshots.development.js +737 -0
- package/dist/plugins/snapshots.js +737 -0
- package/dist/plugins/solid/index.d.cts +8 -0
- package/dist/plugins/solid/index.d.ts +8 -0
- package/dist/plugins/solid/index.d.ts.map +1 -0
- package/dist/plugins/solid/solid.d.cts +97 -0
- package/dist/plugins/solid/solid.d.ts +97 -0
- package/dist/plugins/solid/solid.d.ts.map +1 -0
- package/dist/plugins/solid.cjs +1 -0
- package/dist/plugins/solid.d.cts +1 -0
- package/dist/plugins/solid.d.ts +1 -0
- package/dist/plugins/solid.development.cjs +1 -0
- package/dist/plugins/solid.development.js +319 -0
- package/dist/plugins/solid.js +319 -0
- package/dist/plugins/workers/index.d.cts +75 -0
- package/dist/plugins/workers/index.d.ts +75 -0
- package/dist/plugins/workers/index.d.ts.map +1 -0
- package/dist/plugins/workers/node_threads.d.cts +25 -0
- package/dist/plugins/workers/node_threads.d.ts +25 -0
- package/dist/plugins/workers/node_threads.d.ts.map +1 -0
- package/dist/plugins/workers/plan.d.cts +61 -0
- package/dist/plugins/workers/plan.d.ts +61 -0
- package/dist/plugins/workers/plan.d.ts.map +1 -0
- package/dist/plugins/workers/pool.d.cts +144 -0
- package/dist/plugins/workers/pool.d.ts +144 -0
- package/dist/plugins/workers/pool.d.ts.map +1 -0
- package/dist/plugins/workers/protocol.d.cts +112 -0
- package/dist/plugins/workers/protocol.d.ts +112 -0
- package/dist/plugins/workers/protocol.d.ts.map +1 -0
- package/dist/plugins/workers/worker_bind.d.cts +64 -0
- package/dist/plugins/workers/worker_bind.d.ts +64 -0
- package/dist/plugins/workers/worker_bind.d.ts.map +1 -0
- package/dist/plugins/workers/worker_loop.d.cts +14 -0
- package/dist/plugins/workers/worker_loop.d.ts +14 -0
- package/dist/plugins/workers/worker_loop.d.ts.map +1 -0
- package/dist/plugins/workers.cjs +1 -0
- package/dist/plugins/workers.d.cts +1 -0
- package/dist/plugins/workers.d.ts +1 -0
- package/dist/plugins/workers.development.cjs +1 -0
- package/dist/plugins/workers.development.js +596 -0
- package/dist/plugins/workers.js +474 -0
- package/dist/primitives.cjs +1 -1
- package/dist/primitives.d.cts +4 -4
- package/dist/primitives.d.ts +4 -4
- package/dist/primitives.development.cjs +1 -1
- package/dist/primitives.development.js +66 -22
- package/dist/primitives.js +66 -22
- package/dist/shared-BKl12xF1.js +132 -0
- package/dist/shared-Dk-pACZT.cjs +1 -0
- package/dist/shared.cjs +1 -1
- package/dist/shared.d.cts +7 -7
- package/dist/shared.d.ts +7 -7
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.development.cjs +1 -1
- package/dist/shared.development.js +4 -3
- package/dist/shared.js +4 -3
- package/dist/topological_sort-Cc_yXqPT.js +346 -0
- package/dist/topological_sort-vp1imU6D.cjs +1 -0
- package/dist/type_primitives/assertions.d.cts +12 -16
- package/dist/type_primitives/assertions.d.ts +12 -16
- package/dist/type_primitives/assertions.d.ts.map +1 -1
- package/dist/type_primitives/binary_heap/binary_heap.d.cts +2 -6
- package/dist/type_primitives/binary_heap/binary_heap.d.ts +2 -6
- package/dist/type_primitives/binary_heap/binary_heap.d.ts.map +1 -1
- package/dist/type_primitives/bitset/bitset.d.cts +7 -11
- package/dist/type_primitives/bitset/bitset.d.ts +7 -11
- package/dist/type_primitives/bitset/bitset.d.ts.map +1 -1
- package/dist/type_primitives/brand.d.cts +2 -7
- package/dist/type_primitives/brand.d.ts +2 -7
- package/dist/type_primitives/brand.d.ts.map +1 -1
- package/dist/type_primitives/error.d.cts +1 -2
- package/dist/type_primitives/error.d.ts +1 -2
- package/dist/type_primitives/error.d.ts.map +1 -1
- package/dist/type_primitives/index.d.cts +1 -1
- package/dist/type_primitives/index.d.ts +1 -1
- package/dist/type_primitives/sparse_map/sparse_map.d.cts +3 -7
- package/dist/type_primitives/sparse_map/sparse_map.d.ts +3 -7
- package/dist/type_primitives/sparse_map/sparse_map.d.ts.map +1 -1
- package/dist/type_primitives/sparse_set/sparse_set.d.cts +2 -6
- package/dist/type_primitives/sparse_set/sparse_set.d.ts +2 -6
- package/dist/type_primitives/sparse_set/sparse_set.d.ts.map +1 -1
- package/dist/type_primitives/topological_sort/topological_sort.d.cts +1 -5
- package/dist/type_primitives/topological_sort/topological_sort.d.ts +1 -5
- package/dist/type_primitives/topological_sort/topological_sort.d.ts.map +1 -1
- package/dist/type_primitives/typed_arrays/typed_arrays.d.cts +18 -17
- package/dist/type_primitives/typed_arrays/typed_arrays.d.ts +18 -17
- package/dist/type_primitives/typed_arrays/typed_arrays.d.ts.map +1 -1
- package/dist/utils/error.d.ts.map +1 -1
- package/dist/version.d.cts +4 -4
- package/dist/version.d.ts +4 -4
- package/dist/worker.cjs +1 -0
- package/dist/worker.d.cts +17 -0
- package/dist/worker.d.ts +17 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.development.cjs +1 -0
- package/dist/worker.development.js +253 -0
- package/dist/worker.js +253 -0
- package/package.json +363 -191
- package/dist/core/ecs/builtin_relations.d.cts +0 -43
- package/dist/core/ecs/builtin_relations.d.ts +0 -43
- package/dist/core/ecs/builtin_relations.d.ts.map +0 -1
- package/dist/core/ecs/event_registry.d.cts +0 -22
- package/dist/core/ecs/event_registry.d.ts +0 -22
- package/dist/core/ecs/event_registry.d.ts.map +0 -1
- package/dist/core/ecs/relation_service.d.ts.map +0 -1
- package/dist/core/ecs/resume.d.cts +0 -85
- package/dist/core/ecs/resume.d.ts +0 -85
- package/dist/core/ecs/resume.d.ts.map +0 -1
- package/dist/core/ecs/snapshot_service.d.cts +0 -94
- package/dist/core/ecs/snapshot_service.d.ts +0 -94
- package/dist/core/ecs/snapshot_service.d.ts.map +0 -1
- package/dist/extensions/editor/editor.d.ts.map +0 -1
- package/dist/extensions/editor/field_handle.d.ts.map +0 -1
- package/dist/extensions/editor/index.cjs +0 -1
- package/dist/extensions/editor/index.d.cts +0 -21
- package/dist/extensions/editor/index.d.ts +0 -21
- package/dist/extensions/editor/index.d.ts.map +0 -1
- package/dist/extensions/editor/index.development.cjs +0 -1
- package/dist/extensions/reactive/ecs_sync.d.cts +0 -214
- package/dist/extensions/reactive/ecs_sync.d.ts +0 -214
- package/dist/extensions/reactive/ecs_sync.d.ts.map +0 -1
- package/dist/extensions/reactive/index.cjs +0 -1
- package/dist/extensions/reactive/index.d.cts +0 -23
- package/dist/extensions/reactive/index.d.ts +0 -23
- package/dist/extensions/reactive/index.d.ts.map +0 -1
- package/dist/extensions/reactive/index.development.cjs +0 -1
- package/dist/extensions/reactive/index.development.js +0 -215
- package/dist/extensions/reactive/index.js +0 -215
- package/dist/extensions/solid/index.cjs +0 -1
- package/dist/extensions/solid/index.d.cts +0 -6
- package/dist/extensions/solid/index.d.ts +0 -6
- package/dist/extensions/solid/index.d.ts.map +0 -1
- package/dist/extensions/solid/index.development.cjs +0 -1
- package/dist/extensions/solid/index.development.js +0 -40
- package/dist/extensions/solid/index.js +0 -36
- package/dist/extensions/solid/kernel_solid.d.cts +0 -45
- package/dist/extensions/solid/kernel_solid.d.ts +0 -45
- package/dist/extensions/solid/kernel_solid.d.ts.map +0 -1
- package/dist/host_commands-3jyFfWNg.js +0 -2326
- package/dist/host_commands-DNf0f6ko.cjs +0 -1
- package/dist/internal-C9jjL90H.js +0 -2485
- package/dist/internal-RZN14uMw.cjs +0 -2
- package/dist/interop-CT-REx0W.cjs +0 -1
- package/dist/interop-CcY6ASQc.js +0 -18
- package/dist/interop-DqxleBo7.js +0 -18
- package/dist/interop-T1HZ-Dpa.cjs +0 -1
- package/dist/kernel-Cz2Kxlwl.js +0 -240
- package/dist/kernel-DgyrLFjW.js +0 -227
- package/dist/kernel-sw7ScKWu.cjs +0 -1
- package/dist/kernel-yWV3XnAb.cjs +0 -1
- package/dist/reactive/array.d.cts +0 -24
- package/dist/reactive/array.d.ts +0 -24
- package/dist/reactive/array.d.ts.map +0 -1
- package/dist/reactive/index.cjs +0 -1
- package/dist/reactive/index.d.cts +0 -11
- package/dist/reactive/index.d.ts +0 -11
- package/dist/reactive/index.d.ts.map +0 -1
- package/dist/reactive/index.development.cjs +0 -1
- package/dist/reactive/index.development.js +0 -18
- package/dist/reactive/index.js +0 -18
- package/dist/reactive/interop.d.cts +0 -19
- package/dist/reactive/interop.d.ts +0 -19
- package/dist/reactive/interop.d.ts.map +0 -1
- package/dist/reactive/kernel.d.cts +0 -73
- package/dist/reactive/kernel.d.ts +0 -73
- package/dist/reactive/kernel.d.ts.map +0 -1
- package/dist/reactive/map.d.cts +0 -16
- package/dist/reactive/map.d.ts +0 -16
- package/dist/reactive/map.d.ts.map +0 -1
- package/dist/reactive/shallow.d.cts +0 -11
- package/dist/reactive/shallow.d.ts +0 -11
- package/dist/reactive/shallow.d.ts.map +0 -1
- package/dist/reactive/struct.d.cts +0 -10
- package/dist/reactive/struct.d.ts +0 -10
- package/dist/reactive/struct.d.ts.map +0 -1
- package/dist/shallow-9S1pY_Iw.js +0 -159
- package/dist/shallow-C5YmTbtb.cjs +0 -1
- package/dist/shallow-DQ8aG51_.cjs +0 -1
- package/dist/shallow-DfnAm9vG.js +0 -150
- package/dist/shared-BMXh9hxm.cjs +0 -1
- package/dist/shared-DQKK0i-E.js +0 -109
- package/dist/topological_sort-BDvEyb9W.cjs +0 -1
- package/dist/topological_sort-DK6EjpWa.js +0 -135
- package/dist/typed_arrays-BcXcnzB4.js +0 -258
- package/dist/typed_arrays-D3NmwtCG.cjs +0 -1
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { SystemContext } from '../../core/ecs/system_context.cjs';
|
|
2
|
+
import { ParallelPlan } from './plan.cjs';
|
|
3
|
+
/** What the pool needs from the world, and nothing more. */
|
|
4
|
+
export interface PoolWorld {
|
|
5
|
+
/** The `WebAssembly.Memory` on the wasm backing, the `SharedArrayBuffer` on
|
|
6
|
+
* the shared backing. The two grow differently and the worker survives both,
|
|
7
|
+
* which is why the memory itself travels and not its current buffer. */
|
|
8
|
+
readonly store: SharedArrayBuffer | WebAssembly.Memory;
|
|
9
|
+
readonly storeBase: number;
|
|
10
|
+
/** Tell the store that a component's row ticks changed outside the dirty
|
|
11
|
+
* list, so the next entity-level drain scans the plane. */
|
|
12
|
+
noteScan(componentId: number): void;
|
|
13
|
+
/** Every parallel plan the world has registered so far. */
|
|
14
|
+
plans(): readonly ParallelPlan[];
|
|
15
|
+
/** The pool has stopped, so the world drops it and the schedule goes back to
|
|
16
|
+
* the sequential path. */
|
|
17
|
+
released(): void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* How long the host waits at the join before it gives up on a worker.
|
|
21
|
+
*
|
|
22
|
+
* A safety net, and not a budget. A pass that takes this long has already
|
|
23
|
+
* missed every frame the host meant to draw, so the value only has to sit above
|
|
24
|
+
* any pass a working kernel runs, on slow hardware and under load. It is far
|
|
25
|
+
* above that, and still short enough that a person watching a hung process gets
|
|
26
|
+
* an error instead of a dead prompt. Tune it down only to make a hang surface
|
|
27
|
+
* sooner, never to bound a frame.
|
|
28
|
+
*/
|
|
29
|
+
export declare const DEFAULT_JOIN_TIMEOUT_MS = 30000;
|
|
30
|
+
export interface AttachWorkersOptions {
|
|
31
|
+
/** Workers to start. Defaults to one below the reported parallelism, floor
|
|
32
|
+
* one. One worker is always a loss against the sequential body, so a caller
|
|
33
|
+
* that wants a split gives more than one. */
|
|
34
|
+
readonly count?: number;
|
|
35
|
+
/** Where the engine's worker entry lives. Defaults to `@oasys/oecs/worker`,
|
|
36
|
+
* which the package ships one directory above the module this pool lands in.
|
|
37
|
+
*
|
|
38
|
+
* A bundler moves the pool into a chunk of its own and leaves the worker
|
|
39
|
+
* entry out of the graph, so the default resolves to a file the server does
|
|
40
|
+
* not hold. Pass the URL the bundler emits for `@oasys/oecs/worker`. */
|
|
41
|
+
readonly workerUrl?: string | URL;
|
|
42
|
+
/** Milliseconds the host waits at the join before it gives up on the pass.
|
|
43
|
+
* A positive integer. Defaults to `DEFAULT_JOIN_TIMEOUT_MS`.
|
|
44
|
+
*
|
|
45
|
+
* A kernel that throws is caught in the worker and reported. A worker that
|
|
46
|
+
* dies outright reports nothing, so without this the host parks for the life
|
|
47
|
+
* of the process. */
|
|
48
|
+
readonly joinTimeoutMs?: number;
|
|
49
|
+
/**
|
|
50
|
+
* Bytes of shadow stack one instance of a `wasm` kernel module gets. An
|
|
51
|
+
* integer, a multiple of `KERNEL_STACK_ALIGN`, at least
|
|
52
|
+
* `KERNEL_STACK_MIN_BYTES`.
|
|
53
|
+
*
|
|
54
|
+
* The regions are carved downward from the store base, so with this given
|
|
55
|
+
* everything below the lowest region stays the module's heap. Without it the
|
|
56
|
+
* pool divides the whole span between the module's `__heap_base` and the
|
|
57
|
+
* store base, and the module then has no heap.
|
|
58
|
+
*
|
|
59
|
+
* A wasm stack has no guard page. A kernel that runs deeper than its region
|
|
60
|
+
* writes into the region below it and nothing reports the overrun, so this is
|
|
61
|
+
* a number only the caller can pick.
|
|
62
|
+
*/
|
|
63
|
+
readonly stackBytes?: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The pool a world attaches. One per world, started once, and the only thing
|
|
67
|
+
* that speaks to a worker.
|
|
68
|
+
*/
|
|
69
|
+
export declare class WorkerPool {
|
|
70
|
+
private readonly _world;
|
|
71
|
+
private readonly _workers;
|
|
72
|
+
private readonly _ctl;
|
|
73
|
+
private readonly _ctlF64;
|
|
74
|
+
private readonly _joinTimeoutMs;
|
|
75
|
+
private _state;
|
|
76
|
+
private _epoch;
|
|
77
|
+
private _nextSlot;
|
|
78
|
+
private _pending;
|
|
79
|
+
private _syncing;
|
|
80
|
+
private constructor();
|
|
81
|
+
/** How many workers the pool runs. */
|
|
82
|
+
get count(): number;
|
|
83
|
+
/**
|
|
84
|
+
* Start the workers, hand each the store and the control buffer, and load
|
|
85
|
+
* every kernel the world has declared. Resolves when each worker is parked on
|
|
86
|
+
* the barrier with its kernels in hand. Cold path, and a caller runs it once.
|
|
87
|
+
*
|
|
88
|
+
* Throws `WORKERS_ENTRY_UNREACHABLE` when a worker's script does not load,
|
|
89
|
+
* which is what a wrong `workerUrl` looks like from here.
|
|
90
|
+
*/
|
|
91
|
+
static attach(world: PoolWorld, options?: AttachWorkersOptions): Promise<WorkerPool>;
|
|
92
|
+
/** Take one kernel. The system runs `fn` until every worker holds it. */
|
|
93
|
+
register(plan: ParallelPlan): void;
|
|
94
|
+
private _kick;
|
|
95
|
+
/** Resolves when every kernel registered so far is loaded on every worker.
|
|
96
|
+
* Rejects with `PARALLEL_KERNEL_FAILED` when one would not load. */
|
|
97
|
+
settled(): Promise<void>;
|
|
98
|
+
private _sync;
|
|
99
|
+
/** Release every worker out of the barrier loop, so each can take a message
|
|
100
|
+
* again. A parked worker runs no message callback. */
|
|
101
|
+
private _park;
|
|
102
|
+
private _resume;
|
|
103
|
+
/**
|
|
104
|
+
* Run one parallel system across the pool, or say no.
|
|
105
|
+
*
|
|
106
|
+
* Returns `false` when the kernel is not loaded yet, when the pool is not on
|
|
107
|
+
* the barrier, when an earlier pass timed out, or when the matched row count
|
|
108
|
+
* is below the system's threshold. The caller then runs the sequential body,
|
|
109
|
+
* which is the same answer.
|
|
110
|
+
*
|
|
111
|
+
* Throws `PARALLEL_KERNEL_FAILED` when a kernel throws, and when a worker
|
|
112
|
+
* misses the join inside `joinTimeoutMs`. The second case is a dead or hung
|
|
113
|
+
* worker, which reports nothing, so the pool fails the pass itself.
|
|
114
|
+
*
|
|
115
|
+
* Hot path. The host parks for the length of the pass, so no structural
|
|
116
|
+
* change can overlap it.
|
|
117
|
+
*/
|
|
118
|
+
run(plan: ParallelPlan, ctx: SystemContext, deltaTime: number, runTick: number): boolean;
|
|
119
|
+
/**
|
|
120
|
+
* Stamp what the pass changed.
|
|
121
|
+
*
|
|
122
|
+
* The row tick plane and the dirty lists are main-thread JS, so the join does
|
|
123
|
+
* this and not the workers. `columnGroupMut` makes the same archetype stamp a
|
|
124
|
+
* system body makes, which is why that logic is not written twice here.
|
|
125
|
+
*
|
|
126
|
+
* The row ticks follow the same shape a chunk loop takes when it reads
|
|
127
|
+
* `cols.ticks`: fill the plane, then tell the store to scan it. Without the
|
|
128
|
+
* fill an entity-level `onSet` observer would see nothing, because the
|
|
129
|
+
* archetype stamp alone carries no row.
|
|
130
|
+
*
|
|
131
|
+
* Coarse on purpose: a parallel system reports every row of every matched
|
|
132
|
+
* archetype as changed. A finer stamp is open.
|
|
133
|
+
*/
|
|
134
|
+
private _stamp;
|
|
135
|
+
/**
|
|
136
|
+
* Stop every worker and release the pool. Idempotent.
|
|
137
|
+
*
|
|
138
|
+
* `terminate` ends a worker that is spinning inside a kernel, so this is the
|
|
139
|
+
* way out of a pool a join timeout failed. A failed pool is never released
|
|
140
|
+
* back into the barrier, so no stop job is written for it.
|
|
141
|
+
*/
|
|
142
|
+
detach(): Promise<void>;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=pool.d.ts.map
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { SystemContext } from '../../core/ecs/system_context.js';
|
|
2
|
+
import { ParallelPlan } from './plan.js';
|
|
3
|
+
/** What the pool needs from the world, and nothing more. */
|
|
4
|
+
export interface PoolWorld {
|
|
5
|
+
/** The `WebAssembly.Memory` on the wasm backing, the `SharedArrayBuffer` on
|
|
6
|
+
* the shared backing. The two grow differently and the worker survives both,
|
|
7
|
+
* which is why the memory itself travels and not its current buffer. */
|
|
8
|
+
readonly store: SharedArrayBuffer | WebAssembly.Memory;
|
|
9
|
+
readonly storeBase: number;
|
|
10
|
+
/** Tell the store that a component's row ticks changed outside the dirty
|
|
11
|
+
* list, so the next entity-level drain scans the plane. */
|
|
12
|
+
noteScan(componentId: number): void;
|
|
13
|
+
/** Every parallel plan the world has registered so far. */
|
|
14
|
+
plans(): readonly ParallelPlan[];
|
|
15
|
+
/** The pool has stopped, so the world drops it and the schedule goes back to
|
|
16
|
+
* the sequential path. */
|
|
17
|
+
released(): void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* How long the host waits at the join before it gives up on a worker.
|
|
21
|
+
*
|
|
22
|
+
* A safety net, and not a budget. A pass that takes this long has already
|
|
23
|
+
* missed every frame the host meant to draw, so the value only has to sit above
|
|
24
|
+
* any pass a working kernel runs, on slow hardware and under load. It is far
|
|
25
|
+
* above that, and still short enough that a person watching a hung process gets
|
|
26
|
+
* an error instead of a dead prompt. Tune it down only to make a hang surface
|
|
27
|
+
* sooner, never to bound a frame.
|
|
28
|
+
*/
|
|
29
|
+
export declare const DEFAULT_JOIN_TIMEOUT_MS = 30000;
|
|
30
|
+
export interface AttachWorkersOptions {
|
|
31
|
+
/** Workers to start. Defaults to one below the reported parallelism, floor
|
|
32
|
+
* one. One worker is always a loss against the sequential body, so a caller
|
|
33
|
+
* that wants a split gives more than one. */
|
|
34
|
+
readonly count?: number;
|
|
35
|
+
/** Where the engine's worker entry lives. Defaults to `@oasys/oecs/worker`,
|
|
36
|
+
* which the package ships one directory above the module this pool lands in.
|
|
37
|
+
*
|
|
38
|
+
* A bundler moves the pool into a chunk of its own and leaves the worker
|
|
39
|
+
* entry out of the graph, so the default resolves to a file the server does
|
|
40
|
+
* not hold. Pass the URL the bundler emits for `@oasys/oecs/worker`. */
|
|
41
|
+
readonly workerUrl?: string | URL;
|
|
42
|
+
/** Milliseconds the host waits at the join before it gives up on the pass.
|
|
43
|
+
* A positive integer. Defaults to `DEFAULT_JOIN_TIMEOUT_MS`.
|
|
44
|
+
*
|
|
45
|
+
* A kernel that throws is caught in the worker and reported. A worker that
|
|
46
|
+
* dies outright reports nothing, so without this the host parks for the life
|
|
47
|
+
* of the process. */
|
|
48
|
+
readonly joinTimeoutMs?: number;
|
|
49
|
+
/**
|
|
50
|
+
* Bytes of shadow stack one instance of a `wasm` kernel module gets. An
|
|
51
|
+
* integer, a multiple of `KERNEL_STACK_ALIGN`, at least
|
|
52
|
+
* `KERNEL_STACK_MIN_BYTES`.
|
|
53
|
+
*
|
|
54
|
+
* The regions are carved downward from the store base, so with this given
|
|
55
|
+
* everything below the lowest region stays the module's heap. Without it the
|
|
56
|
+
* pool divides the whole span between the module's `__heap_base` and the
|
|
57
|
+
* store base, and the module then has no heap.
|
|
58
|
+
*
|
|
59
|
+
* A wasm stack has no guard page. A kernel that runs deeper than its region
|
|
60
|
+
* writes into the region below it and nothing reports the overrun, so this is
|
|
61
|
+
* a number only the caller can pick.
|
|
62
|
+
*/
|
|
63
|
+
readonly stackBytes?: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The pool a world attaches. One per world, started once, and the only thing
|
|
67
|
+
* that speaks to a worker.
|
|
68
|
+
*/
|
|
69
|
+
export declare class WorkerPool {
|
|
70
|
+
private readonly _world;
|
|
71
|
+
private readonly _workers;
|
|
72
|
+
private readonly _ctl;
|
|
73
|
+
private readonly _ctlF64;
|
|
74
|
+
private readonly _joinTimeoutMs;
|
|
75
|
+
private _state;
|
|
76
|
+
private _epoch;
|
|
77
|
+
private _nextSlot;
|
|
78
|
+
private _pending;
|
|
79
|
+
private _syncing;
|
|
80
|
+
private constructor();
|
|
81
|
+
/** How many workers the pool runs. */
|
|
82
|
+
get count(): number;
|
|
83
|
+
/**
|
|
84
|
+
* Start the workers, hand each the store and the control buffer, and load
|
|
85
|
+
* every kernel the world has declared. Resolves when each worker is parked on
|
|
86
|
+
* the barrier with its kernels in hand. Cold path, and a caller runs it once.
|
|
87
|
+
*
|
|
88
|
+
* Throws `WORKERS_ENTRY_UNREACHABLE` when a worker's script does not load,
|
|
89
|
+
* which is what a wrong `workerUrl` looks like from here.
|
|
90
|
+
*/
|
|
91
|
+
static attach(world: PoolWorld, options?: AttachWorkersOptions): Promise<WorkerPool>;
|
|
92
|
+
/** Take one kernel. The system runs `fn` until every worker holds it. */
|
|
93
|
+
register(plan: ParallelPlan): void;
|
|
94
|
+
private _kick;
|
|
95
|
+
/** Resolves when every kernel registered so far is loaded on every worker.
|
|
96
|
+
* Rejects with `PARALLEL_KERNEL_FAILED` when one would not load. */
|
|
97
|
+
settled(): Promise<void>;
|
|
98
|
+
private _sync;
|
|
99
|
+
/** Release every worker out of the barrier loop, so each can take a message
|
|
100
|
+
* again. A parked worker runs no message callback. */
|
|
101
|
+
private _park;
|
|
102
|
+
private _resume;
|
|
103
|
+
/**
|
|
104
|
+
* Run one parallel system across the pool, or say no.
|
|
105
|
+
*
|
|
106
|
+
* Returns `false` when the kernel is not loaded yet, when the pool is not on
|
|
107
|
+
* the barrier, when an earlier pass timed out, or when the matched row count
|
|
108
|
+
* is below the system's threshold. The caller then runs the sequential body,
|
|
109
|
+
* which is the same answer.
|
|
110
|
+
*
|
|
111
|
+
* Throws `PARALLEL_KERNEL_FAILED` when a kernel throws, and when a worker
|
|
112
|
+
* misses the join inside `joinTimeoutMs`. The second case is a dead or hung
|
|
113
|
+
* worker, which reports nothing, so the pool fails the pass itself.
|
|
114
|
+
*
|
|
115
|
+
* Hot path. The host parks for the length of the pass, so no structural
|
|
116
|
+
* change can overlap it.
|
|
117
|
+
*/
|
|
118
|
+
run(plan: ParallelPlan, ctx: SystemContext, deltaTime: number, runTick: number): boolean;
|
|
119
|
+
/**
|
|
120
|
+
* Stamp what the pass changed.
|
|
121
|
+
*
|
|
122
|
+
* The row tick plane and the dirty lists are main-thread JS, so the join does
|
|
123
|
+
* this and not the workers. `columnGroupMut` makes the same archetype stamp a
|
|
124
|
+
* system body makes, which is why that logic is not written twice here.
|
|
125
|
+
*
|
|
126
|
+
* The row ticks follow the same shape a chunk loop takes when it reads
|
|
127
|
+
* `cols.ticks`: fill the plane, then tell the store to scan it. Without the
|
|
128
|
+
* fill an entity-level `onSet` observer would see nothing, because the
|
|
129
|
+
* archetype stamp alone carries no row.
|
|
130
|
+
*
|
|
131
|
+
* Coarse on purpose: a parallel system reports every row of every matched
|
|
132
|
+
* archetype as changed. A finer stamp is open.
|
|
133
|
+
*/
|
|
134
|
+
private _stamp;
|
|
135
|
+
/**
|
|
136
|
+
* Stop every worker and release the pool. Idempotent.
|
|
137
|
+
*
|
|
138
|
+
* `terminate` ends a worker that is spinning inside a kernel, so this is the
|
|
139
|
+
* way out of a pool a join timeout failed. A failed pool is never released
|
|
140
|
+
* back into the barrier, so no stop job is written for it.
|
|
141
|
+
*/
|
|
142
|
+
detach(): Promise<void>;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../src/plugins/workers/pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA8BK;AAIL,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAoB3C,4DAA4D;AAC5D,MAAM,WAAW,SAAS;IACzB;;4EAEwE;IACxE,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC;IACvD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;+DAC2D;IAC3D,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,2DAA2D;IAC3D,KAAK,IAAI,SAAS,YAAY,EAAE,CAAC;IACjC;8BAC0B;IAC1B,QAAQ,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C,MAAM,WAAW,oBAAoB;IACpC;;iDAE6C;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;4EAKwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAClC;;;;;yBAKqB;IACrB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC7B;AAqMD;;;GAGG;AACH,qBAAa,UAAU;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,QAAQ,CAAoC;IAEpD,OAAO;IAaP,sCAAsC;IACtC,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED;;;;;;;OAOG;WACiB,MAAM,CACzB,KAAK,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,UAAU,CAAC;IAoEtB,yEAAyE;IAClE,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAMzC,OAAO,CAAC,KAAK;IAIb;wEACoE;IAC7D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAIjB,KAAK;IAqCnB;0DACsD;YACxC,KAAK;IASnB,OAAO,CAAC,OAAO;IAMf;;;;;;;;;;;;;;OAcG;IACI,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IA+D/F;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,MAAM;IAgBd;;;;;;OAMG;IACU,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAuBpC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/***
|
|
2
|
+
* The words a host and a worker share, and the messages that cross once.
|
|
3
|
+
*
|
|
4
|
+
* The control buffer is one small `SharedArrayBuffer` beside the store. The
|
|
5
|
+
* host writes the job, bumps the epoch and wakes every worker. Each worker adds
|
|
6
|
+
* one to the done word when it finishes, and the worker that completes the
|
|
7
|
+
* count notifies it. Nothing else crosses during a frame, because `postMessage`
|
|
8
|
+
* is far slower than an `Atomics` release and a parked worker never runs a
|
|
9
|
+
* message callback anyway.
|
|
10
|
+
*
|
|
11
|
+
* The store buffer never travels here. A worker holds it from its start
|
|
12
|
+
* message and reads it directly.
|
|
13
|
+
*
|
|
14
|
+
* This module imports the ABI constants and nothing else. The worker entry runs
|
|
15
|
+
* outside the bundler, so every import in its chain names the file with its
|
|
16
|
+
* extension.
|
|
17
|
+
***/
|
|
18
|
+
/** The frame number, and the word every worker sleeps on. */
|
|
19
|
+
export declare const CTL_EPOCH = 0;
|
|
20
|
+
/**
|
|
21
|
+
* How many workers finished this epoch. The host clears it before it bumps the
|
|
22
|
+
* epoch, and every worker adds one when its pass ends, whether the kernel ran
|
|
23
|
+
* or threw.
|
|
24
|
+
*
|
|
25
|
+
* One worker notifies this word, and it is the one whose add carried the count
|
|
26
|
+
* to the worker count. An earlier notify only wakes a host that reads a short
|
|
27
|
+
* count and parks again. So the host wakes once for each pass and not once for
|
|
28
|
+
* each worker.
|
|
29
|
+
*/
|
|
30
|
+
export declare const CTL_DONE = 1;
|
|
31
|
+
/** Which kernel slot to run, or one of the control jobs below. */
|
|
32
|
+
export declare const CTL_KERNEL = 2;
|
|
33
|
+
/** The first failing worker's index plus one. Zero means every worker ran. */
|
|
34
|
+
export declare const CTL_FAILED = 3;
|
|
35
|
+
/** The query's include mask, `COMPONENT_MASK_WORDS` little-endian words. */
|
|
36
|
+
export declare const CTL_INCLUDE = 4;
|
|
37
|
+
/** The query's exclude mask, read only when `CTL_HAS_EXCLUDE` is one. */
|
|
38
|
+
export declare const CTL_EXCLUDE: number;
|
|
39
|
+
export declare const CTL_HAS_EXCLUDE: number;
|
|
40
|
+
/** `dt`, as an index into a `Float64Array` over the same bytes. It sits above
|
|
41
|
+
* every word above, on the next 8-byte boundary. */
|
|
42
|
+
export declare const CTL_DT: number;
|
|
43
|
+
export declare const CONTROL_BYTES: number;
|
|
44
|
+
/** Leave the barrier loop and return to the event loop, so the worker can take
|
|
45
|
+
* a kernel registration. A parked worker runs no message callback, so the host
|
|
46
|
+
* has to release it first. */
|
|
47
|
+
export declare const JOB_YIELD = -1;
|
|
48
|
+
/** Leave the barrier loop and stop. */
|
|
49
|
+
export declare const JOB_STOP = -2;
|
|
50
|
+
/**
|
|
51
|
+
* The frame alignment an LLVM wasm target keeps for its shadow stack. A region
|
|
52
|
+
* that is a multiple of this needs no rounding at its top.
|
|
53
|
+
*
|
|
54
|
+
* The host validates `stackBytes` against it and the worker carves against it,
|
|
55
|
+
* so both live here rather than in either half.
|
|
56
|
+
*/
|
|
57
|
+
export declare const KERNEL_STACK_ALIGN = 16;
|
|
58
|
+
/**
|
|
59
|
+
* The smallest stack region a worker accepts, one WASM page.
|
|
60
|
+
*
|
|
61
|
+
* A wasm stack has no guard page, so a kernel that runs past the bottom of its
|
|
62
|
+
* region writes into the region below it and nothing reports the overrun. The
|
|
63
|
+
* floor catches a caller who reserved nothing. It does not size the stack of a
|
|
64
|
+
* deep kernel, and no engine can. The caller reserves the span and says how
|
|
65
|
+
* much of it one worker gets.
|
|
66
|
+
*/
|
|
67
|
+
export declare const KERNEL_STACK_MIN_BYTES = 65536;
|
|
68
|
+
/** What a worker receives before it does anything. `store` is the
|
|
69
|
+
* `WebAssembly.Memory` on the wasm backing and the `SharedArrayBuffer` on the
|
|
70
|
+
* shared backing, because the two grow differently: the memory hands back a new
|
|
71
|
+
* buffer object and freezes the old one at its pre-grow length, while the
|
|
72
|
+
* shared buffer grows in place. */
|
|
73
|
+
export interface WorkerStart {
|
|
74
|
+
readonly store: SharedArrayBuffer | WebAssembly.Memory;
|
|
75
|
+
readonly storeBase: number;
|
|
76
|
+
readonly control: SharedArrayBuffer;
|
|
77
|
+
readonly index: number;
|
|
78
|
+
readonly count: number;
|
|
79
|
+
/** Bytes of shadow stack one instance of a `wasm` kernel module gets, or 0
|
|
80
|
+
* when the caller named none. At 0 the worker divides the whole span between
|
|
81
|
+
* the module's `__heap_base` and the store base, which leaves the module no
|
|
82
|
+
* heap. */
|
|
83
|
+
readonly stackBytes: number;
|
|
84
|
+
}
|
|
85
|
+
/** One kernel a worker loads, addressed by its slot for the rest of the run.
|
|
86
|
+
* A worker cannot receive a closure, which is why a kernel is a module and an
|
|
87
|
+
* export name. */
|
|
88
|
+
export interface KernelMessage {
|
|
89
|
+
readonly type: "kernel";
|
|
90
|
+
readonly slot: number;
|
|
91
|
+
/** A compiled module, structured-clone safe, shared with every worker. */
|
|
92
|
+
readonly wasm?: WebAssembly.Module;
|
|
93
|
+
/** An absolute module URL the worker imports. */
|
|
94
|
+
readonly js?: string;
|
|
95
|
+
readonly exportName: string;
|
|
96
|
+
/** `(component_id, field_id)` pairs, flat, in the kernel's argument order. */
|
|
97
|
+
readonly specs: Int32Array;
|
|
98
|
+
}
|
|
99
|
+
/** Re-enter the barrier loop. */
|
|
100
|
+
export interface RunMessage {
|
|
101
|
+
readonly type: "run";
|
|
102
|
+
}
|
|
103
|
+
export type HostMessage = KernelMessage | RunMessage;
|
|
104
|
+
export interface WorkerReply {
|
|
105
|
+
/** `ready` once at start, `kernel` for one registration, `yielded` when the
|
|
106
|
+
* worker leaves the barrier loop. */
|
|
107
|
+
readonly type: "ready" | "kernel" | "yielded";
|
|
108
|
+
readonly slot?: number;
|
|
109
|
+
/** The failure text, when a kernel would not load. */
|
|
110
|
+
readonly error?: string;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/***
|
|
2
|
+
* The words a host and a worker share, and the messages that cross once.
|
|
3
|
+
*
|
|
4
|
+
* The control buffer is one small `SharedArrayBuffer` beside the store. The
|
|
5
|
+
* host writes the job, bumps the epoch and wakes every worker. Each worker adds
|
|
6
|
+
* one to the done word when it finishes, and the worker that completes the
|
|
7
|
+
* count notifies it. Nothing else crosses during a frame, because `postMessage`
|
|
8
|
+
* is far slower than an `Atomics` release and a parked worker never runs a
|
|
9
|
+
* message callback anyway.
|
|
10
|
+
*
|
|
11
|
+
* The store buffer never travels here. A worker holds it from its start
|
|
12
|
+
* message and reads it directly.
|
|
13
|
+
*
|
|
14
|
+
* This module imports the ABI constants and nothing else. The worker entry runs
|
|
15
|
+
* outside the bundler, so every import in its chain names the file with its
|
|
16
|
+
* extension.
|
|
17
|
+
***/
|
|
18
|
+
/** The frame number, and the word every worker sleeps on. */
|
|
19
|
+
export declare const CTL_EPOCH = 0;
|
|
20
|
+
/**
|
|
21
|
+
* How many workers finished this epoch. The host clears it before it bumps the
|
|
22
|
+
* epoch, and every worker adds one when its pass ends, whether the kernel ran
|
|
23
|
+
* or threw.
|
|
24
|
+
*
|
|
25
|
+
* One worker notifies this word, and it is the one whose add carried the count
|
|
26
|
+
* to the worker count. An earlier notify only wakes a host that reads a short
|
|
27
|
+
* count and parks again. So the host wakes once for each pass and not once for
|
|
28
|
+
* each worker.
|
|
29
|
+
*/
|
|
30
|
+
export declare const CTL_DONE = 1;
|
|
31
|
+
/** Which kernel slot to run, or one of the control jobs below. */
|
|
32
|
+
export declare const CTL_KERNEL = 2;
|
|
33
|
+
/** The first failing worker's index plus one. Zero means every worker ran. */
|
|
34
|
+
export declare const CTL_FAILED = 3;
|
|
35
|
+
/** The query's include mask, `COMPONENT_MASK_WORDS` little-endian words. */
|
|
36
|
+
export declare const CTL_INCLUDE = 4;
|
|
37
|
+
/** The query's exclude mask, read only when `CTL_HAS_EXCLUDE` is one. */
|
|
38
|
+
export declare const CTL_EXCLUDE: number;
|
|
39
|
+
export declare const CTL_HAS_EXCLUDE: number;
|
|
40
|
+
/** `dt`, as an index into a `Float64Array` over the same bytes. It sits above
|
|
41
|
+
* every word above, on the next 8-byte boundary. */
|
|
42
|
+
export declare const CTL_DT: number;
|
|
43
|
+
export declare const CONTROL_BYTES: number;
|
|
44
|
+
/** Leave the barrier loop and return to the event loop, so the worker can take
|
|
45
|
+
* a kernel registration. A parked worker runs no message callback, so the host
|
|
46
|
+
* has to release it first. */
|
|
47
|
+
export declare const JOB_YIELD = -1;
|
|
48
|
+
/** Leave the barrier loop and stop. */
|
|
49
|
+
export declare const JOB_STOP = -2;
|
|
50
|
+
/**
|
|
51
|
+
* The frame alignment an LLVM wasm target keeps for its shadow stack. A region
|
|
52
|
+
* that is a multiple of this needs no rounding at its top.
|
|
53
|
+
*
|
|
54
|
+
* The host validates `stackBytes` against it and the worker carves against it,
|
|
55
|
+
* so both live here rather than in either half.
|
|
56
|
+
*/
|
|
57
|
+
export declare const KERNEL_STACK_ALIGN = 16;
|
|
58
|
+
/**
|
|
59
|
+
* The smallest stack region a worker accepts, one WASM page.
|
|
60
|
+
*
|
|
61
|
+
* A wasm stack has no guard page, so a kernel that runs past the bottom of its
|
|
62
|
+
* region writes into the region below it and nothing reports the overrun. The
|
|
63
|
+
* floor catches a caller who reserved nothing. It does not size the stack of a
|
|
64
|
+
* deep kernel, and no engine can. The caller reserves the span and says how
|
|
65
|
+
* much of it one worker gets.
|
|
66
|
+
*/
|
|
67
|
+
export declare const KERNEL_STACK_MIN_BYTES = 65536;
|
|
68
|
+
/** What a worker receives before it does anything. `store` is the
|
|
69
|
+
* `WebAssembly.Memory` on the wasm backing and the `SharedArrayBuffer` on the
|
|
70
|
+
* shared backing, because the two grow differently: the memory hands back a new
|
|
71
|
+
* buffer object and freezes the old one at its pre-grow length, while the
|
|
72
|
+
* shared buffer grows in place. */
|
|
73
|
+
export interface WorkerStart {
|
|
74
|
+
readonly store: SharedArrayBuffer | WebAssembly.Memory;
|
|
75
|
+
readonly storeBase: number;
|
|
76
|
+
readonly control: SharedArrayBuffer;
|
|
77
|
+
readonly index: number;
|
|
78
|
+
readonly count: number;
|
|
79
|
+
/** Bytes of shadow stack one instance of a `wasm` kernel module gets, or 0
|
|
80
|
+
* when the caller named none. At 0 the worker divides the whole span between
|
|
81
|
+
* the module's `__heap_base` and the store base, which leaves the module no
|
|
82
|
+
* heap. */
|
|
83
|
+
readonly stackBytes: number;
|
|
84
|
+
}
|
|
85
|
+
/** One kernel a worker loads, addressed by its slot for the rest of the run.
|
|
86
|
+
* A worker cannot receive a closure, which is why a kernel is a module and an
|
|
87
|
+
* export name. */
|
|
88
|
+
export interface KernelMessage {
|
|
89
|
+
readonly type: "kernel";
|
|
90
|
+
readonly slot: number;
|
|
91
|
+
/** A compiled module, structured-clone safe, shared with every worker. */
|
|
92
|
+
readonly wasm?: WebAssembly.Module;
|
|
93
|
+
/** An absolute module URL the worker imports. */
|
|
94
|
+
readonly js?: string;
|
|
95
|
+
readonly exportName: string;
|
|
96
|
+
/** `(component_id, field_id)` pairs, flat, in the kernel's argument order. */
|
|
97
|
+
readonly specs: Int32Array;
|
|
98
|
+
}
|
|
99
|
+
/** Re-enter the barrier loop. */
|
|
100
|
+
export interface RunMessage {
|
|
101
|
+
readonly type: "run";
|
|
102
|
+
}
|
|
103
|
+
export type HostMessage = KernelMessage | RunMessage;
|
|
104
|
+
export interface WorkerReply {
|
|
105
|
+
/** `ready` once at start, `kernel` for one registration, `yielded` when the
|
|
106
|
+
* worker leaves the barrier loop. */
|
|
107
|
+
readonly type: "ready" | "kernel" | "yielded";
|
|
108
|
+
readonly slot?: number;
|
|
109
|
+
/** The failure text, when a kernel would not load. */
|
|
110
|
+
readonly error?: string;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/plugins/workers/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;KAgBK;AAIL,6DAA6D;AAC7D,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,IAAI,CAAC;AAC1B,kEAAkE;AAClE,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,8EAA8E;AAC9E,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,4EAA4E;AAC5E,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,yEAAyE;AACzE,eAAO,MAAM,WAAW,QAAqC,CAAC;AAC9D,eAAO,MAAM,eAAe,QAAqC,CAAC;AAIlE;oDACoD;AACpD,eAAO,MAAM,MAAM,QAAuB,CAAC;AAE3C,eAAO,MAAM,aAAa,QAAmB,CAAC;AAE9C;;8BAE8B;AAC9B,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,uCAAuC;AACvC,eAAO,MAAM,QAAQ,KAAK,CAAC;AAI3B;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C;;;;mCAImC;AACnC,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC;IACvD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;eAGW;IACX,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B;AAED;;kBAEkB;AAClB,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC;IACnC,iDAAiD;IACjD,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC3B;AAED,iCAAiC;AACjC,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;CACrB;AAED,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,UAAU,CAAC;AAErD,MAAM,WAAW,WAAW;IAC3B;yCACqC;IACrC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/***
|
|
2
|
+
* The worker's whole view of the world: a walk of the store bytes.
|
|
3
|
+
*
|
|
4
|
+
* A worker holds the store buffer and the store base, and nothing else. The
|
|
5
|
+
* archetype graph, the component registry and the query cache are main-thread
|
|
6
|
+
* objects. The header, the layout descriptor and the columns are bytes, so a
|
|
7
|
+
* worker resolves a dense query and finds a column from `(component_id,
|
|
8
|
+
* field_id)` alone. This file is that walk.
|
|
9
|
+
*
|
|
10
|
+
* Every offset the store writes is measured from the store base, so each read
|
|
11
|
+
* here adds the base.
|
|
12
|
+
*
|
|
13
|
+
* The walk is linear in the total column count and is not free. Run it when
|
|
14
|
+
* `view_stamp` moves, and cache what it gives back.
|
|
15
|
+
*
|
|
16
|
+
* This module imports the ABI constants and nothing else. The worker entry runs
|
|
17
|
+
* outside the bundler, so every import in its chain names the file with its
|
|
18
|
+
* extension.
|
|
19
|
+
***/
|
|
20
|
+
type ColumnView = Uint8Array | Int8Array | Uint16Array | Int16Array | Uint32Array | Int32Array | Float32Array | Float64Array;
|
|
21
|
+
/** One matched archetype, bound for one kernel. */
|
|
22
|
+
export interface BoundArchetype {
|
|
23
|
+
/** Where this archetype's descriptor starts, so the enabled row count can be
|
|
24
|
+
* re-read each frame without another walk. */
|
|
25
|
+
readonly descriptorOff: number;
|
|
26
|
+
/** A typed array over each declared column, spanning the whole archetype.
|
|
27
|
+
* Empty for a wasm kernel, which addresses bytes instead. */
|
|
28
|
+
readonly views: ColumnView[];
|
|
29
|
+
/** The absolute byte offset of each declared column's first row. Empty for a
|
|
30
|
+
* js kernel, which indexes a view instead. */
|
|
31
|
+
readonly offsets: number[];
|
|
32
|
+
}
|
|
33
|
+
export declare function readViewStamp(buffer: ArrayBufferLike, storeBase: number): number;
|
|
34
|
+
/** The enabled row count of one bound archetype, without another walk. The host
|
|
35
|
+
* republishes it before every dispatch, so a worker that caches its bind still
|
|
36
|
+
* reads a fresh count each frame. */
|
|
37
|
+
export declare function readEnabledCount(buffer: ArrayBufferLike, descriptorOff: number): number;
|
|
38
|
+
/**
|
|
39
|
+
* Walk the descriptor region once and bind every archetype the masks match.
|
|
40
|
+
*
|
|
41
|
+
* `specs` is a flat list of `(component_id, field_id)` pairs in the kernel's
|
|
42
|
+
* argument order, so a kernel indexes and never searches. An archetype that
|
|
43
|
+
* matches the masks but lacks one named column is skipped, which is what keeps
|
|
44
|
+
* a tag-only archetype out of the list.
|
|
45
|
+
*
|
|
46
|
+
* `wantViews` picks the bind form. A js kernel takes typed arrays, a wasm
|
|
47
|
+
* kernel takes byte offsets. Building both would cost one allocation per column
|
|
48
|
+
* that no kernel reads.
|
|
49
|
+
*
|
|
50
|
+
* Cold path. Call it on a `view_stamp` change.
|
|
51
|
+
*/
|
|
52
|
+
export declare function bindArchetypes(buffer: ArrayBufferLike, storeBase: number, specs: Int32Array, include: Uint32Array, exclude: Uint32Array | null, wantViews: boolean): BoundArchetype[];
|
|
53
|
+
/**
|
|
54
|
+
* The half-open row range worker `index` owns of an archetype with `rows`
|
|
55
|
+
* enabled rows.
|
|
56
|
+
*
|
|
57
|
+
* Every worker computes this from the same inputs with the same integer
|
|
58
|
+
* arithmetic, so no plan crosses the wire and no two workers can disagree about
|
|
59
|
+
* who owns a row. The main thread never computes it, which is what makes the
|
|
60
|
+
* split deterministic.
|
|
61
|
+
*/
|
|
62
|
+
export declare function rangeBegin(rows: number, index: number, count: number): number;
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=worker_bind.d.ts.map
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/***
|
|
2
|
+
* The worker's whole view of the world: a walk of the store bytes.
|
|
3
|
+
*
|
|
4
|
+
* A worker holds the store buffer and the store base, and nothing else. The
|
|
5
|
+
* archetype graph, the component registry and the query cache are main-thread
|
|
6
|
+
* objects. The header, the layout descriptor and the columns are bytes, so a
|
|
7
|
+
* worker resolves a dense query and finds a column from `(component_id,
|
|
8
|
+
* field_id)` alone. This file is that walk.
|
|
9
|
+
*
|
|
10
|
+
* Every offset the store writes is measured from the store base, so each read
|
|
11
|
+
* here adds the base.
|
|
12
|
+
*
|
|
13
|
+
* The walk is linear in the total column count and is not free. Run it when
|
|
14
|
+
* `view_stamp` moves, and cache what it gives back.
|
|
15
|
+
*
|
|
16
|
+
* This module imports the ABI constants and nothing else. The worker entry runs
|
|
17
|
+
* outside the bundler, so every import in its chain names the file with its
|
|
18
|
+
* extension.
|
|
19
|
+
***/
|
|
20
|
+
type ColumnView = Uint8Array | Int8Array | Uint16Array | Int16Array | Uint32Array | Int32Array | Float32Array | Float64Array;
|
|
21
|
+
/** One matched archetype, bound for one kernel. */
|
|
22
|
+
export interface BoundArchetype {
|
|
23
|
+
/** Where this archetype's descriptor starts, so the enabled row count can be
|
|
24
|
+
* re-read each frame without another walk. */
|
|
25
|
+
readonly descriptorOff: number;
|
|
26
|
+
/** A typed array over each declared column, spanning the whole archetype.
|
|
27
|
+
* Empty for a wasm kernel, which addresses bytes instead. */
|
|
28
|
+
readonly views: ColumnView[];
|
|
29
|
+
/** The absolute byte offset of each declared column's first row. Empty for a
|
|
30
|
+
* js kernel, which indexes a view instead. */
|
|
31
|
+
readonly offsets: number[];
|
|
32
|
+
}
|
|
33
|
+
export declare function readViewStamp(buffer: ArrayBufferLike, storeBase: number): number;
|
|
34
|
+
/** The enabled row count of one bound archetype, without another walk. The host
|
|
35
|
+
* republishes it before every dispatch, so a worker that caches its bind still
|
|
36
|
+
* reads a fresh count each frame. */
|
|
37
|
+
export declare function readEnabledCount(buffer: ArrayBufferLike, descriptorOff: number): number;
|
|
38
|
+
/**
|
|
39
|
+
* Walk the descriptor region once and bind every archetype the masks match.
|
|
40
|
+
*
|
|
41
|
+
* `specs` is a flat list of `(component_id, field_id)` pairs in the kernel's
|
|
42
|
+
* argument order, so a kernel indexes and never searches. An archetype that
|
|
43
|
+
* matches the masks but lacks one named column is skipped, which is what keeps
|
|
44
|
+
* a tag-only archetype out of the list.
|
|
45
|
+
*
|
|
46
|
+
* `wantViews` picks the bind form. A js kernel takes typed arrays, a wasm
|
|
47
|
+
* kernel takes byte offsets. Building both would cost one allocation per column
|
|
48
|
+
* that no kernel reads.
|
|
49
|
+
*
|
|
50
|
+
* Cold path. Call it on a `view_stamp` change.
|
|
51
|
+
*/
|
|
52
|
+
export declare function bindArchetypes(buffer: ArrayBufferLike, storeBase: number, specs: Int32Array, include: Uint32Array, exclude: Uint32Array | null, wantViews: boolean): BoundArchetype[];
|
|
53
|
+
/**
|
|
54
|
+
* The half-open row range worker `index` owns of an archetype with `rows`
|
|
55
|
+
* enabled rows.
|
|
56
|
+
*
|
|
57
|
+
* Every worker computes this from the same inputs with the same integer
|
|
58
|
+
* arithmetic, so no plan crosses the wire and no two workers can disagree about
|
|
59
|
+
* who owns a row. The main thread never computes it, which is what makes the
|
|
60
|
+
* split deterministic.
|
|
61
|
+
*/
|
|
62
|
+
export declare function rangeBegin(rows: number, index: number, count: number): number;
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=worker_bind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker_bind.d.ts","sourceRoot":"","sources":["../../../src/plugins/workers/worker_bind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;KAkBK;AAWL,KAAK,UAAU,GACZ,UAAU,GACV,SAAS,GACT,WAAW,GACX,UAAU,GACV,WAAW,GACX,UAAU,GACV,YAAY,GACZ,YAAY,CAAC;AAehB,mDAAmD;AACnD,MAAM,WAAW,cAAc;IAC9B;kDAC8C;IAC9C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;iEAC6D;IAC7D,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC;IAC7B;kDAC8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED;;qCAEqC;AACrC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAKvF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC7B,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,WAAW,GAAG,IAAI,EAC3B,SAAS,EAAE,OAAO,GAChB,cAAc,EAAE,CA4DlB;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7E"}
|