1/** 2 * Copyright (c) 2024 SwanLink (Jiangsu) Technology Development Co., LTD. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS'; 17 18const workerPort: ThreadWorkerGlobalScope = worker.workerPort; 19 20declare class ArkTools { 21 static forceFullGC(): void; 22} 23 24/** 25 * Defines the event handler to be called when the worker thread receives a message sent by the host thread. 26 * The event handler is executed in the worker thread. 27 * 28 * @param e message data 29 */ 30workerPort.onmessage = (e: MessageEvents) => { 31 switch (e.data) { 32 case 'message': 33 workerPort.postMessage(true); 34 break; 35 case undefined: 36 case null: 37 ArkTools.forceFullGC(); 38 workerPort.postMessage(true); 39 break; 40 case false: 41 processingBoolean(e); 42 break; 43 case 1: 44 case 2: 45 processingNumber(e); 46 break; 47 case 1n: 48 processingBigint(e); 49 break; 50 case '1': 51 processingString(e); 52 break; 53 default: 54 break; 55 } 56} 57 58/** 59 * Defines the event handler to be called when the worker receives a message that cannot be deserialized. 60 * The event handler is executed in the worker thread. 61 * 62 * @param e message data 63 */ 64workerPort.onmessageerror = (e: MessageEvents) => { 65} 66 67/** 68 * Defines the event handler to be called when an exception occurs during worker execution. 69 * The event handler is executed in the worker thread. 70 * 71 * @param e error message 72 */ 73workerPort.onerror = (e: ErrorEvent) => { 74} 75 76function processingBoolean(e: MessageEvents) { 77 const data = e.data as boolean; 78 ArkTools.forceFullGC(); 79 workerPort.postMessage(!data); 80} 81 82function processingNumber(e: MessageEvents) { 83 const data = e.data as number; 84 ArkTools.forceFullGC(); 85 workerPort.postMessage(data + 1); 86} 87 88function processingBigint(e: MessageEvents) { 89 const data = e.data as bigint; 90 ArkTools.forceFullGC(); 91 workerPort.postMessage(data + 1n); 92} 93 94function processingString(e: MessageEvents) { 95 let data = e.data as String; 96 data += '1'; 97 ArkTools.forceFullGC(); 98 workerPort.postMessage(data); 99}