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_ci 17fb726d48Sopenharmony_ciexport function nativeMemoryChartDataSender( //@ts-ignore 18fb726d48Sopenharmony_ci row: TraceRow<unknown>, 19fb726d48Sopenharmony_ci setting: { 20fb726d48Sopenharmony_ci eventType: number; 21fb726d48Sopenharmony_ci ipid: number; 22fb726d48Sopenharmony_ci model: string; 23fb726d48Sopenharmony_ci drawType: number; 24fb726d48Sopenharmony_ci } 25fb726d48Sopenharmony_ci): Promise<unknown> { 26fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 27fb726d48Sopenharmony_ci threadPool.submitProto( 28fb726d48Sopenharmony_ci QueryEnum.NativeMemoryChartData, 29fb726d48Sopenharmony_ci { 30fb726d48Sopenharmony_ci startNS: TraceRow.range?.startNS || 0, 31fb726d48Sopenharmony_ci endNS: TraceRow.range?.endNS || 0, 32fb726d48Sopenharmony_ci totalNS: (TraceRow.range?.endNS || 0) - (TraceRow.range?.startNS || 0), 33fb726d48Sopenharmony_ci frame: row.frame, 34fb726d48Sopenharmony_ci eventType: setting.eventType, 35fb726d48Sopenharmony_ci drawType: setting.drawType, 36fb726d48Sopenharmony_ci model: setting.model, 37fb726d48Sopenharmony_ci ipid: setting.ipid, 38fb726d48Sopenharmony_ci trafic: TraficEnum.SharedArrayBuffer, 39fb726d48Sopenharmony_ci }, 40fb726d48Sopenharmony_ci (res: unknown, len: number): void => { 41fb726d48Sopenharmony_ci resolve(arrayBufferHandler(res, len)); 42fb726d48Sopenharmony_ci } 43fb726d48Sopenharmony_ci ); 44fb726d48Sopenharmony_ci }); 45fb726d48Sopenharmony_ci} 46fb726d48Sopenharmony_ci 47fb726d48Sopenharmony_ciexport function nativeMemoryChartDataCacheSender(processes: Array<number>, model: string): Promise<unknown> { 48fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 49fb726d48Sopenharmony_ci threadPool.submitProto( 50fb726d48Sopenharmony_ci model === 'native_hook' ? QueryEnum.NativeMemoryChartCacheNormal : QueryEnum.NativeMemoryChartCacheStatistic, 51fb726d48Sopenharmony_ci { 52fb726d48Sopenharmony_ci totalNS: window.totalNS, 53fb726d48Sopenharmony_ci recordStartNS: window.recordStartNS, 54fb726d48Sopenharmony_ci recordEndNS: window.recordEndNS, 55fb726d48Sopenharmony_ci model: model, 56fb726d48Sopenharmony_ci processes: processes, 57fb726d48Sopenharmony_ci trafic: TraficEnum.SharedArrayBuffer, 58fb726d48Sopenharmony_ci isCache: true, 59fb726d48Sopenharmony_ci }, 60fb726d48Sopenharmony_ci (res: unknown, len: number): void => { 61fb726d48Sopenharmony_ci resolve('ok'); 62fb726d48Sopenharmony_ci } 63fb726d48Sopenharmony_ci ); 64fb726d48Sopenharmony_ci }); 65fb726d48Sopenharmony_ci} 66fb726d48Sopenharmony_ci 67fb726d48Sopenharmony_cifunction arrayBufferHandler(res: unknown, len: number): unknown[] { 68fb726d48Sopenharmony_ci let outArr: unknown[] = []; //@ts-ignore 69fb726d48Sopenharmony_ci let startTime = new Float64Array(res.startTime); //@ts-ignore 70fb726d48Sopenharmony_ci let dur = new Float64Array(res.dur); //@ts-ignore 71fb726d48Sopenharmony_ci let density = new Int32Array(res.density); //@ts-ignore 72fb726d48Sopenharmony_ci let heapSize = new Float64Array(res.heapSize); 73fb726d48Sopenharmony_ci for (let i = 0; i < len; i++) { 74fb726d48Sopenharmony_ci outArr.push({ 75fb726d48Sopenharmony_ci startTime: startTime[i], 76fb726d48Sopenharmony_ci dur: dur[i], 77fb726d48Sopenharmony_ci heapsize: heapSize[i], 78fb726d48Sopenharmony_ci density: density[i], //@ts-ignore 79fb726d48Sopenharmony_ci maxHeapSize: res.maxSize, //@ts-ignore 80fb726d48Sopenharmony_ci maxDensity: res.maxDensity, //@ts-ignore 81fb726d48Sopenharmony_ci minHeapSize: res.minSize, //@ts-ignore 82fb726d48Sopenharmony_ci minDensity: res.minDensity, 83fb726d48Sopenharmony_ci } as unknown); 84fb726d48Sopenharmony_ci } 85fb726d48Sopenharmony_ci return outArr; 86fb726d48Sopenharmony_ci} 87