@moku-labs/game 0.15.1 → 0.15.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/page.d.mts +1 -1
- package/dist/app/system.d.mts +3 -3
- package/dist/app.d.mts +3 -3
- package/dist/app.mjs +1 -1
- package/dist/assets.d.mts +1 -1
- package/dist/{commands-BynjWVVy.d.mts → commands-C_GccOFq.d.mts} +5 -5
- package/dist/control.d.mts +4 -4
- package/dist/{define-Ckj_TMWu.d.mts → define-DnO7ZLGl.d.mts} +2 -2
- package/dist/{headless-B0mH9qYg.d.mts → headless-D6BrEwCf.d.mts} +1 -1
- package/dist/{index-CCiTo1_3.d.mts → index-w2uyRKkj.d.mts} +3 -3
- package/dist/index.d.mts +5 -5
- package/dist/index.mjs +2 -2
- package/dist/inspect.d.mts +6 -6
- package/dist/jsx-dev-runtime.d.mts +1 -1
- package/dist/jsx-runtime.d.mts +1 -1
- package/dist/{runtime-BV3xv6gx.d.mts → runtime-kOH8InAs.d.mts} +1 -1
- package/dist/{src-CwVzErzN.mjs → src-Ca8W8Dvv.mjs} +3539 -1196
- package/dist/testing.d.mts +4 -4
- package/dist/testing.mjs +1 -1
- package/dist/{types-E2ykwIUO.d.mts → types-BHgJ1F6f.d.mts} +387 -47
- package/dist/{types-G3ZAAsbd.d.mts → types-Bm7DVtA_.d.mts} +17 -10
- package/dist/{types-CpdkyhaC.d.mts → types-DEYQF_tT.d.mts} +4 -4
- package/dist/{types-Bw-qLjFZ.d.mts → types-fpFKYm6E.d.mts} +142 -43
- package/dist/{types-D44EL4gT.d.mts → types-jiWJhLPE.d.mts} +2 -2
- package/dist/{visual-DoHwXeQi.d.mts → visual-BvkKJOSz.d.mts} +6 -6
- package/dist/visual.d.mts +1 -1
- package/package.json +4 -2
|
@@ -4275,7 +4275,8 @@ type Cause = "edge" | "rollback" | "restore" | "load" | "mount" | "rerun";
|
|
|
4275
4275
|
type View$1 = {
|
|
4276
4276
|
entity: Entity;
|
|
4277
4277
|
projection: string;
|
|
4278
|
-
key: string;
|
|
4278
|
+
key: string; /** `{ projection, key }`, made once with the view: what `keyOf` answers, every call the same object. */
|
|
4279
|
+
readonly address: ProjectionKey;
|
|
4279
4280
|
item: unknown; /** The last output of `view(item)`, by component name: what the picture equals at rest. */
|
|
4280
4281
|
rest: Map<string, AnyComponentValue>;
|
|
4281
4282
|
handles: MotionHandle[];
|
|
@@ -4363,6 +4364,13 @@ type Dirty = {
|
|
|
4363
4364
|
roots: Set<Root>;
|
|
4364
4365
|
force: boolean;
|
|
4365
4366
|
};
|
|
4367
|
+
/**
|
|
4368
|
+
* A mute's fields joined with a type's owned fields, and the owned set they were joined with.
|
|
4369
|
+
*/
|
|
4370
|
+
type JoinedFields = {
|
|
4371
|
+
readonly owned: ReadonlySet<string>;
|
|
4372
|
+
readonly joined: ReadonlySet<string>;
|
|
4373
|
+
};
|
|
4366
4374
|
/**
|
|
4367
4375
|
* projection module state.
|
|
4368
4376
|
*/
|
|
@@ -4386,10 +4394,28 @@ type ProjectionState = {
|
|
|
4386
4394
|
* entity that is gone is dropped with its rest pose, and its side of `keys` with it.
|
|
4387
4395
|
*/
|
|
4388
4396
|
keysByEntity: Map<Entity, ProjectionKey>; /** Entity to component name to the fields another writer owns. */
|
|
4389
|
-
mutes: Map<Entity, Map<string, Set<string>>>; /** The
|
|
4397
|
+
mutes: Map<Entity, Map<string, Set<string>>>; /** The owned fields of each component type as a set, by the type's frozen `owned` list: made once. */
|
|
4398
|
+
ownedSets: WeakMap<readonly string[], ReadonlySet<string>>; /** The muted and the owned fields joined, by the mute's field set: dropped when `mute()` or its release changes it. */
|
|
4399
|
+
joinedMutes: WeakMap<ReadonlySet<string>, JoinedFields>; /** The `onConverged` listeners: the owners of elements, told after a restore or a load. */
|
|
4390
4400
|
converged: Array<() => void>;
|
|
4391
4401
|
offHints: Array<() => void>; /** The cause of every view despawned since the last sweep, so a removal hook can still ask. */
|
|
4392
4402
|
leaving: Map<Entity, MotionCause>;
|
|
4403
|
+
/**
|
|
4404
|
+
* Moves on every time a view enters `live`, leaves it, or leaves `leaving`, and on a clear:
|
|
4405
|
+
* `ui` hosts the views of a projection again only when it moved (`projection.membershipVersion()`).
|
|
4406
|
+
*/
|
|
4407
|
+
membershipVersion: number;
|
|
4408
|
+
/**
|
|
4409
|
+
* A live view may hold a running handle: set by every view handle made, cleared by a sweep that
|
|
4410
|
+
* walked the live views and found none moving. While it is false the sweep walks no live view.
|
|
4411
|
+
*/
|
|
4412
|
+
moving: boolean; /** Views were marked as owing their loop since the last start of the owed loops. */
|
|
4413
|
+
owedLoops: number;
|
|
4414
|
+
/**
|
|
4415
|
+
* The despawn count of the ecs when the sweep last looked for dead elements; -1 after a new
|
|
4416
|
+
* key, so the next sweep looks.
|
|
4417
|
+
*/
|
|
4418
|
+
sweptDespawns: number;
|
|
4393
4419
|
};
|
|
4394
4420
|
/**
|
|
4395
4421
|
* projection module API, `app.world.projection`: the bridge from the model to entities.
|
|
@@ -4543,7 +4569,8 @@ type ProjectionApi = {
|
|
|
4543
4569
|
lift(entity: Entity, on: boolean): void;
|
|
4544
4570
|
/**
|
|
4545
4571
|
* The projection and key of an entity. Also answers for a view in the despawn queue and for an
|
|
4546
|
-
* element registered with `registerKey`.
|
|
4572
|
+
* element registered with `registerKey`. A view answers the address it keeps for its life, the
|
|
4573
|
+
* same frozen object every call, so asking every frame allocates nothing.
|
|
4547
4574
|
*
|
|
4548
4575
|
* @param entity - The entity to ask about.
|
|
4549
4576
|
* @returns The projection name and the key, or `undefined`.
|
|
@@ -4551,10 +4578,27 @@ type ProjectionApi = {
|
|
|
4551
4578
|
* ```ts
|
|
4552
4579
|
* // `renderer.sync` labels its display objects for the inspector.
|
|
4553
4580
|
* app.world.projection.keyOf(1_048_576); // { projection: "board.items", key: "i7" }
|
|
4581
|
+
* app.world.projection.keyOf(1_048_576) === app.world.projection.keyOf(1_048_576); // true
|
|
4554
4582
|
* app.world.projection.keyOf(42); // undefined: not a view
|
|
4555
4583
|
* ```
|
|
4556
4584
|
*/
|
|
4557
4585
|
keyOf(entity: Entity): ProjectionKey | undefined;
|
|
4586
|
+
/**
|
|
4587
|
+
* A number that moves every time a view enters the live views of a mounted projection, leaves
|
|
4588
|
+
* them (an exit or a despawn), or is forgotten after its despawn, and when the projections are
|
|
4589
|
+
* cleared. An equal number means the same views live as at the last read, so a plugin that
|
|
4590
|
+
* works on the live views (`ui` hosting them in an element) skips its step while it holds.
|
|
4591
|
+
* Reading it allocates nothing.
|
|
4592
|
+
*
|
|
4593
|
+
* @returns The version; 0 for a world where no view ever came or went.
|
|
4594
|
+
* @example
|
|
4595
|
+
* ```ts
|
|
4596
|
+
* // ui, at the start of its hosting step: nothing to do while no view came or went.
|
|
4597
|
+
* const version = ctx.require(worldPlugin).projection.membershipVersion(); // 7, as on the last frame
|
|
4598
|
+
* if (version === state.hostedMembership) return;
|
|
4599
|
+
* ```
|
|
4600
|
+
*/
|
|
4601
|
+
membershipVersion(): number;
|
|
4558
4602
|
/**
|
|
4559
4603
|
* How the view of an entity came, or how it is leaving: `"mount"` when a direct reconcile or an unmount moved it,
|
|
4560
4604
|
* `"change"` when a live commit did. A despawned view still answers until the next sweep, so a hook on its removal
|
|
@@ -4799,6 +4843,81 @@ type QueryPlan = {
|
|
|
4799
4843
|
readonly names: readonly string[];
|
|
4800
4844
|
readonly written: readonly string[];
|
|
4801
4845
|
};
|
|
4846
|
+
/**
|
|
4847
|
+
* The walk of one system's declared query, made once when the system registers and reset by the
|
|
4848
|
+
* runner before every run. It allocates nothing per run: the entity list and the store list are
|
|
4849
|
+
* kept and overwritten by index, and every row it yields is the same array, written in place.
|
|
4850
|
+
* A row is valid until the next row; a system that keeps one copies it.
|
|
4851
|
+
*/
|
|
4852
|
+
declare class SystemWalk implements Iterator<readonly unknown[], undefined> {
|
|
4853
|
+
private readonly ctx;
|
|
4854
|
+
/** The step handed back for every row: always the one row array. */
|
|
4855
|
+
private readonly step;
|
|
4856
|
+
/** The one row: the entity, then one stored value per name, sized at registration. */
|
|
4857
|
+
private readonly row;
|
|
4858
|
+
/** The component names of the terms, in order. */
|
|
4859
|
+
private readonly names;
|
|
4860
|
+
/** The names of the `mut()` terms, marked for every yielded row. */
|
|
4861
|
+
private readonly written;
|
|
4862
|
+
/** The store of each name, read once per run at the first step; `undefined` for a name no entity carried yet. */
|
|
4863
|
+
private readonly stores;
|
|
4864
|
+
/** The matching entities of this run, from index 0 to `count`; kept and overwritten by index. */
|
|
4865
|
+
private readonly entities;
|
|
4866
|
+
/** How many entities this run collected. */
|
|
4867
|
+
private count;
|
|
4868
|
+
/** The next entity to visit. */
|
|
4869
|
+
private index;
|
|
4870
|
+
/** Whether this run took its entities yet. */
|
|
4871
|
+
private started;
|
|
4872
|
+
/** The first store's size at the first step: a dev build compares it; -1 when not watched. */
|
|
4873
|
+
private size;
|
|
4874
|
+
/**
|
|
4875
|
+
* Prepares the walk of one system.
|
|
4876
|
+
*
|
|
4877
|
+
* @param ctx - Domain context of the world plugin.
|
|
4878
|
+
* @param plan - The system's resolved query.
|
|
4879
|
+
*/
|
|
4880
|
+
constructor(ctx: WorldCtx, plan: QueryPlan);
|
|
4881
|
+
/**
|
|
4882
|
+
* The walk is its own iterator, so the runner hands it to `run` as the rows. A second loop over
|
|
4883
|
+
* it in the same run finds it walked.
|
|
4884
|
+
*
|
|
4885
|
+
* @returns This walk.
|
|
4886
|
+
*/
|
|
4887
|
+
[Symbol.iterator](): SystemWalk;
|
|
4888
|
+
/**
|
|
4889
|
+
* Starts a new run: nothing is read before the first step.
|
|
4890
|
+
*
|
|
4891
|
+
* @returns This walk, the rows of the run.
|
|
4892
|
+
*/
|
|
4893
|
+
reset(): SystemWalk;
|
|
4894
|
+
/**
|
|
4895
|
+
* Keeps one key of the first store when the entity carries every other name.
|
|
4896
|
+
*
|
|
4897
|
+
* @param entity - The key.
|
|
4898
|
+
*/
|
|
4899
|
+
keep(entity: Entity): void;
|
|
4900
|
+
/**
|
|
4901
|
+
* Hands out the next row: the next collected entity, its values written into the one row, and
|
|
4902
|
+
* marked for every `mut()` name.
|
|
4903
|
+
*
|
|
4904
|
+
* @returns The step of the row, or the end.
|
|
4905
|
+
*/
|
|
4906
|
+
next(): IteratorResult<readonly unknown[], undefined>;
|
|
4907
|
+
/**
|
|
4908
|
+
* Reads the stores of this run and collects the entities that carry every name, in the first
|
|
4909
|
+
* store's order. Structural changes are queued until the phase ends, so the matches stay true
|
|
4910
|
+
* while the rows are consumed.
|
|
4911
|
+
*/
|
|
4912
|
+
private start;
|
|
4913
|
+
/**
|
|
4914
|
+
* Writes the row of one entity in place: the entity, then the value of every name.
|
|
4915
|
+
*
|
|
4916
|
+
* @param entity - The entity.
|
|
4917
|
+
* @returns False when the entity no longer carries a name, and the row is not handed out.
|
|
4918
|
+
*/
|
|
4919
|
+
private fill;
|
|
4920
|
+
}
|
|
4802
4921
|
//#endregion
|
|
4803
4922
|
//#region src/plugins/world/ecs/types.d.ts
|
|
4804
4923
|
/**
|
|
@@ -5115,6 +5234,12 @@ type SystemDefinition<Terms extends readonly QueryTerm[]> = {
|
|
|
5115
5234
|
readonly name: string;
|
|
5116
5235
|
readonly phase: WorldPhase;
|
|
5117
5236
|
readonly query: Terms;
|
|
5237
|
+
/**
|
|
5238
|
+
* Runs the system once a frame in its phase. `entities` walks the declared `query` once; every
|
|
5239
|
+
* row it hands out is the same array, rewritten for the next row, so a row is valid until the
|
|
5240
|
+
* next row. A system that keeps a row copies what it keeps: `const [entity, transform] = row`.
|
|
5241
|
+
* `ecs.query()` called inside `run` hands out a new array per row.
|
|
5242
|
+
*/
|
|
5118
5243
|
run(entities: Iterable<QueryTuple<Terms>>, ctx: SystemContext): void;
|
|
5119
5244
|
};
|
|
5120
5245
|
/**
|
|
@@ -5168,23 +5293,23 @@ type SystemFor<Player, Session> = <const Terms extends readonly QueryTerm[]>(def
|
|
|
5168
5293
|
type AnySystem = {
|
|
5169
5294
|
readonly name: string;
|
|
5170
5295
|
readonly phase: WorldPhase;
|
|
5171
|
-
readonly query: readonly QueryTerm[];
|
|
5296
|
+
readonly query: readonly QueryTerm[]; /** As `SystemDefinition.run`: one row array per walk, valid until the next row. */
|
|
5172
5297
|
run(entities: Iterable<readonly unknown[]>, ctx: SystemContext): void;
|
|
5173
5298
|
};
|
|
5174
5299
|
/**
|
|
5175
|
-
* One registered system, the frame it was registered in
|
|
5176
|
-
* registered during a frame runs from the next frame on.
|
|
5177
|
-
* system's scope.
|
|
5178
|
-
*
|
|
5179
|
-
* @example
|
|
5180
|
-
* ```ts
|
|
5181
|
-
* const entry: SystemEntry = { definition: bobSystem, frame: 12, plan: { names: ["Transform"], written: ["Transform"] } };
|
|
5182
|
-
* ```
|
|
5300
|
+
* One registered system, the frame it was registered in, its query resolved once and the walk the
|
|
5301
|
+
* runner resets for every run. A system registered during a frame runs from the next frame on.
|
|
5302
|
+
* Spec 28 (deferred) extends it with the system's scope.
|
|
5183
5303
|
*/
|
|
5184
5304
|
type SystemEntry = {
|
|
5185
5305
|
readonly definition: AnySystem;
|
|
5186
5306
|
readonly frame: number;
|
|
5187
5307
|
readonly plan: QueryPlan;
|
|
5308
|
+
/**
|
|
5309
|
+
* The walk of the declared query, made at registration; `undefined` for an empty query, which
|
|
5310
|
+
* the runner never walks. An entry built without one gets it on its first run.
|
|
5311
|
+
*/
|
|
5312
|
+
walk?: SystemWalk | undefined;
|
|
5188
5313
|
};
|
|
5189
5314
|
/**
|
|
5190
5315
|
* A structural change queued while a phase runs. Applied in call order when the phase ends.
|
|
@@ -5223,17 +5348,23 @@ type Command = {
|
|
|
5223
5348
|
*/
|
|
5224
5349
|
type StructuralHook = (entity: Entity, value: unknown) => void;
|
|
5225
5350
|
/**
|
|
5226
|
-
* The frozen model snapshot of one frame, kept so four phases read it once.
|
|
5227
|
-
*
|
|
5228
|
-
* @example
|
|
5229
|
-
* ```ts
|
|
5230
|
-
* const cached: FrameSnapshot = { frame: 12, snapshot: { player: {}, session: {}, rng: rngState } };
|
|
5231
|
-
* ```
|
|
5351
|
+
* The frozen model snapshot of one frame, kept so four phases read it once. One object per world,
|
|
5352
|
+
* rewritten when a new frame reads its snapshot.
|
|
5232
5353
|
*/
|
|
5233
5354
|
type FrameSnapshot = {
|
|
5234
5355
|
frame: number;
|
|
5235
5356
|
snapshot: Snapshot;
|
|
5236
5357
|
};
|
|
5358
|
+
/**
|
|
5359
|
+
* The context the runner hands every system of one world: one object, made at the first phase
|
|
5360
|
+
* run, whose `time` and `snapshot` are rewritten for every phase.
|
|
5361
|
+
*/
|
|
5362
|
+
type PhaseContext = {
|
|
5363
|
+
/** The ecs API the systems of this world receive. */readonly world: EcsApi; /** The resource reader, one function per world. */
|
|
5364
|
+
readonly res: <Value extends object>(resource: ResourceType<Value>) => Value; /** The frozen model snapshot of the running frame. */
|
|
5365
|
+
snapshot: Snapshot; /** The running frame's `Time`. */
|
|
5366
|
+
time: Readonly<Time>;
|
|
5367
|
+
};
|
|
5237
5368
|
/**
|
|
5238
5369
|
* The JSON kind of one component field, read from its default value: what the editor's component
|
|
5239
5370
|
* palette shows next to the field name. A nested shape is not described; `defaults` carries it.
|
|
@@ -5380,6 +5511,24 @@ type MarkCount = {
|
|
|
5380
5511
|
marked: number;
|
|
5381
5512
|
changed: number;
|
|
5382
5513
|
};
|
|
5514
|
+
/**
|
|
5515
|
+
* The entities marked changed for one component in the current frame, each once, in mark order.
|
|
5516
|
+
* Both collections are kept from frame to frame, so a frame's marks allocate nothing once they
|
|
5517
|
+
* have grown to its size.
|
|
5518
|
+
*/
|
|
5519
|
+
type ChangeList = {
|
|
5520
|
+
/** The marked entities of this frame, in mark order: what `changed()` hands out. */readonly entities: Entity[]; /** Entity to the frame stamp of its last mark; a stamp of the current frame is a repeat. */
|
|
5521
|
+
readonly frames: Map<Entity, number>;
|
|
5522
|
+
};
|
|
5523
|
+
/**
|
|
5524
|
+
* A plan `ecs.query()` remembers: the plan, and the type objects and `mut()` places it was made
|
|
5525
|
+
* for, compared by identity at every call.
|
|
5526
|
+
*/
|
|
5527
|
+
type KnownPlan = {
|
|
5528
|
+
readonly plan: QueryPlan;
|
|
5529
|
+
readonly types: readonly AnyComponentType[];
|
|
5530
|
+
readonly written: readonly boolean[];
|
|
5531
|
+
};
|
|
5383
5532
|
/**
|
|
5384
5533
|
* ecs module state.
|
|
5385
5534
|
*/
|
|
@@ -5389,8 +5538,10 @@ type EcsState = {
|
|
|
5389
5538
|
owners: Map<Entity, Owner>; /** Key is `"kind:name"` of the owner. */
|
|
5390
5539
|
byOwner: Map<string, Set<Entity>>;
|
|
5391
5540
|
types: Map<string, AnyComponentType>;
|
|
5392
|
-
stores: Map<string, Map<Entity, object | true>>;
|
|
5393
|
-
|
|
5541
|
+
stores: Map<string, Map<Entity, object | true>>; /** The store of each type object that was read, written or asked through, once it has one. */
|
|
5542
|
+
typeStores: Map<AnyComponentType, Map<Entity, object | true>>;
|
|
5543
|
+
resources: Map<string, object>; /** The value of each resource type object that was read, so a read is one lookup. */
|
|
5544
|
+
resourceSlots: Map<ResourceType<object>, object>;
|
|
5394
5545
|
/**
|
|
5395
5546
|
* The type object stored under each engine resource name (`"Now"`, `"Pointer"`, …), so a game
|
|
5396
5547
|
* resource of the same name is refused instead of sharing the engine's value.
|
|
@@ -5398,18 +5549,23 @@ type EcsState = {
|
|
|
5398
5549
|
engineResources: Map<string, object>;
|
|
5399
5550
|
systems: Record<WorldPhase, SystemEntry[]>;
|
|
5400
5551
|
running: WorldPhase | undefined;
|
|
5401
|
-
commands: Command[];
|
|
5402
|
-
changed: Map<string,
|
|
5552
|
+
commands: Command[]; /** The change list of each component marked since the world began, emptied at every `signals`. */
|
|
5553
|
+
changed: Map<string, ChangeList>; /** The stamp of the current frame's marks, moved on by every clear of the change lists. */
|
|
5554
|
+
changeFrame: number;
|
|
5403
5555
|
added: Map<string, StructuralHook[]>;
|
|
5404
5556
|
removed: Map<string, StructuralHook[]>;
|
|
5405
5557
|
ownerLeft: Array<(owner: Owner) => void>;
|
|
5406
5558
|
mode: WorldMode;
|
|
5407
5559
|
offFrame: Array<() => void>;
|
|
5408
|
-
frameSnapshot: FrameSnapshot | undefined; /** The
|
|
5560
|
+
frameSnapshot: FrameSnapshot | undefined; /** The context of every system run of this world; `undefined` before the first phase ran. */
|
|
5561
|
+
phaseContext: PhaseContext | undefined; /** The frame history: dev builds only, from the first frame on; `undefined` before it. */
|
|
5409
5562
|
history: History | undefined; /** Time per system of an agent build (H2b); `undefined` without the flag and before start. */
|
|
5410
5563
|
timing: SystemTiming | undefined; /** The row of each timed system in `timing`, by name: a system that comes back keeps its row. */
|
|
5411
5564
|
timingSlots: Map<string, number>; /** A dev build reported a store whose keys changed while a phase walked it: reported once. */
|
|
5412
|
-
walkReported: boolean;
|
|
5565
|
+
walkReported: boolean; /** The plans of `ecs.query()` by the type of their first term, made once per tuple of types. */
|
|
5566
|
+
queryPlans: Map<AnyComponentType, KnownPlan[]>; /** The entity lists of ended `ecs.query()` walks, taken by the next walks: no key copy per call. */
|
|
5567
|
+
walkLists: Entity[][]; /** How many entities were despawned since the world began: the sweep looks for dead elements when it moved. */
|
|
5568
|
+
despawns: number;
|
|
5413
5569
|
};
|
|
5414
5570
|
/**
|
|
5415
5571
|
* ecs module API, `app.world.ecs`: the screen as data. Plain-object components in one store per
|
|
@@ -5590,8 +5746,10 @@ type EcsApi = {
|
|
|
5590
5746
|
* Walks the store of the FIRST term in insertion order and keeps the entities that carry every
|
|
5591
5747
|
* term. Deterministic. A `mut()` term marks every yielded entity changed for that component
|
|
5592
5748
|
* (README, "Marking what changed"). Inside a system the walk reads the store live (changes are
|
|
5593
|
-
* queued until the phase ends); outside one it walks the keys taken at the start. Every row
|
|
5594
|
-
* new array: keep it if you like.
|
|
5749
|
+
* queued until the phase ends); outside one it walks the keys taken at the start. Every row of
|
|
5750
|
+
* `ecs.query()` is a new array: keep it if you like. The rows a system's `run` gets for its
|
|
5751
|
+
* declared `query` are not: they share one array, valid until the next row. Put the rarest
|
|
5752
|
+
* component first: the walk visits its store.
|
|
5595
5753
|
*
|
|
5596
5754
|
* @param terms - Component types, tag types and `mut()` terms.
|
|
5597
5755
|
* @returns The matching rows: the entity and one value per term.
|
|
@@ -5696,7 +5854,12 @@ type EcsApi = {
|
|
|
5696
5854
|
onRemoved(tagType: TagType, fn: (entity: Entity) => void): () => void;
|
|
5697
5855
|
/**
|
|
5698
5856
|
* The coarse change set of the frame, cleared in `time` phase `signals` after every `sync`
|
|
5699
|
-
* system ran.
|
|
5857
|
+
* system ran. It is the world's own list, in mark order, each entity once: walk it in the frame
|
|
5858
|
+
* and copy what you keep, because the clear empties it in place. A component nothing marked
|
|
5859
|
+
* answers one shared empty list. Asking allocates nothing. Inside a system nothing leaves the
|
|
5860
|
+
* list until the phase ends. Outside a phase a despawn, or a removal of the component, takes the
|
|
5861
|
+
* entity out at once and the entities after it move up, so a loop that despawns or removes
|
|
5862
|
+
* outside a phase walks a copy: `const copy = [...ecs.changed(C)]`.
|
|
5700
5863
|
*
|
|
5701
5864
|
* @param component - The component type to ask about.
|
|
5702
5865
|
* @returns The entities marked changed for it this frame.
|
|
@@ -6058,6 +6221,52 @@ type ProjectionModule = ProjectionApi & ProjectionInternal;
|
|
|
6058
6221
|
*/
|
|
6059
6222
|
declare const DEMAND_REASONS: readonly ["always", "first", "resize", "restore", "layers", "debug", "wake", "capture", "request", "mark", "verify", "none", "overlay", "retake"];
|
|
6060
6223
|
//#endregion
|
|
6224
|
+
//#region src/plugins/renderer/demand/marks.d.ts
|
|
6225
|
+
/**
|
|
6226
|
+
* The marks of one kind of the decision running now, in mark order, each entity once.
|
|
6227
|
+
*/
|
|
6228
|
+
declare class MarkList implements Marks {
|
|
6229
|
+
/** Entities marked in this decision. */
|
|
6230
|
+
size: number;
|
|
6231
|
+
/** The marked entities: the first `size` of them; the rest is left from earlier decisions. */
|
|
6232
|
+
private readonly entities;
|
|
6233
|
+
/** The decision each entity was last marked in. */
|
|
6234
|
+
private readonly stamps;
|
|
6235
|
+
/** The number of this decision. */
|
|
6236
|
+
private stamp;
|
|
6237
|
+
/**
|
|
6238
|
+
* Tells whether an entity is marked in this decision.
|
|
6239
|
+
*
|
|
6240
|
+
* @param entity - The entity.
|
|
6241
|
+
* @returns True when it is.
|
|
6242
|
+
*/
|
|
6243
|
+
has(entity: Entity): boolean;
|
|
6244
|
+
/**
|
|
6245
|
+
* The entity marked `index`-th in this decision.
|
|
6246
|
+
*
|
|
6247
|
+
* @param index - 0 to `size - 1`.
|
|
6248
|
+
* @returns The entity; 0 past the end.
|
|
6249
|
+
*/
|
|
6250
|
+
at(index: number): Entity;
|
|
6251
|
+
/**
|
|
6252
|
+
* Marks an entity; a second mark of the same decision changes nothing.
|
|
6253
|
+
*
|
|
6254
|
+
* @param entity - The entity.
|
|
6255
|
+
*/
|
|
6256
|
+
add(entity: Entity): void;
|
|
6257
|
+
/**
|
|
6258
|
+
* Empties the list: the next decision gets a new number, so every stamp is stale. Allocates nothing, except when the
|
|
6259
|
+
* stamps grew past `STAMPS_KEPT` or the numbers ran out: then they are dropped.
|
|
6260
|
+
*/
|
|
6261
|
+
clear(): void;
|
|
6262
|
+
/**
|
|
6263
|
+
* Walks the marks of this decision in mark order. Allocates an iterator: for a test or a spread, never per frame.
|
|
6264
|
+
*
|
|
6265
|
+
* @yields {Entity} Each marked entity.
|
|
6266
|
+
*/
|
|
6267
|
+
[Symbol.iterator](): Iterator<Entity>;
|
|
6268
|
+
}
|
|
6269
|
+
//#endregion
|
|
6061
6270
|
//#region src/plugins/renderer/demand/types.d.ts
|
|
6062
6271
|
/**
|
|
6063
6272
|
* Why the render phase drew a frame, or `"none"` when it did not. Internal: `monitor` and the agent log read it.
|
|
@@ -6070,6 +6279,28 @@ type DemandReason = (typeof DEMAND_REASONS)[number];
|
|
|
6070
6279
|
* out of the tree, no view). Internal: `sync.loopsHeld` reads it.
|
|
6071
6280
|
*/
|
|
6072
6281
|
type Unseen = "shown" | "alpha-above" | "alpha-own" | "off-screen" | "other";
|
|
6282
|
+
/**
|
|
6283
|
+
* The change marks of one kind of the running decision, read: each entity once, in mark order. What a `Set` offered
|
|
6284
|
+
* its readers, kept in a list that empties without allocating (`MarkList`). Internal.
|
|
6285
|
+
*/
|
|
6286
|
+
type Marks = {
|
|
6287
|
+
/** Entities marked in this decision. */readonly size: number;
|
|
6288
|
+
/**
|
|
6289
|
+
* Tells whether an entity is marked in this decision.
|
|
6290
|
+
*
|
|
6291
|
+
* @param entity - The entity.
|
|
6292
|
+
* @returns True when it is.
|
|
6293
|
+
*/
|
|
6294
|
+
has(entity: Entity): boolean;
|
|
6295
|
+
/**
|
|
6296
|
+
* The entity marked `index`-th in this decision: a walk by index makes no iterator.
|
|
6297
|
+
*
|
|
6298
|
+
* @param index - 0 to `size - 1`.
|
|
6299
|
+
* @returns The entity; 0 past the end.
|
|
6300
|
+
*/
|
|
6301
|
+
at(index: number): Entity; /** Walks the marks, allocating an iterator: for a test or a spread, never per frame. */
|
|
6302
|
+
[Symbol.iterator](): Iterator<Entity>;
|
|
6303
|
+
};
|
|
6073
6304
|
/**
|
|
6074
6305
|
* The last decision of the render phase, one object reused every frame.
|
|
6075
6306
|
*/
|
|
@@ -6082,12 +6313,12 @@ type DemandFrame = {
|
|
|
6082
6313
|
* demand module state, `ctx.state.demand`.
|
|
6083
6314
|
*/
|
|
6084
6315
|
type DemandState = {
|
|
6085
|
-
/** Entities marked by a compared or structural write since the last decision. */marked:
|
|
6086
|
-
pending:
|
|
6087
|
-
loose:
|
|
6088
|
-
visual:
|
|
6089
|
-
moved:
|
|
6090
|
-
published:
|
|
6316
|
+
/** Entities marked by a compared or structural write since the last decision. */marked: MarkList; /** Marked entities whose view was not drawn at mark time; counted at the decision when drawn then. */
|
|
6317
|
+
pending: MarkList; /** Entities a display adapter reported after its `update` (not `false`): counted unless an ancestor is hidden. */
|
|
6318
|
+
loose: MarkList; /** Marked by a write that changes what the view draws (`mark`): the kept cache retakes its picture. */
|
|
6319
|
+
visual: MarkList; /** Marked by a write of the view's own transform or depth (`markMoved`): a kept picture only moves. */
|
|
6320
|
+
moved: MarkList; /** Marked through the public `invalidate`: a filter value or a self-drawn object about to change. */
|
|
6321
|
+
published: MarkList;
|
|
6091
6322
|
/**
|
|
6092
6323
|
* Every whole-frame reason found since the last decision (O17, LEAD-FIXES-3). The first one added is
|
|
6093
6324
|
* `frame().reason`, as spec 14 says; the set keeps the others visible to the overlay step and `kept.collect`.
|
|
@@ -6128,11 +6359,11 @@ type DemandInternal = {
|
|
|
6128
6359
|
frame(): Readonly<DemandFrame>; /** The F6/F18a predicate: `unseenBy(entity) === "shown"`. */
|
|
6129
6360
|
shown(entity: Entity): boolean; /** Where the walk of `shown` stopped for the entity's view, for `sync.loopsHeld` (spec 26 R1.7.3). */
|
|
6130
6361
|
unseenBy(entity: Entity): Unseen; /** Marks of the current decision. */
|
|
6131
|
-
marked():
|
|
6132
|
-
loose():
|
|
6133
|
-
visual():
|
|
6134
|
-
moved():
|
|
6135
|
-
published():
|
|
6362
|
+
marked(): Marks; /** The adapter marks of the current decision, as `marked()` for the others. */
|
|
6363
|
+
loose(): Marks; /** The marks of the current decision made by `mark`: what a view draws changed. */
|
|
6364
|
+
visual(): Marks; /** The marks of the current decision made by `markMoved`: a view's own transform or depth changed. */
|
|
6365
|
+
moved(): Marks; /** The marks of the current decision made through the public `invalidate`. */
|
|
6366
|
+
published(): Marks; /** The pixel oracle switch, behind `DebugApi.verifyFrames`. */
|
|
6136
6367
|
verifyFrames(on: boolean): void; /** Whether the pixel oracle is on. */
|
|
6137
6368
|
verifying(): boolean; /** The body of the public `renderer.invalidate`: a mark of an entity that has a view. */
|
|
6138
6369
|
invalidate(entity: Entity): void;
|
|
@@ -8002,6 +8233,14 @@ type SyncState = {
|
|
|
8002
8233
|
* an entity with several endless loops is walked once a frame. Cleared by every pass, which may change the tree.
|
|
8003
8234
|
*/
|
|
8004
8235
|
held: Map<Entity, Unseen>;
|
|
8236
|
+
/**
|
|
8237
|
+
* Moves on with every change that may change the render passes of a frame: a filter set or forgotten, a node's
|
|
8238
|
+
* `renderable` flipped, a view hung, wrapped or dropped (a pass that did work), a kept picture taken or let go, a
|
|
8239
|
+
* write a plugin announced with `invalidate` (a filter switched on or off).
|
|
8240
|
+
*/
|
|
8241
|
+
passesVersion: number; /** The filtered views' passes of `renderPassesOf`, counted at `passesVersion` `at` under `root`. */
|
|
8242
|
+
passes: PassCount; /** The name of the scene's HUD layer (`above: "overlays"`), kept with the layers; `undefined` without one. */
|
|
8243
|
+
hudLayer: string | undefined;
|
|
8005
8244
|
cleanups: Array<() => void>;
|
|
8006
8245
|
};
|
|
8007
8246
|
/**
|
|
@@ -8017,6 +8256,19 @@ type OverdrawState = {
|
|
|
8017
8256
|
matrix: PixiFilter | undefined;
|
|
8018
8257
|
listeners: Array<(on: boolean) => void>;
|
|
8019
8258
|
};
|
|
8259
|
+
/**
|
|
8260
|
+
* The filtered views' part of the render passes, counted once and read every frame while nothing it reads changed: the
|
|
8261
|
+
* version and the root it was counted at, and every filter of the filter table with its `enabled` then (a plugin may
|
|
8262
|
+
* switch a filter by its field alone). Not public.
|
|
8263
|
+
*/
|
|
8264
|
+
type PassCount = {
|
|
8265
|
+
at: number;
|
|
8266
|
+
root: PixiContainer | undefined;
|
|
8267
|
+
filtered: number; /** Filters recorded: the first `count` of `filters` and `enabled`. */
|
|
8268
|
+
count: number;
|
|
8269
|
+
filters: Array<PixiFilter | undefined>;
|
|
8270
|
+
enabled: boolean[];
|
|
8271
|
+
};
|
|
8020
8272
|
//#endregion
|
|
8021
8273
|
//#region src/plugins/renderer/monitor/log-types.d.ts
|
|
8022
8274
|
/**
|
|
@@ -8169,6 +8421,45 @@ type PerfLine<Kind extends string> = {
|
|
|
8169
8421
|
t: number;
|
|
8170
8422
|
build: string | null;
|
|
8171
8423
|
};
|
|
8424
|
+
/**
|
|
8425
|
+
* Which groups of the monitor's per-frame work run in an agent build, each on unless switched off (spec 11 R14, the
|
|
8426
|
+
* names of the editor's contract, telemetry proposal §2.7): `gpu` the GPU timer; `passes` the pass ring with its stencil
|
|
8427
|
+
* count and the draws, filter applies, uploads, instruction rebuilds and render targets the counting classes count;
|
|
8428
|
+
* `shaders` the pipeline compiles and shader modules; `problems` the problem rules' accumulators and their judgment;
|
|
8429
|
+
* `memory` the heap read of every frame and its `gc?` hint; `systems` the time of every world system and the five
|
|
8430
|
+
* slowest of a frame; `nodes` the change marks of the frame and its draw reason; `longFrames` the long frames the
|
|
8431
|
+
* browser reports. A section switched off skips its work, and its columns and sample fields read as not measured.
|
|
8432
|
+
*
|
|
8433
|
+
* @example
|
|
8434
|
+
* ```ts
|
|
8435
|
+
* // The editor measures the ward without the per-system timing, the rest as it was.
|
|
8436
|
+
* const sections: MonitorSections = {
|
|
8437
|
+
* gpu: true, passes: true, shaders: true, problems: true, memory: true, systems: false, nodes: true, longFrames: true
|
|
8438
|
+
* };
|
|
8439
|
+
* ```
|
|
8440
|
+
*/
|
|
8441
|
+
type MonitorSections = {
|
|
8442
|
+
gpu: boolean;
|
|
8443
|
+
passes: boolean;
|
|
8444
|
+
shaders: boolean;
|
|
8445
|
+
problems: boolean;
|
|
8446
|
+
memory: boolean;
|
|
8447
|
+
systems: boolean;
|
|
8448
|
+
nodes: boolean;
|
|
8449
|
+
longFrames: boolean;
|
|
8450
|
+
};
|
|
8451
|
+
/**
|
|
8452
|
+
* The sections of the monitor in their order: the order of a `sections` event's lists and of `sample.sectionsMs`
|
|
8453
|
+
* (which adds `base`, the rest of the commit). New sections are only ever appended.
|
|
8454
|
+
*
|
|
8455
|
+
* @example
|
|
8456
|
+
* ```ts
|
|
8457
|
+
* // The editor draws one switch per section of the device's monitor, in the engine's order, and greys the ones off.
|
|
8458
|
+
* app.renderer.monitor.sections({ systems: false });
|
|
8459
|
+
* MONITOR_SECTIONS.filter(section => !app.renderer.monitor.sections()[section]); // ["systems"]
|
|
8460
|
+
* ```
|
|
8461
|
+
*/
|
|
8462
|
+
declare const MONITOR_SECTIONS: readonly ["gpu", "passes", "shaders", "problems", "memory", "systems", "nodes", "longFrames"];
|
|
8172
8463
|
/**
|
|
8173
8464
|
* What an agent build could measure on this page; the header lists it.
|
|
8174
8465
|
*/
|
|
@@ -8254,6 +8545,12 @@ type PerfHeaderLine = PerfLine<"header"> & {
|
|
|
8254
8545
|
debug?: {
|
|
8255
8546
|
overdraw: boolean;
|
|
8256
8547
|
};
|
|
8548
|
+
/**
|
|
8549
|
+
* The sections of the monitor at the moment of the header, as `monitor.sections()` answers them (a `sections` event
|
|
8550
|
+
* marks a switch later): a section `measured` lists but `false` here is switched off, not missing. The engine always
|
|
8551
|
+
* writes it; optional for a reader of an older log.
|
|
8552
|
+
*/
|
|
8553
|
+
sections?: Readonly<MonitorSections>;
|
|
8257
8554
|
};
|
|
8258
8555
|
/**
|
|
8259
8556
|
* One Long Animation Frame (or long task) of the page.
|
|
@@ -8426,6 +8723,13 @@ type PerfSampleLine = PerfLine<"sample"> & {
|
|
|
8426
8723
|
created: number;
|
|
8427
8724
|
destroyed: number;
|
|
8428
8725
|
} | null;
|
|
8726
|
+
/**
|
|
8727
|
+
* What each section of the monitor cost in the second: page-clock ms its part of the frame commits took, summed over
|
|
8728
|
+
* the second, 0 for a section switched off; `base` is the rest of the commits. Pixi-side counting is not timed. A
|
|
8729
|
+
* WebView's clock ticks in 0.1 ms, so a part shorter than that adds 0 or 0.1 at a time: the sum over a second is
|
|
8730
|
+
* what to read. The engine always writes it; optional for a reader of an older log.
|
|
8731
|
+
*/
|
|
8732
|
+
sectionsMs?: { readonly [Section in keyof MonitorSections | "base"]: number };
|
|
8429
8733
|
};
|
|
8430
8734
|
/**
|
|
8431
8735
|
* Why a frame is a spike: a rule (`gap`, `js`, `gpu`) or an annotation of a spike. `compile` is a compile in the frame or,
|
|
@@ -8569,9 +8873,10 @@ type PerfLongFrameLine = PerfLine<"longFrame"> & LongFrameEntry & {
|
|
|
8569
8873
|
/**
|
|
8570
8874
|
* The names of `event` lines (`"devtools"` is the editor's overlay event, in 2b because the editor's page agent emits
|
|
8571
8875
|
* it on the 2b debug build; `"pool-trim"` is the pool trim of spec 25, detail `PoolTrimDetail`; `"warm"` is the end of
|
|
8572
|
-
* a pipeline warm-up run of spec 27, detail `WarmDetail`
|
|
8876
|
+
* a pipeline warm-up run of spec 27, detail `WarmDetail`; `"sections"` is a switch of the monitor's sections, detail
|
|
8877
|
+
* `{ on, off }`: the names of the sections on and off, in the order of `MONITOR_SECTIONS`).
|
|
8573
8878
|
*/
|
|
8574
|
-
type PerfEventName = "scene" | "overlay" | "bundle" | "compile" | "upload" | "resolution" | "device-lost" | "device-restored" | "pause" | "resume" | "switch" | "display" | "command" | "recorder" | "rate" | "devtools" | "pool-trim" | "warm" | "shader" | "problem" | "debug";
|
|
8879
|
+
type PerfEventName = "scene" | "overlay" | "bundle" | "compile" | "upload" | "resolution" | "device-lost" | "device-restored" | "pause" | "resume" | "switch" | "display" | "command" | "recorder" | "rate" | "devtools" | "pool-trim" | "warm" | "shader" | "problem" | "debug" | "sections";
|
|
8575
8880
|
/**
|
|
8576
8881
|
* What an `overlay` event line says happened to an overlay (spec 22 O10.2): it opened, landed (its enter motion is
|
|
8577
8882
|
* over), started to leave, is gone, or its range went live or was kept again (the live fallback).
|
|
@@ -9428,7 +9733,9 @@ type MonitorSinks = {
|
|
|
9428
9733
|
compiles: CompileRing; /** The WebGPU pass sink, set at attach. */
|
|
9429
9734
|
passes: PassSink | undefined; /** A pass counter runs (F8): the counting encoder exists, or the WebGL runner items are subscribed. */
|
|
9430
9735
|
measuring: boolean; /** Pixi's instruction rebuilds since the monitor last took them, in a frame or between frames (spec 26 R2.3). */
|
|
9431
|
-
rebuildsWindow: number;
|
|
9736
|
+
rebuildsWindow: number; /** The `SECTION` bits of the sections that run in the frame now: what the commit and the counting classes test. */
|
|
9737
|
+
sections: number; /** The `SECTION` bits a switch asked for: they apply at the start of the next frame, so a frame is measured whole. */
|
|
9738
|
+
sectionsNext: number;
|
|
9432
9739
|
};
|
|
9433
9740
|
/**
|
|
9434
9741
|
* The ring's render passes, written in place: `capacity * 4` of them. Not public.
|
|
@@ -9593,8 +9900,14 @@ type PerfState = {
|
|
|
9593
9900
|
/** `config.monitor.budgetMs`; a frame's budget is `budgetOf` it. */budget: number | "rate"; /** `config.monitor.frames`: the capacity the ring gets at the first attach. */
|
|
9594
9901
|
frames: number;
|
|
9595
9902
|
ring: PerfRing; /** `capacity` long, for percentiles at a flush. */
|
|
9596
|
-
scratch: Float32Array;
|
|
9597
|
-
|
|
9903
|
+
scratch: Float32Array;
|
|
9904
|
+
/**
|
|
9905
|
+
* Doubles kept unboxed: `[0]` the budget of the frame being committed, `[1]` the end of a flushed window, `[2]` the
|
|
9906
|
+
* page clock of the last lap of the commit, where the next section's cost starts.
|
|
9907
|
+
*/
|
|
9908
|
+
staged: Float64Array; /** The sections `monitor.sections()` answers: the config's at first, then the last switch; frozen. */
|
|
9909
|
+
sections: Readonly<MonitorSections>; /** Page-clock ms of the commits of the current second, by section in `COST` order, `base` last. */
|
|
9910
|
+
sectionsMs: Float64Array; /** The display's frame period from the ticks: the budget's display part while `time` does not know the display. */
|
|
9598
9911
|
ticks: TickEstimate; /** The `time.rate()` snapshot the last frame saw: a new one may carry another `displayHz` (a `display` event). */
|
|
9599
9912
|
rate: Readonly<FrameRate> | undefined;
|
|
9600
9913
|
drawn: boolean; /** The `CHANGED` bits of the frame running now. */
|
|
@@ -9636,8 +9949,9 @@ type PerfState = {
|
|
|
9636
9949
|
* wait for a drawn frame.
|
|
9637
9950
|
*/
|
|
9638
9951
|
type MonitorState = {
|
|
9639
|
-
/** Clock time at the start of the frame being drawn;
|
|
9640
|
-
lastStart: number
|
|
9952
|
+
/** Clock time at the start of the frame being drawn; NaN between frames. A double from the start: never boxed. */frameStart: number; /** Clock time at the start of the last frame, the far end of the next interval; NaN before the first. */
|
|
9953
|
+
lastStart: number; /** `[0]`: the clock reading `begin` or `end` hands the window, staged: a double handed to a call is boxed. */
|
|
9954
|
+
staged: Float64Array; /** Clock milliseconds between frame starts, summed over the open window. */
|
|
9641
9955
|
windowMs: number; /** Intervals between frame starts in the open window. */
|
|
9642
9956
|
intervals: number; /** Clock milliseconds spent inside frames in the open window. */
|
|
9643
9957
|
workMs: number; /** Frames finished in the open window. */
|
|
@@ -9843,6 +10157,25 @@ type PerfMonitorApi = {
|
|
|
9843
10157
|
* ```
|
|
9844
10158
|
*/
|
|
9845
10159
|
setResolution(resolution: number | undefined): number;
|
|
10160
|
+
/**
|
|
10161
|
+
* The sections of the monitor of a debug build, each on unless switched off: what runs every frame, and what can be
|
|
10162
|
+
* switched off to measure the game without it. Without an argument it reads them. With one it switches the sections
|
|
10163
|
+
* it names, from the next frame on, and writes a `sections` event; a write needs control (`--debug`, or a dev page):
|
|
10164
|
+
* a read-only page (`--debug=read`) keeps the sections and throws. A section off skips its work: its ring columns and its sample fields read as not measured, and its
|
|
10165
|
+
* `sample.sectionsMs` is 0. Agent builds only: elsewhere every section answers on and nothing switches.
|
|
10166
|
+
*
|
|
10167
|
+
* @param next - The sections to switch: `true` on, `false` off; a section left out keeps its switch.
|
|
10168
|
+
* @returns The sections from the next frame on, one frozen object until the next switch.
|
|
10169
|
+
* @throws {Error} With `reason: "read-only"` when a page without control is asked to change a section.
|
|
10170
|
+
* @example
|
|
10171
|
+
* ```ts
|
|
10172
|
+
* // The editor's Mission control: what does the ward cost without the per-system timing?
|
|
10173
|
+
* app.renderer.monitor.sections().systems; // true
|
|
10174
|
+
* app.renderer.monitor.sections({ systems: false }); // { gpu: true, passes: true, shaders: true, problems: true, memory: true, systems: false, nodes: true, longFrames: true }
|
|
10175
|
+
* // a stream() listener gets { kind: "event", name: "sections", detail: { on: ["gpu", "passes", "shaders", "problems", "memory", "nodes", "longFrames"], off: ["systems"] }, … }
|
|
10176
|
+
* ```
|
|
10177
|
+
*/
|
|
10178
|
+
sections(next?: Partial<MonitorSections>): Readonly<MonitorSections>;
|
|
9846
10179
|
/**
|
|
9847
10180
|
* The live object counts of a debug build: a plugin the renderer cannot depend on (it depends on the renderer)
|
|
9848
10181
|
* registers a count here, and the monitor reads it once a second into `sample.counts` and `stats().counts`.
|
|
@@ -10065,7 +10398,7 @@ type PictureRequest = {
|
|
|
10065
10398
|
reject: (error: Error) => void;
|
|
10066
10399
|
};
|
|
10067
10400
|
declare namespace types_d_exports$2 {
|
|
10068
|
-
export { Api$1 as Api, AspectRange, BitmapFontData, CaptureOptions, Captured, Config$2 as Config, CountingClasses, CoverFrame, CreateTextureOptions$1 as CreateTextureOptions, DebugApi, DebugSwitches, DemandFrame, DemandModule, DemandReason, DemandState, Deps$2 as Deps, DisplayAdapter, DisplayEntry, DisplaysApi, DrawCounter, Events$2 as Events, FilterCache, FilterSlot, FilterSlotInputs, FiltersApi, FontsApi, FrameColumns, FrameReadResult, FrameReadout, FrameRecord, FrameRing, HitBox, HostApi, HostInternal, HostModule, HostState, HudPartValue, KeptInternal, KeptModule, KeptRange, KeptState, KeptStats, KernelSlice$2 as KernelSlice, LayerEntry, LegendEntry, LongFrameEntry, Modules, MonitorApi, MonitorConfig, MonitorCounts, MonitorDeps, MonitorInternal, MonitorModule, MonitorState, NineBorders$1 as NineBorders, Orientation, OverlayEventDetail, OverlayLevelValue, OverlayMode, OverlayPhase, OverlayReport, OverlayValue, OverlayWhat, PassKind, PassRecord, PerfCause, PerfChange, PerfChangeEntry, PerfCollectorLine, PerfCounts, PerfDisplay, PerfEventLine, PerfEventName, PerfGapLine, PerfHeaderLine, PerfLogLine, PerfLongFrameLine, PerfMarkLine, PerfMeasured, PerfMonitorApi, PerfSampleLine, PerfSpikeLine, PerfStartupLine, PerfTelemetryLine, PerfThermalLine, PictureRect, PixiApplication, PixiBitmapFont, PixiBounds, PixiContainer, PixiFilter, PixiFilterManager, PixiGraphics, PixiMatrix, PixiModule, PixiNineSliceSprite, PixiRectangle, PixiRenderTexture, PixiSprite, PixiTexture, Point, PoolTrim, PoolTrimDetail, ProblemEventDetail, ProblemRule, Rect, RenderStats, RendererCtx, RendererKind, SafeArea, ShaderEventDetail, ShaderWhat, SliceFrame, State$2 as State, SyncApi, SyncCounts, SyncInternal, SyncModule, SyncState, TeardownScope, TextureProvider, TextureUsage, TexturesApi, Under, View, ViewKind, ViewportApi, ViewportInternal, ViewportModule, ViewportSize, ViewportState, WarmDetail };
|
|
10401
|
+
export { Api$1 as Api, AspectRange, BitmapFontData, CaptureOptions, Captured, Config$2 as Config, CountingClasses, CoverFrame, CreateTextureOptions$1 as CreateTextureOptions, DebugApi, DebugSwitches, DemandFrame, DemandModule, DemandReason, DemandState, Deps$2 as Deps, DisplayAdapter, DisplayEntry, DisplaysApi, DrawCounter, Events$2 as Events, FilterCache, FilterSlot, FilterSlotInputs, FiltersApi, FontsApi, FrameColumns, FrameReadResult, FrameReadout, FrameRecord, FrameRing, HitBox, HostApi, HostInternal, HostModule, HostState, HudPartValue, KeptInternal, KeptModule, KeptRange, KeptState, KeptStats, KernelSlice$2 as KernelSlice, LayerEntry, LegendEntry, LongFrameEntry, Modules, MonitorApi, MonitorConfig, MonitorCounts, MonitorDeps, MonitorInternal, MonitorModule, MonitorSections, MonitorState, NineBorders$1 as NineBorders, Orientation, OverlayEventDetail, OverlayLevelValue, OverlayMode, OverlayPhase, OverlayReport, OverlayValue, OverlayWhat, PassKind, PassRecord, PerfCause, PerfChange, PerfChangeEntry, PerfCollectorLine, PerfCounts, PerfDisplay, PerfEventLine, PerfEventName, PerfGapLine, PerfHeaderLine, PerfLogLine, PerfLongFrameLine, PerfMarkLine, PerfMeasured, PerfMonitorApi, PerfSampleLine, PerfSpikeLine, PerfStartupLine, PerfTelemetryLine, PerfThermalLine, PictureRect, PixiApplication, PixiBitmapFont, PixiBounds, PixiContainer, PixiFilter, PixiFilterManager, PixiGraphics, PixiMatrix, PixiModule, PixiNineSliceSprite, PixiRectangle, PixiRenderTexture, PixiSprite, PixiTexture, Point, PoolTrim, PoolTrimDetail, ProblemEventDetail, ProblemRule, Rect, RenderStats, RendererCtx, RendererKind, SafeArea, ShaderEventDetail, ShaderWhat, SliceFrame, State$2 as State, SyncApi, SyncCounts, SyncInternal, SyncModule, SyncState, TeardownScope, TextureProvider, TextureUsage, TexturesApi, Under, View, ViewKind, ViewportApi, ViewportInternal, ViewportModule, ViewportSize, ViewportState, WarmDetail };
|
|
10069
10402
|
}
|
|
10070
10403
|
/**
|
|
10071
10404
|
* The part of Pixi the engine uses: the classes `sync` builds views from (a `Rectangle` frames the
|
|
@@ -10290,6 +10623,8 @@ type Config$2 = {
|
|
|
10290
10623
|
* createApp({ pluginConfigs: { renderer: { mount: "#game", monitor: { budgetMs: 8.3, frames: 2048 } } } });
|
|
10291
10624
|
* // A game with a large blurred backdrop flags it sooner: 30 still frames over 0.1 Mpx.
|
|
10292
10625
|
* createApp({ pluginConfigs: { renderer: { mount: "#game", monitor: { budgetMs: "rate", frames: 1024, stillFrames: 30, stillMpx: 0.1 } } } });
|
|
10626
|
+
* // A debug build that starts without the per-system timing: app.renderer.monitor.sections().systems is false.
|
|
10627
|
+
* createApp({ pluginConfigs: { renderer: { mount: "#game", monitor: { budgetMs: "rate", frames: 1024, sections: { systems: false } } } } });
|
|
10293
10628
|
* ```
|
|
10294
10629
|
*/
|
|
10295
10630
|
type MonitorConfig = {
|
|
@@ -10306,6 +10641,11 @@ type MonitorConfig = {
|
|
|
10306
10641
|
churnPerSecond?: number; /** `target-churn`: seconds of churn in a row before the problem. Default 3. */
|
|
10307
10642
|
churnSeconds?: number; /** `target-churn`: a render target made this many ms after a pool trim is churn at once. Default 1000. */
|
|
10308
10643
|
churnAfterTrimMs?: number;
|
|
10644
|
+
/**
|
|
10645
|
+
* The sections of the monitor a debug build starts with (spec 11 R14): a section left out is on. `monitor.sections`
|
|
10646
|
+
* switches them later.
|
|
10647
|
+
*/
|
|
10648
|
+
sections?: Partial<MonitorSections>;
|
|
10309
10649
|
};
|
|
10310
10650
|
/**
|
|
10311
10651
|
* renderer plugin state: one branch per module.
|
|
@@ -11732,4 +12072,4 @@ type BundleCompanion = {
|
|
|
11732
12072
|
unload(bundle: string): void;
|
|
11733
12073
|
};
|
|
11734
12074
|
//#endregion
|
|
11735
|
-
export {
|
|
12075
|
+
export { PassKind as $, FlowGraph as $n, Explained as $t, PixiSprite as A, TrackSegment as An, SaveUnreadableError as Ar, Orientation as At, FrameReadResult as B, TextStylesOf as Bn, State$7 as Br, OverlayValue as Bt, State$1 as C, MotionCause as Cn, Root as Cr, SHADER_WHATS as Ct, MonitorConfig as D, ProjectionSpec as Dn, PlayerStateProvider as Dr, DebugSwitches as Dt, Config$2 as E, ProjectionMotion as En, Patch as Er, WarmDetail as Et, types_d_exports$2 as F, EmitterIdOf as Fn, RngState as Fr, HudPart as Ft, MONITOR_SECTIONS as G, to as Gn, RateChange as Gr, SpriteOptions as Gt, FrameRecord as H, defineFlow as Hn, Api$7 as Hr, Shape as Ht, Captured as I, GameTypes as In, Api$6 as Ir, HudPartValue as It, OverlayWhat as J, FeaturePlugin as Jn, Time as Jr, TransformValue as Jt, MonitorSections as K, type as Kn, State$8 as Kr, SpriteValue as Kt, MonitorCounts as L, HudKeysOf as Ln, Config$7 as Lr, NineSlice$1 as Lt, PoolTrim as M, Api$3 as Mn, SnapshotOf as Mr, ViewportSize as Mt, State$2 as N, BundlesOf as Nn, StoreApi as Nr, FilterCache as Nt, PixiFilter as O, ReducedMotion as On, ProviderCall as Or, FilterSlot as Ot, Under as P, Config$4 as Pn, RngApi as Pr, Display as Pt, PROBLEM_RULES as Q, DefineNode as Qn, Require as Qr, Config$3 as Qt, RenderStats as R, Position as Rn, Events$6 as Rr, NineSliceValue as Rt, ScenesApi as S, Motion as Sn, Json as Sr, ProblemRule as St, Api$1 as T, NumericFields as Tn, types_d_exports$6 as Tr, ShaderWhat as Tt, FrameRing as U, exit as Un, Config$8 as Ur, ShapeValue as Ut, FrameReadout as V, types_d_exports$4 as Vn, types_d_exports$7 as Vr, Parent as Vt, LongFrameEntry as W, slot as Wn, FrameRate as Wr, Sprite as Wt, PERF_GAP_BUCKETS as X, AnyFlow as Xn, Config$9 as Xr, DEMAND_REASONS as Xt, PERF_CAUSES as Y, FeatureTree as Yn, types_d_exports$8 as Yr, sprite as Yt, PERF_LOG_VERSION as Z, Bookmark as Zn, Events$8 as Zr, Api$2 as Zt, DefineScene as _, SystemFor as _n, State$5 as _r, PerfStartupLine as _t, Config as a, ComponentHandle as an, TypeTag as ar, PerfCounts as at, SceneDefinition as b, DescriptionNode as bn, Config$6 as br, PoolTrimDetail as bt, LoadBundles as c, ComponentValue as cn, EffectOptions as cr, PerfEventName as ct, Manifest as d, FrameDiff as dn, NodeFx as dr, PerfLogLine as dt, State$3 as en, FlowState as er, PassRecord as et, State as f, Mut as fn, Answer as fr, PerfLongFrameLine as ft, AnySceneProjection as g, SystemDefinition as gn, FakeClock as gr, PerfSpikeLine as gt, types_d_exports as h, ResourceType as hn, Config$5 as hr, PerfSampleLine as ht, BundleSpec as i, AnyComponentValue as in, SceneIdOf as ir, PerfCollectorLine as it, PixiTexture as j, ViewHandle as jn, Snapshot as jr, Point as jt, PixiModule as k, TrackOptions as kn, SaveDoc as kr, FilterSlotInputs as kt, LoadReason as l, Entity as ln, GuideOptions as lr, PerfGapLine as lt, Usage as m, QueryTerm as mn, ClockSource as mr, PerfMeasured as mt, AssetsIo as n, AnyComponent as nn, NodeTable as nr, PerfChange as nt, DefineBundles as o, ComponentSchema as on, Descriptor as or, PerfDisplay as ot, Tier as p, Narrowed as pn, Api$4 as pr, PerfMarkLine as pt, OverlayEventDetail as q, FeatureDescription as qn, ThermalReading as qr, Transform as qt, BundleMap as r, AnyComponentType as rn, RouteStep as rr, PerfChangeEntry as rt, Events as s, ComponentType as sn, Effect as sr, PerfEventLine as st, Api as t, types_d_exports$3 as tn, JournalEntry as tr, PerfCause as tt, LoadResult as u, EntitySnapshot as un, Hint as ur, PerfHeaderLine as ut, Events$1 as v, TagType as vn, types_d_exports$5 as vr, PerfTelemetryLine as vt, types_d_exports$1 as w, MotionHandle as wn, State$6 as wr, ShaderEventDetail as wt, SceneSpec as x, Ease as xn, Events$5 as xr, ProblemEventDetail as xt, LayerMap as y, ChangeHook as yn, Api$5 as yr, PerfThermalLine as yt, FrameColumns as z, State$4 as zn, PauseReason as zr, Overlay as zt };
|