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_ci
16fb726d48Sopenharmony_ciexport const chartProcessTouchEventDispatchDataSql = (args: unknown): string => {
17fb726d48Sopenharmony_ci  return `
18fb726d48Sopenharmony_ci  select 
19fb726d48Sopenharmony_ci      c.ts-${//@ts-ignore
20fb726d48Sopenharmony_ci        args.recordStartNS} as startTs,
21fb726d48Sopenharmony_ci      c.dur,
22fb726d48Sopenharmony_ci      tid,
23fb726d48Sopenharmony_ci      P.pid,
24fb726d48Sopenharmony_ci      c.parent_id as parentId,
25fb726d48Sopenharmony_ci      c.id,
26fb726d48Sopenharmony_ci      c.depth,
27fb726d48Sopenharmony_ci      ((c.ts - ${//@ts-ignore
28fb726d48Sopenharmony_ci        args.recordStartNS}) / (${Math.floor((args.endNS - args.startNS) / args.width)})) AS px,
29fb726d48Sopenharmony_ci      c.name as funName,
30fb726d48Sopenharmony_ci      A.name as threadName
31fb726d48Sopenharmony_ci  from thread A
32fb726d48Sopenharmony_ci  left join process P on P.id = A.ipid
33fb726d48Sopenharmony_ci  left join callstack C on A.id = C.callid
34fb726d48Sopenharmony_ci  where startTs not null and cookie not null
35fb726d48Sopenharmony_ci  and (c.name = 'H:touchEventDispatch' OR c.name = 'H:TouchEventDispatch')  
36fb726d48Sopenharmony_ci  and tid = ${//@ts-ignore
37fb726d48Sopenharmony_ci    args.tid}
38fb726d48Sopenharmony_ci  and startTs + dur >= ${Math.floor(//@ts-ignore
39fb726d48Sopenharmony_ci    args.startNS)}
40fb726d48Sopenharmony_ci  and startTs <= ${Math.floor(//@ts-ignore
41fb726d48Sopenharmony_ci    args.endNS)}
42fb726d48Sopenharmony_ci    group by px;
43fb726d48Sopenharmony_ci  `;
44fb726d48Sopenharmony_ci};
45fb726d48Sopenharmony_ci
46fb726d48Sopenharmony_ciexport function processTouchEventDispatchDataReceiver(data: unknown, proc: Function): void {
47fb726d48Sopenharmony_ci  //@ts-ignore
48fb726d48Sopenharmony_ci  if (data.params.trafic === TraficEnum.Memory) {
49fb726d48Sopenharmony_ci    //@ts-ignore
50fb726d48Sopenharmony_ci    let sql = chartProcessTouchEventDispatchDataSql(data.params);
51fb726d48Sopenharmony_ci    let res = proc(sql);
52fb726d48Sopenharmony_ci    //@ts-ignore
53fb726d48Sopenharmony_ci    arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer);
54fb726d48Sopenharmony_ci  }
55fb726d48Sopenharmony_ci}
56fb726d48Sopenharmony_ci
57fb726d48Sopenharmony_cifunction arrayBufferHandler(data: unknown, res: unknown[], transfer: boolean): void {
58fb726d48Sopenharmony_ci  let processTouchEventDispatch = new ProcessTouchEventDispatch(data, transfer, res.length);
59fb726d48Sopenharmony_ci  res.forEach((it, i) => {
60fb726d48Sopenharmony_ci    //@ts-ignore
61fb726d48Sopenharmony_ci    data.params.trafic === TraficEnum.ProtoBuffer && (it = it.processEventDispatchData);
62fb726d48Sopenharmony_ci    //@ts-ignore
63fb726d48Sopenharmony_ci    processTouchEventDispatch.tid[i] = it.tid;
64fb726d48Sopenharmony_ci    //@ts-ignore
65fb726d48Sopenharmony_ci    processTouchEventDispatch.dur[i] = it.dur;
66fb726d48Sopenharmony_ci    //@ts-ignore
67fb726d48Sopenharmony_ci    processTouchEventDispatch.startTs[i] = it.startTs;
68fb726d48Sopenharmony_ci    //@ts-ignore
69fb726d48Sopenharmony_ci    processTouchEventDispatch.pid[i] = it.pid;
70fb726d48Sopenharmony_ci    //@ts-ignore
71fb726d48Sopenharmony_ci    processTouchEventDispatch.id[i] = it.id;
72fb726d48Sopenharmony_ci    //@ts-ignore
73fb726d48Sopenharmony_ci    processTouchEventDispatch.depth[i] = it.depth;
74fb726d48Sopenharmony_ci  });
75fb726d48Sopenharmony_ci  postMessage(data, transfer, processTouchEventDispatch, res.length);
76fb726d48Sopenharmony_ci}
77fb726d48Sopenharmony_cifunction postMessage(data: unknown, transfer: boolean, processTouchEventDispatch: ProcessTouchEventDispatch, len: number): void {
78fb726d48Sopenharmony_ci  (self as unknown as Worker).postMessage(
79fb726d48Sopenharmony_ci    {
80fb726d48Sopenharmony_ci      transfer: transfer,
81fb726d48Sopenharmony_ci      //@ts-ignore
82fb726d48Sopenharmony_ci      id: data.id,
83fb726d48Sopenharmony_ci      
84fb726d48Sopenharmony_ci      //@ts-ignore
85fb726d48Sopenharmony_ci      action: data.action,
86fb726d48Sopenharmony_ci      results: transfer
87fb726d48Sopenharmony_ci        ? {
88fb726d48Sopenharmony_ci          tid: processTouchEventDispatch.tid.buffer,
89fb726d48Sopenharmony_ci          dur: processTouchEventDispatch.dur.buffer,
90fb726d48Sopenharmony_ci          startTs: processTouchEventDispatch.startTs.buffer,
91fb726d48Sopenharmony_ci          pid: processTouchEventDispatch.pid.buffer,
92fb726d48Sopenharmony_ci          id: processTouchEventDispatch.id.buffer,
93fb726d48Sopenharmony_ci          depth: processTouchEventDispatch.depth.buffer,
94fb726d48Sopenharmony_ci        }
95fb726d48Sopenharmony_ci        : {},
96fb726d48Sopenharmony_ci      len: len,
97fb726d48Sopenharmony_ci    },
98fb726d48Sopenharmony_ci    transfer
99fb726d48Sopenharmony_ci      ? [
100fb726d48Sopenharmony_ci        processTouchEventDispatch.tid.buffer,
101fb726d48Sopenharmony_ci        processTouchEventDispatch.dur.buffer,
102fb726d48Sopenharmony_ci        processTouchEventDispatch.startTs.buffer,
103fb726d48Sopenharmony_ci        processTouchEventDispatch.pid.buffer,
104fb726d48Sopenharmony_ci        processTouchEventDispatch.id.buffer,
105fb726d48Sopenharmony_ci        processTouchEventDispatch.depth.buffer,
106fb726d48Sopenharmony_ci      ]
107fb726d48Sopenharmony_ci      : []
108fb726d48Sopenharmony_ci  );
109fb726d48Sopenharmony_ci}
110fb726d48Sopenharmony_ciclass ProcessTouchEventDispatch {
111fb726d48Sopenharmony_ci  tid: Int32Array;
112fb726d48Sopenharmony_ci  pid: Int32Array;
113fb726d48Sopenharmony_ci  startTs: Float64Array;
114fb726d48Sopenharmony_ci  dur: Float64Array;
115fb726d48Sopenharmony_ci  id: Int32Array;
116fb726d48Sopenharmony_ci  depth: Int32Array;
117fb726d48Sopenharmony_ci  constructor(data: unknown, transfer: boolean, len: number) {
118fb726d48Sopenharmony_ci    //@ts-ignore
119fb726d48Sopenharmony_ci    this.tid = new Int32Array(transfer ? len : data.params.sharedArrayBuffers.tid);
120fb726d48Sopenharmony_ci    //@ts-ignore
121fb726d48Sopenharmony_ci    this.pid = new Int32Array(transfer ? len : data.params.sharedArrayBuffers.pid);
122fb726d48Sopenharmony_ci    //@ts-ignore
123fb726d48Sopenharmony_ci    this.startTs = new Float64Array(transfer ? len : data.params.sharedArrayBuffers.startTs);
124fb726d48Sopenharmony_ci    //@ts-ignore
125fb726d48Sopenharmony_ci    this.dur = new Float64Array(transfer ? len : data.params.sharedArrayBuffers.dur);
126fb726d48Sopenharmony_ci    //@ts-ignore
127fb726d48Sopenharmony_ci    this.id = new Int32Array(transfer ? len : data.params.sharedArrayBuffers.id);
128fb726d48Sopenharmony_ci    //@ts-ignore
129fb726d48Sopenharmony_ci    this.depth = new Int32Array(transfer ? len : data.params.sharedArrayBuffers.depth);
130fb726d48Sopenharmony_ci  }
131fb726d48Sopenharmony_ci}
132