@vvfx/artis 0.0.1-alpha.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/LICENSE +22 -0
- package/dist/artis/artis.d.ts +44 -0
- package/dist/artis/base-artis.d.ts +520 -0
- package/dist/artis/canvas-layer-order.d.ts +19 -0
- package/dist/artis/create-info-to-schema.d.ts +21 -0
- package/dist/artis/index.d.ts +15 -0
- package/dist/artis/operations/index.d.ts +3 -0
- package/dist/artis/operations/operations.d.ts +362 -0
- package/dist/artis/operations/scene-operations.d.ts +26 -0
- package/dist/artis/operations/types.d.ts +39 -0
- package/dist/artis/scene-artis.d.ts +386 -0
- package/dist/artis/screenshot-service.d.ts +83 -0
- package/dist/artis/types.d.ts +130 -0
- package/dist/artis/wiring/index.d.ts +17 -0
- package/dist/artis/wiring/register-commands.d.ts +44 -0
- package/dist/artis/wiring/setup-commands.d.ts +5 -0
- package/dist/artis/wiring/setup-event-bindings.d.ts +16 -0
- package/dist/artis/wiring/setup-keybindings.d.ts +38 -0
- package/dist/artis/wiring/setup-plugins.d.ts +5 -0
- package/dist/artis/wiring/wiring-context.d.ts +34 -0
- package/dist/artis-sdk/artis-sdk.d.ts +1117 -0
- package/dist/artis-sdk/index.d.ts +1 -0
- package/dist/core/asset/asset-manager.d.ts +288 -0
- package/dist/core/asset/index.d.ts +3 -0
- package/dist/core/command/command-service.d.ts +315 -0
- package/dist/core/command/commands/composite-command.d.ts +45 -0
- package/dist/core/command/commands/frame-layout-command.d.ts +81 -0
- package/dist/core/command/commands/frame-layout-mode-command.d.ts +55 -0
- package/dist/core/command/commands/frame-move-in-command.d.ts +54 -0
- package/dist/core/command/commands/frame-move-out-command.d.ts +54 -0
- package/dist/core/command/commands/group-children-detach-command.d.ts +28 -0
- package/dist/core/command/commands/index.d.ts +98 -0
- package/dist/core/command/commands/item-align-command.d.ts +52 -0
- package/dist/core/command/commands/item-create-command.d.ts +66 -0
- package/dist/core/command/commands/item-delete-command.d.ts +40 -0
- package/dist/core/command/commands/item-distribute-command.d.ts +53 -0
- package/dist/core/command/commands/item-group-command.d.ts +41 -0
- package/dist/core/command/commands/item-reorder-command.d.ts +41 -0
- package/dist/core/command/commands/item-replace-source-command.d.ts +48 -0
- package/dist/core/command/commands/item-set-font-family-command.d.ts +46 -0
- package/dist/core/command/commands/item-set-generator-resource-command.d.ts +40 -0
- package/dist/core/command/commands/item-transform-command.d.ts +51 -0
- package/dist/core/command/commands/item-ungroup-command.d.ts +34 -0
- package/dist/core/command/commands/item-update-property-by-create-info-command.d.ts +41 -0
- package/dist/core/command/commands/item-update-property-command.d.ts +82 -0
- package/dist/core/command/commands/mask-commit-command.d.ts +53 -0
- package/dist/core/command/commands/page-auto-layout-command.d.ts +53 -0
- package/dist/core/command/commands/picture-cut-commit-command.d.ts +43 -0
- package/dist/core/command/commands/picture-expand-commit-command.d.ts +35 -0
- package/dist/core/command/commands/scene-switch-command.d.ts +35 -0
- package/dist/core/command/commands/selection-set-command.d.ts +38 -0
- package/dist/core/command/commands/sprite-image-command.d.ts +36 -0
- package/dist/core/command/commands/sprite-text-edit-commit-command.d.ts +43 -0
- package/dist/core/command/commands/state-hand-command.d.ts +14 -0
- package/dist/core/command/commands/state-image-cut-command.d.ts +14 -0
- package/dist/core/command/commands/state-image-expand-command.d.ts +14 -0
- package/dist/core/command/commands/state-image-mask-command.d.ts +15 -0
- package/dist/core/command/commands/state-image-text-edit-command.d.ts +14 -0
- package/dist/core/command/commands/state-item-create-command.d.ts +34 -0
- package/dist/core/command/commands/state-move-command.d.ts +14 -0
- package/dist/core/command/commands/state-switch-command-base.d.ts +41 -0
- package/dist/core/command/commands/text-move-command.d.ts +47 -0
- package/dist/core/command/commands/text-rotate-command.d.ts +52 -0
- package/dist/core/command/commands/text-scale-command.d.ts +56 -0
- package/dist/core/command/commands/text-update-content-command.d.ts +51 -0
- package/dist/core/command/commands/transform-move-command.d.ts +56 -0
- package/dist/core/command/commands/transform-move-with-frame-change-command.d.ts +80 -0
- package/dist/core/command/commands/transform-move-with-layout-command.d.ts +56 -0
- package/dist/core/command/commands/transform-rotate-command.d.ts +51 -0
- package/dist/core/command/commands/transform-scale-command.d.ts +54 -0
- package/dist/core/command/commands/video-play-command.d.ts +28 -0
- package/dist/core/command/commands/video-source-command.d.ts +39 -0
- package/dist/core/command/commands/viewport-fit-to-box-command.d.ts +37 -0
- package/dist/core/command/commands/viewport-fit-to-items-command.d.ts +43 -0
- package/dist/core/command/commands/viewport-move-command.d.ts +34 -0
- package/dist/core/command/commands/viewport-zoom-command.d.ts +35 -0
- package/dist/core/command/index.d.ts +5 -0
- package/dist/core/command/registry.d.ts +246 -0
- package/dist/core/command/types.d.ts +124 -0
- package/dist/core/element-registry/element-facade.d.ts +35 -0
- package/dist/core/element-registry/element-identity-strategy.d.ts +75 -0
- package/dist/core/element-registry/element-registry.d.ts +72 -0
- package/dist/core/element-registry/index.d.ts +5 -0
- package/dist/core/element-registry/types.d.ts +15 -0
- package/dist/core/gizmo/gizmo-bootstrap.d.ts +70 -0
- package/dist/core/gizmo/gizmo-command-binder.d.ts +55 -0
- package/dist/core/gizmo/gizmo-config-override.d.ts +24 -0
- package/dist/core/gizmo/gizmo-registry.d.ts +39 -0
- package/dist/core/gizmo/index.d.ts +19 -0
- package/dist/core/gizmo/register-gizmo-command-bindings.d.ts +20 -0
- package/dist/core/gizmo/state-gizmo-controller.d.ts +20 -0
- package/dist/core/history/history-manager.d.ts +174 -0
- package/dist/core/history/index.d.ts +1 -0
- package/dist/core/index.d.ts +25 -0
- package/dist/core/item/base-item.d.ts +154 -0
- package/dist/core/item/card-item.d.ts +91 -0
- package/dist/core/item/default-item-schema.d.ts +20 -0
- package/dist/core/item/effects-item.d.ts +99 -0
- package/dist/core/item/frame-item.d.ts +153 -0
- package/dist/core/item/generator-item.d.ts +114 -0
- package/dist/core/item/group-item.d.ts +51 -0
- package/dist/core/item/index.d.ts +25 -0
- package/dist/core/item/sprite-item.d.ts +80 -0
- package/dist/core/item/text-item.d.ts +171 -0
- package/dist/core/item/types.d.ts +158 -0
- package/dist/core/item/video-item.d.ts +120 -0
- package/dist/core/keybinding/index.d.ts +11 -0
- package/dist/core/keybinding/key-binding-controller.d.ts +44 -0
- package/dist/core/keybinding/key-binding-registry.d.ts +92 -0
- package/dist/core/keybinding/key-binding-store.d.ts +29 -0
- package/dist/core/keybinding/key-matcher.d.ts +24 -0
- package/dist/core/keybinding/types.d.ts +84 -0
- package/dist/core/plugin/index.d.ts +3 -0
- package/dist/core/plugin/io-plugin.d.ts +167 -0
- package/dist/core/plugin/plugin-system.d.ts +77 -0
- package/dist/core/predict/align-predict.d.ts +20 -0
- package/dist/core/predict/base/box-ops.d.ts +40 -0
- package/dist/core/predict/base/index.d.ts +14 -0
- package/dist/core/predict/base/parent-coord.d.ts +29 -0
- package/dist/core/predict/base/schema-box.d.ts +21 -0
- package/dist/core/predict/distribute-predict.d.ts +19 -0
- package/dist/core/predict/frame-layout-predict.d.ts +24 -0
- package/dist/core/predict/index.d.ts +12 -0
- package/dist/core/preferences/index.d.ts +2 -0
- package/dist/core/preferences/user-preferences-manager.d.ts +130 -0
- package/dist/core/quality/error-monitor/error-monitor-facade.d.ts +73 -0
- package/dist/core/quality/error-monitor/error-monitor.d.ts +106 -0
- package/dist/core/quality/error-monitor/index.d.ts +4 -0
- package/dist/core/quality/error-monitor/types.d.ts +198 -0
- package/dist/core/quality/index.d.ts +3 -0
- package/dist/core/quality/perf-monitor/index.d.ts +5 -0
- package/dist/core/quality/perf-monitor/perf-monitor-facade.d.ts +45 -0
- package/dist/core/quality/perf-monitor/perf-monitor.d.ts +60 -0
- package/dist/core/quality/perf-monitor/types.d.ts +66 -0
- package/dist/core/quality/stability-monitor/index.d.ts +5 -0
- package/dist/core/quality/stability-monitor/stability-monitor-facade.d.ts +50 -0
- package/dist/core/quality/stability-monitor/stability-monitor.d.ts +61 -0
- package/dist/core/quality/stability-monitor/types.d.ts +69 -0
- package/dist/core/renderer/background-controller.d.ts +56 -0
- package/dist/core/renderer/index.d.ts +5 -0
- package/dist/core/renderer/player-adapter.d.ts +129 -0
- package/dist/core/renderer/renderer.d.ts +134 -0
- package/dist/core/service/frame-service.d.ts +116 -0
- package/dist/core/service/index.d.ts +9 -0
- package/dist/core/service/interaction-providers.d.ts +20 -0
- package/dist/core/service/interaction-service.d.ts +211 -0
- package/dist/core/service/item-asset-service.d.ts +120 -0
- package/dist/core/service/item-creator-service.d.ts +211 -0
- package/dist/core/service/item-service.d.ts +641 -0
- package/dist/core/service/item-sync-service.d.ts +66 -0
- package/dist/core/service/json-scene-sync-service.d.ts +140 -0
- package/dist/core/service/refresh-animation-base-service.d.ts +1 -0
- package/dist/core/service/scene-data-assembler.d.ts +166 -0
- package/dist/core/service/view-service.d.ts +202 -0
- package/dist/core/state/base-state.d.ts +28 -0
- package/dist/core/state/index.d.ts +6 -0
- package/dist/core/state/presets.d.ts +25 -0
- package/dist/core/state/state-manager.d.ts +50 -0
- package/dist/core/state/types.d.ts +52 -0
- package/dist/core/store/index.d.ts +3 -0
- package/dist/core/store/scene-store.d.ts +194 -0
- package/dist/core/store/store.d.ts +36 -0
- package/dist/core/types/artis-config.d.ts +186 -0
- package/dist/core/types/artis-events.d.ts +101 -0
- package/dist/core/types/frame.d.ts +3 -0
- package/dist/core/types/generator.d.ts +28 -0
- package/dist/core/types/index.d.ts +15 -0
- package/dist/core/types/item-create-info.d.ts +205 -0
- package/dist/core/types/item-property.d.ts +149 -0
- package/dist/core/types/item-reorder.d.ts +12 -0
- package/dist/core/types/item-schema.d.ts +263 -0
- package/dist/core/types/item-set-property.d.ts +48 -0
- package/dist/core/types/page.d.ts +40 -0
- package/dist/core/types/sdk.d.ts +28 -0
- package/dist/core/types/view.d.ts +39 -0
- package/dist/helper/exporter/config.d.ts +18 -0
- package/dist/helper/exporter/const.d.ts +71 -0
- package/dist/helper/exporter/export-media.d.ts +189 -0
- package/dist/helper/exporter/exporter.d.ts +58 -0
- package/dist/helper/exporter/index.d.ts +2 -0
- package/dist/helper/exporter/types.d.ts +194 -0
- package/dist/helper/exporter/utils.d.ts +71 -0
- package/dist/helper/exporter/wav-audio.d.ts +35 -0
- package/dist/helper/html-overlay/anchor-navigation-runtime.d.ts +1 -0
- package/dist/helper/html-overlay/auto-height-layout.d.ts +16 -0
- package/dist/helper/html-overlay/auto-height-runtime.d.ts +40 -0
- package/dist/helper/html-overlay/document-runtime.d.ts +18 -0
- package/dist/helper/html-overlay/document-transform.d.ts +46 -0
- package/dist/helper/html-overlay/dom-order.d.ts +5 -0
- package/dist/helper/html-overlay/host-message-runtime.d.ts +15 -0
- package/dist/helper/html-overlay/html-capture-runtime.d.ts +12 -0
- package/dist/helper/html-overlay/html-card-service.d.ts +287 -0
- package/dist/helper/html-overlay/html-viewport-style.d.ts +6 -0
- package/dist/helper/html-overlay/index.d.ts +1 -0
- package/dist/helper/html-overlay/inline-script-json.d.ts +1 -0
- package/dist/helper/html-overlay/mime-utils.d.ts +13 -0
- package/dist/helper/html-overlay/overlay-transform.d.ts +30 -0
- package/dist/helper/html-overlay/path-utils.d.ts +34 -0
- package/dist/helper/html-overlay/runtime-context.d.ts +2 -0
- package/dist/helper/html-overlay/shell-runtime.d.ts +13 -0
- package/dist/helper/index.d.ts +5 -0
- package/dist/helper/scene-builder.d.ts +111 -0
- package/dist/helper/screen-shot.d.ts +51 -0
- package/dist/helper/size-adapt.d.ts +88 -0
- package/dist/index.cjs +69350 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.mjs +68963 -0
- package/dist/index.mjs.map +1 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/player.d.ts +9 -0
- package/dist/utils/background-manager.d.ts +76 -0
- package/dist/utils/common-utils.d.ts +39 -0
- package/dist/utils/container-size.d.ts +7 -0
- package/dist/utils/find-player-item.d.ts +9 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/json-data-utils.d.ts +198 -0
- package/dist/utils/layout-utils.d.ts +144 -0
- package/dist/utils/pixel-box-utils.d.ts +26 -0
- package/dist/utils/player-data-utils.d.ts +9 -0
- package/dist/utils/player-utils.d.ts +42 -0
- package/dist/utils/replay-utils.d.ts +22 -0
- package/dist/utils/types.d.ts +130 -0
- package/package.json +66 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { AnyArtisErrorInfo, ErrorMonitorCallback, ErrorMonitorDeps, ErrorPhase } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* ErrorMonitor - Artis 错误监控核心
|
|
4
|
+
*
|
|
5
|
+
* 职责:
|
|
6
|
+
* 1. 被 CommandService / GestureHandler / Artis 门面层 / Renderer 注入
|
|
7
|
+
* 2. 在各注入点 try/catch 中调用 report() 上报错误
|
|
8
|
+
* 3. 收集场景快照(轻量,无 GPU/渲染数据)
|
|
9
|
+
* 4. 节流去重:同一 errorKey 在 500ms 内只触发一次 onError 回调
|
|
10
|
+
*/
|
|
11
|
+
export declare class ErrorMonitor {
|
|
12
|
+
private _deps;
|
|
13
|
+
private _callback?;
|
|
14
|
+
/** 节流记录:errorKey → 最近上报时间戳 */
|
|
15
|
+
private _throttleMap;
|
|
16
|
+
/**
|
|
17
|
+
* 稳定性监测钩子:节流之前注入,记录全量原始错误流(含被节流丢弃的同 key 重复)。
|
|
18
|
+
* 由 StabilityMonitorFacade 注入,作出错率/同因聚集的原始信号源。
|
|
19
|
+
*/
|
|
20
|
+
private _stabilityHook?;
|
|
21
|
+
/**
|
|
22
|
+
* 构造错误监控器,注入依赖
|
|
23
|
+
*
|
|
24
|
+
* @param deps 依赖注入(历史/场景/视口等只读引用)
|
|
25
|
+
*/
|
|
26
|
+
constructor(deps: ErrorMonitorDeps);
|
|
27
|
+
/**
|
|
28
|
+
* 设置/更新错误回调
|
|
29
|
+
*
|
|
30
|
+
* @param callback 错误上报回调
|
|
31
|
+
*/
|
|
32
|
+
setCallback(callback: ErrorMonitorCallback): void;
|
|
33
|
+
/**
|
|
34
|
+
* 注入稳定性计数钩子(在 report() 节流之前触发,故记录到全量原始错误流)。
|
|
35
|
+
* 不动既有节流逻辑;未注入(undefined)时无副作用。
|
|
36
|
+
*
|
|
37
|
+
* @param cb 钩子回调;传 undefined 可解绑
|
|
38
|
+
*/
|
|
39
|
+
setStabilityHook(cb?: (info: {
|
|
40
|
+
errorKey: string;
|
|
41
|
+
timestamp: number;
|
|
42
|
+
phase: string;
|
|
43
|
+
}) => void): void;
|
|
44
|
+
/**
|
|
45
|
+
* 上报错误 - 所有注入点调用此方法。
|
|
46
|
+
*
|
|
47
|
+
* 与 {@link captureSnapshot} 的区别:本方法走「节流去重 + 触发 callback」的误差回调通道,
|
|
48
|
+
* 受「未装配 callback」短路(无回调时直接 return,不抓快照、不触发)。节流与稳定性钩子
|
|
49
|
+
* 仅在 report 路径生效;captureSnapshot 不节流、不依赖 callback,供 error 事件按需逐条产出载荷。
|
|
50
|
+
*
|
|
51
|
+
* @param error 原始错误(任意类型,内部统一转为 Error)
|
|
52
|
+
* @param phase 错误阶段
|
|
53
|
+
* @param ctx 附加上下文(gizmoType / commandId / methodName)
|
|
54
|
+
* @param capturedInfo 可选的已捕获载荷,供业务事件与监控回调复用同一份快照
|
|
55
|
+
*/
|
|
56
|
+
report(error: unknown, phase: ErrorPhase, ctx?: {
|
|
57
|
+
gizmoType?: string;
|
|
58
|
+
commandId?: string;
|
|
59
|
+
methodName?: string;
|
|
60
|
+
}, capturedInfo?: AnyArtisErrorInfo): void;
|
|
61
|
+
/**
|
|
62
|
+
* 产出错误快照 - 不节流、不依赖 callback,任何时候调都返回完整 {@link AnyArtisErrorInfo}。
|
|
63
|
+
*
|
|
64
|
+
* 供 `ArtisEvents['error']` 事件出口复用:error 事件作业务出口,不依赖 enableErrorMonitor
|
|
65
|
+
* 回调(误差回调通道默认关闭),emit('error') 时调用本方法产出「场景快照 + 最近 5 条 Command」
|
|
66
|
+
* 载荷。节流/去重归误差回调通道({@link report})独有,事件通道按需逐条 emit、去重由宿主自定。
|
|
67
|
+
*
|
|
68
|
+
* 各 getter 经 _safeGet 兜底:上报/emit 瞬间任一 getter 抛错都不阻断整条快照,退化为安全默认值。
|
|
69
|
+
*
|
|
70
|
+
* @param error 原始错误(任意类型,内部统一转为 Error)
|
|
71
|
+
* @param phase 错误阶段
|
|
72
|
+
* @param ctx 附加上下文(gizmoType / commandId / methodName)
|
|
73
|
+
* @param timestamp 可选时间戳(report 路径传入其节流判定后的 now;省略时取调用瞬间)
|
|
74
|
+
*/
|
|
75
|
+
captureSnapshot(error: unknown, phase: ErrorPhase, ctx?: {
|
|
76
|
+
gizmoType?: string;
|
|
77
|
+
commandId?: string;
|
|
78
|
+
methodName?: string;
|
|
79
|
+
}, timestamp?: number): AnyArtisErrorInfo;
|
|
80
|
+
/**
|
|
81
|
+
* 清理节流记录与回调引用(dispose 时调用)
|
|
82
|
+
*/
|
|
83
|
+
dispose(): void;
|
|
84
|
+
/**
|
|
85
|
+
* 捕获最近 5 条 Command 快照
|
|
86
|
+
*
|
|
87
|
+
* @returns 最近 Command 的快照列表
|
|
88
|
+
*/
|
|
89
|
+
private _captureRecentCommands;
|
|
90
|
+
/**
|
|
91
|
+
* 捕获场景轻量快照的共有部分(视图大小 / 视口参数 / 还原数据 preItems)。
|
|
92
|
+
* items / selectedItems / 变体专属字段由 getArtisErrorSnapshot 在 report 时合并(各子类产出),
|
|
93
|
+
* 本方法只负责基类/Artis/SceneArtis 共有的部分。
|
|
94
|
+
*
|
|
95
|
+
* 所有 getter 经 _safeGet 兜底:上报瞬间任一 getter 抛错都不阻断整条快照,
|
|
96
|
+
* 退化为安全默认值(sceneSize 0、viewport zoom 1 / 位移 0 / contentRatio 1)。
|
|
97
|
+
*
|
|
98
|
+
* @returns 共有场景快照
|
|
99
|
+
*/
|
|
100
|
+
private _captureBaseSnapshot;
|
|
101
|
+
/**
|
|
102
|
+
* 安全调用可选 getter:取值或捕获异常返回 undefined。供变体专属快照与共有 getter 取值兜底,
|
|
103
|
+
* 避免上报瞬间某个 getter 抛错导致整条快照丢失。
|
|
104
|
+
*/
|
|
105
|
+
private _safeGet;
|
|
106
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { ErrorMonitor } from './error-monitor';
|
|
2
|
+
export type { ArtisErrorInfo, ArtisErrorInfoBase, AnyArtisErrorInfo, SceneArtisErrorInfo, ErrorPhase, CommandSnapshot, SceneSnapshotBase, ArtisSnapshot, ArtisSnapshotExtras, SceneArtisSnapshot, SceneArtisSnapshotExtras, VariantErrorSnapshot, ItemSnapshot, ErrorMonitorCallback, ErrorMonitorDeps, } from './types';
|
|
3
|
+
export { ErrorMonitorFacade } from './error-monitor-facade';
|
|
4
|
+
export type { ErrorMonitorContext, ErrorMonitorFacadeTarget } from './error-monitor-facade';
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import type { spec } from '../../../shared';
|
|
2
|
+
import type { SceneEntrySnapshot } from '../../store';
|
|
3
|
+
/**
|
|
4
|
+
* 元素完整数据快照(直接用 toSchema 序列化,类型为 ItemSchema 的 JSON-safe 子集)
|
|
5
|
+
*/
|
|
6
|
+
export type ItemSnapshot = Record<string, unknown>;
|
|
7
|
+
/**
|
|
8
|
+
* 错误发生的阶段
|
|
9
|
+
*/
|
|
10
|
+
export type ErrorPhase = 'gizmo-init' | 'gizmo-actionstart' | 'gizmo-actionupdate' | 'gizmo-actioncommit' | 'gizmo-key' | 'gizmo-draw' | 'command-execute' | 'command-undo' | 'command-redo' | 'method' | 'renderer' | 'item-create' | 'resource-load' | 'interaction';
|
|
11
|
+
/**
|
|
12
|
+
* 最近 Command 的快照
|
|
13
|
+
* commandId: command 类型标识
|
|
14
|
+
* stackIndex: 在历史栈中的位置(0 = 最新)
|
|
15
|
+
* params: command 执行时携带的关键参数(从 command 实例上提取,可能为空)
|
|
16
|
+
* args: 工厂入参的 JSON-safe 序列化(用于复现页正向重放,不可序列化项以 null 占位)
|
|
17
|
+
* replayable: args 是否完整可重放(含函数/循环引用/实例引用等不可序列化项时为 false)
|
|
18
|
+
*/
|
|
19
|
+
export type CommandSnapshot = {
|
|
20
|
+
commandId: string;
|
|
21
|
+
stackIndex: number;
|
|
22
|
+
/** Command 执行时的关键参数(从实例上 _params / params 字段提取,无则为空对象) */
|
|
23
|
+
params: Record<string, unknown>;
|
|
24
|
+
/** 工厂入参序列化结果(单参对象,key-value),供复现页按 commandId + args 正向重放 */
|
|
25
|
+
args: Record<string, unknown>;
|
|
26
|
+
/** args 是否完整可重放;false 时复现页跳过执行并标注,仅展示上报时态 */
|
|
27
|
+
replayable: boolean;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* 场景快照共有部分 - 只保存核心数据,不含实时渲染/GPU 数据。
|
|
31
|
+
* BaseArtis / Artis / SceneArtis 共享;items / selectedItems 等元素数据下沉到
|
|
32
|
+
* {@link ArtisSnapshot} / {@link SceneArtisSnapshot} 各子类专属扩展。
|
|
33
|
+
*/
|
|
34
|
+
export type SceneSnapshotBase = {
|
|
35
|
+
/** 视图大小(画布内容区域的宽高,由 ViewService.size 提供) */
|
|
36
|
+
sceneSize: {
|
|
37
|
+
width: number;
|
|
38
|
+
height: number;
|
|
39
|
+
};
|
|
40
|
+
/** 视图参数(缩放 / 位移 / 内容缩放比)。contentRatio 由 ViewService 提供,子类各自覆盖。 */
|
|
41
|
+
viewport: {
|
|
42
|
+
zoom: number;
|
|
43
|
+
translation: [number, number];
|
|
44
|
+
size: [number, number];
|
|
45
|
+
contentRatio: number;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* 还原数据:撤销最近 N 条已成功入栈 Command 后的元素态(交互初始前数据)。
|
|
49
|
+
* 由 ErrorMonitor 上报瞬间用活的 HistoryManager 撤销取快照再 redo 回正得到,
|
|
50
|
+
* 比测试页从 JSON 反推更确定性。撤销失败或不可用时缺省。
|
|
51
|
+
*/
|
|
52
|
+
preItems?: ItemSnapshot[];
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Artis(编辑数据驱动)相对共有部分的增量字段(hook payload)。
|
|
56
|
+
* 由 Artis._captureErrorSnapshot 产出;ErrorMonitor 合并 SceneSnapshotBase 后得完整 {@link ArtisSnapshot}。
|
|
57
|
+
*/
|
|
58
|
+
export type ArtisSnapshotExtras = {
|
|
59
|
+
/** 场景中所有元素的完整数据(ItemSchema,toSchema 序列化,不含 GPU/纹理对象) */
|
|
60
|
+
items: ItemSnapshot[];
|
|
61
|
+
/** 当前选中元素 ID 列表(激活数据=选中元素) */
|
|
62
|
+
selectedItems: string[];
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Artis(编辑数据驱动)完整场景错误快照 = 共有部分 + Artis 增量。
|
|
66
|
+
* 与 `variant: 'Artis'` tag 绑定。消费方 narrow 到 ArtisErrorInfo 后即得本类型
|
|
67
|
+
* (含 sceneSize/viewport/preItems/items,无需再与 SceneSnapshotBase 求交)。
|
|
68
|
+
*/
|
|
69
|
+
export type ArtisSnapshot = SceneSnapshotBase & ArtisSnapshotExtras;
|
|
70
|
+
/**
|
|
71
|
+
* SceneArtis(多场景播放)相对共有部分的增量字段(hook payload)。
|
|
72
|
+
* 由 SceneArtis._captureErrorSnapshot 产出;ErrorMonitor 合并 SceneSnapshotBase 后得完整 {@link SceneArtisSnapshot}。
|
|
73
|
+
* items 不纳入(复现时 runtime 直接重新 assemble,走 scenes/entries 重建)。
|
|
74
|
+
*
|
|
75
|
+
* 注:内容缩放比 contentRatio 落在共有层 {@link SceneSnapshotBase.viewport},
|
|
76
|
+
* 不在此重复(复现侧按 clipMode 经 widthRatio/heightRatio 经 setRatios 还原即可)。
|
|
77
|
+
*/
|
|
78
|
+
export type SceneArtisSnapshotExtras = {
|
|
79
|
+
/**
|
|
80
|
+
* 所有视图的 JSONScene 深克隆数组(兼容后备路径,无结构字段)。
|
|
81
|
+
*/
|
|
82
|
+
scenes?: spec.JSONScene[];
|
|
83
|
+
/**
|
|
84
|
+
* 所有视图的结构快照(SceneEntrySnapshot[]),回带 source/adapt/originScene/readonly/id 等结构字段,
|
|
85
|
+
* 供复现页走 SceneArtis.reproduce 保真重建。与 scenes 并存(后者做兼容后备)。
|
|
86
|
+
*/
|
|
87
|
+
sceneEntries?: SceneEntrySnapshot[];
|
|
88
|
+
/** 当前激活 Scene id,供复现页还原激活场景。 */
|
|
89
|
+
activeSceneId?: string;
|
|
90
|
+
/** 当前选中元素 ID 列表。 */
|
|
91
|
+
selectedItems: string[];
|
|
92
|
+
/** 视图参数:宽度轴缩放比(供复现 refreshContentScale 还原)。 */
|
|
93
|
+
widthRatio: number;
|
|
94
|
+
/** 视图参数:高度轴缩放比(供复现 refreshContentScale 还原)。 */
|
|
95
|
+
heightRatio: number;
|
|
96
|
+
/** 报错时播放游标,供复现页 goto 还原游标。 */
|
|
97
|
+
sceneTime?: number;
|
|
98
|
+
/** 报错时播放态,供复现页还原播放/停止态。 */
|
|
99
|
+
scenePlaying?: boolean;
|
|
100
|
+
/** 首个 origin 是否只读(展示标准产物),供复现页还原只读态。 */
|
|
101
|
+
standardProduct?: boolean;
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* SceneArtis(多场景播放)完整场景错误快照 = 共有部分 + SceneArtis 增量。
|
|
105
|
+
* 与 `variant: 'SceneArtis'` tag 绑定。
|
|
106
|
+
*/
|
|
107
|
+
export type SceneArtisSnapshot = SceneSnapshotBase & SceneArtisSnapshotExtras;
|
|
108
|
+
/**
|
|
109
|
+
* 变体专属错误快照 payload(tag 与 snapshot 增量形态由判别联合编译期绑定)。
|
|
110
|
+
* 由 BaseArtis._captureErrorSnapshot 产出(基类返回 undefined,Artis / SceneArtis 各自 override),
|
|
111
|
+
* 仅含变体增量字段({@link ArtisSnapshotExtras} / {@link SceneArtisSnapshotExtras})。
|
|
112
|
+
*
|
|
113
|
+
* 共有部分(sceneSize/viewport/preItems)由 ErrorMonitor 独立鲁棒捕获后合并,故意不纳入 hook 产出:
|
|
114
|
+
* 变体 hook 在上报瞬间可能抛错,独立捕获保证 base(关键复现上下文)不丢。
|
|
115
|
+
* tag 与对应增量形态一一对应,杜绝"变体标识与快照形态不一致"的标签撒谎。
|
|
116
|
+
*/
|
|
117
|
+
export type VariantErrorSnapshot = {
|
|
118
|
+
variant: 'Artis';
|
|
119
|
+
snapshot: ArtisSnapshotExtras;
|
|
120
|
+
} | {
|
|
121
|
+
variant: 'SceneArtis';
|
|
122
|
+
snapshot: SceneArtisSnapshotExtras;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* 错误上报信息共有部分(BaseArtis / Artis / SceneArtis 共享)。
|
|
126
|
+
* artisVariant 落在共有层供消费方判别走 Artis / SceneArtis 复现路径。
|
|
127
|
+
*/
|
|
128
|
+
export type ArtisErrorInfoBase = {
|
|
129
|
+
phase: ErrorPhase;
|
|
130
|
+
error: Error;
|
|
131
|
+
gizmoType?: string;
|
|
132
|
+
commandId?: string;
|
|
133
|
+
methodName?: string;
|
|
134
|
+
/**
|
|
135
|
+
* 报错时实际运行的 Artis 变体(取对应类名),供复现页据此选择对应类初始化场景。
|
|
136
|
+
* - 'BaseArtis':基类(不应被直接实例化,仅为类型完备保留)
|
|
137
|
+
* - 'Artis':编辑器场景(Artis 类,elementId 与 vfxItemId 分离)
|
|
138
|
+
* - 'SceneArtis':多场景播放场景(SceneArtis 类,id===vfxItemId)
|
|
139
|
+
* 缺省 'Artis'(向后兼容无该字段的旧快照)
|
|
140
|
+
*/
|
|
141
|
+
artisVariant?: 'BaseArtis' | 'Artis' | 'SceneArtis';
|
|
142
|
+
/** 最近执行的 5 条 Command(含执行参数摘要) */
|
|
143
|
+
recentCommands: CommandSnapshot[];
|
|
144
|
+
/** 顶层别名,便于复现页直接取交互初始前元素态(同 snapshot.preItems) */
|
|
145
|
+
preItems?: ItemSnapshot[];
|
|
146
|
+
timestamp: number;
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Artis(编辑数据驱动)错误上报信息:snapshot 为完整 ArtisSnapshot(含共有 + items/selectedItems)。
|
|
150
|
+
*/
|
|
151
|
+
export type ArtisErrorInfo = ArtisErrorInfoBase & {
|
|
152
|
+
artisVariant?: 'Artis';
|
|
153
|
+
snapshot: ArtisSnapshot;
|
|
154
|
+
};
|
|
155
|
+
/**
|
|
156
|
+
* SceneArtis(多场景播放)错误上报信息:snapshot 为完整 SceneArtisSnapshot
|
|
157
|
+
* (含共有 + scenes/entries/激活场景/selectedItems/视图 ratios 等)。
|
|
158
|
+
*/
|
|
159
|
+
export type SceneArtisErrorInfo = ArtisErrorInfoBase & {
|
|
160
|
+
artisVariant: 'SceneArtis';
|
|
161
|
+
snapshot: SceneArtisSnapshot;
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* 完整错误上报信息(判别联合):消费方按 artisVariant narrow 出子类专属字段。
|
|
165
|
+
*/
|
|
166
|
+
export type AnyArtisErrorInfo = ArtisErrorInfo | SceneArtisErrorInfo;
|
|
167
|
+
/** 错误监听回调类型(接收判别联合,回调内按 artisVariant narrow) */
|
|
168
|
+
export type ErrorMonitorCallback = (info: AnyArtisErrorInfo) => void;
|
|
169
|
+
/**
|
|
170
|
+
* ErrorMonitor 依赖注入接口(由 Artis 提供只读引用)。
|
|
171
|
+
* 共有 getter 由基类提供;变体 tag 与专属快照扩展统一经 getArtisErrorSnapshot 一次性产出
|
|
172
|
+
* (Artis / SceneArtis 各自注入,tag 与 snapshot 形态由 {@link VariantErrorSnapshot} 绑定)。
|
|
173
|
+
*/
|
|
174
|
+
export type ErrorMonitorDeps = {
|
|
175
|
+
getRecentCommands: (count: number) => CommandSnapshot[];
|
|
176
|
+
getSceneSize: () => {
|
|
177
|
+
width: number;
|
|
178
|
+
height: number;
|
|
179
|
+
};
|
|
180
|
+
getViewport: () => {
|
|
181
|
+
zoom: number;
|
|
182
|
+
translation: [number, number];
|
|
183
|
+
size: [number, number];
|
|
184
|
+
contentRatio: number;
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* 撤销最近 count 条已成功入栈 Command 后取元素快照,再 redo 回正。
|
|
188
|
+
* 用于上报瞬间确定性捕获"交互初始前数据"(还原数据)。撤销失败或不可用时返回 undefined。
|
|
189
|
+
* 必须保证调用前后历史指针与场景态不变(纯读)。
|
|
190
|
+
*/
|
|
191
|
+
snapshotBeforeRecentCommands: (count: number) => ItemSnapshot[] | undefined;
|
|
192
|
+
/**
|
|
193
|
+
* 取变体专属错误快照(variant tag + 对应形态 snapshot),由 Artis / SceneArtis 各自注入。
|
|
194
|
+
* 基类不注入(返回 undefined),快照仅含共有字段、artisVariant 兜底为 'Artis'。
|
|
195
|
+
* 返回 undefined / 抛错时同上兜底,不丢整条快照。
|
|
196
|
+
*/
|
|
197
|
+
getArtisErrorSnapshot?: () => VariantErrorSnapshot | undefined;
|
|
198
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { PerfMonitor } from './perf-monitor';
|
|
2
|
+
export { PerfPhase } from './types';
|
|
3
|
+
export type { PerfPhaseToken, PerfMetric, PerfReport, PerfMonitorCallback, PerfMonitorDeps, } from './types';
|
|
4
|
+
export { PerfMonitorFacade } from './perf-monitor-facade';
|
|
5
|
+
export type { PerfMonitorContext } from './perf-monitor-facade';
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { PerfMonitor } from './perf-monitor';
|
|
2
|
+
import type { PerfMonitorCallback } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* PerfMonitorFacade 装配所需的最小上下文:被监测实例引用。
|
|
5
|
+
*
|
|
6
|
+
* perf-monitor 不反向依赖业务服务,时间源由 facade 内部用 performance.now() 提供,
|
|
7
|
+
* 故上下文远比 ErrorMonitorFacade 轻,无需注入 history/command/item 等服务。
|
|
8
|
+
*/
|
|
9
|
+
export type PerfMonitorContext = {
|
|
10
|
+
readonly target: Record<string, unknown>;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* PerfMonitorFacade - 性能监测门面协作者。
|
|
14
|
+
*
|
|
15
|
+
* 从 BaseArtis 抽离,承载 PerfMonitor 的创建与回调注入,对齐 ErrorMonitorFacade 模式。
|
|
16
|
+
*
|
|
17
|
+
* 双开关:
|
|
18
|
+
* - 构造开关 options.perf → BaseArtis 构造期调 install() 预装配(采得到 INIT 段,无 callback 仅累积)
|
|
19
|
+
* - 运行期开关 enablePerfMonitor(cb) → 任何时候装配/换回调;与构造装配共享同一实例
|
|
20
|
+
*
|
|
21
|
+
* 未装配时 monitor 为 undefined,BaseArtis 各阶段经可选链短路,零开销。
|
|
22
|
+
* 与 ErrorMonitorFacade 不同:perf-monitor 是主动 mark/measure,故 facade 暴露 monitor 取用器。
|
|
23
|
+
*/
|
|
24
|
+
export declare class PerfMonitorFacade {
|
|
25
|
+
private _monitor?;
|
|
26
|
+
/**
|
|
27
|
+
* 取底层 PerfMonitor(供 BaseArtis 各阶段 mark/measure)。
|
|
28
|
+
* 未装配时返回 undefined,调用方用可选链短路。
|
|
29
|
+
*/
|
|
30
|
+
get monitor(): PerfMonitor | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* 装配 PerfMonitor(幂等)。
|
|
33
|
+
* 构造开关场景无 callback,仅装配采集器;运行期开关场景带 callback 一并设置。
|
|
34
|
+
*/
|
|
35
|
+
install(callback?: PerfMonitorCallback): void;
|
|
36
|
+
/**
|
|
37
|
+
* 开启/换上报回调。已装配只更新回调,未装配才新建。
|
|
38
|
+
* 与 install() 共用同一实例:构造期已 install 过时此处仅 setCallback。
|
|
39
|
+
*/
|
|
40
|
+
enable(callback: PerfMonitorCallback): void;
|
|
41
|
+
/**
|
|
42
|
+
* 销毁监测器(清标记/度量/回调)。
|
|
43
|
+
*/
|
|
44
|
+
dispose(): void;
|
|
45
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { PerfMetric, PerfMonitorCallback, PerfMonitorDeps, PerfPhaseToken } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* PerfMonitor - Artis 性能监测核心
|
|
4
|
+
*
|
|
5
|
+
* 职责:
|
|
6
|
+
* 1. 提供 mark/measure 两级 API:mark 打起始标记、measure 结算耗时并生成 metric
|
|
7
|
+
* 2. 累积 metrics,供 report() 聚合后回调上报
|
|
8
|
+
* 3. 零反向依赖:不引用业务服务,时间来源经 deps 注入
|
|
9
|
+
*
|
|
10
|
+
* 设计参照 ErrorMonitor:被 PerfMonitorFacade 持有,由 BaseArtis 各阶段
|
|
11
|
+
* 经可选链调用 mark/measure(未 enable 时 facade 不存在,自动短路零开销)。
|
|
12
|
+
*/
|
|
13
|
+
export declare class PerfMonitor {
|
|
14
|
+
private _deps;
|
|
15
|
+
private _callback?;
|
|
16
|
+
/** markId → 起始时间戳 */
|
|
17
|
+
private _marks;
|
|
18
|
+
/** 已结算的度量累积区,report() 一并吐出后清空 */
|
|
19
|
+
private _metrics;
|
|
20
|
+
/**
|
|
21
|
+
* 构造性能监测器,注入时间依赖
|
|
22
|
+
*
|
|
23
|
+
* @param deps 依赖注入(时间源 now)
|
|
24
|
+
*/
|
|
25
|
+
constructor(deps: PerfMonitorDeps);
|
|
26
|
+
/**
|
|
27
|
+
* 设置/更新上报回调
|
|
28
|
+
*
|
|
29
|
+
* 构造开关开启但 callback 未补时 metric 仍累积,待 enablePerfMonitor
|
|
30
|
+
* 补回调后由 report() 一并吐出,保证"先 new(perf:true) 后 enable(cb)"顺序下 INIT 不丢。
|
|
31
|
+
*
|
|
32
|
+
* @param callback 性能上报回调
|
|
33
|
+
*/
|
|
34
|
+
setCallback(callback: PerfMonitorCallback): void;
|
|
35
|
+
/**
|
|
36
|
+
* 打起始标记
|
|
37
|
+
*
|
|
38
|
+
* @param id 标记唯一 id(由调用方自定,如 'init'、'scene-build')
|
|
39
|
+
*/
|
|
40
|
+
mark(id: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* 结算标记并生成度量,存入累积区
|
|
43
|
+
*
|
|
44
|
+
* @param id mark 时用的 id
|
|
45
|
+
* @param phase 性能阶段
|
|
46
|
+
* @param context 附加上下文(资源 url / assetType 等)
|
|
47
|
+
* @returns 度量记录;id 未 mark 过则返回 undefined
|
|
48
|
+
*/
|
|
49
|
+
measure(id: string, phase: PerfPhaseToken, context?: Record<string, unknown>): PerfMetric | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* 主动上报当前累积度量(如 emit('ready') 时整体上报)
|
|
52
|
+
*
|
|
53
|
+
* 无 callback 或无累积度量时静默返回;回调异常静默处理,不污染主流程。
|
|
54
|
+
*/
|
|
55
|
+
report(): void;
|
|
56
|
+
/**
|
|
57
|
+
* 清理标记 / 度量 / 回调(dispose 时调用)
|
|
58
|
+
*/
|
|
59
|
+
dispose(): void;
|
|
60
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 性能监测阶段
|
|
3
|
+
*
|
|
4
|
+
* 对应 Artis 生命周期可打点的耗时节点:
|
|
5
|
+
* - INIT BaseArtis 构造(base-artis.ts:138 构造首行 → :207 emit('init'))
|
|
6
|
+
* - RESOURCE_LOAD 资源加载(image/video/effects/frame,item-asset-service.ts)
|
|
7
|
+
* - SCENE_BUILD SceneArtis.run 阶段 A(scene-artis.ts:131 build)
|
|
8
|
+
* - SCENE_ASSEMBLE SceneArtis.run 阶段 C(scene-artis.ts:147 反向装配)
|
|
9
|
+
* - SCENE_RENDER 阶段 B Player 加载 + 阶段 D 首帧(scene-artis.ts:143 / :158)
|
|
10
|
+
* - GIZMO_PREPARE prepareGizmo(scene-artis.ts:151)
|
|
11
|
+
* - READY new Artis() → emit('ready') 总时长(base-artis.ts:492)
|
|
12
|
+
* - METHOD 门面公开方法耗时(可选,对齐 error-monitor wrap)
|
|
13
|
+
*/
|
|
14
|
+
export declare enum PerfPhase {
|
|
15
|
+
INIT = "init",
|
|
16
|
+
RESOURCE_LOAD = "resource-load",
|
|
17
|
+
SCENE_BUILD = "scene-build",
|
|
18
|
+
SCENE_ASSEMBLE = "scene-assemble",
|
|
19
|
+
SCENE_RENDER = "scene-render",
|
|
20
|
+
GIZMO_PREPARE = "gizmo-prepare",
|
|
21
|
+
READY = "ready",
|
|
22
|
+
METHOD = "method"
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 性能阶段标识:枚举常量 + 容纳外部自定义阶段
|
|
26
|
+
*
|
|
27
|
+
* 用 `Enum | (string & {})` 形式:保留 IDE 补全 + 允许业务方扩展自有阶段,
|
|
28
|
+
* 不写死纯 union(与 CLAUDE.md 枚举集合规范一致)。
|
|
29
|
+
*/
|
|
30
|
+
export type PerfPhaseToken = PerfPhase | (string & {});
|
|
31
|
+
/**
|
|
32
|
+
* 单条性能度量记录
|
|
33
|
+
*/
|
|
34
|
+
export type PerfMetric = {
|
|
35
|
+
/** 性能阶段 */
|
|
36
|
+
phase: PerfPhaseToken;
|
|
37
|
+
/** 耗时 ms(end - start) */
|
|
38
|
+
duration: number;
|
|
39
|
+
/** 起始时间戳(performance.now 域) */
|
|
40
|
+
startTime: number;
|
|
41
|
+
/** 附加上下文:如资源 url / assetType / itemId / commandId */
|
|
42
|
+
context?: Record<string, unknown>;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* 一次上报聚合信息
|
|
46
|
+
*/
|
|
47
|
+
export type PerfReport = {
|
|
48
|
+
/** 本次上报的度量集合 */
|
|
49
|
+
metrics: PerfMetric[];
|
|
50
|
+
/** 关键总耗时(READY 阶段才填,从构造到 ready 的总时长) */
|
|
51
|
+
totalDuration?: number;
|
|
52
|
+
/** 上报时间戳(performance.now 域) */
|
|
53
|
+
timestamp: number;
|
|
54
|
+
};
|
|
55
|
+
/** 性能上报回调类型 */
|
|
56
|
+
export type PerfMonitorCallback = (report: PerfReport) => void;
|
|
57
|
+
/**
|
|
58
|
+
* PerfMonitor 依赖注入接口(纯读 + 时间源)
|
|
59
|
+
*
|
|
60
|
+
* perf-monitor 不反向依赖任何业务服务:仅通过 now() 取时间戳,
|
|
61
|
+
* 场景/历史等上下文由打点调用方经 context 字段透传,避免循环依赖。
|
|
62
|
+
*/
|
|
63
|
+
export type PerfMonitorDeps = {
|
|
64
|
+
/** 时间源,便于测试注入;生产用 () => performance.now() */
|
|
65
|
+
now: () => number;
|
|
66
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { StabilityMonitor } from './stability-monitor';
|
|
2
|
+
export { StabilitySignal } from './types';
|
|
3
|
+
export type { StabilitySignalToken, HealthState, StabilityReport, StabilityMonitorCallback, StabilityMonitorDeps, RecommendedAction, RecommendedActionToken, } from './types';
|
|
4
|
+
export { StabilityMonitorFacade } from './stability-monitor-facade';
|
|
5
|
+
export type { StabilityMonitorContext } from './stability-monitor-facade';
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { ErrorMonitor } from '../error-monitor';
|
|
2
|
+
import type { StabilityMonitorCallback } from './types';
|
|
3
|
+
import type { Renderer } from '../../renderer';
|
|
4
|
+
/**
|
|
5
|
+
* StabilityMonitorFacade 装配所需的最小上下文。
|
|
6
|
+
*
|
|
7
|
+
* - renderer:取 playerAdapter 订阅 'contextLost'(独立信号,不依赖 error)
|
|
8
|
+
* - getErrorMonitor:可选,返回当前 ErrorMonitor(用于注入节流前错误钩子);
|
|
9
|
+
* error 未开启时返回 undefined,error 类信号不工作
|
|
10
|
+
*/
|
|
11
|
+
export type StabilityMonitorContext = {
|
|
12
|
+
readonly renderer: Renderer;
|
|
13
|
+
readonly getErrorMonitor: () => ErrorMonitor | undefined;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* StabilityMonitorFacade - 稳定性监测门面协作者。
|
|
17
|
+
*
|
|
18
|
+
* 装配照 BaseArtis _errorFacade / _perfFacade 模式(按需创建 + dispose 清理),
|
|
19
|
+
* 但内部是 stateful 聚合器:订阅 error 节流前钩子 + playerAdapter 'contextLost'
|
|
20
|
+
* → StabilityMonitor 维护 1 分钟滑动窗口 → onHealthChange 事件外达宿主。
|
|
21
|
+
*
|
|
22
|
+
* 形态与 error/perf 不同:
|
|
23
|
+
* - context-lost / fps 独立信号,error 未开启也能工作;
|
|
24
|
+
* - error 类信号靠 injectError 接入节流前钩子(注意 enable 顺序:先 stability 后 error 时由 BaseArtis 补连)。
|
|
25
|
+
*/
|
|
26
|
+
export declare class StabilityMonitorFacade {
|
|
27
|
+
private _monitor?;
|
|
28
|
+
private readonly _ctx;
|
|
29
|
+
private _unsubContextLost?;
|
|
30
|
+
constructor(ctx: StabilityMonitorContext);
|
|
31
|
+
/**
|
|
32
|
+
* 开启稳定性监测。创建 StabilityMonitor → 注入 error 钩子(若 error 已开启)→
|
|
33
|
+
* 订阅 contextLost → 设置回调。重复调用仅更新回调。
|
|
34
|
+
*/
|
|
35
|
+
enable(callback: StabilityMonitorCallback): void;
|
|
36
|
+
/**
|
|
37
|
+
* 补连 error 钩子(error 延迟开启时由 BaseArtis.enableErrorMonitor 调用)。
|
|
38
|
+
* 若监测器未启用或已接入 error,则为空操作。
|
|
39
|
+
*/
|
|
40
|
+
attachError(): void;
|
|
41
|
+
/** 销毁监测器(清窗口/订阅/回调) */
|
|
42
|
+
dispose(): void;
|
|
43
|
+
/**
|
|
44
|
+
* 经 ErrorMonitor.setStabilityHook 把节流前错误流接入监测器。
|
|
45
|
+
* error 未开启(monitor 为 undefined)时跳过——由 attachError 在 error 开启后补连。
|
|
46
|
+
*/
|
|
47
|
+
private _injectError;
|
|
48
|
+
/** 订阅 playerAdapter 'contextLost'/'contextRestored' → monitor 降权/恢复(P0 瞬态信号) */
|
|
49
|
+
private _subscribeContextLost;
|
|
50
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { StabilityMonitorCallback, StabilityMonitorDeps } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* StabilityMonitor - Artis 稳定性监测核心(stateful 聚合器)
|
|
4
|
+
*
|
|
5
|
+
* 形态与 ErrorMonitor / PerfMonitor 不同:非被动逐条上报,
|
|
6
|
+
* 而是「订阅 error 节流前钩子 + 独立采样新信号 → 1 分钟滑动窗口聚合 → onHealthChange」。
|
|
7
|
+
*
|
|
8
|
+
* context-lost / fps 等独立信号不依赖 error 订阅,error 未开启时仍工作。
|
|
9
|
+
* 由 StabilityMonitorFacade 持有并注入 deps;未 enable 时不存在,零开销。
|
|
10
|
+
*/
|
|
11
|
+
export declare class StabilityMonitor {
|
|
12
|
+
private _deps;
|
|
13
|
+
private _callback?;
|
|
14
|
+
/** errorKey → 窗口内时间戳数组(落地过期) */
|
|
15
|
+
private _errorWindow;
|
|
16
|
+
private _health;
|
|
17
|
+
private _unsubError?;
|
|
18
|
+
private _disposed;
|
|
19
|
+
/**
|
|
20
|
+
* 构造稳定性监测器,注入时间源与可选 error 订阅
|
|
21
|
+
*
|
|
22
|
+
* @param deps 依赖注入(now 时间源;onError 可选 error 节流前钩子订阅)
|
|
23
|
+
*/
|
|
24
|
+
constructor(deps: StabilityMonitorDeps);
|
|
25
|
+
/** 设置/更新健康度变化回调 */
|
|
26
|
+
setCallback(callback: StabilityMonitorCallback): void;
|
|
27
|
+
/**
|
|
28
|
+
* 接入 error 节流前错误流(幂等)。
|
|
29
|
+
* 构造期 deps.onError 已接入时可跳过;亦供 facade 在 error 延迟开启时补连。
|
|
30
|
+
*
|
|
31
|
+
* @param subscribe 订阅函数,返回取消订阅
|
|
32
|
+
*/
|
|
33
|
+
attachError(subscribe: (cb: (info: {
|
|
34
|
+
errorKey: string;
|
|
35
|
+
timestamp: number;
|
|
36
|
+
phase: string;
|
|
37
|
+
}) => void) => () => void): void;
|
|
38
|
+
/**
|
|
39
|
+
* reportContextLost - P0:WebGL 上下文丢失,立即降健康度到 0 并上报。
|
|
40
|
+
*
|
|
41
|
+
* effects Player 已 opt-in 自恢复(doNotHandleContextLost:false),engine 在 webglcontextrestored
|
|
42
|
+
* 上就地重建 GPU 资源——故 context-lost 现为瞬态抖动而非永久事故:降权后随 {@link reportContextRestored}
|
|
43
|
+
* 恢复。recommendedAction 仍标 'recreate' 仅供宿主在自恢复失败时手动 recreate() 兜底,非自动触发。
|
|
44
|
+
*/
|
|
45
|
+
reportContextLost(): void;
|
|
46
|
+
/**
|
|
47
|
+
* reportContextRestored:engine 已就地重建 GPU 资源、Player 存活,移除 CONTEXT_LOST 信号并
|
|
48
|
+
* 按当前 error 窗口重算健康度(恢复到 1 减惩罚)。瞬态抖动收口,非永久事故。
|
|
49
|
+
*/
|
|
50
|
+
reportContextRestored(): void;
|
|
51
|
+
/**
|
|
52
|
+
* 清理窗口/订阅/回调(dispose 时调用,防回调重入)
|
|
53
|
+
*/
|
|
54
|
+
dispose(): void;
|
|
55
|
+
/** 记录一条原始错误:推入窗口 + 落地过期 + 重算健康度 */
|
|
56
|
+
private _recordError;
|
|
57
|
+
/** 按当前窗口重算健康度(error-rate / error-cluster) */
|
|
58
|
+
private _recompute;
|
|
59
|
+
/** 上报一次健康度变化(回调异常静默,防递归) */
|
|
60
|
+
private _emit;
|
|
61
|
+
}
|