1fb726d48Sopenharmony_ci/* 2fb726d48Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3fb726d48Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fb726d48Sopenharmony_ci * you may not use this file except in compliance with the License. 5fb726d48Sopenharmony_ci * You may obtain a copy of the License at 6fb726d48Sopenharmony_ci * 7fb726d48Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fb726d48Sopenharmony_ci * 9fb726d48Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fb726d48Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fb726d48Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fb726d48Sopenharmony_ci * See the License for the specific language governing permissions and 13fb726d48Sopenharmony_ci * limitations under the License. 14fb726d48Sopenharmony_ci */ 15fb726d48Sopenharmony_ci 16fb726d48Sopenharmony_ciimport { BaseElement, element } from '../../../../base-ui/BaseElement'; 17fb726d48Sopenharmony_ciimport { LitTable } from '../../../../base-ui/table/lit-table'; 18fb726d48Sopenharmony_ciimport { procedurePool } from '../../../database/Procedure'; 19fb726d48Sopenharmony_ciimport { info } from '../../../../log/Log'; 20fb726d48Sopenharmony_ciimport { TableNoData } from '../TableNoData'; 21fb726d48Sopenharmony_ciimport '../TableNoData'; 22fb726d48Sopenharmony_ciimport { LitProgressBar } from '../../../../base-ui/progress-bar/LitProgressBar'; 23fb726d48Sopenharmony_ciimport '../../../../base-ui/progress-bar/LitProgressBar'; 24fb726d48Sopenharmony_ciimport { LitChartColumn } from '../../../../base-ui/chart/column/LitChartColumn'; 25fb726d48Sopenharmony_ciimport '../../../../base-ui/chart/column/LitChartColumn'; 26fb726d48Sopenharmony_ciimport { Utils } from '../../trace/base/Utils'; 27fb726d48Sopenharmony_ci 28fb726d48Sopenharmony_ci@element('top10-longest-runtime-process') 29fb726d48Sopenharmony_ciexport class Top10LongestRunTimeProcess extends BaseElement { 30fb726d48Sopenharmony_ci traceChange: boolean = false; 31fb726d48Sopenharmony_ci private processRunTimeTbl: LitTable | null | undefined; 32fb726d48Sopenharmony_ci private threadRunTimeTbl: LitTable | null | undefined; 33fb726d48Sopenharmony_ci private processRunTimeProgress: LitProgressBar | null | undefined; 34fb726d48Sopenharmony_ci private nodataPro: TableNoData | null | undefined; 35fb726d48Sopenharmony_ci private processRunTimeData: Array<Top10RunTimeData> = []; 36fb726d48Sopenharmony_ci private threadRunTimeData: Array<Top10RunTimeData> = []; 37fb726d48Sopenharmony_ci private processSwitchCountChart: LitChartColumn | null | undefined; 38fb726d48Sopenharmony_ci private threadSwitchCountChart: LitChartColumn | null | undefined; 39fb726d48Sopenharmony_ci private nodataThr: TableNoData | null | undefined; 40fb726d48Sopenharmony_ci private display_pro: HTMLDivElement | null | undefined; 41fb726d48Sopenharmony_ci private display_thr: HTMLDivElement | null | undefined; 42fb726d48Sopenharmony_ci private processId: number | undefined; 43fb726d48Sopenharmony_ci private display_flag: boolean = true; 44fb726d48Sopenharmony_ci private back: HTMLDivElement | null | undefined; 45fb726d48Sopenharmony_ci private processMap: Map<number, string> = new Map(); 46fb726d48Sopenharmony_ci private threadMap: Map<number, string> = new Map(); 47fb726d48Sopenharmony_ci 48fb726d48Sopenharmony_ci /** 49fb726d48Sopenharmony_ci * 初始化操作,若trace发生改变,将所有变量设置为默认值并重新请求数据。若trace未改变,跳出初始化 50fb726d48Sopenharmony_ci */ 51fb726d48Sopenharmony_ci init(): void { 52fb726d48Sopenharmony_ci if (!this.traceChange) { 53fb726d48Sopenharmony_ci if (this.processRunTimeTbl!.recycleDataSource.length > 0) { 54fb726d48Sopenharmony_ci this.processRunTimeTbl?.reMeauseHeight(); 55fb726d48Sopenharmony_ci } 56fb726d48Sopenharmony_ci return; 57fb726d48Sopenharmony_ci } 58fb726d48Sopenharmony_ci this.traceChange = false; 59fb726d48Sopenharmony_ci this.processRunTimeProgress!.loading = true; 60fb726d48Sopenharmony_ci this.display_flag = true; 61fb726d48Sopenharmony_ci this.display_pro!.style.display = 'block'; 62fb726d48Sopenharmony_ci this.display_thr!.style.display = 'none'; 63fb726d48Sopenharmony_ci this.processMap = Utils.getInstance().getProcessMap(); 64fb726d48Sopenharmony_ci this.threadMap = Utils.getInstance().getThreadMap(); 65fb726d48Sopenharmony_ci this.queryLogicWorker( 66fb726d48Sopenharmony_ci 'scheduling-Process Top10RunTime', 67fb726d48Sopenharmony_ci 'query Process Top10 Run Time Analysis Time:', 68fb726d48Sopenharmony_ci this.callBack.bind(this) 69fb726d48Sopenharmony_ci ); 70fb726d48Sopenharmony_ci } 71fb726d48Sopenharmony_ci 72fb726d48Sopenharmony_ci /** 73fb726d48Sopenharmony_ci * 清除已存储数据 74fb726d48Sopenharmony_ci */ 75fb726d48Sopenharmony_ci clearData(): void { 76fb726d48Sopenharmony_ci this.traceChange = true; 77fb726d48Sopenharmony_ci this.processSwitchCountChart!.dataSource = []; 78fb726d48Sopenharmony_ci this.processRunTimeTbl!.recycleDataSource = []; 79fb726d48Sopenharmony_ci this.threadSwitchCountChart!.dataSource = []; 80fb726d48Sopenharmony_ci this.threadRunTimeTbl!.recycleDataSource = []; 81fb726d48Sopenharmony_ci this.processRunTimeData = []; 82fb726d48Sopenharmony_ci this.threadRunTimeData = []; 83fb726d48Sopenharmony_ci this.processMap = new Map(); 84fb726d48Sopenharmony_ci this.threadMap = new Map(); 85fb726d48Sopenharmony_ci } 86fb726d48Sopenharmony_ci 87fb726d48Sopenharmony_ci /** 88fb726d48Sopenharmony_ci * 提交worker线程,进行数据库查询 89fb726d48Sopenharmony_ci * @param option 操作的key值,用于找到并执行对应方法 90fb726d48Sopenharmony_ci * @param log 日志打印内容 91fb726d48Sopenharmony_ci * @param handler 结果回调函数 92fb726d48Sopenharmony_ci * @param pid 需要查询某一进程下线程数据的进程id 93fb726d48Sopenharmony_ci */ 94fb726d48Sopenharmony_ci queryLogicWorker(option: string, log: string, handler: (res: Array<Top10RunTimeData>) => void, pid?: number): void { 95fb726d48Sopenharmony_ci let processThreadCountTime = new Date().getTime(); 96fb726d48Sopenharmony_ci procedurePool.submitWithName('logic0', option, { pid: pid }, undefined, handler); 97fb726d48Sopenharmony_ci let durTime = new Date().getTime() - processThreadCountTime; 98fb726d48Sopenharmony_ci info(log, durTime); 99fb726d48Sopenharmony_ci } 100fb726d48Sopenharmony_ci 101fb726d48Sopenharmony_ci /** 102fb726d48Sopenharmony_ci * 提交worker线程,进行数据库查询 103fb726d48Sopenharmony_ci * @param option 操作的key值,用于找到并执行对应方法 104fb726d48Sopenharmony_ci * @param log 日志打印内容 105fb726d48Sopenharmony_ci * @param handler 结果回调函数 106fb726d48Sopenharmony_ci * @param pid 需要查询某一进程下线程数据的进程id 107fb726d48Sopenharmony_ci */ 108fb726d48Sopenharmony_ci organizationData(arr: Array<Top10RunTimeData>): Array<Top10RunTimeData> { 109fb726d48Sopenharmony_ci let result: Array<Top10RunTimeData> = []; 110fb726d48Sopenharmony_ci for (let i = 0; i < arr.length; i++) { 111fb726d48Sopenharmony_ci const pStr: string | null = this.processMap.get(arr[i].pid!)!; 112fb726d48Sopenharmony_ci const tStr: string | null = this.threadMap.get(arr[i].tid!)!; 113fb726d48Sopenharmony_ci result.push({ 114fb726d48Sopenharmony_ci no: i + 1, 115fb726d48Sopenharmony_ci pid: arr[i].pid || this.processId, 116fb726d48Sopenharmony_ci pName: pStr === null ? 'Process ' : pStr, 117fb726d48Sopenharmony_ci dur: arr[i].dur, 118fb726d48Sopenharmony_ci tid: arr[i].tid, 119fb726d48Sopenharmony_ci tName: tStr === null ? 'Thread ' : tStr 120fb726d48Sopenharmony_ci }); 121fb726d48Sopenharmony_ci } 122fb726d48Sopenharmony_ci return result; 123fb726d48Sopenharmony_ci } 124fb726d48Sopenharmony_ci 125fb726d48Sopenharmony_ci /** 126fb726d48Sopenharmony_ci * 提交线程后,结果返回后的回调函数 127fb726d48Sopenharmony_ci * @param res 数据库查询结果 128fb726d48Sopenharmony_ci */ 129fb726d48Sopenharmony_ci callBack(res: Array<Top10RunTimeData>): void { 130fb726d48Sopenharmony_ci let result: Array<Top10RunTimeData> = this.organizationData(res); 131fb726d48Sopenharmony_ci if (this.display_flag === true) { 132fb726d48Sopenharmony_ci this.processCallback(result); 133fb726d48Sopenharmony_ci } else { 134fb726d48Sopenharmony_ci this.threadCallback(result); 135fb726d48Sopenharmony_ci } 136fb726d48Sopenharmony_ci this.processRunTimeProgress!.loading = false; 137fb726d48Sopenharmony_ci } 138fb726d48Sopenharmony_ci 139fb726d48Sopenharmony_ci /** 140fb726d48Sopenharmony_ci * 大函数块拆解分为两部分,此部分为Top10进程数据 141fb726d48Sopenharmony_ci * @param result 需要显示在表格中的数据 142fb726d48Sopenharmony_ci */ 143fb726d48Sopenharmony_ci processCallback(result: Array<Top10RunTimeData>): void { 144fb726d48Sopenharmony_ci this.nodataPro!.noData = result === undefined || result.length === 0; 145fb726d48Sopenharmony_ci this.processRunTimeTbl!.recycleDataSource = result; 146fb726d48Sopenharmony_ci this.processRunTimeTbl!.reMeauseHeight(); 147fb726d48Sopenharmony_ci this.processRunTimeData = result; 148fb726d48Sopenharmony_ci this.processSwitchCountChart!.config = { 149fb726d48Sopenharmony_ci data: result, 150fb726d48Sopenharmony_ci appendPadding: 10, 151fb726d48Sopenharmony_ci xField: 'pid', 152fb726d48Sopenharmony_ci yField: 'dur', 153fb726d48Sopenharmony_ci seriesField: 'size', 154fb726d48Sopenharmony_ci color: (a): string => { 155fb726d48Sopenharmony_ci return '#0a59f7'; 156fb726d48Sopenharmony_ci }, 157fb726d48Sopenharmony_ci hoverHandler: (no): void => { 158fb726d48Sopenharmony_ci let data: unknown = result.find((it) => it.no === no); 159fb726d48Sopenharmony_ci if (data) { 160fb726d48Sopenharmony_ci // @ts-ignore 161fb726d48Sopenharmony_ci data.isHover = true; 162fb726d48Sopenharmony_ci this.processRunTimeTbl!.setCurrentHover(data); 163fb726d48Sopenharmony_ci } else { 164fb726d48Sopenharmony_ci this.processRunTimeTbl!.mouseOut(); 165fb726d48Sopenharmony_ci } 166fb726d48Sopenharmony_ci }, 167fb726d48Sopenharmony_ci tip: (obj): string => { 168fb726d48Sopenharmony_ci return ` 169fb726d48Sopenharmony_ci <div> 170fb726d48Sopenharmony_ci <div>Process_Id:${ 171fb726d48Sopenharmony_ci // @ts-ignore 172fb726d48Sopenharmony_ci obj[0].obj.pid}</div> 173fb726d48Sopenharmony_ci <div>Process_Name:${ 174fb726d48Sopenharmony_ci // @ts-ignore 175fb726d48Sopenharmony_ci obj[0].obj.pName}</div> 176fb726d48Sopenharmony_ci <div>Run_Time:${ 177fb726d48Sopenharmony_ci // @ts-ignore 178fb726d48Sopenharmony_ci obj[0].obj.dur}</div> 179fb726d48Sopenharmony_ci </div> 180fb726d48Sopenharmony_ci `; 181fb726d48Sopenharmony_ci }, 182fb726d48Sopenharmony_ci label: null, 183fb726d48Sopenharmony_ci }; 184fb726d48Sopenharmony_ci } 185fb726d48Sopenharmony_ci 186fb726d48Sopenharmony_ci /** 187fb726d48Sopenharmony_ci * 大函数块拆解分为两部分,此部分为Top10线程数据 188fb726d48Sopenharmony_ci * @param result 需要显示在表格中的数据 189fb726d48Sopenharmony_ci */ 190fb726d48Sopenharmony_ci threadCallback(result: Array<Top10RunTimeData>): void { 191fb726d48Sopenharmony_ci this.nodataThr!.noData = result === undefined || result.length === 0; 192fb726d48Sopenharmony_ci this.threadRunTimeTbl!.recycleDataSource = result; 193fb726d48Sopenharmony_ci this.threadRunTimeTbl!.reMeauseHeight(); 194fb726d48Sopenharmony_ci this.threadRunTimeData = result; 195fb726d48Sopenharmony_ci this.threadSwitchCountChart!.config = { 196fb726d48Sopenharmony_ci data: result, 197fb726d48Sopenharmony_ci appendPadding: 10, 198fb726d48Sopenharmony_ci xField: 'tid', 199fb726d48Sopenharmony_ci yField: 'dur', 200fb726d48Sopenharmony_ci seriesField: 'size', 201fb726d48Sopenharmony_ci color: (a): string => { 202fb726d48Sopenharmony_ci return '#0a59f7'; 203fb726d48Sopenharmony_ci }, 204fb726d48Sopenharmony_ci hoverHandler: (no): void => { 205fb726d48Sopenharmony_ci let data: unknown = result.find((it) => it.no === no); 206fb726d48Sopenharmony_ci if (data) { 207fb726d48Sopenharmony_ci // @ts-ignore 208fb726d48Sopenharmony_ci data.isHover = true; 209fb726d48Sopenharmony_ci this.threadRunTimeTbl!.setCurrentHover(data); 210fb726d48Sopenharmony_ci } else { 211fb726d48Sopenharmony_ci this.threadRunTimeTbl!.mouseOut(); 212fb726d48Sopenharmony_ci } 213fb726d48Sopenharmony_ci }, 214fb726d48Sopenharmony_ci tip: (obj): string => { 215fb726d48Sopenharmony_ci return ` 216fb726d48Sopenharmony_ci <div> 217fb726d48Sopenharmony_ci <div>Process_Id:${ 218fb726d48Sopenharmony_ci // @ts-ignore 219fb726d48Sopenharmony_ci obj[0].obj.pid}</div> 220fb726d48Sopenharmony_ci <div>Thread_Id:${ 221fb726d48Sopenharmony_ci // @ts-ignore 222fb726d48Sopenharmony_ci obj[0].obj.tid}</div> 223fb726d48Sopenharmony_ci <div>Thread_Name:${ 224fb726d48Sopenharmony_ci // @ts-ignore 225fb726d48Sopenharmony_ci obj[0].obj.tName}</div> 226fb726d48Sopenharmony_ci <div>Run_Time:${ 227fb726d48Sopenharmony_ci // @ts-ignore 228fb726d48Sopenharmony_ci obj[0].obj.dur}</div> 229fb726d48Sopenharmony_ci </div> 230fb726d48Sopenharmony_ci `; 231fb726d48Sopenharmony_ci }, 232fb726d48Sopenharmony_ci label: null, 233fb726d48Sopenharmony_ci }; 234fb726d48Sopenharmony_ci } 235fb726d48Sopenharmony_ci 236fb726d48Sopenharmony_ci /** 237fb726d48Sopenharmony_ci * 元素初始化,将html节点与内部变量进行绑定 238fb726d48Sopenharmony_ci */ 239fb726d48Sopenharmony_ci initElements(): void { 240fb726d48Sopenharmony_ci this.processRunTimeProgress = this.shadowRoot!.querySelector<LitProgressBar>('#loading'); 241fb726d48Sopenharmony_ci this.nodataPro = this.shadowRoot!.querySelector<TableNoData>('#nodata_Pro'); 242fb726d48Sopenharmony_ci this.processRunTimeTbl = this.shadowRoot!.querySelector<LitTable>('#tb-process-run-time'); 243fb726d48Sopenharmony_ci this.processSwitchCountChart = this.shadowRoot!.querySelector<LitChartColumn>('#chart_pro'); 244fb726d48Sopenharmony_ci this.nodataThr = this.shadowRoot!.querySelector<TableNoData>('#nodata_Thr'); 245fb726d48Sopenharmony_ci this.threadRunTimeTbl = this.shadowRoot!.querySelector<LitTable>('#tb-thread-run-time'); 246fb726d48Sopenharmony_ci this.threadSwitchCountChart = this.shadowRoot!.querySelector<LitChartColumn>('#chart_thr'); 247fb726d48Sopenharmony_ci this.display_pro = this.shadowRoot!.querySelector<HTMLDivElement>('#display_pro'); 248fb726d48Sopenharmony_ci this.display_thr = this.shadowRoot!.querySelector<HTMLDivElement>('#display_thr'); 249fb726d48Sopenharmony_ci this.back = this.shadowRoot!.querySelector<HTMLDivElement>('#back'); 250fb726d48Sopenharmony_ci this.clickEventListener(); 251fb726d48Sopenharmony_ci this.hoverEventListener(); 252fb726d48Sopenharmony_ci } 253fb726d48Sopenharmony_ci 254fb726d48Sopenharmony_ci /** 255fb726d48Sopenharmony_ci * 点击监听事件函数块 256fb726d48Sopenharmony_ci */ 257fb726d48Sopenharmony_ci clickEventListener(): void { 258fb726d48Sopenharmony_ci // @ts-ignore 259fb726d48Sopenharmony_ci this.processRunTimeTbl!.addEventListener('row-click', (evt: CustomEvent) => { 260fb726d48Sopenharmony_ci this.display_flag = false; 261fb726d48Sopenharmony_ci let data = evt.detail.data; 262fb726d48Sopenharmony_ci this.processId = data.pid; 263fb726d48Sopenharmony_ci this.display_thr!.style.display = 'block'; 264fb726d48Sopenharmony_ci this.display_pro!.style.display = 'none'; 265fb726d48Sopenharmony_ci this.queryLogicWorker( 266fb726d48Sopenharmony_ci 'scheduling-Process Top10RunTime', 267fb726d48Sopenharmony_ci 'query Thread Top10 Run Time Analysis Time:', 268fb726d48Sopenharmony_ci this.callBack.bind(this), 269fb726d48Sopenharmony_ci data.pid 270fb726d48Sopenharmony_ci ); 271fb726d48Sopenharmony_ci }); 272fb726d48Sopenharmony_ci this.processRunTimeTbl!.addEventListener('column-click', (evt) => { 273fb726d48Sopenharmony_ci // @ts-ignore 274fb726d48Sopenharmony_ci this.sortByColumn(evt.detail, this.processRunTimeData); 275fb726d48Sopenharmony_ci this.processRunTimeTbl!.recycleDataSource = this.processRunTimeData; 276fb726d48Sopenharmony_ci }); 277fb726d48Sopenharmony_ci this.threadRunTimeTbl!.addEventListener('column-click', (evt) => { 278fb726d48Sopenharmony_ci // @ts-ignore 279fb726d48Sopenharmony_ci this.sortByColumn(evt.detail, this.threadRunTimeData); 280fb726d48Sopenharmony_ci this.threadRunTimeTbl!.recycleDataSource = this.threadRunTimeData; 281fb726d48Sopenharmony_ci }); 282fb726d48Sopenharmony_ci this.processRunTimeTbl!.addEventListener('contextmenu', (ev) => { 283fb726d48Sopenharmony_ci ev.preventDefault(); 284fb726d48Sopenharmony_ci }); 285fb726d48Sopenharmony_ci this.threadRunTimeTbl!.addEventListener('contextmenu', (ev) => { 286fb726d48Sopenharmony_ci ev.preventDefault(); 287fb726d48Sopenharmony_ci }); 288fb726d48Sopenharmony_ci this.back?.addEventListener('click', (event) => { 289fb726d48Sopenharmony_ci this.display_flag = true; 290fb726d48Sopenharmony_ci this.display_pro!.style.display = 'block'; 291fb726d48Sopenharmony_ci this.display_thr!.style.display = 'none'; 292fb726d48Sopenharmony_ci }); 293fb726d48Sopenharmony_ci } 294fb726d48Sopenharmony_ci 295fb726d48Sopenharmony_ci /** 296fb726d48Sopenharmony_ci * 移入事件监听函数块 297fb726d48Sopenharmony_ci */ 298fb726d48Sopenharmony_ci hoverEventListener(): void { 299fb726d48Sopenharmony_ci // @ts-ignore 300fb726d48Sopenharmony_ci this.processRunTimeTbl!.addEventListener('row-hover', (evt: CustomEvent) => { 301fb726d48Sopenharmony_ci if (evt.detail.data) { 302fb726d48Sopenharmony_ci let data = evt.detail.data; 303fb726d48Sopenharmony_ci data.isHover = true; 304fb726d48Sopenharmony_ci if (evt.detail.callBack) { 305fb726d48Sopenharmony_ci evt.detail.callBack(true); 306fb726d48Sopenharmony_ci } 307fb726d48Sopenharmony_ci this.processSwitchCountChart?.showHoverColumn(data.no); 308fb726d48Sopenharmony_ci } 309fb726d48Sopenharmony_ci }); 310fb726d48Sopenharmony_ci // @ts-ignore 311fb726d48Sopenharmony_ci this.threadRunTimeTbl!.addEventListener('row-hover', (evt: CustomEvent) => { 312fb726d48Sopenharmony_ci if (evt.detail.data) { 313fb726d48Sopenharmony_ci let data = evt.detail.data; 314fb726d48Sopenharmony_ci data.isHover = true; 315fb726d48Sopenharmony_ci if (evt.detail.callBack) { 316fb726d48Sopenharmony_ci evt.detail.callBack(true); 317fb726d48Sopenharmony_ci } 318fb726d48Sopenharmony_ci this.threadSwitchCountChart?.showHoverColumn(data.no); 319fb726d48Sopenharmony_ci } 320fb726d48Sopenharmony_ci }); 321fb726d48Sopenharmony_ci } 322fb726d48Sopenharmony_ci 323fb726d48Sopenharmony_ci /** 324fb726d48Sopenharmony_ci * 表格数据排序 325fb726d48Sopenharmony_ci * @param detail 点击的列名,以及排序状态0 1 2分别代表不排序、升序排序、降序排序 326fb726d48Sopenharmony_ci * @param data 表格中需要排序的数据 327fb726d48Sopenharmony_ci */ 328fb726d48Sopenharmony_ci sortByColumn(detail: unknown, data: Array<Top10RunTimeData>): void { 329fb726d48Sopenharmony_ci // @ts-ignore 330fb726d48Sopenharmony_ci function compare(processThreadCountProperty, sort, type) { 331fb726d48Sopenharmony_ci return function (a: unknown, b: unknown) { 332fb726d48Sopenharmony_ci if (type === 'number') { 333fb726d48Sopenharmony_ci // @ts-ignore 334fb726d48Sopenharmony_ci return sort === 2 335fb726d48Sopenharmony_ci // @ts-ignore 336fb726d48Sopenharmony_ci ? parseFloat(b[processThreadCountProperty]) - 337fb726d48Sopenharmony_ci // @ts-ignore 338fb726d48Sopenharmony_ci parseFloat(a[processThreadCountProperty]) 339fb726d48Sopenharmony_ci // @ts-ignore 340fb726d48Sopenharmony_ci : parseFloat(a[processThreadCountProperty]) - 341fb726d48Sopenharmony_ci // @ts-ignore 342fb726d48Sopenharmony_ci parseFloat(b[processThreadCountProperty]); 343fb726d48Sopenharmony_ci } else { 344fb726d48Sopenharmony_ci if (sort === 2) { 345fb726d48Sopenharmony_ci // @ts-ignore 346fb726d48Sopenharmony_ci return b[processThreadCountProperty] 347fb726d48Sopenharmony_ci .toString() 348fb726d48Sopenharmony_ci // @ts-ignore 349fb726d48Sopenharmony_ci .localeCompare(a[processThreadCountProperty].toString()); 350fb726d48Sopenharmony_ci } else { 351fb726d48Sopenharmony_ci // @ts-ignore 352fb726d48Sopenharmony_ci return a[processThreadCountProperty] 353fb726d48Sopenharmony_ci .toString() 354fb726d48Sopenharmony_ci // @ts-ignore 355fb726d48Sopenharmony_ci .localeCompare(b[processThreadCountProperty].toString()); 356fb726d48Sopenharmony_ci } 357fb726d48Sopenharmony_ci } 358fb726d48Sopenharmony_ci }; 359fb726d48Sopenharmony_ci } 360fb726d48Sopenharmony_ci // @ts-ignore 361fb726d48Sopenharmony_ci if (detail.key === 'pName' || detail.key === 'tName') { 362fb726d48Sopenharmony_ci data.sort( 363fb726d48Sopenharmony_ci // @ts-ignore 364fb726d48Sopenharmony_ci compare(detail.key, detail.sort, 'string') 365fb726d48Sopenharmony_ci ); 366fb726d48Sopenharmony_ci } else { 367fb726d48Sopenharmony_ci data.sort( 368fb726d48Sopenharmony_ci // @ts-ignore 369fb726d48Sopenharmony_ci compare(detail.key, detail.sort, 'number') 370fb726d48Sopenharmony_ci ); 371fb726d48Sopenharmony_ci } 372fb726d48Sopenharmony_ci } 373fb726d48Sopenharmony_ci 374fb726d48Sopenharmony_ci /** 375fb726d48Sopenharmony_ci * 用于将元素节点挂载,大函数块拆分为样式、节点 376fb726d48Sopenharmony_ci * @returns 返回字符串形式的元素节点 377fb726d48Sopenharmony_ci */ 378fb726d48Sopenharmony_ci initHtml(): string { 379fb726d48Sopenharmony_ci return this.initStyleHtml() + this.initTagHtml(); 380fb726d48Sopenharmony_ci } 381fb726d48Sopenharmony_ci 382fb726d48Sopenharmony_ci /** 383fb726d48Sopenharmony_ci * 样式html代码块 384fb726d48Sopenharmony_ci * @returns 返回样式代码块字符串 385fb726d48Sopenharmony_ci */ 386fb726d48Sopenharmony_ci initStyleHtml(): string { 387fb726d48Sopenharmony_ci return ` 388fb726d48Sopenharmony_ci <style> 389fb726d48Sopenharmony_ci .content_grid{ 390fb726d48Sopenharmony_ci display: grid; 391fb726d48Sopenharmony_ci padding: 15px; 392fb726d48Sopenharmony_ci grid-column-gap: 15px; 393fb726d48Sopenharmony_ci grid-row-gap: 15px; 394fb726d48Sopenharmony_ci grid-template-columns: 1fr 1fr; 395fb726d48Sopenharmony_ci background-color: var(--dark-background,#FFFFFF); 396fb726d48Sopenharmony_ci } 397fb726d48Sopenharmony_ci .chart_div{ 398fb726d48Sopenharmony_ci display: flex; 399fb726d48Sopenharmony_ci flex-direction: column; 400fb726d48Sopenharmony_ci background-color: var(--dark-background,#FFFFFF); 401fb726d48Sopenharmony_ci align-items: center; 402fb726d48Sopenharmony_ci height: 370px; 403fb726d48Sopenharmony_ci padding-left: 5px; 404fb726d48Sopenharmony_ci padding-right: 5px; 405fb726d48Sopenharmony_ci border-radius: 5px 406fb726d48Sopenharmony_ci } 407fb726d48Sopenharmony_ci :host { 408fb726d48Sopenharmony_ci width: 100%; 409fb726d48Sopenharmony_ci height: 100%; 410fb726d48Sopenharmony_ci background: var(--dark-background5,#F6F6F6); 411fb726d48Sopenharmony_ci } 412fb726d48Sopenharmony_ci .tb_run_time{ 413fb726d48Sopenharmony_ci overflow: auto; 414fb726d48Sopenharmony_ci background-color: var(--dark-background,#FFFFFF); 415fb726d48Sopenharmony_ci border-radius: 5px; 416fb726d48Sopenharmony_ci border: solid 1px var(--dark-border1,#e0e0e0); 417fb726d48Sopenharmony_ci display: flex; 418fb726d48Sopenharmony_ci } 419fb726d48Sopenharmony_ci .bg{ 420fb726d48Sopenharmony_ci background-color: var(--dark-background,#FFFFFF); 421fb726d48Sopenharmony_ci padding-left: 10px; 422fb726d48Sopenharmony_ci } 423fb726d48Sopenharmony_ci .labels{ 424fb726d48Sopenharmony_ci display: flex; 425fb726d48Sopenharmony_ci flex-direction: row; 426fb726d48Sopenharmony_ci align-items: center; 427fb726d48Sopenharmony_ci justify-content: center; 428fb726d48Sopenharmony_ci font-size: 9pt; 429fb726d48Sopenharmony_ci padding-right: 15px; 430fb726d48Sopenharmony_ci } 431fb726d48Sopenharmony_ci </style> 432fb726d48Sopenharmony_ci `; 433fb726d48Sopenharmony_ci } 434fb726d48Sopenharmony_ci 435fb726d48Sopenharmony_ci /** 436fb726d48Sopenharmony_ci * 节点html代码块 437fb726d48Sopenharmony_ci * @returns 返回节点代码块字符串 438fb726d48Sopenharmony_ci */ 439fb726d48Sopenharmony_ci initTagHtml(): string { 440fb726d48Sopenharmony_ci return ` 441fb726d48Sopenharmony_ci <lit-progress-bar id="loading" style="height: 1px;width: 100%"></lit-progress-bar> 442fb726d48Sopenharmony_ci <div id='display_pro'> 443fb726d48Sopenharmony_ci <table-no-data id="nodata_Pro" contentHeight="500px"> 444fb726d48Sopenharmony_ci <div class="root"> 445fb726d48Sopenharmony_ci <div style="width:100%;height: 45px;"></div> 446fb726d48Sopenharmony_ci <div class="content_grid" id="total"> 447fb726d48Sopenharmony_ci <div class="chart_div"> 448fb726d48Sopenharmony_ci <div style="line-height: 40px;height: 40px;width: 100%;text-align: center;">Top10运行超长进程</div> 449fb726d48Sopenharmony_ci <lit-chart-column id="chart_pro" style="width:100%;height:300px"></lit-chart-column> 450fb726d48Sopenharmony_ci </div> 451fb726d48Sopenharmony_ci <div class="tb_run_time" > 452fb726d48Sopenharmony_ci <lit-table id='tb-process-run-time' hideDownload style='height: auto'> 453fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='NO' data-index='no' key='no' align='flex-start' order></lit-table-column> 454fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='Process_Id' data-index='pid' key='pid' align='flex-start' order></lit-table-column> 455fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='Process_Name' data-index='pName' key='pName' align='flex-start' order></lit-table-column> 456fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='Run_Time(ns)' data-index='dur' key='dur' align='flex-start' order></lit-table-column> 457fb726d48Sopenharmony_ci </lit-table> 458fb726d48Sopenharmony_ci </div> 459fb726d48Sopenharmony_ci </div> 460fb726d48Sopenharmony_ci </div> 461fb726d48Sopenharmony_ci </table-no-data> 462fb726d48Sopenharmony_ci </div> 463fb726d48Sopenharmony_ci <div id='display_thr' style='display: none'> 464fb726d48Sopenharmony_ci <table-no-data id="nodata_Thr" contentHeight="500px"> 465fb726d48Sopenharmony_ci <div class="root"> 466fb726d48Sopenharmony_ci <div class="bg" style="display: flex;flex-direction: row;"> 467fb726d48Sopenharmony_ci <div id="back" style="height: 45px;display: flex;flex-direction: row;align-items: center;cursor: pointer" title="Back Previous Level"> 468fb726d48Sopenharmony_ci <span style="width: 10px"></span>Previous Level<span style="width: 10px"></span><lit-icon name="vertical-align-top" size="20"></lit-icon> 469fb726d48Sopenharmony_ci </div> 470fb726d48Sopenharmony_ci </div> 471fb726d48Sopenharmony_ci <div class="content_grid" id="total"> 472fb726d48Sopenharmony_ci <div class="chart_div"> 473fb726d48Sopenharmony_ci <div style="line-height: 40px;height: 40px;width: 100%;text-align: center;">Top10运行超长线程</div> 474fb726d48Sopenharmony_ci <lit-chart-column id="chart_thr" style="width:100%;height:300px"></lit-chart-column> 475fb726d48Sopenharmony_ci </div> 476fb726d48Sopenharmony_ci <div class="tb_run_time" > 477fb726d48Sopenharmony_ci <lit-table id='tb-thread-run-time' hideDownload style='height: auto'> 478fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='NO' data-index='no' key='no' align='flex-start' order></lit-table-column> 479fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='Process_Id' data-index='pid' key='pid' align='flex-start' order></lit-table-column> 480fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='Thread_Id' data-index='tid' key='tid' align='flex-start' order></lit-table-column> 481fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='Thread_Name' data-index='tName' key='tName' align='flex-start' order></lit-table-column> 482fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='Run_Time(ns)' data-index='dur' key='dur' align='flex-start' order></lit-table-column> 483fb726d48Sopenharmony_ci </lit-table> 484fb726d48Sopenharmony_ci </div> 485fb726d48Sopenharmony_ci </div> 486fb726d48Sopenharmony_ci </div> 487fb726d48Sopenharmony_ci </table-no-data> 488fb726d48Sopenharmony_ci </div> 489fb726d48Sopenharmony_ci `; 490fb726d48Sopenharmony_ci } 491fb726d48Sopenharmony_ci} 492fb726d48Sopenharmony_ci 493fb726d48Sopenharmony_ciinterface Top10RunTimeData { 494fb726d48Sopenharmony_ci no?: number, 495fb726d48Sopenharmony_ci pid?: number, 496fb726d48Sopenharmony_ci tid?: number, 497fb726d48Sopenharmony_ci pName?: string, 498fb726d48Sopenharmony_ci tName?: string, 499fb726d48Sopenharmony_ci switchCount?: number, 500fb726d48Sopenharmony_ci dur?: number 501fb726d48Sopenharmony_ci}