@netless/appliance-plugin 1.1.42 → 1.1.43-beta.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.
Files changed (112) hide show
  1. package/READMA.zh-CN.md +23 -1
  2. package/README.md +24 -1
  3. package/dist/appliance-plugin.js +1 -1
  4. package/dist/appliance-plugin.mjs +33 -30
  5. package/dist/{bridge-C8yT2GqS.js → bridge-D68E09T9.js} +1 -1
  6. package/dist/{bridge-DLGOhX8U.mjs → bridge-DcVN05tP.mjs} +1 -1
  7. package/dist/bridge.js +1 -1
  8. package/dist/bridge.mjs +1 -1
  9. package/dist/collector/collector.d.ts +50 -2
  10. package/dist/collector/types.d.ts +6 -0
  11. package/dist/component/svg/manager.d.ts +1 -0
  12. package/dist/component/svg/snapshot.d.ts +4 -1
  13. package/dist/component/textEditor/manager.d.ts +3 -0
  14. package/dist/core/backGroundThread/index.d.ts +6 -1
  15. package/dist/core/cameraTask.d.ts +45 -0
  16. package/dist/core/const.d.ts +4 -0
  17. package/dist/core/enum.d.ts +5 -1
  18. package/dist/core/error.d.ts +1 -0
  19. package/dist/core/fontFace.d.ts +5 -3
  20. package/dist/core/mainEngine.d.ts +230 -31
  21. package/dist/core/mainThread/base.d.ts +23 -2
  22. package/dist/core/mainThread/canvas2DReadback.d.ts +27 -0
  23. package/dist/core/mainThread/index.d.ts +12 -1
  24. package/dist/core/mainThread/snapshotThread.d.ts +11 -2
  25. package/dist/core/mainThread/subLocalThread.d.ts +12 -6
  26. package/dist/core/mainThread/subServiceThread.d.ts +5 -3
  27. package/dist/core/msgEvent/base.d.ts +4 -1
  28. package/dist/core/msgEvent/baseForWorker.d.ts +1 -1
  29. package/dist/core/msgEvent/copyNode/forWorker.d.ts +1 -1
  30. package/dist/core/msgEvent/forWorker.d.ts +1 -1
  31. package/dist/core/msgEvent/index.d.ts +5 -3
  32. package/dist/core/msgEvent/rotateNode/forMain.d.ts +1 -0
  33. package/dist/core/msgEvent/rotateNode/forWorker.d.ts +1 -1
  34. package/dist/core/msgEvent/scaleNode/forMain.d.ts +1 -0
  35. package/dist/core/msgEvent/scaleNode/forWorker.d.ts +1 -1
  36. package/dist/core/msgEvent/setColor/forMain.d.ts +1 -0
  37. package/dist/core/msgEvent/setColor/forWorker.d.ts +1 -1
  38. package/dist/core/msgEvent/setFont/forWorker.d.ts +1 -1
  39. package/dist/core/msgEvent/setLock/forWorker.d.ts +1 -1
  40. package/dist/core/msgEvent/setPoint/forWorker.d.ts +1 -1
  41. package/dist/core/msgEvent/setShape/forWorker.d.ts +1 -1
  42. package/dist/core/msgEvent/setZIndex/forWorker.d.ts +1 -1
  43. package/dist/core/msgEvent/translateNode/forMain.d.ts +1 -0
  44. package/dist/core/msgEvent/translateNode/forWorker.d.ts +1 -1
  45. package/dist/core/renderRuntimeFallback.d.ts +2 -0
  46. package/dist/core/rendererBusinessTask.d.ts +30 -0
  47. package/dist/core/serviceRenderScheduler.d.ts +33 -0
  48. package/dist/core/tools/base.d.ts +1 -1
  49. package/dist/core/tools/bitmapEraserFastPath.d.ts +8 -0
  50. package/dist/core/tools/eraserFaces.d.ts +24 -9
  51. package/dist/core/tools/image.d.ts +1 -0
  52. package/dist/core/tools/pencilEraserBitMap.d.ts +62 -14
  53. package/dist/core/tools/text.d.ts +2 -1
  54. package/dist/core/types.d.ts +64 -1
  55. package/dist/core/utils/indexDB.d.ts +3 -3
  56. package/dist/core/vNodeManager.d.ts +7 -0
  57. package/dist/core/worker/base.d.ts +52 -7
  58. package/dist/core/worker/fullWorkerLocal.d.ts +8 -2
  59. package/dist/core/worker/fullWorkerService.d.ts +7 -3
  60. package/dist/core/worker/renderCapabilityProbe.d.ts +54 -0
  61. package/dist/core/worker/simpleWorker.d.ts +2 -2
  62. package/dist/core/worker/snapshotWork.d.ts +1 -0
  63. package/dist/core/worker/workerManager.d.ts +17 -4
  64. package/dist/displayer/floatBar/selectorGesture.d.ts +2 -0
  65. package/dist/fullWorker.js +138 -139
  66. package/dist/index-BNHPCii1.mjs +4089 -0
  67. package/dist/index-B_vZ9d3x.mjs +55912 -0
  68. package/dist/index-C2AHqjj8.js +570 -0
  69. package/dist/index-CV8YaU3F.mjs +931 -0
  70. package/dist/index-CWDWQZBs.mjs +4088 -0
  71. package/dist/index-DChI1--R.js +1 -0
  72. package/dist/index-DFo0Gmfx.js +570 -0
  73. package/dist/index-DiLPVPwQ.js +1 -0
  74. package/dist/index-GBYM7kT5.js +1 -0
  75. package/dist/index-GZUDLXJC.js +1 -0
  76. package/dist/{index-D8p2ph99.mjs → index-K_0NX6pD.mjs} +401 -263
  77. package/dist/index-NG5kKK1W.mjs +55920 -0
  78. package/dist/plugin/applianceMultiPlugin.d.ts +18 -3
  79. package/dist/plugin/applianceSinglePlugin.d.ts +18 -4
  80. package/dist/plugin/baseApplianceManager.d.ts +138 -12
  81. package/dist/plugin/baseViewContainerManager.d.ts +40 -3
  82. package/dist/plugin/bitmapEraserOptions.d.ts +9 -0
  83. package/dist/plugin/const.d.ts +4 -0
  84. package/dist/plugin/displayerView.d.ts +7 -7
  85. package/dist/plugin/initLogAggregator.d.ts +45 -0
  86. package/dist/plugin/multi/applianceMultiManager.d.ts +1 -0
  87. package/dist/plugin/multi/containerManager.d.ts +19 -1
  88. package/dist/plugin/pluginInstanceOwner.d.ts +1 -0
  89. package/dist/plugin/renderImageBitmapRetirement.d.ts +100 -0
  90. package/dist/plugin/renderRuntimeCache.d.ts +18 -0
  91. package/dist/plugin/renderSurface.d.ts +15 -0
  92. package/dist/plugin/renderingCompatibility.d.ts +21 -5
  93. package/dist/plugin/roomLifecycle.d.ts +12 -0
  94. package/dist/plugin/selectorApi.d.ts +8 -0
  95. package/dist/plugin/single/applianceSingleManager.d.ts +4 -0
  96. package/dist/plugin/types.d.ts +11 -14
  97. package/dist/plugin/utils.d.ts +8 -0
  98. package/dist/subWorker.js +136 -137
  99. package/dist/undo/index.d.ts +12 -3
  100. package/dist/undo/timing.d.ts +9 -4
  101. package/package.json +23 -8
  102. package/dist/index--wqREfHK.js +0 -570
  103. package/dist/index-B-tFucpi.mjs +0 -48995
  104. package/dist/index-BOx854fU.mjs +0 -3266
  105. package/dist/index-BpiBM5wZ.js +0 -1
  106. package/dist/index-ByjVgxJm.js +0 -1
  107. package/dist/index-CSVCH-SQ.mjs +0 -789
  108. package/dist/index-CfIWmlMn.js +0 -570
  109. package/dist/index-D6gXcNbF.js +0 -1
  110. package/dist/index-HAZlgByL.mjs +0 -48987
  111. package/dist/index-OZXjSPr1.js +0 -1
  112. package/dist/index-z7deO9Md.mjs +0 -3267
