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_ci
16fb726d48Sopenharmony_ciimport { CHART_OFFSET_LEFT, MAX_COUNT, QueryEnum, TraficEnum } from './utils/QueryEnum';
17fb726d48Sopenharmony_ciimport { threadPool } from '../SqlLite';
18fb726d48Sopenharmony_ciimport { TraceRow } from '../../component/trace/base/TraceRow';
19fb726d48Sopenharmony_ciimport { SnapshotStruct } from '../ui-worker/ProcedureWorkerSnapshot';
20fb726d48Sopenharmony_ci
21fb726d48Sopenharmony_ciexport function sMapsDataSender(rowName: string, row: TraceRow<SnapshotStruct>): Promise<SnapshotStruct[]> {
22fb726d48Sopenharmony_ci  let trafic: number = TraficEnum.ProtoBuffer;
23fb726d48Sopenharmony_ci  let width = row.clientWidth - CHART_OFFSET_LEFT;
24fb726d48Sopenharmony_ci  if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) {
25fb726d48Sopenharmony_ci    row.sharedArrayBuffers = {
26fb726d48Sopenharmony_ci      value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT),
27fb726d48Sopenharmony_ci      startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
28fb726d48Sopenharmony_ci    };
29fb726d48Sopenharmony_ci  }
30fb726d48Sopenharmony_ci  return new Promise((resolve, reject) => {
31fb726d48Sopenharmony_ci    threadPool.submitProto(
32fb726d48Sopenharmony_ci      QueryEnum.VmTrackerSmapsData,
33fb726d48Sopenharmony_ci      {
34fb726d48Sopenharmony_ci        startNs: TraceRow.range?.startNS || 0,
35fb726d48Sopenharmony_ci        endNs: TraceRow.range?.endNS || 0,
36fb726d48Sopenharmony_ci        recordStartNS: window.recordStartNS,
37fb726d48Sopenharmony_ci        recordEndNS: window.recordEndNS,
38fb726d48Sopenharmony_ci        width: width,
39fb726d48Sopenharmony_ci        trafic: trafic,
40fb726d48Sopenharmony_ci        sharedArrayBuffers: row.sharedArrayBuffers,
41fb726d48Sopenharmony_ci        name: rowName,
42fb726d48Sopenharmony_ci      }, // @ts-ignore
43fb726d48Sopenharmony_ci      (res: unknown, len: number, transfer: boolean) => {
44fb726d48Sopenharmony_ci        resolve(arrayBufferHandler(res, len));
45fb726d48Sopenharmony_ci      }
46fb726d48Sopenharmony_ci    );
47fb726d48Sopenharmony_ci  });
48fb726d48Sopenharmony_ci}
49fb726d48Sopenharmony_ci
50fb726d48Sopenharmony_ciexport function dmaDataSender(ipid: number, row: TraceRow<SnapshotStruct>): Promise<SnapshotStruct[]> {
51fb726d48Sopenharmony_ci  let trafic: number = TraficEnum.ProtoBuffer;
52fb726d48Sopenharmony_ci  let dmaWidth = row.clientWidth - CHART_OFFSET_LEFT;
53fb726d48Sopenharmony_ci  if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) {
54fb726d48Sopenharmony_ci    row.sharedArrayBuffers = {
55fb726d48Sopenharmony_ci      startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
56fb726d48Sopenharmony_ci      value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT),
57fb726d48Sopenharmony_ci    };
58fb726d48Sopenharmony_ci  }
59fb726d48Sopenharmony_ci  return new Promise((resolve, reject) => {
60fb726d48Sopenharmony_ci    threadPool.submitProto(
61fb726d48Sopenharmony_ci      QueryEnum.VmTrackerDmaData,
62fb726d48Sopenharmony_ci      {
63fb726d48Sopenharmony_ci        startNs: TraceRow.range?.startNS || 0,
64fb726d48Sopenharmony_ci        endNs: TraceRow.range?.endNS || 0,
65fb726d48Sopenharmony_ci        recordStartNS: window.recordStartNS,
66fb726d48Sopenharmony_ci        recordEndNS: window.recordEndNS,
67fb726d48Sopenharmony_ci        width: dmaWidth,
68fb726d48Sopenharmony_ci        trafic: trafic,
69fb726d48Sopenharmony_ci        ipid: ipid,
70fb726d48Sopenharmony_ci        sharedArrayBuffers: row.sharedArrayBuffers,
71fb726d48Sopenharmony_ci      }, // @ts-ignore
72fb726d48Sopenharmony_ci      (res: unknown, len: number, transfer: boolean) => {
73fb726d48Sopenharmony_ci        resolve(arrayBufferHandler(res, len));
74fb726d48Sopenharmony_ci      }
75fb726d48Sopenharmony_ci    );
76fb726d48Sopenharmony_ci  });
77fb726d48Sopenharmony_ci}
78fb726d48Sopenharmony_ci
79fb726d48Sopenharmony_ciexport function gpuMemoryDataSender(ipid: number, row: TraceRow<SnapshotStruct>): Promise<SnapshotStruct[]> {
80fb726d48Sopenharmony_ci  let trafic: number = TraficEnum.ProtoBuffer;
81fb726d48Sopenharmony_ci  let gpuMemWidth = row.clientWidth - CHART_OFFSET_LEFT;
82fb726d48Sopenharmony_ci  if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) {
83fb726d48Sopenharmony_ci    row.sharedArrayBuffers = {
84fb726d48Sopenharmony_ci      startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
85fb726d48Sopenharmony_ci      value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT),
86fb726d48Sopenharmony_ci    };
87fb726d48Sopenharmony_ci  }
88fb726d48Sopenharmony_ci  return new Promise((resolve, reject) => {
89fb726d48Sopenharmony_ci    threadPool.submitProto(
90fb726d48Sopenharmony_ci      QueryEnum.VmTrackerGpuMemoryData,
91fb726d48Sopenharmony_ci      {
92fb726d48Sopenharmony_ci        startNs: TraceRow.range?.startNS || 0,
93fb726d48Sopenharmony_ci        endNs: TraceRow.range?.endNS || 0,
94fb726d48Sopenharmony_ci        recordStartNS: window.recordStartNS,
95fb726d48Sopenharmony_ci        recordEndNS: window.recordEndNS,
96fb726d48Sopenharmony_ci        width: gpuMemWidth,
97fb726d48Sopenharmony_ci        trafic: trafic,
98fb726d48Sopenharmony_ci        ipid: ipid,
99fb726d48Sopenharmony_ci        sharedArrayBuffers: row.sharedArrayBuffers,
100fb726d48Sopenharmony_ci      }, // @ts-ignore
101fb726d48Sopenharmony_ci      (res: unknown, len: number, transfer: boolean) => {
102fb726d48Sopenharmony_ci        resolve(arrayBufferHandler(res, len));
103fb726d48Sopenharmony_ci      }
104fb726d48Sopenharmony_ci    );
105fb726d48Sopenharmony_ci  });
106fb726d48Sopenharmony_ci}
107fb726d48Sopenharmony_ciexport function gpuResourceDataSender(scratchId: number, row: TraceRow<SnapshotStruct>): Promise<SnapshotStruct[]> {
108fb726d48Sopenharmony_ci  let trafic: number = TraficEnum.ProtoBuffer;
109fb726d48Sopenharmony_ci  let gpuResWidth = row.clientWidth - CHART_OFFSET_LEFT;
110fb726d48Sopenharmony_ci  if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) {
111fb726d48Sopenharmony_ci    row.sharedArrayBuffers = {
112fb726d48Sopenharmony_ci      startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
113fb726d48Sopenharmony_ci      value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT),
114fb726d48Sopenharmony_ci    };
115fb726d48Sopenharmony_ci  }
116fb726d48Sopenharmony_ci  return new Promise((resolve, reject) => {
117fb726d48Sopenharmony_ci    threadPool.submitProto(
118fb726d48Sopenharmony_ci      QueryEnum.VmTrackerGpuResourceData,
119fb726d48Sopenharmony_ci      {
120fb726d48Sopenharmony_ci        startNs: TraceRow.range?.startNS || 0,
121fb726d48Sopenharmony_ci        endNs: TraceRow.range?.endNS || 0,
122fb726d48Sopenharmony_ci        recordStartNS: window.recordStartNS,
123fb726d48Sopenharmony_ci        recordEndNS: window.recordEndNS,
124fb726d48Sopenharmony_ci        width: gpuResWidth,
125fb726d48Sopenharmony_ci        trafic: trafic,
126fb726d48Sopenharmony_ci        sharedArrayBuffers: row.sharedArrayBuffers,
127fb726d48Sopenharmony_ci        scratchId: scratchId,
128fb726d48Sopenharmony_ci      }, // @ts-ignore
129fb726d48Sopenharmony_ci      (res: unknown, len: number, transfer: boolean) => {
130fb726d48Sopenharmony_ci        resolve(arrayBufferHandler(res, len));
131fb726d48Sopenharmony_ci      }
132fb726d48Sopenharmony_ci    );
133fb726d48Sopenharmony_ci  });
134fb726d48Sopenharmony_ci}
135fb726d48Sopenharmony_ci
136fb726d48Sopenharmony_ciexport function gpuGpuDataSender(ipid: number, name: string, row: TraceRow<SnapshotStruct>): Promise<SnapshotStruct[]> {
137fb726d48Sopenharmony_ci  let trafic: number = TraficEnum.ProtoBuffer;
138fb726d48Sopenharmony_ci  let gpuWidth = row.clientWidth - CHART_OFFSET_LEFT;
139fb726d48Sopenharmony_ci  if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) {
140fb726d48Sopenharmony_ci    row.sharedArrayBuffers = {
141fb726d48Sopenharmony_ci      startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
142fb726d48Sopenharmony_ci      value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT),
143fb726d48Sopenharmony_ci    };
144fb726d48Sopenharmony_ci  }
145fb726d48Sopenharmony_ci  return new Promise((resolve, reject) => {
146fb726d48Sopenharmony_ci    threadPool.submitProto(
147fb726d48Sopenharmony_ci      QueryEnum.VmTrackerGpuData,
148fb726d48Sopenharmony_ci      {
149fb726d48Sopenharmony_ci        startNs: TraceRow.range?.startNS || 0,
150fb726d48Sopenharmony_ci        endNs: TraceRow.range?.endNS || 0,
151fb726d48Sopenharmony_ci        recordStartNS: window.recordStartNS,
152fb726d48Sopenharmony_ci        recordEndNS: window.recordEndNS,
153fb726d48Sopenharmony_ci        width: gpuWidth,
154fb726d48Sopenharmony_ci        trafic: trafic,
155fb726d48Sopenharmony_ci        sharedArrayBuffers: row.sharedArrayBuffers,
156fb726d48Sopenharmony_ci        ipid: ipid,
157fb726d48Sopenharmony_ci        name: name,
158fb726d48Sopenharmony_ci      }, // @ts-ignore
159fb726d48Sopenharmony_ci      (res: unknown, len: number, transfer: boolean) => {
160fb726d48Sopenharmony_ci        resolve(arrayBufferHandler(res, len));
161fb726d48Sopenharmony_ci      }
162fb726d48Sopenharmony_ci    );
163fb726d48Sopenharmony_ci  });
164fb726d48Sopenharmony_ci}
165fb726d48Sopenharmony_ci
166fb726d48Sopenharmony_ciexport function gpuTotalDataSender(moduleId: number | null, row: TraceRow<SnapshotStruct>): Promise<SnapshotStruct[]> {
167fb726d48Sopenharmony_ci  let trafic: number = TraficEnum.ProtoBuffer;
168fb726d48Sopenharmony_ci  let gpuTotalwidth = row.clientWidth - CHART_OFFSET_LEFT;
169fb726d48Sopenharmony_ci  if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) {
170fb726d48Sopenharmony_ci    row.sharedArrayBuffers = {
171fb726d48Sopenharmony_ci      startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
172fb726d48Sopenharmony_ci      value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT),
173fb726d48Sopenharmony_ci    };
174fb726d48Sopenharmony_ci  }
175fb726d48Sopenharmony_ci  return new Promise((resolve, reject) => {
176fb726d48Sopenharmony_ci    threadPool.submitProto(
177fb726d48Sopenharmony_ci      QueryEnum.VmTrackerGpuTotalData,
178fb726d48Sopenharmony_ci      {
179fb726d48Sopenharmony_ci        startNs: TraceRow.range?.startNS || 0,
180fb726d48Sopenharmony_ci        endNs: TraceRow.range?.endNS || 0,
181fb726d48Sopenharmony_ci        recordStartNS: window.recordStartNS,
182fb726d48Sopenharmony_ci        recordEndNS: window.recordEndNS,
183fb726d48Sopenharmony_ci        width: gpuTotalwidth,
184fb726d48Sopenharmony_ci        trafic: trafic,
185fb726d48Sopenharmony_ci        sharedArrayBuffers: row.sharedArrayBuffers,
186fb726d48Sopenharmony_ci        moduleId: moduleId,
187fb726d48Sopenharmony_ci      }, // @ts-ignore
188fb726d48Sopenharmony_ci      (res: unknown, len: number, transfer: boolean) => {
189fb726d48Sopenharmony_ci        resolve(arrayBufferHandler(res, len));
190fb726d48Sopenharmony_ci      }
191fb726d48Sopenharmony_ci    );
192fb726d48Sopenharmony_ci  });
193fb726d48Sopenharmony_ci}
194fb726d48Sopenharmony_ci
195fb726d48Sopenharmony_ciexport function gpuWindowDataSender(
196fb726d48Sopenharmony_ci  windowId: number | null,
197fb726d48Sopenharmony_ci  moduleId: number | null,
198fb726d48Sopenharmony_ci  row: TraceRow<SnapshotStruct>
199fb726d48Sopenharmony_ci): Promise<SnapshotStruct[]> {
200fb726d48Sopenharmony_ci  let trafic: number = TraficEnum.ProtoBuffer;
201fb726d48Sopenharmony_ci  let gpuWindowWidth = row.clientWidth - CHART_OFFSET_LEFT;
202fb726d48Sopenharmony_ci  if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) {
203fb726d48Sopenharmony_ci    row.sharedArrayBuffers = {
204fb726d48Sopenharmony_ci      startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
205fb726d48Sopenharmony_ci      value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT),
206fb726d48Sopenharmony_ci    };
207fb726d48Sopenharmony_ci  }
208fb726d48Sopenharmony_ci  return new Promise((resolve, reject) => {
209fb726d48Sopenharmony_ci    threadPool.submitProto(
210fb726d48Sopenharmony_ci      QueryEnum.VmTrackerGpuWindowData,
211fb726d48Sopenharmony_ci      {
212fb726d48Sopenharmony_ci        startNs: TraceRow.range?.startNS || 0,
213fb726d48Sopenharmony_ci        endNs: TraceRow.range?.endNS || 0,
214fb726d48Sopenharmony_ci        recordStartNS: window.recordStartNS,
215fb726d48Sopenharmony_ci        recordEndNS: window.recordEndNS,
216fb726d48Sopenharmony_ci        width: gpuWindowWidth,
217fb726d48Sopenharmony_ci        trafic: trafic,
218fb726d48Sopenharmony_ci        sharedArrayBuffers: row.sharedArrayBuffers,
219fb726d48Sopenharmony_ci        windowId: windowId,
220fb726d48Sopenharmony_ci        moduleId: moduleId,
221fb726d48Sopenharmony_ci      }, // @ts-ignore
222fb726d48Sopenharmony_ci      (res: unknown, len: number, transfer: boolean) => {
223fb726d48Sopenharmony_ci        resolve(arrayBufferHandler(res, len));
224fb726d48Sopenharmony_ci      }
225fb726d48Sopenharmony_ci    );
226fb726d48Sopenharmony_ci  });
227fb726d48Sopenharmony_ci}
228fb726d48Sopenharmony_ci
229fb726d48Sopenharmony_ciexport function shmDataSender(ipid: number, row: TraceRow<SnapshotStruct>): Promise<SnapshotStruct[]> {
230fb726d48Sopenharmony_ci  let trafic: number = TraficEnum.ProtoBuffer;
231fb726d48Sopenharmony_ci  let width = row.clientWidth - CHART_OFFSET_LEFT;
232fb726d48Sopenharmony_ci  if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) {
233fb726d48Sopenharmony_ci    row.sharedArrayBuffers = {
234fb726d48Sopenharmony_ci      startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
235fb726d48Sopenharmony_ci      value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT),
236fb726d48Sopenharmony_ci    };
237fb726d48Sopenharmony_ci  }
238fb726d48Sopenharmony_ci  return new Promise((resolve, reject) => {
239fb726d48Sopenharmony_ci    threadPool.submitProto(
240fb726d48Sopenharmony_ci      QueryEnum.VmTrackerShmData,
241fb726d48Sopenharmony_ci      {
242fb726d48Sopenharmony_ci        startNs: TraceRow.range?.startNS || 0,
243fb726d48Sopenharmony_ci        endNs: TraceRow.range?.endNS || 0,
244fb726d48Sopenharmony_ci        recordStartNS: window.recordStartNS,
245fb726d48Sopenharmony_ci        recordEndNS: window.recordEndNS,
246fb726d48Sopenharmony_ci        width: width,
247fb726d48Sopenharmony_ci        trafic: trafic,
248fb726d48Sopenharmony_ci        sharedArrayBuffers: row.sharedArrayBuffers,
249fb726d48Sopenharmony_ci        ipid: ipid,
250fb726d48Sopenharmony_ci      }, // @ts-ignore
251fb726d48Sopenharmony_ci      (res: unknown, len: number, transfer: boolean) => {
252fb726d48Sopenharmony_ci        resolve(arrayBufferHandler(res, len));
253fb726d48Sopenharmony_ci      }
254fb726d48Sopenharmony_ci    );
255fb726d48Sopenharmony_ci  });
256fb726d48Sopenharmony_ci}
257fb726d48Sopenharmony_ci
258fb726d48Sopenharmony_ciexport function purgeableDataSender(
259fb726d48Sopenharmony_ci  ipid: number,
260fb726d48Sopenharmony_ci  row: TraceRow<SnapshotStruct>,
261fb726d48Sopenharmony_ci  isPin?: boolean
262fb726d48Sopenharmony_ci): Promise<SnapshotStruct[]> {
263fb726d48Sopenharmony_ci  let trafic: number = TraficEnum.ProtoBuffer;
264fb726d48Sopenharmony_ci  let purgeWidth = row.clientWidth - CHART_OFFSET_LEFT;
265fb726d48Sopenharmony_ci  if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) {
266fb726d48Sopenharmony_ci    row.sharedArrayBuffers = {
267fb726d48Sopenharmony_ci      startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
268fb726d48Sopenharmony_ci      value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT),
269fb726d48Sopenharmony_ci    };
270fb726d48Sopenharmony_ci  }
271fb726d48Sopenharmony_ci  return new Promise((resolve, reject) => {
272fb726d48Sopenharmony_ci    threadPool.submitProto(
273fb726d48Sopenharmony_ci      QueryEnum.VmTrackerPurgeableData,
274fb726d48Sopenharmony_ci      {
275fb726d48Sopenharmony_ci        ipid: ipid,
276fb726d48Sopenharmony_ci        isPin: isPin,
277fb726d48Sopenharmony_ci        startNs: TraceRow.range?.startNS || 0,
278fb726d48Sopenharmony_ci        endNs: TraceRow.range?.endNS || 0,
279fb726d48Sopenharmony_ci        recordStartNS: window.recordStartNS,
280fb726d48Sopenharmony_ci        recordEndNS: window.recordEndNS,
281fb726d48Sopenharmony_ci        width: purgeWidth,
282fb726d48Sopenharmony_ci        trafic: trafic,
283fb726d48Sopenharmony_ci        sharedArrayBuffers: row.sharedArrayBuffers,
284fb726d48Sopenharmony_ci      }, // @ts-ignore
285fb726d48Sopenharmony_ci      (res: unknown, len: number, transfer: boolean): void => {
286fb726d48Sopenharmony_ci        resolve(arrayBufferHandler(res, len));
287fb726d48Sopenharmony_ci      }
288fb726d48Sopenharmony_ci    );
289fb726d48Sopenharmony_ci  });
290fb726d48Sopenharmony_ci}
291fb726d48Sopenharmony_ci
292fb726d48Sopenharmony_ciexport function abilityPurgeableDataSender(
293fb726d48Sopenharmony_ci  row: TraceRow<SnapshotStruct>,
294fb726d48Sopenharmony_ci  dur: number,
295fb726d48Sopenharmony_ci  isPin: Boolean
296fb726d48Sopenharmony_ci): Promise<SnapshotStruct[]> {
297fb726d48Sopenharmony_ci  let trafic: number = TraficEnum.ProtoBuffer;
298fb726d48Sopenharmony_ci  let width = row.clientWidth - CHART_OFFSET_LEFT;
299fb726d48Sopenharmony_ci  if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) {
300fb726d48Sopenharmony_ci    row.sharedArrayBuffers = {
301fb726d48Sopenharmony_ci      value: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
302fb726d48Sopenharmony_ci      startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
303fb726d48Sopenharmony_ci    };
304fb726d48Sopenharmony_ci  }
305fb726d48Sopenharmony_ci  return new Promise((resolve, reject) => {
306fb726d48Sopenharmony_ci    threadPool.submitProto(
307fb726d48Sopenharmony_ci      QueryEnum.AbilityPurgeableData,
308fb726d48Sopenharmony_ci      {
309fb726d48Sopenharmony_ci        startNs: TraceRow.range?.startNS || 0,
310fb726d48Sopenharmony_ci        endNs: TraceRow.range?.endNS || 0,
311fb726d48Sopenharmony_ci        recordStartNS: window.recordStartNS,
312fb726d48Sopenharmony_ci        recordEndNS: window.recordEndNS,
313fb726d48Sopenharmony_ci        width: width,
314fb726d48Sopenharmony_ci        trafic: trafic,
315fb726d48Sopenharmony_ci        sharedArrayBuffers: row.sharedArrayBuffers,
316fb726d48Sopenharmony_ci        dur: dur,
317fb726d48Sopenharmony_ci        isPin: isPin,
318fb726d48Sopenharmony_ci      }, // @ts-ignore
319fb726d48Sopenharmony_ci      (res: unknown, len: number, transfer: boolean) => {
320fb726d48Sopenharmony_ci        resolve(arrayBufferHandler(res, len));
321fb726d48Sopenharmony_ci      }
322fb726d48Sopenharmony_ci    );
323fb726d48Sopenharmony_ci  });
324fb726d48Sopenharmony_ci}
325fb726d48Sopenharmony_ci
326fb726d48Sopenharmony_ciexport function abilityDmaDataSender(row: TraceRow<SnapshotStruct>, dur: number): Promise<SnapshotStruct[]> {
327fb726d48Sopenharmony_ci  let trafic: number = TraficEnum.ProtoBuffer;
328fb726d48Sopenharmony_ci  let width = row.clientWidth - CHART_OFFSET_LEFT;
329fb726d48Sopenharmony_ci  if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) {
330fb726d48Sopenharmony_ci    row.sharedArrayBuffers = {
331fb726d48Sopenharmony_ci      value: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
332fb726d48Sopenharmony_ci      startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
333fb726d48Sopenharmony_ci      expTaskComm: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
334fb726d48Sopenharmony_ci      flag: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
335fb726d48Sopenharmony_ci    };
336fb726d48Sopenharmony_ci  }
337fb726d48Sopenharmony_ci  return new Promise((resolve, reject) => {
338fb726d48Sopenharmony_ci    threadPool.submitProto(
339fb726d48Sopenharmony_ci      QueryEnum.AbilityDmaData,
340fb726d48Sopenharmony_ci      {
341fb726d48Sopenharmony_ci        startNs: TraceRow.range?.startNS || 0,
342fb726d48Sopenharmony_ci        endNs: TraceRow.range?.endNS || 0,
343fb726d48Sopenharmony_ci        recordStartNS: window.recordStartNS,
344fb726d48Sopenharmony_ci        recordEndNS: window.recordEndNS,
345fb726d48Sopenharmony_ci        width: width,
346fb726d48Sopenharmony_ci        trafic: trafic,
347fb726d48Sopenharmony_ci        sharedArrayBuffers: row.sharedArrayBuffers,
348fb726d48Sopenharmony_ci        dma: 'dma',
349fb726d48Sopenharmony_ci        dur: dur,
350fb726d48Sopenharmony_ci      }, // @ts-ignore
351fb726d48Sopenharmony_ci      (res: unknown, len: number, transfer: boolean) => {
352fb726d48Sopenharmony_ci        resolve(arrayBufferHandler(res, len));
353fb726d48Sopenharmony_ci      }
354fb726d48Sopenharmony_ci    );
355fb726d48Sopenharmony_ci  });
356fb726d48Sopenharmony_ci}
357fb726d48Sopenharmony_ci
358fb726d48Sopenharmony_ciexport function abilityGpuMemoryDataSender(row: TraceRow<SnapshotStruct>, dur: number): Promise<SnapshotStruct[]> {
359fb726d48Sopenharmony_ci  let trafic: number = TraficEnum.ProtoBuffer;
360fb726d48Sopenharmony_ci  let abilityGpuWidth = row.clientWidth - CHART_OFFSET_LEFT;
361fb726d48Sopenharmony_ci  if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) {
362fb726d48Sopenharmony_ci    row.sharedArrayBuffers = {
363fb726d48Sopenharmony_ci      value: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
364fb726d48Sopenharmony_ci      startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT),
365fb726d48Sopenharmony_ci    };
366fb726d48Sopenharmony_ci  }
367fb726d48Sopenharmony_ci  return new Promise((resolve, reject) => {
368fb726d48Sopenharmony_ci    threadPool.submitProto(
369fb726d48Sopenharmony_ci      QueryEnum.AbilityGpuMemoryData,
370fb726d48Sopenharmony_ci      {
371fb726d48Sopenharmony_ci        startNs: TraceRow.range?.startNS || 0,
372fb726d48Sopenharmony_ci        endNs: TraceRow.range?.endNS || 0,
373fb726d48Sopenharmony_ci        recordStartNS: window.recordStartNS,
374fb726d48Sopenharmony_ci        recordEndNS: window.recordEndNS,
375fb726d48Sopenharmony_ci        width: abilityGpuWidth,
376fb726d48Sopenharmony_ci        trafic: trafic,
377fb726d48Sopenharmony_ci        sharedArrayBuffers: row.sharedArrayBuffers,
378fb726d48Sopenharmony_ci        dur: dur,
379fb726d48Sopenharmony_ci      }, // @ts-ignore
380fb726d48Sopenharmony_ci      (res: unknown, len: number, transfer: boolean) => {
381fb726d48Sopenharmony_ci        resolve(arrayBufferHandler(res, len));
382fb726d48Sopenharmony_ci      }
383fb726d48Sopenharmony_ci    );
384fb726d48Sopenharmony_ci  });
385fb726d48Sopenharmony_ci}
386fb726d48Sopenharmony_ci// @ts-ignore
387fb726d48Sopenharmony_cifunction arrayBufferHandler(buffers: unknown, len: number): SnapshotStruct[] {
388fb726d48Sopenharmony_ci  let outArr: SnapshotStruct[] = []; // @ts-ignore
389fb726d48Sopenharmony_ci  let startNs = new Float64Array(buffers.startNs); // @ts-ignore
390fb726d48Sopenharmony_ci  let value = new Uint32Array(buffers.value);
391fb726d48Sopenharmony_ci  for (let i = 0; i < len; i++) {
392fb726d48Sopenharmony_ci    outArr.push({
393fb726d48Sopenharmony_ci      value: value[i],
394fb726d48Sopenharmony_ci      startNs: startNs[i],
395fb726d48Sopenharmony_ci    } as SnapshotStruct);
396fb726d48Sopenharmony_ci  }
397fb726d48Sopenharmony_ci  return outArr;
398fb726d48Sopenharmony_ci}
399