* Copyright (C) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const mallocSize = 1024 * 1024;
let Module_T: any = null;
function initConfigWASM(wasmFunctionName: string) {
return new Promise((resolve, reject) => {
function callModelFun(functionName: string) {
let func = eval(functionName);
Module_T = new func({
locateFile: (s: any) => {
return s;
},
print: (line: any) => {},
printErr: (line: any) => {},
onRuntimeInitialized: () => {
resolve('ok');
},
onAbort: () => {},
});
}
callModelFun(wasmFunctionName);
});
}
self.onmessage = async (e: MessageEvent) => {
if (e.data.action === 'open') {
let jsFile = e.data.wasmJsName;
importScripts(jsFile);
await initConfigWASM(e.data.WasmName);
let dataCallBack = (heapPtr: number, size: number, isEnd: number, isConfig: number) => {
if (isConfig == 1) {
let jsonOut: Uint8Array = Module_T.HEAPU8.slice(heapPtr, heapPtr + size);
let decoder = new TextDecoder();
let result = decoder.decode(jsonOut);
let json = JSON.parse(result);
self.postMessage({
results: json,
});
}
};
let fn = Module_T.addFunction(dataCallBack, 'viiii');
Module_T._Init(fn, mallocSize);
Module_T._TraceStreamer_In_JsonConfig();
}
};