@@ -1,14 +1,14 @@
1
1
  import type EventEmitter2 from "eventemitter2";
2
2
  import { BaseCollectorReducerAction, DiffOneData } from "../collector";
3
3
  import { BaseApplianceManager } from "../plugin/baseApplianceManager";
4
- import { BaseNodeMapItem, IActiveToolsDataType, IActiveWorkDataType, ICameraOpt, IMainMessage, IRectType, IUpdateNodeOpt, IWorkerMessage, IqueryTask, IworkId, ViewWorkerOptions } from "./types";
4
+ import { BaseNodeMapItem, IActiveToolsDataType, IActiveWorkDataType, ICameraOpt, ICameraTaskError, IMainMessage, IRectType, IUpdateNodeOpt, IWorkerMessage, IqueryTask, IworkId, ViewWorkerOptions } from "./types";
5
5
  import { BaseSubWorkModuleProps, EmitEventType } from "../plugin/types";
6
6
  import type { ISVGMarkmapInformation, ISVGUrlInformation, IconifyInformation, ImageInformation, MarkmapId, _SetTrue } from "../plugin/types";
7
7
  import { MethodBuilderMain } from "./msgEvent";
8
8
  import { EToolsKey, EventWorkState } from "./enum";
9
9
  import { BaseShapeOptions } from "./tools";
10
10
  import { AppViewDisplayerManager, MainViewDisplayerManager } from "../plugin/baseViewContainerManager";
