@netless/appliance-plugin 1.1.42-beta.3 → 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.
- package/READMA.zh-CN.md +23 -1
- package/README.md +24 -1
- package/dist/appliance-plugin.js +1 -1
- package/dist/appliance-plugin.mjs +33 -30
- package/dist/{bridge-8P473Gy8.js → bridge-D68E09T9.js} +1 -1
- package/dist/{bridge-DKyR7grt.mjs → bridge-DcVN05tP.mjs} +1 -1
- package/dist/bridge.js +1 -1
- package/dist/bridge.mjs +1 -1
- package/dist/collector/collector.d.ts +50 -2
- package/dist/collector/types.d.ts +6 -0
- package/dist/component/svg/manager.d.ts +1 -0
- package/dist/component/svg/snapshot.d.ts +4 -1
- package/dist/component/textEditor/manager.d.ts +3 -0
- package/dist/core/backGroundThread/index.d.ts +6 -1
- package/dist/core/cameraTask.d.ts +45 -0
- package/dist/core/const.d.ts +4 -0
- package/dist/core/enum.d.ts +5 -1
- package/dist/core/error.d.ts +1 -0
- package/dist/core/fontFace.d.ts +5 -3
- package/dist/core/mainEngine.d.ts +230 -31
- package/dist/core/mainThread/base.d.ts +23 -2
- package/dist/core/mainThread/canvas2DReadback.d.ts +27 -0
- package/dist/core/mainThread/index.d.ts +12 -1
- package/dist/core/mainThread/snapshotThread.d.ts +11 -2
- package/dist/core/mainThread/subLocalThread.d.ts +12 -6
- package/dist/core/mainThread/subServiceThread.d.ts +5 -3
- package/dist/core/msgEvent/base.d.ts +4 -1
- package/dist/core/msgEvent/baseForWorker.d.ts +1 -1
- package/dist/core/msgEvent/copyNode/forWorker.d.ts +1 -1
- package/dist/core/msgEvent/forWorker.d.ts +1 -1
- package/dist/core/msgEvent/index.d.ts +5 -3
- package/dist/core/msgEvent/rotateNode/forMain.d.ts +1 -0
- package/dist/core/msgEvent/rotateNode/forWorker.d.ts +1 -1
- package/dist/core/msgEvent/scaleNode/forMain.d.ts +1 -0
- package/dist/core/msgEvent/scaleNode/forWorker.d.ts +1 -1
- package/dist/core/msgEvent/setColor/forMain.d.ts +1 -0
- package/dist/core/msgEvent/setColor/forWorker.d.ts +1 -1
- package/dist/core/msgEvent/setFont/forWorker.d.ts +1 -1
- package/dist/core/msgEvent/setLock/forWorker.d.ts +1 -1
- package/dist/core/msgEvent/setPoint/forWorker.d.ts +1 -1
- package/dist/core/msgEvent/setShape/forWorker.d.ts +1 -1
- package/dist/core/msgEvent/setZIndex/forWorker.d.ts +1 -1
- package/dist/core/msgEvent/translateNode/forMain.d.ts +1 -0
- package/dist/core/msgEvent/translateNode/forWorker.d.ts +1 -1
- package/dist/core/renderRuntimeFallback.d.ts +2 -0
- package/dist/core/rendererBusinessTask.d.ts +30 -0
- package/dist/core/serviceRenderScheduler.d.ts +33 -0
- package/dist/core/tools/base.d.ts +1 -1
- package/dist/core/tools/bitmapEraserFastPath.d.ts +8 -0
- package/dist/core/tools/eraserFaces.d.ts +24 -9
- package/dist/core/tools/image.d.ts +1 -0
- package/dist/core/tools/pencilEraserBitMap.d.ts +62 -14
- package/dist/core/tools/text.d.ts +2 -1
- package/dist/core/types.d.ts +64 -1
- package/dist/core/utils/indexDB.d.ts +3 -3
- package/dist/core/vNodeManager.d.ts +7 -0
- package/dist/core/worker/base.d.ts +52 -7
- package/dist/core/worker/fullWorkerLocal.d.ts +8 -2
- package/dist/core/worker/fullWorkerService.d.ts +7 -3
- package/dist/core/worker/renderCapabilityProbe.d.ts +54 -0
- package/dist/core/worker/simpleWorker.d.ts +2 -2
- package/dist/core/worker/snapshotWork.d.ts +1 -0
- package/dist/core/worker/workerManager.d.ts +17 -4
- package/dist/displayer/floatBar/selectorGesture.d.ts +2 -0
- package/dist/fullWorker.js +138 -139
- package/dist/index-BNHPCii1.mjs +4089 -0
- package/dist/index-B_vZ9d3x.mjs +55912 -0
- package/dist/index-C2AHqjj8.js +570 -0
- package/dist/index-CV8YaU3F.mjs +931 -0
- package/dist/index-CWDWQZBs.mjs +4088 -0
- package/dist/index-DChI1--R.js +1 -0
- package/dist/index-DFo0Gmfx.js +570 -0
- package/dist/index-DiLPVPwQ.js +1 -0
- package/dist/index-GBYM7kT5.js +1 -0
- package/dist/index-GZUDLXJC.js +1 -0
- package/dist/{index-C9wx0zmg.mjs → index-K_0NX6pD.mjs} +401 -263
- package/dist/index-NG5kKK1W.mjs +55920 -0
- package/dist/plugin/applianceMultiPlugin.d.ts +18 -3
- package/dist/plugin/applianceSinglePlugin.d.ts +18 -4
- package/dist/plugin/baseApplianceManager.d.ts +138 -12
- package/dist/plugin/baseViewContainerManager.d.ts +40 -3
- package/dist/plugin/bitmapEraserOptions.d.ts +9 -0
- package/dist/plugin/const.d.ts +4 -0
- package/dist/plugin/displayerView.d.ts +7 -7
- package/dist/plugin/initLogAggregator.d.ts +45 -0
- package/dist/plugin/multi/applianceMultiManager.d.ts +1 -0
- package/dist/plugin/multi/containerManager.d.ts +19 -1
- package/dist/plugin/pluginInstanceOwner.d.ts +1 -0
- package/dist/plugin/renderImageBitmapRetirement.d.ts +100 -0
- package/dist/plugin/renderRuntimeCache.d.ts +18 -0
- package/dist/plugin/renderSurface.d.ts +15 -0
- package/dist/plugin/renderingCompatibility.d.ts +21 -5
- package/dist/plugin/roomLifecycle.d.ts +12 -0
- package/dist/plugin/selectorApi.d.ts +8 -0
- package/dist/plugin/single/applianceSingleManager.d.ts +4 -0
- package/dist/plugin/types.d.ts +11 -14
- package/dist/plugin/utils.d.ts +8 -0
- package/dist/subWorker.js +136 -137
- package/dist/undo/index.d.ts +12 -3
- package/dist/undo/timing.d.ts +9 -4
- package/package.json +23 -8
- package/dist/index-BCvU2uMB.js +0 -570
- package/dist/index-BXnpbc6O.mjs +0 -48995
- package/dist/index-BrWufZZe.js +0 -1
- package/dist/index-BubEu09-.js +0 -1
- package/dist/index-C1ph7d6H.mjs +0 -789
- package/dist/index-CAXJpQEp.js +0 -570
- package/dist/index-D0bfakdd.js +0 -1
- package/dist/index-DcS9JJvi.mjs +0 -3266
- package/dist/index-Zu5juuhI.js +0 -1
- package/dist/index-k0AjJn1s.mjs +0 -48987
- package/dist/index-vWLQ-o4q.mjs +0 -3267
package/dist/core/types.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ import type { SelectorShape } from "./tools";
|
|
|
7
7
|
import type { Direction } from "re-resizable/lib/resizer";
|
|
8
8
|
import type { ShapeOptType } from "../displayer/types";
|
|
9
9
|
import type { AutoShapeResult } from "./autoShape/types";
|
|
10
|
+
import type { RenderProbeProfile, WorkerRenderCapabilities } from "./worker/renderCapabilityProbe";
|
|
10
11
|
export type PickOne<T> = {
|
|
11
12
|
[P in keyof T]: Record<P, T[P]> & Partial<Record<Exclude<keyof T, P>, undefined>>;
|
|
12
13
|
}[keyof T];
|
|
@@ -27,7 +28,6 @@ export type ViewWorkerOptions = {
|
|
|
27
28
|
export interface IBitmapEraserMaskOptions {
|
|
28
29
|
singleChannelTexture: boolean;
|
|
29
30
|
textureSubImage2D: boolean;
|
|
30
|
-
imageBitmapDirtyRect: boolean;
|
|
31
31
|
}
|
|
32
32
|
export interface ICanvasSceneType {
|
|
33
33
|
/** canvas 上下文 */
|
|
@@ -166,6 +166,13 @@ export type IWorkerMessage = Omit<Partial<BaseCollectorReducerAction>, "op"> & {
|
|
|
166
166
|
bgCanvas: OffscreenCanvas;
|
|
167
167
|
serviceCanvas: OffscreenCanvas;
|
|
168
168
|
};
|
|
169
|
+
/** Temporary canvas used only by the SpriteJS initialization probe. */
|
|
170
|
+
probeCanvas?: OffscreenCanvas;
|
|
171
|
+
/** Frozen mainView render profile used by every TestScene candidate. */
|
|
172
|
+
probeProfile?: RenderProbeProfile;
|
|
173
|
+
/** Init reconcile service commit identity. */
|
|
174
|
+
serviceSyncId?: string;
|
|
175
|
+
serviceRevision?: number;
|
|
169
176
|
/** 字体库 */
|
|
170
177
|
fontBuffers?: {
|
|
171
178
|
fontFamily: string;
|
|
@@ -188,6 +195,8 @@ export interface IRectType {
|
|
|
188
195
|
}
|
|
189
196
|
export interface IMainMessage extends INormalPushMsg {
|
|
190
197
|
type: EPostMessageType;
|
|
198
|
+
serviceSyncId?: string;
|
|
199
|
+
serviceRevision?: number;
|
|
191
200
|
/** Cursor point 生成时对应的稳定视觉工具名。 */
|
|
192
201
|
cursorTool?: CursorToolName;
|
|
193
202
|
dataType?: EDataType;
|
|
@@ -224,6 +233,8 @@ export interface IMainMessage extends INormalPushMsg {
|
|
|
224
233
|
scaleType?: EScaleType;
|
|
225
234
|
textOpt?: TextOptions;
|
|
226
235
|
viewId?: string;
|
|
236
|
+
/** View lifecycle generation that produced this internal message. */
|
|
237
|
+
viewGeneration?: number;
|
|
227
238
|
points?: [number, number][];
|
|
228
239
|
isRefresh?: boolean;
|
|
229
240
|
renderRect?: IRectType;
|
|
@@ -237,14 +248,45 @@ export interface IMainMessage extends INormalPushMsg {
|
|
|
237
248
|
collectUndoTicker?: number;
|
|
238
249
|
undoScopeIds?: string[];
|
|
239
250
|
undoScopePhase?: "collect" | "finalize";
|
|
251
|
+
/** Bitmap Eraser target-application marker emitted after all target ops. */
|
|
252
|
+
eraseTxnPhase?: "applied" | "failed";
|
|
253
|
+
/** Internal Done result used to choose the terminal transaction marker. */
|
|
254
|
+
eraseTxnCommitStatus?: "applied" | "failed";
|
|
255
|
+
/** Internal renderer request business used to settle Snapshot waiters. */
|
|
256
|
+
reportBusiness?: "snapshot" | "bounding-box";
|
|
257
|
+
/** Structured renderer failure stage for request-scoped diagnostics. */
|
|
258
|
+
reportStage?: string;
|
|
259
|
+
reportError?: string;
|
|
260
|
+
/** Structured runtime failure code consumed by MainEngine recovery. */
|
|
261
|
+
reportErrorCode?: "WEBGL_PROGRAM_UNAVAILABLE" | "SERVICE_SYNC_COMMIT_TIMEOUT" | "IMAGE_BITMAP_RENDER_FAILED" | "INIT_CAMERA_CATCH_UP_FAILED" | "RENDER_INIT_TIMEOUT" | "CAMERA_TRANSPORT_TIMEOUT" | "RENDERER_RUNTIME_ERROR";
|
|
262
|
+
reportContextType?: ECanvasContextType;
|
|
263
|
+
reportContextLost?: boolean;
|
|
264
|
+
reportGlError?: number;
|
|
265
|
+
reportCurrentProgram?: boolean;
|
|
266
|
+
reportProgramLinked?: boolean;
|
|
267
|
+
reportProgramHasUniforms?: boolean;
|
|
240
268
|
clearPreviewLocalWork?: boolean;
|
|
241
269
|
autoShapeResult?: AutoShapeResult;
|
|
242
270
|
[key: string]: any;
|
|
243
271
|
}
|
|
244
272
|
export interface IMainMessageRenderData {
|
|
245
273
|
viewId: string;
|
|
274
|
+
/** Opaque View generation that produced this render. */
|
|
275
|
+
viewGeneration?: number;
|
|
276
|
+
/** BitMapEraser transaction owner, used to discard stale view renders. */
|
|
277
|
+
eraseTxnId?: string;
|
|
246
278
|
rect?: IRectType;
|
|
247
279
|
imageBitmap?: ImageBitmap;
|
|
280
|
+
/** Worker transferToImageBitmap output owns the complete Layer frame. */
|
|
281
|
+
isFullFrameImageBitmap?: boolean;
|
|
282
|
+
/** Monotonic sequence for FullLayer frames within one View generation. */
|
|
283
|
+
frameSequence?: number;
|
|
284
|
+
/** Worker combine-post task that produced this FullLayer frame. */
|
|
285
|
+
taskId?: number;
|
|
286
|
+
/** All local work owners represented by a coalesced Layer capture. */
|
|
287
|
+
renderWorkIds?: string[];
|
|
288
|
+
/** All erase transactions represented by a coalesced Layer capture. */
|
|
289
|
+
renderEraseTxnIds?: string[];
|
|
248
290
|
isDrawAll?: boolean;
|
|
249
291
|
drawCanvas?: ECanvasShowType;
|
|
250
292
|
isClear?: boolean;
|
|
@@ -260,6 +302,16 @@ export interface IMainMessageRenderData {
|
|
|
260
302
|
translate?: [number, number];
|
|
261
303
|
workId?: string;
|
|
262
304
|
}
|
|
305
|
+
export type CameraTaskStatus = "timeout" | "failed";
|
|
306
|
+
export interface ICameraTaskError {
|
|
307
|
+
code: "RENDERER_BUSINESS_TIMEOUT" | "RENDERER_BUSINESS_ERROR" | "CAMERA_TRANSPORT_TIMEOUT";
|
|
308
|
+
business: "updateCamera";
|
|
309
|
+
message: string;
|
|
310
|
+
elapsedMs?: number;
|
|
311
|
+
stage?: string;
|
|
312
|
+
blockingWorks?: string[];
|
|
313
|
+
workerType?: string;
|
|
314
|
+
}
|
|
263
315
|
export interface IBatchMainMessage {
|
|
264
316
|
/** 绘制数据 */
|
|
265
317
|
render?: Array<IMainMessageRenderData>;
|
|
@@ -267,15 +319,26 @@ export interface IBatchMainMessage {
|
|
|
267
319
|
sp?: Array<IMainMessage>;
|
|
268
320
|
workerTasksqueueCount?: number;
|
|
269
321
|
cameraTaskId?: number;
|
|
322
|
+
/** 缺省表示成功 ACK;timeout/failed 表示 Camera 业务失败终态。 */
|
|
323
|
+
cameraTaskStatus?: CameraTaskStatus;
|
|
324
|
+
cameraTaskError?: ICameraTaskError;
|
|
270
325
|
/** Camera 防抖重渲染及最终 Layer render 已完成。 */
|
|
271
326
|
cameraSettledTaskId?: number;
|
|
272
327
|
workIds?: Set<string>;
|
|
273
328
|
viewId?: string;
|
|
329
|
+
/** View lifecycle generation that produced this batch. */
|
|
330
|
+
viewGeneration?: number;
|
|
331
|
+
/** Opaque runtime owner for MainThread-originated asynchronous output. */
|
|
332
|
+
viewOwner?: string;
|
|
274
333
|
consumeCount?: number;
|
|
275
334
|
/** 标识限频 ACK 所属的本地 work,防止旧笔迹 ACK 污染新笔迹。 */
|
|
276
335
|
consumeWorkId?: string;
|
|
277
336
|
subWorkerDrawCount?: number;
|
|
278
337
|
fullWorkerDrawCount?: number;
|
|
338
|
+
/** Worker-owned rendering capability probe response. */
|
|
339
|
+
type?: EPostMessageType;
|
|
340
|
+
requestId?: string;
|
|
341
|
+
workerCapabilities?: WorkerRenderCapabilities;
|
|
279
342
|
}
|
|
280
343
|
export interface ICameraOpt {
|
|
281
344
|
centerX: number;
|
|
@@ -6,9 +6,9 @@ export declare class IndexDBUtils {
|
|
|
6
6
|
private readonly FONT_DB_VERSION;
|
|
7
7
|
private constructor();
|
|
8
8
|
static getInstance(): IndexDBUtils;
|
|
9
|
-
initFontDB(): Promise<IDBDatabase>;
|
|
10
|
-
getFontFromDB(fontFamily: string, url?: string): Promise<ArrayBuffer | null>;
|
|
11
|
-
saveFontToDB(fontFamily: string, url: string, buffer: ArrayBuffer): Promise<boolean>;
|
|
9
|
+
initFontDB(signal?: AbortSignal): Promise<IDBDatabase>;
|
|
10
|
+
getFontFromDB(fontFamily: string, url?: string, signal?: AbortSignal): Promise<ArrayBuffer | null>;
|
|
11
|
+
saveFontToDB(fontFamily: string, url: string, buffer: ArrayBuffer, signal?: AbortSignal): Promise<boolean>;
|
|
12
12
|
clearFontCache(): Promise<boolean>;
|
|
13
13
|
getFontCacheStatus(): Promise<{
|
|
14
14
|
count: number;
|
|
@@ -3,6 +3,8 @@ import { BaseNodeMapItem, IRectType } from "./types";
|
|
|
3
3
|
import { EToolsKey } from ".";
|
|
4
4
|
import { _SetTrue } from "../plugin";
|
|
5
5
|
import { ObserverMap } from "./utils/ObserverMap";
|
|
6
|
+
export type VNodeRevisionOperation = "add" | "delete" | "update" | "clear" | "permission";
|
|
7
|
+
export type VNodeRevisionObserver = (operation: VNodeRevisionOperation, revision: number, key?: string) => void;
|
|
6
8
|
export declare class VNodeManager {
|
|
7
9
|
viewId: string;
|
|
8
10
|
scene: Scene;
|
|
@@ -15,9 +17,13 @@ export declare class VNodeManager {
|
|
|
15
17
|
private readonly spatialIndex;
|
|
16
18
|
private readonly spatialEntries;
|
|
17
19
|
private verifySpatialIndex;
|
|
20
|
+
private revision;
|
|
21
|
+
private readonly revisionObservers;
|
|
18
22
|
constructor(viewId: string, scene: Scene);
|
|
19
23
|
init(fullLayer: Group): void;
|
|
20
24
|
get(name: string): BaseNodeMapItem | undefined;
|
|
25
|
+
getRevision(): number;
|
|
26
|
+
observeRevision(observer: VNodeRevisionObserver): () => void;
|
|
21
27
|
setLocalUid(uid: string): void;
|
|
22
28
|
getLocalUid(): string | undefined;
|
|
23
29
|
setSpatialIndexVerification(enabled: boolean): void;
|
|
@@ -36,6 +42,7 @@ export declare class VNodeManager {
|
|
|
36
42
|
unSelected(name: string): void;
|
|
37
43
|
delete(name: string): void;
|
|
38
44
|
clear(): void;
|
|
45
|
+
private notifyRevisionObservers;
|
|
39
46
|
getRectIntersectRange(rect: IRectType, filterLock?: boolean, filterEditor?: boolean): {
|
|
40
47
|
rectRange: IRectType | undefined;
|
|
41
48
|
nodeRange: Map<string, BaseNodeMapItem>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Group, Scene } from "spritejs";
|
|
1
|
+
import { Group, Layer, Scene } from "spritejs";
|
|
2
2
|
import { IActiveToolsDataType, IActiveWorkDataType, IBatchMainMessage, ICameraOpt, ILayerOptionType, IOffscreenCanvasOptionType, IRectType, IWorkerMessage } from "../types";
|
|
3
3
|
import { VNodeManager } from "../vNodeManager";
|
|
4
4
|
import { type ECanvasContextType, ECanvasShowType, EDataType, EventWorkState } from "../enum";
|
|
@@ -8,10 +8,13 @@ import type { LocalWorkForFullWorker } from "./fullWorkerLocal";
|
|
|
8
8
|
import type { LocalWorkForSubWorker } from "./subWorkerLocal";
|
|
9
9
|
import { EWorkThreadType, type WorkThreadEngineForFullWorker, type WorkThreadEngineForSubWorker, type WorkThreadEngineForSimpleWorker } from "./workerManager";
|
|
10
10
|
import { EmitEventType } from "../../plugin/types";
|
|
11
|
+
import { CameraUpdateTaskContext } from "../cameraTask";
|
|
12
|
+
import { type RendererBusinessTaskOptions } from "../rendererBusinessTask";
|
|
11
13
|
import type { IBitmapEraserMaskOptions } from "../types";
|
|
12
14
|
import { MaxDelayBatchScheduler, WorkerAckBackpressure } from "../batchScheduler";
|
|
13
15
|
export interface IWorkerInitOption {
|
|
14
16
|
dpr: number;
|
|
17
|
+
viewGeneration?: number;
|
|
15
18
|
offscreenCanvasOpt: IOffscreenCanvasOptionType;
|
|
16
19
|
layerOpt: ILayerOptionType;
|
|
17
20
|
combineUnitTime?: number;
|
|
@@ -37,6 +40,7 @@ export interface ISubWorkerInitOption {
|
|
|
37
40
|
}
|
|
38
41
|
export declare abstract class WorkThreadEngineBase {
|
|
39
42
|
readonly viewId: string;
|
|
43
|
+
readonly viewGeneration?: number;
|
|
40
44
|
readonly type: EWorkThreadType;
|
|
41
45
|
scene: Scene;
|
|
42
46
|
fullLayer: Group;
|
|
@@ -48,7 +52,7 @@ export declare abstract class WorkThreadEngineBase {
|
|
|
48
52
|
abstract localWork: LocalWorkForFullWorker | LocalWorkForSubWorker;
|
|
49
53
|
abstract serviceWork?: ServiceWorkForFullWorker;
|
|
50
54
|
protected isSafari: boolean;
|
|
51
|
-
protected abstract _post: (msg: IBatchMainMessage) => void;
|
|
55
|
+
protected abstract _post: (msg: IBatchMainMessage, transfer?: Transferable[]) => void;
|
|
52
56
|
combinePostMsg: Set<IBatchMainMessage>;
|
|
53
57
|
protected workerTaskId?: number | undefined;
|
|
54
58
|
protected protectedTask?: {
|
|
@@ -56,7 +60,17 @@ export declare abstract class WorkThreadEngineBase {
|
|
|
56
60
|
workName: EmitEventType;
|
|
57
61
|
workState: EventWorkState;
|
|
58
62
|
};
|
|
59
|
-
protected
|
|
63
|
+
protected delayPostDoneWaiter?: {
|
|
64
|
+
promise: Promise<void>;
|
|
65
|
+
resolve: () => void;
|
|
66
|
+
reject: (error: unknown) => void;
|
|
67
|
+
reportFailureAtRendererBoundary: boolean;
|
|
68
|
+
};
|
|
69
|
+
private activePostDoneWaiter?;
|
|
70
|
+
private isCombiningPost;
|
|
71
|
+
private combinePostTaskSequence;
|
|
72
|
+
private activeCombinePostTaskId?;
|
|
73
|
+
private combinePostTransfersByTask;
|
|
60
74
|
protected cacheImages: Map<string, {
|
|
61
75
|
imageBitmap: ImageBitmap;
|
|
62
76
|
workId: string;
|
|
@@ -64,22 +78,32 @@ export declare abstract class WorkThreadEngineBase {
|
|
|
64
78
|
protected imageResolveMap: Map<string, {
|
|
65
79
|
timer?: number;
|
|
66
80
|
resolve?: (src: string) => void;
|
|
81
|
+
requestId?: string;
|
|
82
|
+
promise: Promise<string>;
|
|
67
83
|
}>;
|
|
68
84
|
protected taskUpdateCameraId?: number;
|
|
69
85
|
protected taskUpdateCameraResolve?: (shouldRetry: boolean) => void;
|
|
70
86
|
protected debounceUpdateCameraId?: number;
|
|
87
|
+
private activeCameraSettledRender?;
|
|
88
|
+
private activeCameraTaskContext?;
|
|
89
|
+
private destroyed;
|
|
90
|
+
private contextLossCleanup?;
|
|
71
91
|
constructor(viewId: string, opt: IWorkerInitOption, workerType: EWorkThreadType);
|
|
92
|
+
getActualContextType(): ECanvasContextType | undefined;
|
|
93
|
+
private registerContextLossListener;
|
|
94
|
+
private removeContextLossListener;
|
|
72
95
|
protected createRenderLayer(scene: Scene, opt: IWorkerInitOption): void;
|
|
73
96
|
updateDpr(dpr: number): Promise<void>;
|
|
74
97
|
getCachedImages(imageSrc: string): ImageBitmap | undefined;
|
|
75
98
|
getCachedImagesByWorkId(workId: string): ImageBitmap | undefined;
|
|
76
99
|
deleteCachedImagesByWorkId(workId: string, filter?: string): void;
|
|
77
100
|
clearCacheImages(): void;
|
|
101
|
+
private closeImageBitmap;
|
|
78
102
|
clearImageResolveMap(): void;
|
|
79
103
|
setIsSafari(isSafari: boolean): void;
|
|
80
104
|
on(msg: IWorkerMessage): Promise<void>;
|
|
81
105
|
private getIconSize;
|
|
82
|
-
loadImageBitMap(msg: Pick<IWorkerMessage, "toolsType" | "opt" | "workId" | "isSubWorker">): Promise<ImageBitmap | undefined>;
|
|
106
|
+
loadImageBitMap(msg: Pick<IWorkerMessage, "toolsType" | "opt" | "workId" | "isSubWorker" | "requestId">): Promise<ImageBitmap | undefined>;
|
|
83
107
|
protected createLocalWork(data: IWorkerMessage): void;
|
|
84
108
|
protected updateScene(scene: Scene, offscreenCanvasOpt: IOffscreenCanvasOptionType, targetLayer?: Group): void;
|
|
85
109
|
protected updateLayer(layerOpt: ILayerOptionType, targetLayer?: Group): void;
|
|
@@ -90,16 +114,37 @@ export declare abstract class WorkThreadEngineBase {
|
|
|
90
114
|
protected setToolsOpt(opt: IActiveToolsDataType): void;
|
|
91
115
|
protected setWorkOpt(opt: Partial<IActiveWorkDataType>): void;
|
|
92
116
|
protected destroy(): void;
|
|
93
|
-
|
|
117
|
+
protected cancelCameraSettledRender(): void;
|
|
118
|
+
protected retargetCameraSettledRender(cameraTaskId?: number): boolean;
|
|
119
|
+
protected hasCameraSettledRender(): boolean;
|
|
120
|
+
protected cancelCameraBlockingWait(): void;
|
|
121
|
+
protected startCameraSettledRender(cameraTaskId?: number, context?: CameraUpdateTaskContext): {
|
|
122
|
+
isActive: () => boolean;
|
|
123
|
+
getCameraTaskId: () => number | undefined;
|
|
124
|
+
setRenderLayers: (layers?: Layer[]) => void;
|
|
125
|
+
finish: () => void;
|
|
126
|
+
};
|
|
127
|
+
post(msg: IBatchMainMessage, options?: {
|
|
128
|
+
reportFailureAtRendererBoundary?: boolean;
|
|
129
|
+
}): Promise<void>;
|
|
130
|
+
private getOrCreatePostDoneWaiter;
|
|
94
131
|
private runBatchPostData;
|
|
132
|
+
waitForRendererBusiness<T>(task: PromiseLike<T>, options: RendererBusinessTaskOptions): Promise<T>;
|
|
133
|
+
reportRendererBusinessError(error: unknown, fallback: Pick<RendererBusinessTaskOptions, "business" | "stage">, runtimeFatal?: boolean): void;
|
|
134
|
+
protected isCombinePostTaskActive(taskId: number): boolean;
|
|
135
|
+
protected trackCombinePostTransfer(taskId: number, transfer: Transferable): boolean;
|
|
136
|
+
protected commitCombinePostTransfers(taskId: number): void;
|
|
137
|
+
private releaseCombinePostTransfers;
|
|
138
|
+
protected closeCombinePostTransfers(transfers?: Transferable[]): void;
|
|
139
|
+
protected transferLayerToImageBitmap(drawCanvas: ECanvasShowType): ImageBitmap;
|
|
95
140
|
protected combinePostData(): IBatchMainMessage;
|
|
96
141
|
getSceneRect(): IRectType;
|
|
97
|
-
abstract combinePost(): Promise<void>;
|
|
142
|
+
abstract combinePost(taskId: number): Promise<void>;
|
|
98
143
|
protected abstract getLayer(workLayer: ECanvasShowType): Group | undefined;
|
|
99
144
|
abstract setCameraOpt(cameraOpt: ICameraOpt): void;
|
|
100
145
|
abstract consumeDraw(type: EDataType, data: IWorkerMessage): Promise<void>;
|
|
101
146
|
abstract consumeDrawAll(type: EDataType, data: IWorkerMessage): Promise<void>;
|
|
102
|
-
abstract updateCamera(msg: IWorkerMessage): Promise<void>;
|
|
147
|
+
abstract updateCamera(msg: IWorkerMessage, context?: CameraUpdateTaskContext): Promise<void>;
|
|
103
148
|
}
|
|
104
149
|
export declare abstract class LocalWork {
|
|
105
150
|
readonly viewId: string;
|
|
@@ -12,10 +12,14 @@ export declare class LocalWorkForFullWorker extends LocalWork {
|
|
|
12
12
|
protected combineTimerId?: number;
|
|
13
13
|
protected combineDrawResolve?: (value: boolean) => void;
|
|
14
14
|
protected combineDrawActiveId?: string;
|
|
15
|
+
private disposeVNodeRevisionObserver?;
|
|
16
|
+
private bitmapEraserRenderQueue;
|
|
17
|
+
private bitmapEraserRevalidationQueued;
|
|
15
18
|
protected drawWorkActiveId?: string;
|
|
16
19
|
protected effectSelectNodeData: Set<IWorkerMessage>;
|
|
17
20
|
constructor(opt: ISubWorkerInitOption);
|
|
18
|
-
|
|
21
|
+
private scheduleActiveBitmapEraserRevalidation;
|
|
22
|
+
loadImageBitMap(msg: Pick<IWorkerMessage, "toolsType" | "opt" | "workId" | "isSubWorker" | "requestId">): Promise<ImageBitmap | undefined>;
|
|
19
23
|
consumeDraw(data: IWorkerMessage, serviceWork: ServiceWorkForFullWorker): Promise<void>;
|
|
20
24
|
consumeDrawAll(data: IWorkerMessage, serviceWork: ServiceWorkForFullWorker): Promise<void>;
|
|
21
25
|
workShapesDone(scenePath: string, serviceWork: ServiceWorkForFullWorker): Promise<void>;
|
|
@@ -50,7 +54,9 @@ export declare class LocalWorkForFullWorker extends LocalWork {
|
|
|
50
54
|
reRenderSelector(willSyncService?: boolean): Promise<void>;
|
|
51
55
|
updateFullSelectWork(data: IWorkerMessage): Promise<void>;
|
|
52
56
|
destroy(): void;
|
|
53
|
-
protected
|
|
57
|
+
protected enqueueBitmapEraserRender(workId: string, drawCount?: number, needUndoTicker?: number, collectUndoTicker?: number, ack?: Pick<IBatchMainMessage, "consumeCount" | "consumeWorkId">): Promise<void>;
|
|
58
|
+
protected drawPencilEraserCombine(workId: string, drawCount: number, needUndoTicker?: number, collectUndoTicker?: number): Promise<void>;
|
|
59
|
+
protected postEraserBatch(workId: string, drawCount: number, needUndoTicker?: number, collectUndoTicker?: number, ack?: Pick<IBatchMainMessage, "consumeCount" | "consumeWorkId">): Promise<void>;
|
|
54
60
|
protected drawPencilCombine(workId: string, drawCount: number): Promise<void>;
|
|
55
61
|
protected drawSelector(res: IMainMessage, workState: EventWorkState, isLockSentEventCursor?: boolean): Promise<void>;
|
|
56
62
|
protected drawPencilFull(res: IMainMessage, isLockSentEventCursor?: boolean, needUndoTicker?: number, toolsType?: EToolsKey): Promise<void>;
|
|
@@ -21,6 +21,8 @@ export interface ServiceWork {
|
|
|
21
21
|
runSelectWork(data: IWorkerMessage): void;
|
|
22
22
|
consumeFull(data: IWorkerMessage): void;
|
|
23
23
|
consumeDraw(data: IWorkerMessage): void;
|
|
24
|
+
flush(): Promise<void>;
|
|
25
|
+
clearAll(): void;
|
|
24
26
|
destroy(): void;
|
|
25
27
|
}
|
|
26
28
|
export declare class ServiceWorkForFullWorker implements ServiceWork {
|
|
@@ -31,14 +33,15 @@ export declare class ServiceWorkForFullWorker implements ServiceWork {
|
|
|
31
33
|
workShapes: Map<string, IServiceWorkItem>;
|
|
32
34
|
selectorWorkShapes: Map<string, IServiceWorkItem>;
|
|
33
35
|
thread: WorkThreadEngineForFullWorker;
|
|
34
|
-
protected animationId?: number | undefined;
|
|
35
36
|
protected willRunEffectSelectorIds: Set<string>;
|
|
36
|
-
protected runEffectId?: number | undefined;
|
|
37
37
|
protected noAnimationRect: IRectType | undefined;
|
|
38
38
|
protected syncUnitTime: number;
|
|
39
39
|
post: (msg: IBatchMainMessage) => Promise<void>;
|
|
40
|
+
private readonly animationScheduler;
|
|
41
|
+
private readonly effectScheduler;
|
|
40
42
|
constructor(opt: ISubWorkerInitOption);
|
|
41
43
|
destroy(): void;
|
|
44
|
+
clearAll(): void;
|
|
42
45
|
consumeDraw(data: IWorkerMessage): Promise<void>;
|
|
43
46
|
consumeFull(data: IWorkerMessage): void;
|
|
44
47
|
runSelectWork(data: IWorkerMessage): void;
|
|
@@ -50,9 +53,10 @@ export declare class ServiceWorkForFullWorker implements ServiceWork {
|
|
|
50
53
|
private activeWorkShape;
|
|
51
54
|
private hasDiffData;
|
|
52
55
|
protected animationDraw(): Promise<void>;
|
|
53
|
-
protected runAnimation(): void;
|
|
56
|
+
protected runAnimation(immediate?: boolean): void;
|
|
54
57
|
protected computNextAnimationIndex(workShape: IServiceWorkItem, pointUnit: number): number;
|
|
55
58
|
protected runEffect(): void;
|
|
56
59
|
private effectRunSelector;
|
|
60
|
+
flush(): Promise<void>;
|
|
57
61
|
private activeSelectorShape;
|
|
58
62
|
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { probeLayerRendering, probeLayerRenderingWithImageBitmap, type LayerRenderingProbePixelCheck, type LayerRenderingProbeResult } from "spritejs";
|
|
2
|
+
import type { ECanvasContextType } from "../enum";
|
|
3
|
+
export type WebGLProgramProbeResult = LayerRenderingProbeResult & {
|
|
4
|
+
/** Retained for compatibility with the former raw WebGL probe result. */
|
|
5
|
+
shaderInfoLog?: string;
|
|
6
|
+
/** Main-thread verification after the Worker ImageBitmap is drawn. */
|
|
7
|
+
destinationPixelChecks?: LayerRenderingProbePixelCheck[];
|
|
8
|
+
};
|
|
9
|
+
export type WebGLProgramProbeStage = LayerRenderingProbeResult["stage"];
|
|
10
|
+
export type WorkerRenderCapabilities = {
|
|
11
|
+
offscreenCanvas: boolean;
|
|
12
|
+
offscreen2d: boolean;
|
|
13
|
+
webgl2: boolean;
|
|
14
|
+
webgl: boolean;
|
|
15
|
+
contextSupported: boolean;
|
|
16
|
+
/** Kept for compatibility; now contains the real SpriteJS Layer probe result. */
|
|
17
|
+
programProbe?: WebGLProgramProbeResult;
|
|
18
|
+
};
|
|
19
|
+
export type RenderProbeProfile = {
|
|
20
|
+
width: number;
|
|
21
|
+
height: number;
|
|
22
|
+
dpr: number;
|
|
23
|
+
testRect: {
|
|
24
|
+
x: number;
|
|
25
|
+
y: number;
|
|
26
|
+
width: number;
|
|
27
|
+
height: number;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export type WebGLRuntimeDiagnostics = {
|
|
31
|
+
contextLost?: boolean;
|
|
32
|
+
glError?: number;
|
|
33
|
+
currentProgram?: boolean;
|
|
34
|
+
programLinked?: boolean;
|
|
35
|
+
programHasUniforms?: boolean;
|
|
36
|
+
};
|
|
37
|
+
type LayerProbe = typeof probeLayerRendering;
|
|
38
|
+
type ImageBitmapLayerProbe = typeof probeLayerRenderingWithImageBitmap;
|
|
39
|
+
export type RenderLayerRuntime = {
|
|
40
|
+
gl?: WebGLRenderingContext | WebGL2RenderingContext | null;
|
|
41
|
+
renderer?: {
|
|
42
|
+
glRenderer?: unknown;
|
|
43
|
+
isWebGL2?: boolean;
|
|
44
|
+
};
|
|
45
|
+
canvas?: EventTarget;
|
|
46
|
+
};
|
|
47
|
+
export declare function resolveWorkerRenderContextType(canUseWebGL: boolean, requestedContextType?: ECanvasContextType): ECanvasContextType;
|
|
48
|
+
export declare function inspectWebGLRuntime(gl: WebGLRenderingContext | WebGL2RenderingContext | null | undefined): WebGLRuntimeDiagnostics;
|
|
49
|
+
export declare function getActualLayerContextType(layer: RenderLayerRuntime | null | undefined): ECanvasContextType | undefined;
|
|
50
|
+
export declare function listenForRenderContextLoss(layer: RenderLayerRuntime | null | undefined, onContextLoss: (diagnostics: WebGLRuntimeDiagnostics, event: Event) => void): () => void;
|
|
51
|
+
export declare function probeWorkerRenderCapabilities(requestedContextType: ECanvasContextType | undefined, transferredCanvas?: OffscreenCanvas, profile?: RenderProbeProfile, runLayerProbe?: LayerProbe): WorkerRenderCapabilities;
|
|
52
|
+
export declare function probeWorkerImageBitmapRenderCapabilities(requestedContextType: ECanvasContextType | undefined, profile?: RenderProbeProfile, runLayerProbe?: ImageBitmapLayerProbe): Promise<WorkerRenderCapabilities>;
|
|
53
|
+
export declare function releaseWorkerRenderCapabilities(capabilities: WorkerRenderCapabilities | undefined): boolean;
|
|
54
|
+
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EventWorkState, IActiveToolsDataType, IMainMessage, IMainMessageRenderData, IWorkerMessage } from "../index";
|
|
1
|
+
import { EventWorkState, IActiveToolsDataType, IBatchMainMessage, IMainMessage, IMainMessageRenderData, IWorkerMessage } from "../index";
|
|
2
2
|
import { ISubWorkerInitOption } from "./base";
|
|
3
3
|
import { LocalWorkForFullWorker } from "./fullWorkerLocal";
|
|
4
4
|
import { ServiceWorkForFullWorker } from "./fullWorkerService";
|
|
@@ -16,7 +16,7 @@ export declare class LocalWorkForSimpleWorker extends LocalWorkForFullWorker {
|
|
|
16
16
|
protected drawPencil(res: IMainMessage, workId?: string): Promise<void>;
|
|
17
17
|
protected drawShape(res: IMainMessage): Promise<void>;
|
|
18
18
|
protected drawSelector(res: IMainMessage, workState: EventWorkState, isLockSentEventCursor?: boolean, render?: IMainMessageRenderData[]): Promise<void>;
|
|
19
|
-
protected
|
|
19
|
+
protected postEraserBatch(workId: string, _drawCount: number, _needUndoTicker?: number, _collectUndoTicker?: number, ack?: Pick<IBatchMainMessage, "consumeCount" | "consumeWorkId">): Promise<void>;
|
|
20
20
|
consumeDraw(data: IWorkerMessage, serviceWork: ServiceWorkForFullWorker): Promise<void>;
|
|
21
21
|
consumeDrawAll(data: IWorkerMessage, serviceWork: ServiceWorkForFullWorker): Promise<void>;
|
|
22
22
|
}
|
|
@@ -12,6 +12,7 @@ export declare class SnapshotWork extends LocalWork {
|
|
|
12
12
|
protected cameraOpt: ICameraOpt | undefined;
|
|
13
13
|
vNodes?: VNodeManager;
|
|
14
14
|
constructor(opt: ISnapshotWorkInitOption);
|
|
15
|
+
private reportRequestFailure;
|
|
15
16
|
createSnapshotFullLayer(sceneOpt: IWorkerInitOption, opt: ILayerOptionType): void;
|
|
16
17
|
destroySnapshotFullLayer(): void;
|
|
17
18
|
private updateScene;
|
|
@@ -9,10 +9,12 @@ import { LocalWorkForSubWorker } from "./subWorkerLocal";
|
|
|
9
9
|
import { TopLayerWorkForSubWorker } from "./subWorkerTopLayer";
|
|
10
10
|
import { LocalWorkForSimpleWorker, ServiceWorkForSimpleWorker } from "./simpleWorker";
|
|
11
11
|
import { SnapshotWork } from "./snapshotWork";
|
|
12
|
+
import type { CameraUpdateTaskContext } from "../cameraTask";
|
|
12
13
|
export declare enum EWorkThreadType {
|
|
13
14
|
Full = "full",
|
|
14
15
|
Sub = "sub"
|
|
15
16
|
}
|
|
17
|
+
export declare function prepareImageBitmapRenderData(render: IMainMessageRenderData[], scene: Scene, dpr: number): IMainMessageRenderData[];
|
|
16
18
|
export type WorkerEngineFactory<T extends WorkThreadEngineBase> = (value: IWorkerMessage, post: (msg: IBatchMainMessage, transfer?: Transferable[]) => void) => T | undefined;
|
|
17
19
|
export declare class WorkerManager<T extends WorkThreadEngineBase> {
|
|
18
20
|
readonly _self: Worker;
|
|
@@ -22,10 +24,19 @@ export declare class WorkerManager<T extends WorkThreadEngineBase> {
|
|
|
22
24
|
protected workThreadMap: Map<string, T>;
|
|
23
25
|
private cameraRenderQueueByView;
|
|
24
26
|
private viewGenerationById;
|
|
27
|
+
private retainedOffscreenProbeCapabilities?;
|
|
28
|
+
private readonly cancelledFontFaceRequests;
|
|
29
|
+
private readonly fontFaceRequestCancelers;
|
|
25
30
|
constructor(worker: Worker, type: EWorkThreadType, createEngine: WorkerEngineFactory<T>);
|
|
31
|
+
private consumeRendererBusinessFailure;
|
|
26
32
|
private enqueueViewTask;
|
|
33
|
+
private isStaleViewMessage;
|
|
27
34
|
private init;
|
|
28
35
|
private getFontFaceCssValue;
|
|
36
|
+
private isFontFaceRequestCancelled;
|
|
37
|
+
private cancelFontFaceRequest;
|
|
38
|
+
private clearFontFaceRequestCancellation;
|
|
39
|
+
private waitForFontFacePromise;
|
|
29
40
|
private setFontFaces;
|
|
30
41
|
private isFontAvailable;
|
|
31
42
|
private areFontFacesAvailable;
|
|
@@ -41,8 +52,9 @@ export declare class WorkThreadEngineForSubWorker extends WorkThreadEngineBase {
|
|
|
41
52
|
localWork: LocalWorkForSubWorker;
|
|
42
53
|
topLayerWork?: TopLayerWorkForSubWorker;
|
|
43
54
|
snapshotWork: SnapshotWork;
|
|
55
|
+
private fullLayerFrameSequence;
|
|
44
56
|
constructor(viewId: string, opt: IWorkerInitOption, _post: (msg: IBatchMainMessage, transfer?: Transferable[]) => void);
|
|
45
|
-
combinePost(): Promise<void>;
|
|
57
|
+
combinePost(taskId: number): Promise<void>;
|
|
46
58
|
on(msg: IWorkerMessage): Promise<void>;
|
|
47
59
|
protected createLocalWork(data: IWorkerMessage): void;
|
|
48
60
|
removeNode(data: IWorkerMessage): Promise<void>;
|
|
@@ -54,7 +66,7 @@ export declare class WorkThreadEngineForSubWorker extends WorkThreadEngineBase {
|
|
|
54
66
|
private getRectImageBitmap;
|
|
55
67
|
protected updateLayer(layerOpt: ILayerOptionType): void;
|
|
56
68
|
updateDpr(dpr: number): Promise<void>;
|
|
57
|
-
updateCamera(msg: IWorkerMessage): Promise<void>;
|
|
69
|
+
updateCamera(msg: IWorkerMessage, context?: CameraUpdateTaskContext): Promise<void>;
|
|
58
70
|
setCameraOpt(cameraOpt: ICameraOpt, layer?: Group): void;
|
|
59
71
|
}
|
|
60
72
|
/** full worker */
|
|
@@ -67,8 +79,9 @@ export declare class WorkThreadEngineForFullWorker extends WorkThreadEngineBase
|
|
|
67
79
|
serviceWork: ServiceWorkForFullWorker;
|
|
68
80
|
_post: (msg: IBatchMainMessage, transfer?: Transferable[] | undefined) => void;
|
|
69
81
|
private debounceUpdateCache;
|
|
82
|
+
private fullLayerFrameSequence;
|
|
70
83
|
constructor(viewId: string, opt: IWorkerInitOption, _post: (msg: IBatchMainMessage, transfer?: Transferable[]) => void);
|
|
71
|
-
combinePost(): Promise<void>;
|
|
84
|
+
combinePost(taskId: number): Promise<void>;
|
|
72
85
|
on(msg: IWorkerMessage): Promise<void>;
|
|
73
86
|
removeNode(data: IWorkerMessage): Promise<void>;
|
|
74
87
|
checkTextActive(data: IWorkerMessage): Promise<void>;
|
|
@@ -81,7 +94,7 @@ export declare class WorkThreadEngineForFullWorker extends WorkThreadEngineBase
|
|
|
81
94
|
consumeDraw(type: EDataType, data: IWorkerMessage): Promise<void>;
|
|
82
95
|
consumeDrawAll(type: EDataType, data: IWorkerMessage): Promise<void>;
|
|
83
96
|
updateDpr(dpr: number): Promise<void>;
|
|
84
|
-
updateCamera(msg: IWorkerMessage): Promise<void>;
|
|
97
|
+
updateCamera(msg: IWorkerMessage, context?: CameraUpdateTaskContext): Promise<void>;
|
|
85
98
|
protected getRectImageBitmap(renderData: Required<Pick<IMainMessageRenderData, "rect" | "drawCanvas">>): Promise<ImageBitmap>;
|
|
86
99
|
private cursorHover;
|
|
87
100
|
private cursorBlur;
|