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