1fb726d48Sopenharmony_ci// Copyright (c) 2021 Huawei Device Co., Ltd.
2fb726d48Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License");
3fb726d48Sopenharmony_ci// you may not use this file except in compliance with the License.
4fb726d48Sopenharmony_ci// You may obtain a copy of the License at
5fb726d48Sopenharmony_ci//
6fb726d48Sopenharmony_ci//     http://www.apache.org/licenses/LICENSE-2.0
7fb726d48Sopenharmony_ci//
8fb726d48Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software
9fb726d48Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS,
10fb726d48Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11fb726d48Sopenharmony_ci// See the License for the specific language governing permissions and
12fb726d48Sopenharmony_ci// limitations under the License.
13fb726d48Sopenharmony_ci
14fb726d48Sopenharmony_ciimport { TraficEnum } from '../utils/QueryEnum';
15fb726d48Sopenharmony_ciimport { memList } from '../utils/AllMemoryCache';
16fb726d48Sopenharmony_ciimport { Args } from '../CommonArgs';
17fb726d48Sopenharmony_ci
18fb726d48Sopenharmony_ciexport const chartProcessMemDataSql = (args: Args): string => {
19fb726d48Sopenharmony_ci  return `
20fb726d48Sopenharmony_ci      select 
21fb726d48Sopenharmony_ci             filter_id as       trackId,
22fb726d48Sopenharmony_ci             value,
23fb726d48Sopenharmony_ci             c.ts - ${args.recordStartNS} as startTime,
24fb726d48Sopenharmony_ci             ts
25fb726d48Sopenharmony_ci      from process_measure c,
26fb726d48Sopenharmony_ci           trace_range tb
27fb726d48Sopenharmony_ci      where filter_id = ${args.trackId};`;
28fb726d48Sopenharmony_ci};
29fb726d48Sopenharmony_ci
30fb726d48Sopenharmony_ciexport function processMemDataReceiver(data: unknown, proc: Function): void {
31fb726d48Sopenharmony_ci  let res: unknown[];
32fb726d48Sopenharmony_ci  let list: unknown[]; //@ts-ignore
33fb726d48Sopenharmony_ci  if (!memList.has(data.params.trackId)) {
34fb726d48Sopenharmony_ci    //@ts-ignore
35fb726d48Sopenharmony_ci    list = proc(chartProcessMemDataSql(data.params)); //@ts-ignore
36fb726d48Sopenharmony_ci    memList.set(data.params.trackId, list);
37fb726d48Sopenharmony_ci  } else {
38fb726d48Sopenharmony_ci    //@ts-ignore
39fb726d48Sopenharmony_ci    list = memList.get(data.params.trackId) || [];
40fb726d48Sopenharmony_ci  }
41fb726d48Sopenharmony_ci  res = list; //@ts-ignore
42fb726d48Sopenharmony_ci  arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer);
43fb726d48Sopenharmony_ci}
44fb726d48Sopenharmony_ci
45fb726d48Sopenharmony_cifunction arrayBufferHandler(data: unknown, res: unknown[], transfer: boolean): void {
46fb726d48Sopenharmony_ci  //@ts-ignore
47fb726d48Sopenharmony_ci  let startTime = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.startTime); //@ts-ignore
48fb726d48Sopenharmony_ci  let ts = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.ts); //@ts-ignore
49fb726d48Sopenharmony_ci  let value = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.value); //@ts-ignore
50fb726d48Sopenharmony_ci  let track_id = new Uint8Array(transfer ? res.length : data.params.sharedArrayBuffers.track_id);
51fb726d48Sopenharmony_ci  res.forEach((it, i) => {
52fb726d48Sopenharmony_ci    //@ts-ignore
53fb726d48Sopenharmony_ci    data.params.trafic === TraficEnum.ProtoBuffer && (it = it.processMemData); //@ts-ignore
54fb726d48Sopenharmony_ci    ts[i] = it.ts; //@ts-ignore
55fb726d48Sopenharmony_ci    startTime[i] = it.startTime; //@ts-ignore
56fb726d48Sopenharmony_ci    track_id[i] = it.trackId; //@ts-ignore
57fb726d48Sopenharmony_ci    value[i] = it.value;
58fb726d48Sopenharmony_ci  });
59fb726d48Sopenharmony_ci  (self as unknown as Worker).postMessage(
60fb726d48Sopenharmony_ci    {
61fb726d48Sopenharmony_ci      //@ts-ignore
62fb726d48Sopenharmony_ci      id: data.id, //@ts-ignore
63fb726d48Sopenharmony_ci      action: data.action,
64fb726d48Sopenharmony_ci      results: transfer
65fb726d48Sopenharmony_ci        ? {
66fb726d48Sopenharmony_ci            ts: ts.buffer,
67fb726d48Sopenharmony_ci            startTime: startTime.buffer,
68fb726d48Sopenharmony_ci            value: value.buffer,
69fb726d48Sopenharmony_ci            track_id: track_id.buffer,
70fb726d48Sopenharmony_ci          }
71fb726d48Sopenharmony_ci        : {},
72fb726d48Sopenharmony_ci      len: res.length,
73fb726d48Sopenharmony_ci      transfer: transfer,
74fb726d48Sopenharmony_ci    },
75fb726d48Sopenharmony_ci    transfer ? [ts.buffer, startTime.buffer, value.buffer, track_id.buffer] : []
76fb726d48Sopenharmony_ci  );
77fb726d48Sopenharmony_ci}
78