@pilotdev/pilot-bim-dataprovider 24.23.0 → 24.24.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/lib/src/model/BimDataCloudPart.d.ts +2 -0
- package/lib/src/model/BimDataCloudPart.js +8 -0
- package/lib/src/model/BimDataCloudPart.js.map +1 -1
- package/lib/src/model/BimDataModelPart.d.ts +2 -1
- package/lib/src/model/BimDataModelPart.js +7 -6
- package/lib/src/model/BimDataModelPart.js.map +1 -1
- package/lib/src/model/BimDataPart.d.ts +5 -3
- package/lib/src/model/BimDataPart.js +9 -3
- package/lib/src/model/BimDataPart.js.map +1 -1
- package/lib/src/model/BimDataProvider.js.map +1 -1
- package/lib/src/model/Consts.d.ts +1 -0
- package/lib/src/model/Consts.js +1 -0
- package/lib/src/model/Consts.js.map +1 -1
- package/lib/src/utils/ViewerTools.d.ts +1 -1
- package/lib/src/utils/ViewerTools.js +4 -4
- package/lib/src/utils/ViewerTools.js.map +1 -1
- package/lib/src/wasm/BimCloudPartAccessor.d.ts +1 -0
- package/lib/src/wasm/BimCloudPartAccessor.js +10 -1
- package/lib/src/wasm/BimCloudPartAccessor.js.map +1 -1
- package/lib/src/wasm/BimDataModelPartAccessor.d.ts +1 -1
- package/lib/src/wasm/BimDataModelPartAccessor.js +9 -10
- package/lib/src/wasm/BimDataModelPartAccessor.js.map +1 -1
- package/lib/src/wasm/{wasm.worker.d.ts → WasmWorker.d.ts} +17 -10
- package/lib/src/wasm/{wasm.worker.js → WasmWorker.js} +25 -53
- package/lib/src/wasm/WasmWorker.js.map +1 -0
- package/lib/src/wasm/WasmWorkerThreadSafeWrapper.d.ts +42 -0
- package/lib/src/wasm/WasmWorkerThreadSafeWrapper.js +135 -0
- package/lib/src/wasm/WasmWorkerThreadSafeWrapper.js.map +1 -0
- package/lib/src/wasm/pilot_bim_dataprovider.d.ts +5 -1
- package/lib/src/wasm/pilot_bim_dataprovider.wasm +0 -0
- package/lib/src/wasm/wasm.worker-node.cjs +1 -1
- package/lib/src/wasm/wasm.worker-web.cjs +1 -1
- package/package.json +1 -1
- package/lib/src/wasm/wasm.worker.js.map +0 -1
|
@@ -6,15 +6,18 @@ import { AsyncFileSystem, ProxyFileSystem } from "../file-system/IFileSystem.js"
|
|
|
6
6
|
import { BimCloudPartAccessor } from "./BimCloudPartAccessor.js";
|
|
7
7
|
import { BimDataPartAccessor } from "./BimDataPartAccessor.js";
|
|
8
8
|
import { BimDataModelPartAccessor } from "./BimDataModelPartAccessor.js";
|
|
9
|
-
import { expose } from "./worker.js";
|
|
10
|
-
const HEAP_SIZE_LIMIT = 1024 * 1024 * 1024;
|
|
11
9
|
export class WasmWorker {
|
|
12
10
|
constructor() {
|
|
13
11
|
this._cachedCloudReaders = new Map();
|
|
14
|
-
this._locker = { isLocked: false, lock: Promise.resolve() };
|
|
15
12
|
console.log(`BimDataProvider worker: (env: ${isNode() ? 'Node.js' : 'web'}, isSecureContext: ${isSecureContext}, isCrossOriginIsolated: ${isCrossOriginIsolated})`);
|
|
16
13
|
this._fs = isOPFSEnabled ? new AsyncFileSystem() : new ProxyFileSystem();
|
|
17
14
|
}
|
|
15
|
+
get module() {
|
|
16
|
+
return this._module;
|
|
17
|
+
}
|
|
18
|
+
get cachedCloudReaders() {
|
|
19
|
+
return this._cachedCloudReaders;
|
|
20
|
+
}
|
|
18
21
|
async init() {
|
|
19
22
|
const moduleOverrides = {
|
|
20
23
|
print: (s) => console.log(s),
|
|
@@ -50,7 +53,7 @@ export class WasmWorker {
|
|
|
50
53
|
}
|
|
51
54
|
}
|
|
52
55
|
async close(modelPartId) {
|
|
53
|
-
this._cachedCloudReaders.get(modelPartId)?.close();
|
|
56
|
+
await this._cachedCloudReaders.get(modelPartId)?.close();
|
|
54
57
|
this._cachedCloudReaders.delete(modelPartId);
|
|
55
58
|
}
|
|
56
59
|
async remove(modelPartId) {
|
|
@@ -67,20 +70,9 @@ export class WasmWorker {
|
|
|
67
70
|
await this._fs.dispose();
|
|
68
71
|
}
|
|
69
72
|
async flushMemory() {
|
|
70
|
-
|
|
71
|
-
return;
|
|
72
|
-
const cloudParts = Array.from(this._cachedCloudReaders.keys());
|
|
73
|
-
for await (const [, reader] of this._cachedCloudReaders) {
|
|
74
|
-
await reader.close();
|
|
75
|
-
}
|
|
76
|
-
this._cachedCloudReaders.clear();
|
|
77
|
-
await this.init();
|
|
78
|
-
for await (const cloudId of cloudParts) {
|
|
79
|
-
await this.cacheCloudPart(cloudId);
|
|
80
|
-
}
|
|
73
|
+
/** */
|
|
81
74
|
}
|
|
82
75
|
async isValidDatabase(modelPartId) {
|
|
83
|
-
await this.checkMemory();
|
|
84
76
|
if (this._fs.isFileExists(modelPartId)) {
|
|
85
77
|
const modelPart = new BimDataPartAccessor(modelPartId, this._module);
|
|
86
78
|
return this.runSyncFileOp(modelPartId, () => modelPart.isValidDatabase());
|
|
@@ -89,20 +81,13 @@ export class WasmWorker {
|
|
|
89
81
|
return false;
|
|
90
82
|
}
|
|
91
83
|
// ModelPart
|
|
92
|
-
async auditModelPart(modelPartId) {
|
|
93
|
-
await this.checkMemory();
|
|
94
|
-
const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
|
|
95
|
-
return this.runSyncFileOp(modelPartId, () => modelPart.auditModelDatabase());
|
|
96
|
-
}
|
|
97
84
|
async updateModelPart(modelPartId, buffer) {
|
|
98
|
-
await this.checkMemory();
|
|
99
85
|
const tmpModelPartId = "tmp_" + (0xffffffff * Math.random() >>> 0);
|
|
100
86
|
await this.open(tmpModelPartId, buffer);
|
|
101
87
|
await this.mergeModelParts(modelPartId, tmpModelPartId);
|
|
102
88
|
await this.remove(tmpModelPartId);
|
|
103
89
|
}
|
|
104
90
|
async mergeModelParts(targetId, sourceId) {
|
|
105
|
-
await this.checkMemory();
|
|
106
91
|
const module = this._module;
|
|
107
92
|
const modelPart = new BimDataModelPartAccessor(targetId, module);
|
|
108
93
|
const modelPartId = modelPart.path;
|
|
@@ -113,76 +98,75 @@ export class WasmWorker {
|
|
|
113
98
|
await this.runSyncFileOp([targetId, sourceId], () => modelPart.merge(modelPartId, sourcePartId));
|
|
114
99
|
}
|
|
115
100
|
async getAllTessellations(modelPartId, compressed, transmit) {
|
|
116
|
-
await this.checkMemory();
|
|
117
101
|
const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
|
|
118
102
|
return this.runSyncFileOp(modelPartId, () => modelPart.getAllTessellations(compressed, transmit));
|
|
119
103
|
}
|
|
120
104
|
async getTessellations(modelPartId, versionFrom, versionTo, compressed, transmit) {
|
|
121
|
-
await this.checkMemory();
|
|
122
105
|
const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
|
|
123
106
|
return this.runSyncFileOp(modelPartId, () => modelPart.getTessellations(versionFrom, versionTo, compressed, transmit));
|
|
124
107
|
}
|
|
125
108
|
async getTessellation(modelPartId, tessellationKey, version, compressed) {
|
|
126
|
-
await this.checkMemory();
|
|
127
109
|
const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
|
|
128
110
|
return this.runSyncFileOp(modelPartId, () => modelPart.getTessellation(tessellationKey, version, compressed));
|
|
129
111
|
}
|
|
112
|
+
async getTessellationsByIds(modelPartId, tessellations, version, compressed, transmit) {
|
|
113
|
+
const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
|
|
114
|
+
return this.runSyncFileOp(modelPartId, () => modelPart.getTessellationsByIds(tessellations, version, compressed, transmit));
|
|
115
|
+
}
|
|
130
116
|
async getAllElements(modelPartId, transmit) {
|
|
131
|
-
await this.checkMemory();
|
|
132
117
|
const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
|
|
133
118
|
return this.runSyncFileOp(modelPartId, () => modelPart.getAllElements(transmit));
|
|
134
119
|
}
|
|
135
120
|
async getElements(modelPartId, versionFrom, versionTo, transmit) {
|
|
136
|
-
await this.checkMemory();
|
|
137
121
|
const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
|
|
138
122
|
return this.runSyncFileOp(modelPartId, () => modelPart.getElements(versionFrom, versionTo, transmit));
|
|
139
123
|
}
|
|
140
124
|
async getDiffElements(modelPartId, versionFrom, versionTo, transmit) {
|
|
141
|
-
await this.checkMemory();
|
|
142
125
|
const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
|
|
143
126
|
return this.runSyncFileOp(modelPartId, () => modelPart.getDiffElements(versionFrom, versionTo, transmit));
|
|
144
127
|
}
|
|
145
128
|
async getElementProperties(modelPartId, elementId, version) {
|
|
146
|
-
await this.checkMemory();
|
|
147
129
|
const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
|
|
148
130
|
return this.runSyncFileOp(modelPartId, () => modelPart.getElementProperties(elementId, version));
|
|
149
131
|
}
|
|
150
132
|
async getElementTessellations(modelPartId, versionFrom, versionTo, compressed) {
|
|
151
|
-
await this.checkMemory();
|
|
152
133
|
const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
|
|
153
134
|
return this.runSyncFileOp(modelPartId, () => modelPart.getElementTessellations(versionFrom, versionTo, compressed));
|
|
154
135
|
}
|
|
155
136
|
async getAllVersions(modelPartId) {
|
|
156
|
-
await this.checkMemory();
|
|
157
137
|
const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
|
|
158
138
|
return this.runSyncFileOp(modelPartId, () => modelPart.getAllVersions());
|
|
159
139
|
}
|
|
160
140
|
async getLatestVersion(modelPartId) {
|
|
161
|
-
await this.checkMemory();
|
|
162
141
|
const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
|
|
163
142
|
return this.runSyncFileOp(modelPartId, () => modelPart.getLatestVersion());
|
|
164
143
|
}
|
|
165
144
|
// CloudPart
|
|
166
145
|
async cacheCloudPart(modelPartId) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
146
|
+
return this.runSyncFileOp(modelPartId, async () => {
|
|
147
|
+
const reader = new BimCloudPartAccessor(modelPartId, this._module, () => this._fs.openSyncFileAccess(modelPartId), () => Promise.resolve(this._fs.closeSyncFileAccess(modelPartId)));
|
|
148
|
+
await this._cachedCloudReaders.get(modelPartId)?.close();
|
|
149
|
+
await reader.open();
|
|
150
|
+
this._cachedCloudReaders.set(modelPartId, reader);
|
|
151
|
+
});
|
|
171
152
|
}
|
|
172
153
|
async getCloudPoints(modelPartId, index) {
|
|
173
|
-
await this.checkMemory();
|
|
174
154
|
const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
|
|
175
155
|
return this.runSyncFileOp(modelPartId, () => modelPart.getCloudPoints(index));
|
|
176
156
|
}
|
|
157
|
+
async getCloudPointsArray(modelPartId, indicies, transmit) {
|
|
158
|
+
const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
|
|
159
|
+
return this.runSyncFileOp(modelPartId, () => modelPart.getCloudPointsArray(indicies, transmit));
|
|
160
|
+
}
|
|
177
161
|
getCloudHierarchy(modelPartId) {
|
|
178
162
|
const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
|
|
179
163
|
return this.runSyncFileOp(modelPartId, () => modelPart.getCloudHierarchy());
|
|
180
164
|
}
|
|
181
|
-
getCloudParameters(modelPartId) {
|
|
165
|
+
async getCloudParameters(modelPartId) {
|
|
182
166
|
const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
|
|
183
167
|
return this.runSyncFileOp(modelPartId, () => modelPart.getCloudParameters());
|
|
184
168
|
}
|
|
185
|
-
getCloudMetadata(modelPartId) {
|
|
169
|
+
async getCloudMetadata(modelPartId) {
|
|
186
170
|
const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
|
|
187
171
|
return this.runSyncFileOp(modelPartId, () => modelPart.getCloudMetadata());
|
|
188
172
|
}
|
|
@@ -214,17 +198,5 @@ export class WasmWorker {
|
|
|
214
198
|
}
|
|
215
199
|
}
|
|
216
200
|
}
|
|
217
|
-
async checkMemory() {
|
|
218
|
-
if (this._locker.isLocked)
|
|
219
|
-
await this._locker.lock;
|
|
220
|
-
const heapSize = this._module?.HEAP8.byteLength;
|
|
221
|
-
if (heapSize && heapSize > HEAP_SIZE_LIMIT) {
|
|
222
|
-
this._locker.isLocked = true;
|
|
223
|
-
this._locker.lock = this.flushMemory();
|
|
224
|
-
await this._locker.lock;
|
|
225
|
-
this._locker.isLocked = false;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
201
|
}
|
|
229
|
-
|
|
230
|
-
//# sourceMappingURL=wasm.worker.js.map
|
|
202
|
+
//# sourceMappingURL=WasmWorker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WasmWorker.js","sourceRoot":"","sources":["../../../src/wasm/WasmWorker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { IWasmWorker } from "./WasmWorker.js";
|
|
2
|
+
import { BimDataTessellation } from "../model/BimDataTessellation.js";
|
|
3
|
+
import { BimCloudHierarchyItem, BimCloudMetadata, BimDataElement } from "../model/BimDataElement.js";
|
|
4
|
+
import { BimDataElementPropertySet } from "../model/BimDataElementPropertySet.js";
|
|
5
|
+
import { BimCloudPartAccessor } from "./BimCloudPartAccessor.js";
|
|
6
|
+
import { IWasmBimModule } from "./pilot_bim_dataprovider.js";
|
|
7
|
+
export declare class WasmWorkerThreadSafeWrapper implements IWasmWorker {
|
|
8
|
+
private _memoryLocker;
|
|
9
|
+
private _operationsSet;
|
|
10
|
+
private _wasmWorker;
|
|
11
|
+
get module(): IWasmBimModule | undefined;
|
|
12
|
+
get cachedCloudReaders(): Map<string, BimCloudPartAccessor>;
|
|
13
|
+
init(): Promise<void>;
|
|
14
|
+
dispose(): Promise<void>;
|
|
15
|
+
open(id: string, buffer?: ArrayBuffer): Promise<void>;
|
|
16
|
+
write(modelPartId: string, buffer: ArrayBuffer, position: number): Promise<void>;
|
|
17
|
+
close(modelPartId: string): Promise<void>;
|
|
18
|
+
remove(modelPartId: string): Promise<void>;
|
|
19
|
+
isValidDatabase(modelPartId: string): Promise<boolean>;
|
|
20
|
+
updateModelPart(modelPartId: string, buffer: ArrayBuffer): Promise<void>;
|
|
21
|
+
mergeModelParts(targetId: string, sourceId: string): Promise<void>;
|
|
22
|
+
getAllTessellations(modelPartId: string, compressed: boolean, transmit: (map: BimDataTessellation[]) => Promise<void>): Promise<void>;
|
|
23
|
+
getTessellations(modelPartId: string, versionFrom: bigint, versionTo: bigint, compressed: boolean, transmit: (map: BimDataTessellation[]) => Promise<void>): Promise<void>;
|
|
24
|
+
getTessellation(modelPartId: string, tessellationKey: string, version: bigint, compressed: boolean): Promise<BimDataTessellation>;
|
|
25
|
+
getTessellationsByIds(modelPartId: string, tessellations: string[], version: bigint, compressed: boolean, transmit: (map: BimDataTessellation[]) => Promise<void>): Promise<void>;
|
|
26
|
+
getAllElements(modelPartId: string, transmit: (elements: BimDataElement[]) => Promise<void>): Promise<void>;
|
|
27
|
+
getElements(modelPartId: string, versionFrom: bigint, versionTo: bigint, transmit: (elements: BimDataElement[]) => Promise<void>): Promise<void>;
|
|
28
|
+
getDiffElements(modelPartId: string, versionFrom: bigint, versionTo: bigint, transmit: (elements: BimDataElement[]) => Promise<void>): Promise<void>;
|
|
29
|
+
getElementProperties(modelPartId: string, elementId: string, version: bigint): Promise<BimDataElementPropertySet[]>;
|
|
30
|
+
getElementTessellations(modelPartId: string, versionFrom: bigint, versionTo: bigint, compressed: boolean): Promise<BimDataTessellation[]>;
|
|
31
|
+
getAllVersions(modelPartId: string): Promise<bigint[]>;
|
|
32
|
+
getLatestVersion(modelPartId: string): Promise<bigint>;
|
|
33
|
+
cacheCloudPart(modelPartId: string): Promise<void>;
|
|
34
|
+
getCloudPoints(modelPartId: string, index: number): Promise<Float32Array>;
|
|
35
|
+
getCloudPointsArray(modelPartId: string, indicies: number[], transmit: (elements: Float32Array[]) => Promise<void>): Promise<void>;
|
|
36
|
+
getCloudHierarchy(modelPartId: string): Promise<BimCloudHierarchyItem[]>;
|
|
37
|
+
getCloudParameters(modelPartId: string): Promise<Map<string, string>>;
|
|
38
|
+
getCloudMetadata(modelPartId: string): Promise<BimCloudMetadata>;
|
|
39
|
+
flushMemory(): Promise<void>;
|
|
40
|
+
private checkMemory;
|
|
41
|
+
private wrapOperation;
|
|
42
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { WasmWorker } from "./WasmWorker.js";
|
|
2
|
+
import { isSecureContext } from "../utils/ViewerTools.js";
|
|
3
|
+
import { expose } from "./worker.js";
|
|
4
|
+
const HEAP_SIZE_LIMIT = 1024 * 1024 * 1024;
|
|
5
|
+
export class WasmWorkerThreadSafeWrapper {
|
|
6
|
+
constructor() {
|
|
7
|
+
this._memoryLocker = { isLocked: false, lock: Promise.resolve() };
|
|
8
|
+
this._operationsSet = new Set();
|
|
9
|
+
this._wasmWorker = new WasmWorker();
|
|
10
|
+
}
|
|
11
|
+
get module() {
|
|
12
|
+
return this._wasmWorker.module;
|
|
13
|
+
}
|
|
14
|
+
get cachedCloudReaders() {
|
|
15
|
+
return this._wasmWorker.cachedCloudReaders;
|
|
16
|
+
}
|
|
17
|
+
init() {
|
|
18
|
+
return this._wasmWorker.init();
|
|
19
|
+
}
|
|
20
|
+
dispose() {
|
|
21
|
+
return this._wasmWorker.dispose();
|
|
22
|
+
}
|
|
23
|
+
// DataPart
|
|
24
|
+
open(id, buffer) {
|
|
25
|
+
return this.wrapOperation(async () => this._wasmWorker.open(id, buffer));
|
|
26
|
+
}
|
|
27
|
+
write(modelPartId, buffer, position) {
|
|
28
|
+
return this.wrapOperation(async () => this._wasmWorker.write(modelPartId, buffer, position));
|
|
29
|
+
}
|
|
30
|
+
close(modelPartId) {
|
|
31
|
+
return this.wrapOperation(async () => this._wasmWorker.close(modelPartId));
|
|
32
|
+
}
|
|
33
|
+
remove(modelPartId) {
|
|
34
|
+
return this.wrapOperation(async () => this._wasmWorker.remove(modelPartId));
|
|
35
|
+
}
|
|
36
|
+
isValidDatabase(modelPartId) {
|
|
37
|
+
return this.wrapOperation(async () => this._wasmWorker.isValidDatabase(modelPartId));
|
|
38
|
+
}
|
|
39
|
+
// ModelPart
|
|
40
|
+
updateModelPart(modelPartId, buffer) {
|
|
41
|
+
return this.wrapOperation(async () => this._wasmWorker.updateModelPart(modelPartId, buffer));
|
|
42
|
+
}
|
|
43
|
+
mergeModelParts(targetId, sourceId) {
|
|
44
|
+
return this.wrapOperation(async () => this._wasmWorker.mergeModelParts(targetId, sourceId));
|
|
45
|
+
}
|
|
46
|
+
getAllTessellations(modelPartId, compressed, transmit) {
|
|
47
|
+
return this.wrapOperation(async () => this._wasmWorker.getAllTessellations(modelPartId, compressed, transmit));
|
|
48
|
+
}
|
|
49
|
+
getTessellations(modelPartId, versionFrom, versionTo, compressed, transmit) {
|
|
50
|
+
return this.wrapOperation(async () => this._wasmWorker.getTessellations(modelPartId, versionFrom, versionTo, compressed, transmit));
|
|
51
|
+
}
|
|
52
|
+
getTessellation(modelPartId, tessellationKey, version, compressed) {
|
|
53
|
+
return this.wrapOperation(async () => this._wasmWorker.getTessellation(modelPartId, tessellationKey, version, compressed));
|
|
54
|
+
}
|
|
55
|
+
getTessellationsByIds(modelPartId, tessellations, version, compressed, transmit) {
|
|
56
|
+
return this.wrapOperation(async () => this._wasmWorker.getTessellationsByIds(modelPartId, tessellations, version, compressed, transmit));
|
|
57
|
+
}
|
|
58
|
+
getAllElements(modelPartId, transmit) {
|
|
59
|
+
return this.wrapOperation(async () => this._wasmWorker.getAllElements(modelPartId, transmit));
|
|
60
|
+
}
|
|
61
|
+
getElements(modelPartId, versionFrom, versionTo, transmit) {
|
|
62
|
+
return this.wrapOperation(async () => this._wasmWorker.getElements(modelPartId, versionFrom, versionTo, transmit));
|
|
63
|
+
}
|
|
64
|
+
getDiffElements(modelPartId, versionFrom, versionTo, transmit) {
|
|
65
|
+
return this.wrapOperation(async () => this._wasmWorker.getDiffElements(modelPartId, versionFrom, versionTo, transmit));
|
|
66
|
+
}
|
|
67
|
+
getElementProperties(modelPartId, elementId, version) {
|
|
68
|
+
return this.wrapOperation(async () => this._wasmWorker.getElementProperties(modelPartId, elementId, version));
|
|
69
|
+
}
|
|
70
|
+
getElementTessellations(modelPartId, versionFrom, versionTo, compressed) {
|
|
71
|
+
return this.wrapOperation(async () => this._wasmWorker.getElementTessellations(modelPartId, versionFrom, versionTo, compressed));
|
|
72
|
+
}
|
|
73
|
+
getAllVersions(modelPartId) {
|
|
74
|
+
return this.wrapOperation(async () => this._wasmWorker.getAllVersions(modelPartId));
|
|
75
|
+
}
|
|
76
|
+
getLatestVersion(modelPartId) {
|
|
77
|
+
return this.wrapOperation(async () => this._wasmWorker.getLatestVersion(modelPartId));
|
|
78
|
+
}
|
|
79
|
+
// CloudPart
|
|
80
|
+
async cacheCloudPart(modelPartId) {
|
|
81
|
+
return this.wrapOperation(async () => this._wasmWorker.cacheCloudPart(modelPartId));
|
|
82
|
+
}
|
|
83
|
+
getCloudPoints(modelPartId, index) {
|
|
84
|
+
return this.wrapOperation(async () => this._wasmWorker.getCloudPoints(modelPartId, index));
|
|
85
|
+
}
|
|
86
|
+
getCloudPointsArray(modelPartId, indicies, transmit) {
|
|
87
|
+
return this.wrapOperation(async () => this._wasmWorker.getCloudPointsArray(modelPartId, indicies, transmit));
|
|
88
|
+
}
|
|
89
|
+
getCloudHierarchy(modelPartId) {
|
|
90
|
+
return this.wrapOperation(async () => this._wasmWorker.getCloudHierarchy(modelPartId));
|
|
91
|
+
}
|
|
92
|
+
getCloudParameters(modelPartId) {
|
|
93
|
+
return this.wrapOperation(async () => this._wasmWorker.getCloudParameters(modelPartId));
|
|
94
|
+
}
|
|
95
|
+
getCloudMetadata(modelPartId) {
|
|
96
|
+
return this.wrapOperation(async () => this._wasmWorker.getCloudMetadata(modelPartId));
|
|
97
|
+
}
|
|
98
|
+
// Memory checks & locks
|
|
99
|
+
flushMemory() {
|
|
100
|
+
if (!this.module || !isSecureContext)
|
|
101
|
+
return Promise.resolve();
|
|
102
|
+
if (this._memoryLocker.isLocked)
|
|
103
|
+
return this._memoryLocker.lock;
|
|
104
|
+
this._memoryLocker.isLocked = true;
|
|
105
|
+
const promise = async () => {
|
|
106
|
+
await Promise.all(Array.from(this._operationsSet.values()));
|
|
107
|
+
const cloudParts = Array.from(this.cachedCloudReaders.keys());
|
|
108
|
+
for await (const [, reader] of this.cachedCloudReaders)
|
|
109
|
+
await reader.close();
|
|
110
|
+
this.cachedCloudReaders.clear();
|
|
111
|
+
await this.init();
|
|
112
|
+
for await (const cloudId of cloudParts)
|
|
113
|
+
await this._wasmWorker.cacheCloudPart(cloudId);
|
|
114
|
+
this._memoryLocker.isLocked = false;
|
|
115
|
+
};
|
|
116
|
+
return this._memoryLocker.lock = promise();
|
|
117
|
+
}
|
|
118
|
+
async checkMemory() {
|
|
119
|
+
while (this._memoryLocker.isLocked)
|
|
120
|
+
await this._memoryLocker.lock;
|
|
121
|
+
const heapSize = this.module?.HEAP8.byteLength;
|
|
122
|
+
if (heapSize && heapSize > HEAP_SIZE_LIMIT) {
|
|
123
|
+
await this.flushMemory();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async wrapOperation(op) {
|
|
127
|
+
await this.checkMemory();
|
|
128
|
+
const opPromise = op();
|
|
129
|
+
this._operationsSet.add(opPromise);
|
|
130
|
+
opPromise.finally(() => this._operationsSet.delete(opPromise));
|
|
131
|
+
return opPromise;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
expose(WasmWorkerThreadSafeWrapper);
|
|
135
|
+
//# sourceMappingURL=WasmWorkerThreadSafeWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WasmWorkerThreadSafeWrapper.js","sourceRoot":"","sources":["../../../src/wasm/WasmWorkerThreadSafeWrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ export interface IWasmBimModule extends EmscriptenModule {
|
|
|
7
7
|
getTessellations(filename: string, versionFrom: bigint, versionTo: bigint, compressed?: boolean): VectorOf<WasmTessellation>;
|
|
8
8
|
getTessellation(filename: string, tessId: string, version: bigint, compressed?: boolean): WasmTessellation;
|
|
9
9
|
getNodesTessellations(filename: string, versionFrom: bigint, versionTo: bigint, compressed?: boolean): VectorOf<WasmTessellation>;
|
|
10
|
+
getTessellationsByIds(filename: string, version: bigint, tessIds: VectorOf<string>, compressed?: boolean): VectorOf<WasmTessellation>;
|
|
10
11
|
getNodes(filename: string, versionFrom: bigint, versionTo: bigint): VectorOf<WasmIfcNode>;
|
|
11
12
|
getProperties(filename: string, elementId: string, version: bigint): VectorOf<WasmElementPropertySet>;
|
|
12
13
|
getComparedNodes(filename: string, versionFrom: bigint, versionTo: bigint): VectorOf<WasmIfcNode>;
|
|
@@ -16,10 +17,10 @@ export interface IWasmBimModule extends EmscriptenModule {
|
|
|
16
17
|
getDatabaseVersion(filename: string): bigint;
|
|
17
18
|
mergeDatabases(targetDBFilename: string, sourceDBFilename: string): void;
|
|
18
19
|
manualMergeDatabases(targetDBFilename: string, sourceDBFilename: string): void;
|
|
19
|
-
auditDatabase(filename: string): void;
|
|
20
20
|
isValidDatabase(filename: string): boolean;
|
|
21
21
|
|
|
22
22
|
getCloudPoints(filename: string, index: number): WasmPointsData;
|
|
23
|
+
getCloudPointsArray(filename: string, indicies: VectorOf<number>): VectorOf<WasmPointsData>;
|
|
23
24
|
getCloudHierarchy(filename: string): VectorOf<WasmCloudHierarchyItem>;
|
|
24
25
|
getCloudParameters(filename: string): MapOf<string, string>;
|
|
25
26
|
getCloudMetadata(filename: string): WasmPointsMetadata;
|
|
@@ -29,6 +30,8 @@ export interface IWasmBimModule extends EmscriptenModule {
|
|
|
29
30
|
|
|
30
31
|
export interface VectorOf<T> extends IDisposable {
|
|
31
32
|
get(index: number): T;
|
|
33
|
+
set(index: number, value: T): void;
|
|
34
|
+
push_back(value: T): void;
|
|
32
35
|
size(): number;
|
|
33
36
|
}
|
|
34
37
|
|
|
@@ -218,6 +221,7 @@ export interface WasmCloudReader extends IDisposable {
|
|
|
218
221
|
close(): void;
|
|
219
222
|
|
|
220
223
|
getCloudPoints(index: number, cmdCacheEnable: boolean): WasmPointsData;
|
|
224
|
+
getCloudPointsArray(indicies: VectorOf<number>, cmdCacheEnable: boolean): VectorOf<WasmPointsData>;
|
|
221
225
|
getCloudHierarchy(): VectorOf<WasmCloudHierarchyItem>;
|
|
222
226
|
getCloudParameters(): MapOf<string, string>;
|
|
223
227
|
getCloudMetadata(): WasmPointsMetadata;
|
|
Binary file
|