• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.postMessageWithSharedSendable(true);
34      break;
35    case undefined:
36    case null:
37      ArkTools.forceFullGC();
38      workerPort.postMessageWithSharedSendable(true);
39      break;
40    case false:
41      processingBoolean(e);
42      break;
43    case 1:
44      processingNumber(e);
45      break;
46    case 1n:
47      processingBigint(e);
48      break;
49    case '1':
50      processingString(e);
51      break;
52    default:
53      break;
54  }
55}
56
57/**
58 * Defines the event handler to be called when the worker receives a message that cannot be deserialized.
59 * The event handler is executed in the worker thread.
60 *
61 * @param e message data
62 */
63workerPort.onmessageerror = (e: MessageEvents) => {
64}
65
66/**
67 * Defines the event handler to be called when an exception occurs during worker execution.
68 * The event handler is executed in the worker thread.
69 *
70 * @param e error message
71 */
72workerPort.onerror = (e: ErrorEvent) => {
73}
74
75function processingBoolean(e: MessageEvents) {
76  const data = e.data as boolean;
77  ArkTools.forceFullGC();
78  workerPort.postMessageWithSharedSendable(!data);
79}
80
81function processingNumber(e: MessageEvents) {
82  const data = e.data as number;
83  ArkTools.forceFullGC();
84  workerPort.postMessageWithSharedSendable(data + 1);
85}
86
87function processingBigint(e: MessageEvents) {
88  const data = e.data as bigint;
89  ArkTools.forceFullGC();
90  workerPort.postMessageWithSharedSendable(data + 1n);
91}
92
93function processingString(e: MessageEvents) {
94  let data = e.data as String;
95  data += '1';
96  ArkTools.forceFullGC();
97  workerPort.postMessageWithSharedSendable(data);
98}