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_ciimport { QueryEnum, TraficEnum } from '../utils/QueryEnum'; 14fb726d48Sopenharmony_ciimport { threadPool } from '../../SqlLite'; 15fb726d48Sopenharmony_ciimport { TraceRow } from '../../../component/trace/base/TraceRow'; 16fb726d48Sopenharmony_ciimport { SpSystemTrace } from '../../../component/SpSystemTrace'; 17fb726d48Sopenharmony_ci 18fb726d48Sopenharmony_ciexport function hiperfCallChartDataSender( 19fb726d48Sopenharmony_ci // @ts-ignore 20fb726d48Sopenharmony_ci row: TraceRow<unknown>, 21fb726d48Sopenharmony_ci setting: { 22fb726d48Sopenharmony_ci startTime: number; 23fb726d48Sopenharmony_ci eventTypeId: number; 24fb726d48Sopenharmony_ci type: number; 25fb726d48Sopenharmony_ci id: number; 26fb726d48Sopenharmony_ci } 27fb726d48Sopenharmony_ci): Promise<unknown> { 28fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 29fb726d48Sopenharmony_ci threadPool.submitProto( 30fb726d48Sopenharmony_ci QueryEnum.HiperfCallChart, 31fb726d48Sopenharmony_ci { 32fb726d48Sopenharmony_ci startNS: TraceRow.range?.startNS || 0, 33fb726d48Sopenharmony_ci endNS: TraceRow.range?.endNS || 0, 34fb726d48Sopenharmony_ci totalNS: (TraceRow.range?.endNS || 0) - (TraceRow.range?.startNS || 0), 35fb726d48Sopenharmony_ci frame: row.frame, 36fb726d48Sopenharmony_ci expand: row.funcExpand, 37fb726d48Sopenharmony_ci isComplete: row.isComplete, 38fb726d48Sopenharmony_ci startTime: setting.startTime, 39fb726d48Sopenharmony_ci eventTypeId: setting.eventTypeId, 40fb726d48Sopenharmony_ci type: setting.type, 41fb726d48Sopenharmony_ci id: setting.id, 42fb726d48Sopenharmony_ci }, 43fb726d48Sopenharmony_ci (res: unknown, len: number): void => { 44fb726d48Sopenharmony_ci resolve(arrayBufferHandler(res, len)); 45fb726d48Sopenharmony_ci } 46fb726d48Sopenharmony_ci ); 47fb726d48Sopenharmony_ci }); 48fb726d48Sopenharmony_ci} 49fb726d48Sopenharmony_ci 50fb726d48Sopenharmony_ciexport function hiperfCallStackCacheSender(): Promise<unknown> { 51fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 52fb726d48Sopenharmony_ci threadPool.submitProto( 53fb726d48Sopenharmony_ci QueryEnum.HiperfCallStack, 54fb726d48Sopenharmony_ci { 55fb726d48Sopenharmony_ci recordStartNS: window.recordStartNS, 56fb726d48Sopenharmony_ci isCache: true, 57fb726d48Sopenharmony_ci trafic: TraficEnum.TransferArrayBuffer, 58fb726d48Sopenharmony_ci }, 59fb726d48Sopenharmony_ci (res: unknown, len: number): void => { 60fb726d48Sopenharmony_ci resolve('ok'); 61fb726d48Sopenharmony_ci } 62fb726d48Sopenharmony_ci ); 63fb726d48Sopenharmony_ci }); 64fb726d48Sopenharmony_ci} 65fb726d48Sopenharmony_ci 66fb726d48Sopenharmony_ciexport function hiperfCallChartDataCacheSender(): Promise<unknown> { 67fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 68fb726d48Sopenharmony_ci threadPool.submitProto( 69fb726d48Sopenharmony_ci QueryEnum.HiperfCallChart, 70fb726d48Sopenharmony_ci { 71fb726d48Sopenharmony_ci recordStartNS: window.recordStartNS, 72fb726d48Sopenharmony_ci recordEndNS: window.recordEndNS, 73fb726d48Sopenharmony_ci trafic: TraficEnum.TransferArrayBuffer, 74fb726d48Sopenharmony_ci isCache: true, 75fb726d48Sopenharmony_ci }, 76fb726d48Sopenharmony_ci (res: unknown, len: number): void => { 77fb726d48Sopenharmony_ci resolve('ok'); 78fb726d48Sopenharmony_ci } 79fb726d48Sopenharmony_ci ); 80fb726d48Sopenharmony_ci }); 81fb726d48Sopenharmony_ci} 82fb726d48Sopenharmony_ci 83fb726d48Sopenharmony_cifunction arrayBufferHandler( 84fb726d48Sopenharmony_ci res: unknown, 85fb726d48Sopenharmony_ci len: number 86fb726d48Sopenharmony_ci): { 87fb726d48Sopenharmony_ci maxDepth: unknown; 88fb726d48Sopenharmony_ci dataList: unknown[]; 89fb726d48Sopenharmony_ci} { 90fb726d48Sopenharmony_ci // @ts-ignore 91fb726d48Sopenharmony_ci let startTs = new Float64Array(res.startTs); 92fb726d48Sopenharmony_ci // @ts-ignore 93fb726d48Sopenharmony_ci let dur = new Float64Array(res.dur); 94fb726d48Sopenharmony_ci // @ts-ignore 95fb726d48Sopenharmony_ci let depth = new Int32Array(res.depth); 96fb726d48Sopenharmony_ci // @ts-ignore 97fb726d48Sopenharmony_ci let eventCount = new Int32Array(res.eventCount); 98fb726d48Sopenharmony_ci // @ts-ignore 99fb726d48Sopenharmony_ci let symbolId = new Int32Array(res.symbolId); 100fb726d48Sopenharmony_ci // @ts-ignore 101fb726d48Sopenharmony_ci let fileId = new Int32Array(res.fileId); 102fb726d48Sopenharmony_ci // @ts-ignore 103fb726d48Sopenharmony_ci let callchainId = new Int32Array(res.callchainId); 104fb726d48Sopenharmony_ci // @ts-ignore 105fb726d48Sopenharmony_ci let selfDur = new Int32Array(res.selfDur); 106fb726d48Sopenharmony_ci // @ts-ignore 107fb726d48Sopenharmony_ci let name = new Int32Array(res.name); 108fb726d48Sopenharmony_ci let outArr: unknown[] = []; 109fb726d48Sopenharmony_ci for (let i = 0; i < len; i++) { 110fb726d48Sopenharmony_ci outArr.push({ 111fb726d48Sopenharmony_ci startTime: startTs[i], 112fb726d48Sopenharmony_ci totalTime: dur[i], 113fb726d48Sopenharmony_ci endTime: startTs[i] + dur[i], 114fb726d48Sopenharmony_ci depth: depth[i], 115fb726d48Sopenharmony_ci eventCount: eventCount[i], 116fb726d48Sopenharmony_ci fileId: fileId[i], 117fb726d48Sopenharmony_ci symbolId: symbolId[i], 118fb726d48Sopenharmony_ci callchain_id: callchainId[i], 119fb726d48Sopenharmony_ci selfDur: selfDur[i], 120fb726d48Sopenharmony_ci name: SpSystemTrace.DATA_DICT.get(name[i]), 121fb726d48Sopenharmony_ci } as unknown); 122fb726d48Sopenharmony_ci } 123fb726d48Sopenharmony_ci return { 124fb726d48Sopenharmony_ci // @ts-ignore 125fb726d48Sopenharmony_ci maxDepth: res.maxDepth, 126fb726d48Sopenharmony_ci dataList: outArr, 127fb726d48Sopenharmony_ci }; 128fb726d48Sopenharmony_ci} 129