11
- import { UndoTickerSource } from "../undo/timing";
11
+ import { type PendingTickerSnapshot, UndoTickerSource } from "../undo/timing";
12
12
  export type UndoTickerForceEndRoute = {
13
13
  kind: "stop-event";
14
14
  } | {
@@ -18,6 +18,19 @@ export type UndoTickerForceEndRoute = {
18
18
  kind: "wait-owner";
19
19
  };
20
20
  export declare function getUndoTickerForceEndRoute(source: UndoTickerSource): UndoTickerForceEndRoute;
21
+ export type ForceDoneReason = "camera-update" | "dpr-update" | "scene-change" | "clean-scene" | "set-readonly" | "disconnect" | "destroy" | "view-destroy" | "render-runtime-fallback";
22
+ type ViewForceDoneAckBase = {
23
+ viewId: string;
24
+ scenePath: string;
25
+ reason: ForceDoneReason;
26
+ };
27
+ export type ViewForceDoneAck = ViewForceDoneAckBase & ({
28
+ status: "success";
29
+ } | {
30
+ status: "failed";
31
+ failureReason: string;
32
+ });
33
+ export type ViewStoragePolicy = "preserve-storage" | "delete-storage" | "storage-already-deleted";
21
34
  export declare abstract class MasterController {
22
35
  /** 异步同步时间间隔 */
23
36
  abstract readonly maxLastSyncTime: number;
@@ -92,13 +105,17 @@ export declare abstract class MasterController {
92
105
  /** 清空指定的view场景路径下的所有数据 */
93
106
  abstract clearViewScenePath(viewId: string, justLocal?: boolean, isFiter?: boolean): Promise<void>;
94
107
  abstract cancelLocalWorks(viewId: string, syncStorage?: boolean): void;
95
- abstract waitForLocalEventQueue(): Promise<void>;
108
+ abstract abortActiveLocalInput(viewId: string, workId?: string): boolean;
109
+ abstract waitForLocalEventQueue(viewId?: string): Promise<void>;
96
110
  abstract finishActiveContinuousMethods(viewId: string, scenePath: string): Promise<void>;
97
- abstract flushActiveTransactionBeforeOperation(viewId: string, scenePath: string, reason: "camera-update" | "scene-change" | "clean-scene"): Promise<void>;
111
+ abstract abortActiveContinuousMethods(viewId: string, workId?: string): boolean;
112
+ abstract forceDoneLocalWorks(viewId: string, scenePath: string, reason: ForceDoneReason): Promise<ViewForceDoneAck>;
113
+ abstract invalidateTransactionBarrier(viewId: string): void;
98
114
  /** 更新指定view场景路径下的相机参数 */
99
115
  abstract updateCamera(viewId: string, cameraOpt: ICameraOpt): void;
100
- abstract cameraUpdateDestroy(viewId: string): void;
116
+ abstract cameraUpdateDestroy(viewId: string, recoverMethod?: boolean): void;
101
117
  abstract waitForCameraUpdateEnd(viewId: string): Promise<void>;
118
+ abstract waitForViewLifecycleIdle(viewId: string): Promise<void>;
102
119
  abstract isViewBusy(viewId: string): boolean;
103
120
  abstract recoverAfterSceneChange(viewId: string): void;
104
121
  /** 创建一个新的viewWorker */
@@ -122,6 +139,7 @@ export declare abstract class MasterController {
122
139
  /** 修正绘制异常任务 */
123
140
  abstract checkDrawingWork(viewId: string): Promise<number[]>;
124
141
  }
142
+ export type ViewInitCompletionResult = "completed" | "timeout" | "stale";
125
143
  export declare class MasterControlForWorker extends MasterController {
126
144
  /** 异步同步时间间隔 */
127
145
  readonly maxLastSyncTime: number;
@@ -160,7 +178,10 @@ export declare class MasterControlForWorker extends MasterController {
160
178
  isFullWork: boolean;
161
179
  viewId: string;
162
180
  toolsType?: EToolsKey;
163
- opt?: BaseShapeOptions;
181
+ opt?: BaseShapeOptions & {
182
+ fullLayerDoingMask?: boolean;
183
+ fullLayerDoingMaskMaxInputPoints?: number;
184
+ };
164
185
  undoTickerId?: number;
165
186
  scenePath?: string;
166
187
  }>;
@@ -168,26 +189,61 @@ export declare class MasterControlForWorker extends MasterController {
168
189
  /** 是否任务队列化参数 */
169
190
  private tasksqueue;
170
191
  private cameraUpdateStateByView;
192
+ private cameraClearReplayByView;
193
+ private cameraClearReplaySequence;
194
+ private cameraFailureSequenceByView;
171
195
  private cameraUpdateEndWaitersByView;
196
+ private viewLifecycleIdleWaitersByView;
172
197
  private cameraTaskSequenceByView;
198
+ private cameraRecoverySequence;
199
+ private pendingDprOwnerByView;
200
+ private dprUpdateSequence;
201
+ /** Camera/DPR preparation is serialized per View. */
202
+ private localWorkFinalizeQueueByView;
203
+ /** @deprecated Legacy test/host compatibility when the per-View map is absent. */
173
204
  private localWorkFinalizeQueue;
174
205
  private operationBarrierQueueByView;
206
+ private operationBarrierEpochByView;
207
+ private operationBarrierInvalidationWaitersByView;
175
208
  private readonly cancelledEraseTxnIds;
209
+ private cancelledEraseTxnOwners;
210
+ /** Tombstones for cancelled Pencil/Shape output that may return after Clear. */
211
+ private cancelledLocalWorkOwners?;
212
+ private fullLayerBitmapEraseTxns;
213
+ private fullLayerBitmapEraseTxnWaiters;
176
214
  /** end */
177
215
  private snapshotMap;
216
+ /** Request identities prevent a late Snapshot from resolving a new request for the same View/Scene. */
217
+ private snapshotRequestIdByViewScene;
178
218
  private boundingRectMap;
219
+ private boundingRectRequestIdByViewScene;
179
220
  private clearAllResolveMap;
180
221
  private localEventQueue;
222
+ /** Latest serialized local-event task for each View. */
223
+ private localEventQueueByView;
224
+ /** 0ms Done handoffs must be cancellable during destroy/re-init. */
225
+ private localDoneDispatchTimersByView;
181
226
  private localEventSequence;
227
+ /** Invalidates queued pointer events without changing the View runtime owner. */
228
+ private localInputEpochByView?;
229
+ /** Pins one epoch to every Start -> Doing -> Done pointer transaction. */
230
+ private localInputTransactionEpochByView?;
231
+ private localDoneWaitSequence;
182
232
  private queuedLocalEventCount;
183
233
  private activeLocalEvent?;
234
+ /** Done handoff waiters are View-scoped; one View must never settle another. */
235
+ private localDoneWaitByView;
236
+ private delayWorkStateToDoneResolveByView;
237
+ /** @deprecated Kept as a read/cleanup compatibility alias for older hosts. */
184
238
  private localDoneWait?;
239
+ /** @deprecated Kept as a read/cleanup compatibility alias for older hosts. */
185
240
  private delayWorkStateToDoneResolve?;
186
241
  private animationId;
187
242
  private tmpImageConfigMap;
188
243
  private mainThread?;
189
244
  private backgroundThreadManager?;
190
- private willSelectorWorkId?;
245
+ /** Pending auto-selection targets are isolated per View. */
246
+ private willSelectorWorkIdByView;
191
247
  private isLockSentEventCursor;
192
248
  private getVNodeInfoResolveMap;
193
249
  private refreshTextRenderResolveMap;
@@ -198,34 +254,87 @@ export declare class MasterControlForWorker extends MasterController {
198
254
  private serviceSyncReadyViews;
199
255
  private mainViewInitAckCallbacks;
200
256
  private readonly initAckedViewIds;
257
+ private viewInitAckTimeoutTimers;
258
+ private renderRuntimeCacheSavePromise?;
201
259
  private pendingTransportMessages;
202
260
  private isRenderTransportReady;
203
- private renderProbeResolve?;
204
- private renderProbeRequestId?;
205
- private renderProbeTimer?;
261
+ private renderRuntimeFallbackSequence;
262
+ private activeRenderRuntimeRecovery?;
263
+ private viewInitRecoveryAttempts;
264
+ private viewInitRecoveryDestroying;
265
+ private viewInitAckWaiters;
266
+ private serviceSyncCommitWaiters;
267
+ private viewServiceReadyWaiters;
268
+ private initReconcileTasks;
269
+ private serviceSyncSequence;
206
270
  private initGeneration;
207
271
  private viewGenerationById;
272
+ private fullLayerFrameStateByView;
273
+ private pendingDprByView;
274
+ private viewRecoveryQueueByView;
208
275
  /** Camera snapshot sent in the view Init message, used for the ACK-time check. */
209
276
  private initCameraOptByView;
210
277
  private markmapIdResolveMap;
278
+ private getDoneWaitForView;
279
+ private getDoneResolverForView;
280
+ private getLocalWorkFinalizeQueue;
281
+ private setLocalWorkFinalizeQueue;
282
+ private clearLocalWorkFinalizeQueue;
283
+ private clearDoneWaitForView;
211
284
  constructor(props: BaseSubWorkModuleProps);
212
285
  get isBezier(): boolean;
213
- get Logger(): import("..").Logger;
286
+ get Logger(): import("../plugin/utils").LoggerUtils;
287
+ private logRenderRuntimeFallback;
288
+ private logMainViewCameraTrace;
289
+ private closeImageBitmap;
290
+ private getViewSceneRequestKey;
291
+ private settleSnapshotFailure;
292
+ private settleBoundingRectFailure;
293
+ private settleViewRenderRequests;
214
294
  afterMainViewInitAck(callback: () => void): void;
215
295
  get isMainViewInitAck(): boolean;
216
296
  waitForMainViewInitAck(timeoutMs?: number): Promise<"ready" | "cancelled" | "timeout">;
217
297
  isViewInitAck(viewId: string): boolean;
218
298
  private ackMainViewInit;
299
+ private scheduleInitReconcile;
300
+ private isCurrentViewGeneration;
301
+ private reconcileViewInit;
302
+ private submitInitServiceSnapshot;
303
+ private waitForInitCameraCatchUp;
304
+ private waitForServiceSyncCommit;
305
+ private ackServiceSyncCommit;
306
+ private finalizeViewInitReady;
219
307
  private flushPendingTransportInitMessages;
220
308
  private getPendingInitMessageKey;
221
- private pullLatestServiceDataAfterInit;
309
+ private markServiceSyncReady;
310
+ private waitForViewInitAck;
311
+ private waitForViewServiceReady;
312
+ private armViewInitAckTimeout;
313
+ waitForViewInitCompletion(viewId: string): Promise<ViewInitCompletionResult>;
314
+ private failViewInitOnTerminalRuntime;
315
+ private settlePendingViewInitWaitersForRecovery;
316
+ private isViewScopedInitFailure;
317
+ private scheduleViewInitRecovery;
318
+ private scheduleRenderRuntimeFallback;
319
+ private isRenderRuntimeRecoveryCurrent;
320
+ private assertRenderRuntimeRecoveryCurrent;
321
+ private isRenderRuntimeRecoveryViewCurrent;
322
+ private finishRenderRuntimeRecovery;
323
+ private persistRecoveredRenderRuntime;
324
+ cancelRenderRuntimeRecovery(reason: string): void;
325
+ private runRenderRuntimeFallback;
326
+ private runActiveRenderRuntimeFallback;
327
+ private rebuildRenderRuntimeOnSerialQueue;
222
328
  private assertMarkmapRuntimeRegistered;
223
- destroy(preserveInitReady?: boolean): void;
329
+ destroy(preserveInitReady?: boolean, preserveCameraRecovery?: boolean): void;
330
+ private settlePendingMarkmapRequestsOnDestroy;
224
331
  private get consumeCount();
225
332
  private set consumeCount(value);
226
333
  private acceptConsumeAck;
227
334
  private get postCount();
228
335
  isServiceSyncReady(viewId: string): boolean;
336
+ isRenderRuntimeRecovering(): boolean;
337
+ private isViewInitReady;
229
338
  private set postCount(value);
230
339
  private get viewContainerManager();
231
340
  private get collector();
@@ -237,10 +346,21 @@ export declare class MasterControlForWorker extends MasterController {
237
346
  private get isPostCountType();
238
347
  private get isCanPostDraw();
239
348
  private get isCanStartEventConsum();
240
- init(): Promise<void>;
349
+ init(runtimeAlreadyDestroyed?: boolean): Promise<void>;
241
350
  private useBackgroundThread;
242
351
  private useMainThread;
243
- on(): Promise<boolean | void>;
352
+ private getRenderProbeCandidates;
353
+ private getRenderProbeProfile;
354
+ private createRenderProbeDOMCanvas;
355
+ private probeRenderRuntimeCandidate;
356
+ private createRenderProbeSession;
357
+ private closeRenderProbeSession;
358
+ private resolveRenderProbeEntry;
359
+ private requestRenderProbeCandidate;
360
+ private finalizeRenderProbeResponse;
361
+ private readTransferredCanvasDestinationPixels;
362
+ private probeAndLockRenderRuntime;
363
+ on(isProbeRetry?: boolean): Promise<boolean | void>;
244
364
  clearFontCache(): Promise<boolean>;
245
365
  getFontCacheStatus(): Promise<{
246
366
  count: number;
@@ -254,6 +374,22 @@ export declare class MasterControlForWorker extends MasterController {
254
374
  refreshTextRenderForWorker(tasks: Array<Pick<IWorkerMessage, "viewId" | "scenePath" | "workId" | "opt">>): Promise<boolean>;
255
375
  private buildPropertyAppliedData;
256
376
  clearReRenders(num?: number): void;
377
+ private retireRenderedImageBitmap;
378
+ private getFullLayerBitmapEraseTxns;
379
+ private getBitmapEraserRenderer;
380
+ private logBitmapEraserTrace;
381
+ private finishFullLayerBitmapEraseTxn;
382
+ private waitForFullLayerBitmapEraseTxns;
383
+ private rememberCancelledEraseTxn;
384
+ private isCancelledEraseResult;
385
+ private rememberCancelledLocalWork;
386
+ private isCancelledLocalWorkResult;
387
+ private isCancelledLocalWork;
388
+ private filterCancelledEraseRenders;
389
+ private reportRenderFrameError;
390
+ private acceptFullLayerFrame;
391
+ private acceptWorkerBatch;
392
+ private scheduleViewRecovery;
257
393
  get isBusy(): boolean;
258
394
  isViewBusy(viewId: string): boolean;
259
395
  getLockSentEventCursor(): boolean;
@@ -263,15 +399,25 @@ export declare class MasterControlForWorker extends MasterController {
263
399
  getFullWorkDrawCount(): number;
264
400
  getMaxDrawCount(): number;
265
401
  setSubWorkerDrawCount(num: number): void;
266
- setConsumeCount(num: number): void;
402
+ setConsumeCount(num: number, consumeWorkId?: string): void;
267
403
  getConsumeCount(): number;
404
+ /** 当前 View 本地事务已接收的原始输入点数。 */
405
+ getLocalInputPointCount(viewId: string, toolsType?: EToolsKey): number;
268
406
  setWorkerTasksqueueCount(num: number): void;
269
407
  collectorSyncData(sp: IMainMessage[]): void;
270
408
  private collectorAsyncData;
409
+ /**
410
+ * Storage mutations must carry the generation of the View runtime that
411
+ * produced them. UI-only reports remain compatible with older workers, but
412
+ * a missing generation on a mutation is rejected once the View is known.
413
+ */
414
+ private isStaleViewStorageMessage;
271
415
  private onLocalEventEnd;
272
416
  private onLocalEventDoing;
273
417
  private onLocalEventStart;
274
418
  private setLocalPointIsFullWork;
419
+ private getFullLayerBitmapEraserMaxInputPoints;
420
+ private forceDoneFullLayerBitmapEraseAtPointLimit;
275
421
  private pushLocalPoint;
276
422
  private deleteLocalPoint;
277
423
  private getLocalPointInfo;
@@ -283,7 +429,10 @@ export declare class MasterControlForWorker extends MasterController {
283
429
  isFullWork: boolean;
284
430
  viewId: string;
285
431
  toolsType?: EToolsKey;
286
- opt?: BaseShapeOptions;
432
+ opt?: BaseShapeOptions & {
433
+ fullLayerDoingMask?: boolean;
434
+ fullLayerDoingMaskMaxInputPoints?: number;
435
+ };
287
436
  undoTickerId?: number;
288
437
  scenePath?: string;
289
438
  }>;
@@ -313,9 +462,18 @@ export declare class MasterControlForWorker extends MasterController {
313
462
  } | undefined;
314
463
  localDoneWait: {
315
464
  waitingMs: number;
465
+ token?: string;
316
466
  workIds: string[];
317
- startedAt: number;
467
+ viewId?: string;
468
+ startedAt?: number;
318
469
  } | undefined;
470
+ localDoneWaits: {
471
+ waitingMs: number;
472
+ token?: string;
473
+ workIds: string[];
474
+ viewId?: string;
475
+ startedAt?: number;
476
+ }[];
319
477
  hasDoneResolver: boolean;
320
478
  localPoints: {
321
479
  workId: IworkId;
@@ -335,24 +493,32 @@ export declare class MasterControlForWorker extends MasterController {
335
493
  isBusy: boolean;
336
494
  hasPending: boolean;
337
495
  hasPrepare: boolean;
496
+ isRecovering: boolean;
497
+ recoveryFromGeneration: number | undefined;
498
+ recoveryOwner: number | undefined;
499
+ hasReplayCamera: boolean;
338
500
  currentTaskId: number | undefined;
339
- lastAckTaskId: number | undefined;
501
+ transactionTaskId: number | undefined;
502
+ transactionGeneration: number | undefined;
503
+ coreAckReceived: boolean | undefined;
504
+ settledAckReceived: boolean | undefined;
340
505
  }[];
341
506
  operationBarrierViews: string[];
342
507
  clearBusyViews: string[];
343
- pendingTickers: import("../undo/timing").PendingTickerSnapshot[];
508
+ pendingTickers: PendingTickerSnapshot[];
344
509
  };
345
510
  private shouldUseAutoShape;
346
511
  private toAutoShapePoints;
347
- private logAutoShapeResult;
348
512
  private emitAutoShapeResult;
349
513
  private createAutoShapeTask;
350
514
  private mapAutoShapeFallback;
351
515
  private correctStorage;
352
516
  originalEventLintener(workState: EventWorkState, point: [number, number], viewId: string): Promise<void>;
353
- waitForLocalEventQueue(): Promise<void>;
517
+ waitForLocalEventQueue(viewId?: string): Promise<void>;
354
518
  finishActiveContinuousMethods(viewId: string, scenePath: string): Promise<void>;
355
- flushActiveTransactionBeforeOperation(viewId: string, scenePath: string, _reason: "camera-update" | "scene-change" | "clean-scene"): Promise<void>;
519
+ forceDoneLocalWorks(viewId: string, scenePath: string, reason: ForceDoneReason): Promise<ViewForceDoneAck>;
520
+ invalidateTransactionBarrier(viewId: string): void;
521
+ private waitForCurrentTransactionBarrier;
356
522
  private executeTransactionBarrier;
357
523
  private consumeOriginalEvent;
358
524
  getLocalWorkViewId(): string | undefined;
@@ -360,14 +526,18 @@ export declare class MasterControlForWorker extends MasterController {
360
526
  setCurrentToolsData(currentToolsData: IActiveToolsDataType): void;
361
527
  private prepareOnceWork;
362
528
  createViewWorker(viewId: string, options: ViewWorkerOptions, displayer: MainViewDisplayerManager | AppViewDisplayerManager): void;
363
- destroyViewWorker(viewId: string, isLocal?: boolean): void;
529
+ private discardViewTransactions;
530
+ destroyViewWorker(viewId: string, storagePolicy: ViewStoragePolicy, preserveCameraRecovery?: boolean): void;
364
531
  onServiceDerive(key: string, data: DiffOneData<BaseCollectorReducerAction | undefined>): void;
365
532
  pullServiceData(viewId: string, scenePath: string, options?: {
366
533
  isAsync?: boolean;
367
534
  useAnimation?: boolean;
368
535
  }): void;
536
+ private pullServiceDataForReadyRenderer;
369
537
  runAnimation(): void;
370
538
  consume(): void;
539
+ private armBitmapEraserCommitTimeout;
540
+ private markFullLayerBitmapEraseDoneStaging;
371
541
  unWritable(): void;
372
542
  abled(): void;
373
543
  isAbled(): boolean;
@@ -376,23 +546,51 @@ export declare class MasterControlForWorker extends MasterController {
376
546
  post(msg: Set<IWorkerMessage>): void;
377
547
  private dispatchMessages;
378
548
  updateNode(workId: IworkId, updateNodeOpt: IUpdateNodeOpt, viewId: string, scenePath: string): void;
379
- destroyTaskQueue(): void;
549
+ destroyTaskQueue(preserveCameraRecovery?: boolean): void;
380
550
  updateDpr(viewId: string, dpr: number): void;
551
+ private releasePendingDprUpdate;
552
+ private cancelPendingDprUpdate;
553
+ private applyDprUpdate;
554
+ private cloneCameraReplay;
555
+ private beginCameraClearReplay;
556
+ private finishCameraClearReplay;
557
+ private getCameraReplayCandidate;
558
+ private getActiveRenderRuntimeRecoveryView;
559
+ private nextCameraRecoveryOwner;
560
+ private updateCameraRecoveryReplay;
561
+ private beginCameraRecovery;
562
+ private releaseCameraRecovery;
563
+ private releaseRenderRuntimeRecoveryCameras;
564
+ private dispatchCameraRecoveryReplay;
381
565
  updateCamera(viewId: string, cameraOpt: ICameraOpt): void;
566
+ private updateCameraForReadyRenderer;
567
+ private schedulePendingCameraForView;
382
568
  private isSameCameraOpt;
383
569
  private enqueueCameraPreparation;
384
570
  private consumePendingCameraForView;
385
- private resetCameraTimeout;
386
- ackCameraTask(viewId: string, taskId: number): void;
387
- ackCameraSettledTask(viewId: string, taskId: number): void;
388
- cameraUpdateDestroy(viewId: string): void;
571
+ private clearCameraTaskTimeouts;
572
+ private startCameraTaskTimeouts;
573
+ private isCurrentCameraTransaction;
574
+ private completeCameraTransactionIfReady;
575
+ ackCameraTask(viewId: string, taskId: number, viewGeneration?: number): void;
576
+ failCameraTask(viewId: string, taskId: number, error: ICameraTaskError, viewGeneration?: number): void;
577
+ ackCameraSettledTask(viewId: string, taskId: number, viewGeneration?: number): void;
578
+ cameraUpdateDestroy(viewId: string, recoverMethod?: boolean): void;
579
+ private resolveCameraUpdateEndWaiters;
389
580
  waitForCameraUpdateEnd(viewId: string): Promise<void>;
390
- recoverAfterSceneChange(_viewId: string): void;
581
+ waitForViewLifecycleIdle(viewId: string): Promise<void>;
582
+ private hasPendingViewLifecycleWork;
583
+ private resolveViewLifecycleIdleWaiters;
584
+ recoverAfterSceneChange(viewId: string): void;
585
+ abortActiveContinuousMethods(viewId: string, workId?: string): boolean;
586
+ abortActiveLocalInput(viewId: string, workId?: string): boolean;
391
587
  clearViewScenePath(viewId: string, justLocal?: boolean | undefined, isFiter?: boolean): Promise<void>;
392
588
  private internalMsgEmitterListener;
393
589
  private setZIndex;
394
590
  checkDrawingWork(vId: string): Promise<number[]>;
395
- cancelLocalWorks(viewId: string, syncStorage?: boolean): void;
591
+ cancelLocalWorks(viewId: string, syncStorage?: boolean, onlyWorkIds?: ReadonlySet<string>): void;
592
+ timeoutLocalWorks(viewId: string, scenePath: string, reason: string, onlyWorkIds?: ReadonlySet<string>, error?: unknown): void;
593
+ private logLocalWorkBarrierError;
396
594
  removeDrawingWork(vId: string): void;
397
595
  removeNodes(viewId: string, removeIds: string[]): void;
398
596
  hoverCursor(point: [number, number], viewId: string): void;
@@ -420,3 +618,4 @@ export declare class MasterControlForWorker extends MasterController {
420
618
  vInfo?: BaseNodeMapItem[];
421
619
  } | undefined>;
422
620
  }
621
+ export {};
@@ -7,6 +7,7 @@ import { EDataType } from "../enum";
7
7
  import { SubTopThread } from "./subTopThread";
8
8
  import { SubLocalThread } from "./subLocalThread";
9
9
  import { SubServiceThread } from "./subServiceThread";
10
+ import type { MainThreadRenderMode } from "../../plugin/renderingCompatibility";
10
11
  export type ICanvasOptionType = IOffscreenCanvasOptionType;
11
12
  export interface IMainThreadInitOption {
12
13
  container: HTMLDivElement;
@@ -14,6 +15,10 @@ export interface IMainThreadInitOption {
14
15
  layerOpt: ILayerOptionType;
15
16
  master: MasterControlForWorker;
16
17
  displayer: MainViewDisplayerManager | AppViewDisplayerManager;
18
+ /** Runtime identity used to reject continuations from a replaced View. */
19
+ viewOwner?: string;
20
+ viewGeneration?: number;
21
+ mainThreadRenderMode?: MainThreadRenderMode;
17
22
  post(sp: Omit<IBatchMainMessage, "render">): void;
18
23
  }
19
24
  export interface ISubThreadInitOption {
@@ -60,9 +65,15 @@ export declare class MainThreadEngineImpl implements MainThreadEngine {
60
65
  private taskUpdateCameraId?;
61
66
  private taskUpdateCameraResolve?;
62
67
  private debounceUpdateCameraId?;
68
+ private activeCameraSettledRender?;
69
+ private activeCameraTaskContext?;
63
70
  private debounceUpdateCache;
64
71
  private mainThreadPostId?;
65
72
  private destroyed;
73
+ private readbackScheduler?;
74
+ private readonly restoreLayerRenderCallbacks;
75
+ private readonly viewOwner?;
76
+ private readonly viewGeneration?;
66
77
  private combinePostMsg;
67
78
  private methodBuilder;
68
79
  private cacheImages;
@@ -72,12 +83,17 @@ export declare class MainThreadEngineImpl implements MainThreadEngine {
72
83
  getCachedImagesByWorkId(workId: string): HTMLImageElement | ImageBitmap | undefined;
73
84
  deleteCachedImagesByWorkId(workId: string): void;
74
85
  clearCacheImages(): void;
75
- clearImageResolveMap(): void;
86
+ private closeImageSource;
87
+ clearImageResolveMap(error?: unknown): void;
76
88
  post(msg: Omit<IBatchMainMessage, "render">): void;
89
+ reportRendererBusinessError(error: unknown, fallback: {
90
+ business: string;
91
+ stage: string;
92
+ }): void;
77
93
  updateDpr(dpr: number): void;
78
94
  on(msg: IWorkerMessage): Promise<void>;
79
95
  private getIconSize;
80
- loadImageBitMap(msg: Pick<IWorkerMessage, "toolsType" | "opt" | "workId">): Promise<HTMLImageElement | ImageBitmap | undefined>;
96
+ loadImageBitMap(msg: Pick<IWorkerMessage, "toolsType" | "opt" | "workId" | "requestId">): Promise<HTMLImageElement | ImageBitmap | undefined>;
81
97
  private removeNode;
82
98
  consumeFull(type: EDataType, data: IWorkerMessage): Promise<void>;
83
99
  setCameraOpt(cameraOpt: ICameraOpt): void;
@@ -91,7 +107,12 @@ export declare class MainThreadEngineImpl implements MainThreadEngine {
91
107
  getSceneRect(): IRectType;
92
108
  private createScene;
93
109
  private createLayer;
110
+ private enableCanvas2DReadback;
111
+ private disableCanvas2DReadback;
94
112
  private updateScene;
95
113
  private updateLayer;
114
+ private cancelCameraSettledRender;
115
+ private retargetCameraSettledRender;
116
+ private cancelCameraBlockingWait;
96
117
  destroy(): void;
97
118
  }
@@ -0,0 +1,27 @@
1
+ type FrameHandle = number;
2
+ export type Canvas2DReadbackSchedulerOptions = {
3
+ tailFrameCount?: number;
4
+ requestFrame?: (callback: FrameRequestCallback) => FrameHandle;
5
+ cancelFrame?: (handle: FrameHandle) => void;
6
+ onReadbackError?: (error: unknown) => void;
7
+ };
8
+ /**
9
+ * Coalesces Canvas2D readbacks for one main-thread View. A render refreshes
10
+ * that Canvas' tail so continuous input performs at most one readback per RAF.
11
+ */
12
+ export declare class Canvas2DReadbackScheduler {
13
+ private readonly pendingFrames;
14
+ private readonly failedCanvases;
15
+ private readonly tailFrameCount;
16
+ private readonly requestFrame;
17
+ private readonly cancelFrame;
18
+ private readonly onReadbackError?;
19
+ private frameHandle?;
20
+ private destroyed;
21
+ constructor(options?: Canvas2DReadbackSchedulerOptions);
22
+ markRendered(canvas: HTMLCanvasElement): void;
23
+ destroy(): void;
24
+ private schedule;
25
+ private flushFrame;
26
+ }
27
+ export {};
@@ -8,19 +8,30 @@ export interface MainThreadManager {
8
8
  createMainThread(viewId: string, opt: IMainThreadInitOption): MainThreadEngineImpl;
9
9
  consume(msg: Set<IWorkerMessage>): Promise<void>;
10
10
  post(sp: Omit<IBatchMainMessage, "render">): void;
11
+ discardView(viewId: string): void;
11
12
  destroy(): void;
12
13
  }
13
14
  export declare class MainThreadManagerImpl implements MainThreadManager {
14
15
  mainThreadMap: Map<string, MainThreadEngineImpl>;
15
16
  private cameraRenderQueueByView;
16
17
  private viewGenerationById;
17
- private snapshotThread?;
18
+ private viewOwnerById;
19
+ private ownerSequence;
20
+ private snapshotThreadsByRequest;
21
+ private destroyed;
18
22
  master: MasterControlForWorker;
19
23
  constructor(master: MasterControlForWorker);
20
24
  private enqueueViewTask;
25
+ private isStaleViewMessage;
21
26
  post: (msg: Omit<IBatchMainMessage, "render">) => void;
27
+ discardView(viewId: string): void;
22
28
  destroy(): void;
23
29
  createMainThread(viewId: string, opt: IMainThreadInitOption): MainThreadEngineImpl;
24
30
  createSnapshotThread(viewId: string, opt: IMainThreadInitOption): SnapshotThreadImpl;
31
+ private getSnapshotRequestKey;
32
+ private disposeSnapshotThread;
33
+ private releaseMessageBitmap;
34
+ private releaseBatchResources;
35
+ private releaseImageBitmap;
25
36
  consume(msg: Set<IWorkerMessage>): Promise<void>;
26
37
  }
@@ -11,22 +11,30 @@ export declare class SnapshotThreadImpl {
11
11
  fullLayer: Group;
12
12
  master: MasterControlForWorker;
13
13
  private opt;
14
+ private readonly viewOwner?;
15
+ private readonly viewGeneration?;
14
16
  private scene;
15
17
  private mainThreadPostId?;
16
18
  private combinePostMsg;
19
+ private destroyed;
17
20
  workShapes: Map<string, BaseShapeTool>;
18
21
  private cacheImages;
19
22
  private imageResolveMap;
23
+ private activeRequest?;
20
24
  constructor(viewId: string, opt: IMainThreadInitOption);
21
25
  getCachedImages(imageSrc: string): HTMLImageElement | ImageBitmap | undefined;
22
26
  getCachedImagesByWorkId(workId: string): HTMLImageElement | ImageBitmap | undefined;
23
27
  deleteCachedImagesByWorkId(workId: string): void;
24
28
  clearCacheImages(): void;
29
+ private closeImageSource;
30
+ private releaseMessageImageBitmap;
31
+ private releaseBatchImageBitmaps;
25
32
  clearImageResolveMap(): void;
26
33
  post(msg: Omit<IBatchMainMessage, "render">): void;
34
+ private reportRequestFailure;
27
35
  on(msg: IWorkerMessage): Promise<void>;
28
36
  private getIconSize;
29
- loadImageBitMap(msg: Pick<IWorkerMessage, "toolsType" | "opt" | "workId">): Promise<HTMLImageElement | ImageBitmap | undefined>;
37
+ loadImageBitMap(msg: Pick<IWorkerMessage, "toolsType" | "opt" | "workId" | "requestId">): Promise<HTMLImageElement | ImageBitmap | undefined>;
30
38
  createWorkShapeNode(opt: IActiveToolsDataType & {
31
39
  workId: string;
32
40
  }): TextShape | import("../tools").ArrowShape | import("../tools").PencilShape | import("../tools/straight").StraightShape | import("../tools").EllipseShape | import("../tools").PolygonShape | import("../tools").StarShape | import("../tools").RectangleShape | import("../tools").SpeechBalloonShape | import("../tools").LaserPenShape | import("../tools").EraserShape | import("../tools").BitMapEraserShape | import("../tools/pencilEraser").PencilEraserShape | import("../tools").SelectorShape | ImageShape | ISvgShadowShape | undefined;
@@ -39,11 +47,12 @@ export declare class SnapshotThreadImpl {
39
47
  private getBoundingRect;
40
48
  setCameraOpt(cameraOpt: ICameraOpt): void;
41
49
  private runBatchPostData;
50
+ private flushPendingPost;
42
51
  private combinePostData;
43
52
  combinePost(): void;
44
53
  private createScene;
45
54
  private createLayer;
46
55
  private updateScene;
47
56
  private updateLayer;
48
- destroy(): void;
57
+ destroy(reason?: string): void;
49
58
  }