1fb726d48Sopenharmony_ci/*
2fb726d48Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd.
3fb726d48Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4fb726d48Sopenharmony_ci * you may not use this file except in compliance with the License.
5fb726d48Sopenharmony_ci * You may obtain a copy of the License at
6fb726d48Sopenharmony_ci *
7fb726d48Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8fb726d48Sopenharmony_ci *
9fb726d48Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10fb726d48Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11fb726d48Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12fb726d48Sopenharmony_ci * See the License for the specific language governing permissions and
13fb726d48Sopenharmony_ci * limitations under the License.
14fb726d48Sopenharmony_ci */
15fb726d48Sopenharmony_ciimport { Args } from './CommonArgs';
16fb726d48Sopenharmony_ciimport { TraficEnum } from './utils/QueryEnum';
17fb726d48Sopenharmony_ci
18fb726d48Sopenharmony_ciexport const chartSMapsDataSqlMem = (args: Args): string => {
19fb726d48Sopenharmony_ci  return `SELECT (A.timestamp - ${args.recordStartNS}) as startNs,
20fb726d48Sopenharmony_ci        sum(${args.name}) * 1024 as value
21fb726d48Sopenharmony_ci        FROM smaps A
22fb726d48Sopenharmony_ci        WHERE A.timestamp < ${args.recordEndNS}
23fb726d48Sopenharmony_ci        GROUP by A.timestamp`;
24fb726d48Sopenharmony_ci};
25fb726d48Sopenharmony_ciexport const chartDmaDataSqlMem = (args: Args): string => {
26fb726d48Sopenharmony_ci  return `SELECT (A.ts - ${args.recordStartNS}) as startNs,
27fb726d48Sopenharmony_ci        sum(A.size) as value
28fb726d48Sopenharmony_ci        FROM memory_dma A
29fb726d48Sopenharmony_ci        WHERE A.flag = 0
30fb726d48Sopenharmony_ci        AND ${args.ipid} = A.ipid
31fb726d48Sopenharmony_ci        AND A.ts < ${args.recordEndNS}
32fb726d48Sopenharmony_ci        GROUP by A.ts`;
33fb726d48Sopenharmony_ci};
34fb726d48Sopenharmony_ciexport const chartGpuMemoryDataSqlMem = (args: Args): string => {
35fb726d48Sopenharmony_ci  return ` SELECT (A.ts - ${args.recordStartNS}) as startNs,
36fb726d48Sopenharmony_ci        sum(A.used_gpu_size) as value
37fb726d48Sopenharmony_ci        FROM memory_process_gpu A
38fb726d48Sopenharmony_ci        WHERE ${args.ipid} = A.ipid
39fb726d48Sopenharmony_ci        AND A.ts < ${args.recordEndNS}
40fb726d48Sopenharmony_ci        GROUP by A.ts`;
41fb726d48Sopenharmony_ci};
42fb726d48Sopenharmony_ciexport const chartGpuResourceDataSqlMem = (args: Args): string => {
43fb726d48Sopenharmony_ci  return `SELECT subquery1.startNs,
44fb726d48Sopenharmony_ci        (IFNULL(subquery1.totalSize, 0) - IFNULL(subquery2.size, 0)) AS value
45fb726d48Sopenharmony_ci        FROM
46fb726d48Sopenharmony_ci            (SELECT (ts - ${args.recordStartNS}) AS startNs,SUM(total_size) AS totalSize
47fb726d48Sopenharmony_ci            FROM memory_profile
48fb726d48Sopenharmony_ci            WHERE ts between ${args.recordStartNS} and ${args.recordEndNS}
49fb726d48Sopenharmony_ci            GROUP BY ts) AS subquery1
50fb726d48Sopenharmony_ci        LEFT JOIN
51fb726d48Sopenharmony_ci            (SELECT (ts - ${args.recordStartNS}) AS startNs, SUM(size) AS size
52fb726d48Sopenharmony_ci            FROM memory_window_gpu
53fb726d48Sopenharmony_ci            WHERE ts between ${args.recordStartNS} and ${args.recordEndNS}
54fb726d48Sopenharmony_ci            AND category_name_id = ${args.scratchId}
55fb726d48Sopenharmony_ci            GROUP BY ts) AS subquery2
56fb726d48Sopenharmony_ci        ON subquery1.startNs = subquery2.startNs`;
57fb726d48Sopenharmony_ci};
58fb726d48Sopenharmony_ciexport const chartGpuDataSqlMem = (args: Args): string => {
59fb726d48Sopenharmony_ci  return `select (ts - ${args.recordStartNS}) startNs,
60fb726d48Sopenharmony_ci        sum(value) * 1024 value
61fb726d48Sopenharmony_ci        from process_measure
62fb726d48Sopenharmony_ci        where filter_id = (
63fb726d48Sopenharmony_ci            select id
64fb726d48Sopenharmony_ci            from process_measure_filter
65fb726d48Sopenharmony_ci            where name = ${args.name} and ipid = ${args.ipid}
66fb726d48Sopenharmony_ci            )
67fb726d48Sopenharmony_ci        and ts between ${args.recordStartNS} AND ${args.recordEndNS}
68fb726d48Sopenharmony_ci        group by ts;`;
69fb726d48Sopenharmony_ci};
70fb726d48Sopenharmony_ciexport const chartGpuTotalDataSqlMem = (args: Args): string => {
71fb726d48Sopenharmony_ci  let moduleCondition = args.moduleId === null ? '' : `and module_name_id = ${args.moduleId}`;
72fb726d48Sopenharmony_ci  return `select (ts - ${args.recordStartNS}) startNs,
73fb726d48Sopenharmony_ci        sum(size) value
74fb726d48Sopenharmony_ci        from memory_window_gpu
75fb726d48Sopenharmony_ci        where window_name_id = 0 ${moduleCondition}
76fb726d48Sopenharmony_ci        and ts < ${args.recordEndNS}
77fb726d48Sopenharmony_ci        group by ts;`;
78fb726d48Sopenharmony_ci};
79fb726d48Sopenharmony_ciexport const chartGpuWindowDataSqlMem = (args: Args): string => {
80fb726d48Sopenharmony_ci  let moduleCondition = args.moduleId === null ? '' : `and module_name_id = ${args.moduleId}`;
81fb726d48Sopenharmony_ci  return `select (ts - ${args.recordStartNS}) startNs,
82fb726d48Sopenharmony_ci        sum(size) value
83fb726d48Sopenharmony_ci        from memory_window_gpu
84fb726d48Sopenharmony_ci        where window_name_id = ${args.windowId} ${moduleCondition}
85fb726d48Sopenharmony_ci        and ts < ${args.recordEndNS}
86fb726d48Sopenharmony_ci        group by ts`;
87fb726d48Sopenharmony_ci};
88fb726d48Sopenharmony_ciexport const chartShmDataSqlMem = (args: Args): string => {
89fb726d48Sopenharmony_ci  return `SELECT (A.ts - ${args.recordStartNS}) as startNs,
90fb726d48Sopenharmony_ci        sum(A.size) as value
91fb726d48Sopenharmony_ci        FROM memory_ashmem A
92fb726d48Sopenharmony_ci        where A.ipid = ${args.ipid}
93fb726d48Sopenharmony_ci        AND A.ts < ${args.recordEndNS}
94fb726d48Sopenharmony_ci        AND flag = 0
95fb726d48Sopenharmony_ci        GROUP by A.ts`;
96fb726d48Sopenharmony_ci};
97fb726d48Sopenharmony_ciexport const chartPurgeableDataSqlMem = (args: Args): string => {
98fb726d48Sopenharmony_ci  const pinSql = args.isPin ? ' AND a.ref_count > 0' : '';
99fb726d48Sopenharmony_ci  const names = args.isPin ? " ('mem.purg_pin')" : "('mem.purg_sum')";
100fb726d48Sopenharmony_ci  return `SELECT startNs,
101fb726d48Sopenharmony_ci        sum( value ) AS value
102fb726d48Sopenharmony_ci        FROM (SELECT m.ts - ${args.recordStartNS} AS startNs,
103fb726d48Sopenharmony_ci            sum(m.value) AS value
104fb726d48Sopenharmony_ci            FROM process_measure m
105fb726d48Sopenharmony_ci            LEFT JOIN process_measure_filter f ON f.id = m.filter_id
106fb726d48Sopenharmony_ci            WHERE m.ts < ${args.recordEndNS}
107fb726d48Sopenharmony_ci            AND f.name = ${names}
108fb726d48Sopenharmony_ci            AND f.ipid = ${args.ipid}
109fb726d48Sopenharmony_ci            GROUP BY m.ts
110fb726d48Sopenharmony_ci        UNION ALL
111fb726d48Sopenharmony_ci            SELECT a.ts - ${args.recordStartNS} AS startNs,
112fb726d48Sopenharmony_ci            sum( a.pss ) AS value
113fb726d48Sopenharmony_ci            FROM memory_ashmem a
114fb726d48Sopenharmony_ci            WHERE a.ts < ${args.recordEndNS}
115fb726d48Sopenharmony_ci            AND a.flag = 0
116fb726d48Sopenharmony_ci            AND a.ipid = ${args.ipid}
117fb726d48Sopenharmony_ci            ${pinSql}
118fb726d48Sopenharmony_ci            GROUP BY a.ts)
119fb726d48Sopenharmony_ci         GROUP BY startNs`;
120fb726d48Sopenharmony_ci};
121fb726d48Sopenharmony_ciexport const abilityPurgeablelDataSqlMem = (args: Args): string => {
122fb726d48Sopenharmony_ci  const pinCondition = args.isPin ? ' AND a.ref_count > 0' : '';
123fb726d48Sopenharmony_ci  const names = args.isPin ? " ('sys.mem.pined.purg')" : "('sys.mem.active.purg','sys.mem.inactive.purg')";
124fb726d48Sopenharmony_ci  return `SELECT startNs,
125fb726d48Sopenharmony_ci        sum( value ) AS value 
126fb726d48Sopenharmony_ci        FROM (SELECT m.ts - ${args.recordStartNS} AS startNs,
127fb726d48Sopenharmony_ci            sum( m.value ) AS value 
128fb726d48Sopenharmony_ci            FROM sys_mem_measure m
129fb726d48Sopenharmony_ci            LEFT JOIN sys_event_filter f ON f.id = m.filter_id 
130fb726d48Sopenharmony_ci            WHERE m.ts < ${args.recordEndNS}
131fb726d48Sopenharmony_ci            AND f.name IN ${names}
132fb726d48Sopenharmony_ci            GROUP BY m.ts 
133fb726d48Sopenharmony_ci        UNION ALL
134fb726d48Sopenharmony_ci            SELECT a.ts - ${args.recordStartNS} AS startNs,
135fb726d48Sopenharmony_ci            sum( a.size ) AS value 
136fb726d48Sopenharmony_ci            FROM  memory_ashmem a 
137fb726d48Sopenharmony_ci            WHERE a.ts < ${args.recordEndNS}
138fb726d48Sopenharmony_ci            AND a.flag = 0 
139fb726d48Sopenharmony_ci            ${pinCondition}
140fb726d48Sopenharmony_ci            GROUP BY a.ts ) 
141fb726d48Sopenharmony_ci        GROUP BY startNs`;
142fb726d48Sopenharmony_ci};
143fb726d48Sopenharmony_ciexport const abilityDmaDataSqlMem = (args: Args): string => {
144fb726d48Sopenharmony_ci  return `SELECT (A.ts - ${args.recordStartNS}) as startNs,
145fb726d48Sopenharmony_ci        sum(A.size) as value,
146fb726d48Sopenharmony_ci        E.data as expTaskComm,
147fb726d48Sopenharmony_ci        A.flag as flag
148fb726d48Sopenharmony_ci        FROM memory_dma A
149fb726d48Sopenharmony_ci        left join data_dict as E on E.id=A.exp_task_comm_id
150fb726d48Sopenharmony_ci        WHERE A.flag = 0
151fb726d48Sopenharmony_ci        AND A.ts < ${args.recordEndNS}
152fb726d48Sopenharmony_ci        GROUP by A.ts;`;
153fb726d48Sopenharmony_ci};
154fb726d48Sopenharmony_ciexport const abilityGpuMemoryDataSqlMem = (args: Args): string => {
155fb726d48Sopenharmony_ci  return `SELECT 
156fb726d48Sopenharmony_ci        (A.ts - ${args.recordStartNS}) as startNs,
157fb726d48Sopenharmony_ci        sum(A.used_gpu_size) as value
158fb726d48Sopenharmony_ci        FROM memory_process_gpu A
159fb726d48Sopenharmony_ci        WHERE A.ts < ${args.recordEndNS}
160fb726d48Sopenharmony_ci        GROUP by A.ts;`;
161fb726d48Sopenharmony_ci};
162fb726d48Sopenharmony_ci// @ts-ignore
163fb726d48Sopenharmony_cilet sMapsList: Array<unknown> = []; // @ts-ignore
164fb726d48Sopenharmony_cilet dmaList: Array<unknown> = []; // @ts-ignore
165fb726d48Sopenharmony_cilet gpuMemoryList: Array<unknown> = []; // @ts-ignore
166fb726d48Sopenharmony_cilet gpuList: Array<unknown> = []; // @ts-ignore
167fb726d48Sopenharmony_cilet gpuResourceList: Array<unknown> = []; // @ts-ignore
168fb726d48Sopenharmony_cilet gpuTotalList: Array<unknown> = []; // @ts-ignore
169fb726d48Sopenharmony_cilet gpuWindowList: Array<unknown> = []; // @ts-ignore
170fb726d48Sopenharmony_cilet shmList: Array<unknown> = []; // @ts-ignore
171fb726d48Sopenharmony_cilet purgeableList: Array<unknown> = []; // @ts-ignore
172fb726d48Sopenharmony_cilet sMapsMap = new Map<string, Array<unknown>>(); // @ts-ignore
173fb726d48Sopenharmony_cilet purgeableMap = new Map<string, Array<unknown>>(); // @ts-ignore
174fb726d48Sopenharmony_cilet gpuMap = new Map<string, Array<unknown>>(); // @ts-ignore
175fb726d48Sopenharmony_cilet abilityPurgeableMap: Map<string, Array<unknown>> = new Map(); // @ts-ignore
176fb726d48Sopenharmony_cilet abilityPurgeableList: Array<unknown> = []; // @ts-ignore
177fb726d48Sopenharmony_cilet abilityDmaList: Array<unknown> = []; // @ts-ignore
178fb726d48Sopenharmony_cilet abilityGpuMemoryList: Array<unknown> = [];
179fb726d48Sopenharmony_ci
180fb726d48Sopenharmony_ciexport function resetVmTracker(): void {
181fb726d48Sopenharmony_ci  sMapsList = [];
182fb726d48Sopenharmony_ci  dmaList = [];
183fb726d48Sopenharmony_ci  gpuMemoryList = [];
184fb726d48Sopenharmony_ci  gpuList = [];
185fb726d48Sopenharmony_ci  gpuResourceList = [];
186fb726d48Sopenharmony_ci  gpuTotalList = [];
187fb726d48Sopenharmony_ci  gpuWindowList = [];
188fb726d48Sopenharmony_ci  shmList = [];
189fb726d48Sopenharmony_ci  purgeableList = [];
190fb726d48Sopenharmony_ci  sMapsMap.clear();
191fb726d48Sopenharmony_ci  purgeableMap.clear();
192fb726d48Sopenharmony_ci  gpuMap.clear();
193fb726d48Sopenharmony_ci}
194fb726d48Sopenharmony_ci
195fb726d48Sopenharmony_ciexport function resetAbility(): void {
196fb726d48Sopenharmony_ci  abilityPurgeableList = [];
197fb726d48Sopenharmony_ci  abilityDmaList = [];
198fb726d48Sopenharmony_ci  abilityGpuMemoryList = [];
199fb726d48Sopenharmony_ci  abilityPurgeableMap.clear();
200fb726d48Sopenharmony_ci}
201fb726d48Sopenharmony_ci
202fb726d48Sopenharmony_ciexport function sMapsDataReceiver(data: unknown, proc: Function): void {
203fb726d48Sopenharmony_ci  // @ts-ignore
204fb726d48Sopenharmony_ci  if (!sMapsMap.has(data.params.name)) {
205fb726d48Sopenharmony_ci    // @ts-ignore
206fb726d48Sopenharmony_ci    sMapsList = proc(chartSMapsDataSqlMem(data.params)); // @ts-ignore
207fb726d48Sopenharmony_ci    sMapsMap.set(data.params.name, sMapsList);
208fb726d48Sopenharmony_ci  } // @ts-ignore
209fb726d48Sopenharmony_ci  let list = sMapsMap.get(data.params.name) || [];
210fb726d48Sopenharmony_ci  arrayBufferHandler(data, list, true);
211fb726d48Sopenharmony_ci}
212fb726d48Sopenharmony_ci
213fb726d48Sopenharmony_ciexport function dmaDataReceiver(data: unknown, proc: Function): void {
214fb726d48Sopenharmony_ci  if (dmaList.length === 0) {
215fb726d48Sopenharmony_ci    // @ts-ignore
216fb726d48Sopenharmony_ci    dmaList = proc(chartDmaDataSqlMem(data.params));
217fb726d48Sopenharmony_ci  }
218fb726d48Sopenharmony_ci  arrayBufferHandler(data, dmaList, true);
219fb726d48Sopenharmony_ci}
220fb726d48Sopenharmony_ci
221fb726d48Sopenharmony_ciexport function gpuMemoryDataReceiver(data: unknown, proc: Function): void {
222fb726d48Sopenharmony_ci  if (gpuMemoryList.length === 0) {
223fb726d48Sopenharmony_ci    // @ts-ignore
224fb726d48Sopenharmony_ci    gpuMemoryList = proc(chartGpuMemoryDataSqlMem(data.params));
225fb726d48Sopenharmony_ci  }
226fb726d48Sopenharmony_ci  arrayBufferHandler(data, gpuMemoryList, true);
227fb726d48Sopenharmony_ci}
228fb726d48Sopenharmony_ci
229fb726d48Sopenharmony_ciexport function gpuDataReceiver(data: unknown, proc: Function): void {
230fb726d48Sopenharmony_ci  // @ts-ignore
231fb726d48Sopenharmony_ci  if (!gpuMap.has(data.params.name)) {
232fb726d48Sopenharmony_ci    // @ts-ignore
233fb726d48Sopenharmony_ci    gpuList = proc(chartGpuDataSqlMem(data.params)); // @ts-ignore
234fb726d48Sopenharmony_ci    gpuMap.set(data.params.name, gpuList);
235fb726d48Sopenharmony_ci  } // @ts-ignore
236fb726d48Sopenharmony_ci  let list = gpuMap.get(data.params.name) || [];
237fb726d48Sopenharmony_ci  arrayBufferHandler(data, list, true);
238fb726d48Sopenharmony_ci}
239fb726d48Sopenharmony_ci
240fb726d48Sopenharmony_ciexport function gpuResourceDataReceiver(data: unknown, proc: Function): void {
241fb726d48Sopenharmony_ci  if (gpuResourceList.length === 0) {
242fb726d48Sopenharmony_ci    // @ts-ignore
243fb726d48Sopenharmony_ci    gpuResourceList = proc(chartGpuResourceDataSqlMem(data.params));
244fb726d48Sopenharmony_ci  }
245fb726d48Sopenharmony_ci  arrayBufferHandler(data, gpuResourceList, true);
246fb726d48Sopenharmony_ci}
247fb726d48Sopenharmony_ci
248fb726d48Sopenharmony_ciexport function gpuTotalDataReceiver(data: unknown, proc: Function): void {
249fb726d48Sopenharmony_ci  // @ts-ignore
250fb726d48Sopenharmony_ci  if (gpuTotalList.length === 0 || data.params.moduleId) {
251fb726d48Sopenharmony_ci    // @ts-ignore
252fb726d48Sopenharmony_ci    gpuTotalList = proc(chartGpuTotalDataSqlMem(data.params));
253fb726d48Sopenharmony_ci  }
254fb726d48Sopenharmony_ci  arrayBufferHandler(data, gpuTotalList, true);
255fb726d48Sopenharmony_ci}
256fb726d48Sopenharmony_ci
257fb726d48Sopenharmony_ciexport function gpuWindowDataReceiver(data: unknown, proc: Function): void {
258fb726d48Sopenharmony_ci  // @ts-ignore
259fb726d48Sopenharmony_ci  if (gpuWindowList.length === 0 || data.params.moduleId) {
260fb726d48Sopenharmony_ci    // @ts-ignore
261fb726d48Sopenharmony_ci    gpuWindowList = proc(chartGpuWindowDataSqlMem(data.params));
262fb726d48Sopenharmony_ci  }
263fb726d48Sopenharmony_ci  arrayBufferHandler(data, gpuWindowList, true);
264fb726d48Sopenharmony_ci}
265fb726d48Sopenharmony_ci
266fb726d48Sopenharmony_ciexport function shmDataReceiver(data: unknown, proc: Function): void {
267fb726d48Sopenharmony_ci  if (shmList.length === 0) {
268fb726d48Sopenharmony_ci    // @ts-ignore
269fb726d48Sopenharmony_ci    shmList = proc(chartShmDataSqlMem(data.params));
270fb726d48Sopenharmony_ci  }
271fb726d48Sopenharmony_ci  arrayBufferHandler(data, shmList, true);
272fb726d48Sopenharmony_ci}
273fb726d48Sopenharmony_ci
274fb726d48Sopenharmony_ciexport function purgeableDataReceiver(data: unknown, proc: Function): void {
275fb726d48Sopenharmony_ci  let key: string = '';
276fb726d48Sopenharmony_ci  if (
277fb726d48Sopenharmony_ci    // @ts-ignore
278fb726d48Sopenharmony_ci    data.params.isPin
279fb726d48Sopenharmony_ci  ) {
280fb726d48Sopenharmony_ci    key = 'pin';
281fb726d48Sopenharmony_ci  } else {
282fb726d48Sopenharmony_ci    key = 'total';
283fb726d48Sopenharmony_ci  }
284fb726d48Sopenharmony_ci  if (
285fb726d48Sopenharmony_ci    !purgeableMap.has(
286fb726d48Sopenharmony_ci      // @ts-ignore
287fb726d48Sopenharmony_ci      data.params.isPin
288fb726d48Sopenharmony_ci    )
289fb726d48Sopenharmony_ci  ) {
290fb726d48Sopenharmony_ci    purgeableList = proc(
291fb726d48Sopenharmony_ci      chartPurgeableDataSqlMem(
292fb726d48Sopenharmony_ci        // @ts-ignore
293fb726d48Sopenharmony_ci        data.params
294fb726d48Sopenharmony_ci      )
295fb726d48Sopenharmony_ci    );
296fb726d48Sopenharmony_ci    purgeableMap.set(key, purgeableList);
297fb726d48Sopenharmony_ci  }
298fb726d48Sopenharmony_ci  let list = purgeableMap.get(key) || [];
299fb726d48Sopenharmony_ci  arrayBufferHandler(data, list, true);
300fb726d48Sopenharmony_ci}
301fb726d48Sopenharmony_ci
302fb726d48Sopenharmony_ciexport function abilityPurgeableDataReceiver(data: unknown, proc: Function): void {
303fb726d48Sopenharmony_ci  let key = '';
304fb726d48Sopenharmony_ci  if (
305fb726d48Sopenharmony_ci    // @ts-ignore
306fb726d48Sopenharmony_ci    data.params.isPin
307fb726d48Sopenharmony_ci  ) {
308fb726d48Sopenharmony_ci    key = 'pin';
309fb726d48Sopenharmony_ci  } else {
310fb726d48Sopenharmony_ci    key = 'total';
311fb726d48Sopenharmony_ci  }
312fb726d48Sopenharmony_ci  if (!abilityPurgeableMap.has(key)) {
313fb726d48Sopenharmony_ci    abilityPurgeableList = proc(
314fb726d48Sopenharmony_ci      abilityPurgeablelDataSqlMem(
315fb726d48Sopenharmony_ci        // @ts-ignore
316fb726d48Sopenharmony_ci        data.params
317fb726d48Sopenharmony_ci      )
318fb726d48Sopenharmony_ci    );
319fb726d48Sopenharmony_ci    abilityPurgeableMap.set(key, abilityPurgeableList);
320fb726d48Sopenharmony_ci  }
321fb726d48Sopenharmony_ci  let abilityList = abilityPurgeableMap.get(key) || [];
322fb726d48Sopenharmony_ci  arrayBufferHandler(data, abilityList, true);
323fb726d48Sopenharmony_ci}
324fb726d48Sopenharmony_ci
325fb726d48Sopenharmony_ciexport function abilityDmaDataReceiver(data: unknown, proc: Function): void {
326fb726d48Sopenharmony_ci  if (abilityDmaList.length === 0) {
327fb726d48Sopenharmony_ci    // @ts-ignore
328fb726d48Sopenharmony_ci    abilityDmaList = proc(abilityDmaDataSqlMem(data.params));
329fb726d48Sopenharmony_ci  }
330fb726d48Sopenharmony_ci  arrayBufferHandler(data, abilityDmaList, true);
331fb726d48Sopenharmony_ci}
332fb726d48Sopenharmony_ci
333fb726d48Sopenharmony_ciexport function abilityGpuMemoryDataReceiver(data: unknown, proc: Function): void {
334fb726d48Sopenharmony_ci  if (abilityGpuMemoryList.length === 0) {
335fb726d48Sopenharmony_ci    // @ts-ignore
336fb726d48Sopenharmony_ci    abilityGpuMemoryList = proc(abilityGpuMemoryDataSqlMem(data.params));
337fb726d48Sopenharmony_ci  }
338fb726d48Sopenharmony_ci  arrayBufferHandler(data, abilityGpuMemoryList, true);
339fb726d48Sopenharmony_ci}
340fb726d48Sopenharmony_ci
341fb726d48Sopenharmony_cifunction arrayBufferHandler(data: unknown, res: unknown[], transfer: boolean): void {
342fb726d48Sopenharmony_ci  // @ts-ignore
343fb726d48Sopenharmony_ci  let startNs = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.startNs); // @ts-ignore
344fb726d48Sopenharmony_ci  let value = new Int32Array(transfer ? res.length : data.params.sharedArrayBuffers.value);
345fb726d48Sopenharmony_ci  res.forEach((it, i) => {
346fb726d48Sopenharmony_ci    // @ts-ignore
347fb726d48Sopenharmony_ci    data.params.trafic === TraficEnum.ProtoBuffer && (it = it.trackerData); // @ts-ignore
348fb726d48Sopenharmony_ci    startNs[i] = it.startNs; // @ts-ignore
349fb726d48Sopenharmony_ci    value[i] = it.value;
350fb726d48Sopenharmony_ci  });
351fb726d48Sopenharmony_ci  (self as unknown as Worker).postMessage(
352fb726d48Sopenharmony_ci    {
353fb726d48Sopenharmony_ci      // @ts-ignore
354fb726d48Sopenharmony_ci      id: data.id, // @ts-ignore
355fb726d48Sopenharmony_ci      action: data.action,
356fb726d48Sopenharmony_ci      results: transfer
357fb726d48Sopenharmony_ci        ? {
358fb726d48Sopenharmony_ci            startNs: startNs.buffer,
359fb726d48Sopenharmony_ci            value: value.buffer,
360fb726d48Sopenharmony_ci          }
361fb726d48Sopenharmony_ci        : {},
362fb726d48Sopenharmony_ci      len: res.length,
363fb726d48Sopenharmony_ci      transfer: transfer,
364fb726d48Sopenharmony_ci    },
365fb726d48Sopenharmony_ci    transfer ? [startNs.buffer, value.buffer] : []
366fb726d48Sopenharmony_ci  );
367fb726d48Sopenharmony_ci}
368