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 { LitChartPie } from '../../../../base-ui/chart/pie/LitChartPie'; 25fb726d48Sopenharmony_ciimport '../../../../base-ui/chart/pie/LitChartPie'; 26fb726d48Sopenharmony_ciimport { Utils } from '../../trace/base/Utils'; 27fb726d48Sopenharmony_ci 28fb726d48Sopenharmony_ci@element('top10-process-switch-count') 29fb726d48Sopenharmony_ciexport class Top10ProcessSwitchCount extends BaseElement { 30fb726d48Sopenharmony_ci traceChange: boolean = false; 31fb726d48Sopenharmony_ci private processSwitchCountTbl: LitTable | null | undefined; 32fb726d48Sopenharmony_ci private threadSwitchCountTbl: LitTable | null | undefined; 33fb726d48Sopenharmony_ci private nodataPro: TableNoData | null | undefined; 34fb726d48Sopenharmony_ci private nodataThr: TableNoData | null | undefined; 35fb726d48Sopenharmony_ci private processSwitchCountData: Array<Top10ProcSwiCount> = []; 36fb726d48Sopenharmony_ci private threadSwitchCountData: Array<Top10ProcSwiCount> = []; 37fb726d48Sopenharmony_ci private threadSwitchCountPie: LitChartPie | null | undefined; 38fb726d48Sopenharmony_ci private processSwitchCountPie: LitChartPie | null | undefined; 39fb726d48Sopenharmony_ci private display_pro: HTMLDivElement | null | undefined; 40fb726d48Sopenharmony_ci private display_thr: HTMLDivElement | null | undefined; 41fb726d48Sopenharmony_ci private processSwitchCountProgress: LitProgressBar | 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.processSwitchCountTbl!.recycleDataSource.length > 0) { 54fb726d48Sopenharmony_ci this.processSwitchCountTbl?.reMeauseHeight(); 55fb726d48Sopenharmony_ci } 56fb726d48Sopenharmony_ci return; 57fb726d48Sopenharmony_ci } 58fb726d48Sopenharmony_ci this.traceChange = false; 59fb726d48Sopenharmony_ci this.processSwitchCountProgress!.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 Top10Swicount', 67fb726d48Sopenharmony_ci 'query Process Top10 Switch Count 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.processSwitchCountPie!.dataSource = []; 78fb726d48Sopenharmony_ci this.processSwitchCountTbl!.recycleDataSource = []; 79fb726d48Sopenharmony_ci this.threadSwitchCountPie!.dataSource = []; 80fb726d48Sopenharmony_ci this.threadSwitchCountTbl!.recycleDataSource = []; 81fb726d48Sopenharmony_ci this.processSwitchCountData = []; 82fb726d48Sopenharmony_ci this.threadSwitchCountData = []; 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<Top10ProcSwiCount>) => 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 * 抽取公共方法,提取数据,用于展示到表格中 103fb726d48Sopenharmony_ci * @param arr 数据库查询结果 104fb726d48Sopenharmony_ci * @returns 整理好的数据,包含进程名,线程名等相关信息 105fb726d48Sopenharmony_ci */ 106fb726d48Sopenharmony_ci organizationData(arr: Array<Top10ProcSwiCount>): Array<Top10ProcSwiCount> { 107fb726d48Sopenharmony_ci let result: Array<Top10ProcSwiCount> = []; 108fb726d48Sopenharmony_ci for (let i = 0; i < arr.length; i++) { 109fb726d48Sopenharmony_ci const pStr: string | null = this.processMap.get(arr[i].pid!)!; 110fb726d48Sopenharmony_ci const tStr: string | null = this.threadMap.get(arr[i].tid!)!; 111fb726d48Sopenharmony_ci result.push({ 112fb726d48Sopenharmony_ci NO: i + 1, 113fb726d48Sopenharmony_ci pid: arr[i].pid || this.processId, 114fb726d48Sopenharmony_ci pName: pStr === null ? 'Process ' : pStr, 115fb726d48Sopenharmony_ci switchCount: arr[i].occurrences, 116fb726d48Sopenharmony_ci tid: arr[i].tid, 117fb726d48Sopenharmony_ci tName: tStr === null ? 'Thread ' : tStr 118fb726d48Sopenharmony_ci }); 119fb726d48Sopenharmony_ci } 120fb726d48Sopenharmony_ci return result; 121fb726d48Sopenharmony_ci } 122fb726d48Sopenharmony_ci 123fb726d48Sopenharmony_ci /** 124fb726d48Sopenharmony_ci * 提交线程后,结果返回后的回调函数 125fb726d48Sopenharmony_ci * @param res 数据库查询结果 126fb726d48Sopenharmony_ci */ 127fb726d48Sopenharmony_ci callBack(res: Array<Top10ProcSwiCount>): void { 128fb726d48Sopenharmony_ci let result: Array<Top10ProcSwiCount> = this.organizationData(res); 129fb726d48Sopenharmony_ci // 判断当前显示的是进程组还是线程组 130fb726d48Sopenharmony_ci if (this.display_flag === true) { 131fb726d48Sopenharmony_ci this.processCallback(result); 132fb726d48Sopenharmony_ci } else { 133fb726d48Sopenharmony_ci this.threadCallback(result); 134fb726d48Sopenharmony_ci } 135fb726d48Sopenharmony_ci this.processSwitchCountProgress!.loading = false; 136fb726d48Sopenharmony_ci } 137fb726d48Sopenharmony_ci 138fb726d48Sopenharmony_ci /** 139fb726d48Sopenharmony_ci * 大函数块拆解分为两部分,此部分为Top10进程数据 140fb726d48Sopenharmony_ci * @param result 需要显示在表格中的数据 141fb726d48Sopenharmony_ci */ 142fb726d48Sopenharmony_ci processCallback(result: Array<Top10ProcSwiCount>): void { 143fb726d48Sopenharmony_ci this.nodataPro!.noData = result === undefined || result.length === 0; 144fb726d48Sopenharmony_ci this.processSwitchCountData = result; 145fb726d48Sopenharmony_ci this.processSwitchCountPie!.config = { 146fb726d48Sopenharmony_ci appendPadding: 10, 147fb726d48Sopenharmony_ci data: result, 148fb726d48Sopenharmony_ci angleField: 'switchCount', 149fb726d48Sopenharmony_ci colorField: 'pid', 150fb726d48Sopenharmony_ci radius: 0.8, 151fb726d48Sopenharmony_ci label: { 152fb726d48Sopenharmony_ci type: 'outer', 153fb726d48Sopenharmony_ci }, 154fb726d48Sopenharmony_ci hoverHandler: (data): void => { 155fb726d48Sopenharmony_ci if (data) { 156fb726d48Sopenharmony_ci this.processSwitchCountTbl!.setCurrentHover(data); 157fb726d48Sopenharmony_ci } else { 158fb726d48Sopenharmony_ci this.processSwitchCountTbl!.mouseOut(); 159fb726d48Sopenharmony_ci } 160fb726d48Sopenharmony_ci }, 161fb726d48Sopenharmony_ci tip: (obj): string => { 162fb726d48Sopenharmony_ci return ` 163fb726d48Sopenharmony_ci <div> 164fb726d48Sopenharmony_ci <div>Process_Id:${ 165fb726d48Sopenharmony_ci // @ts-ignore 166fb726d48Sopenharmony_ci obj.obj.pid}</div> 167fb726d48Sopenharmony_ci <div>Process_Name:${ 168fb726d48Sopenharmony_ci // @ts-ignore 169fb726d48Sopenharmony_ci obj.obj.pName}</div> 170fb726d48Sopenharmony_ci <div>Switch Count:${ 171fb726d48Sopenharmony_ci // @ts-ignore 172fb726d48Sopenharmony_ci obj.obj.switchCount}</div> 173fb726d48Sopenharmony_ci </div> 174fb726d48Sopenharmony_ci `; 175fb726d48Sopenharmony_ci }, 176fb726d48Sopenharmony_ci interactions: [ 177fb726d48Sopenharmony_ci { 178fb726d48Sopenharmony_ci type: 'element-active', 179fb726d48Sopenharmony_ci }, 180fb726d48Sopenharmony_ci ], 181fb726d48Sopenharmony_ci }; 182fb726d48Sopenharmony_ci this.processSwitchCountTbl!.recycleDataSource = result; 183fb726d48Sopenharmony_ci this.processSwitchCountTbl!.reMeauseHeight(); 184fb726d48Sopenharmony_ci } 185fb726d48Sopenharmony_ci 186fb726d48Sopenharmony_ci /** 187fb726d48Sopenharmony_ci * 大函数块拆解分为两部分,此部分为Top10线程数据 188fb726d48Sopenharmony_ci * @param result 需要显示在表格中的数据 189fb726d48Sopenharmony_ci */ 190fb726d48Sopenharmony_ci threadCallback(result: Array<Top10ProcSwiCount>): void { 191fb726d48Sopenharmony_ci this.nodataThr!.noData = result === undefined || result.length === 0; 192fb726d48Sopenharmony_ci this.threadSwitchCountTbl!.recycleDataSource = result; 193fb726d48Sopenharmony_ci this.threadSwitchCountTbl!.reMeauseHeight(); 194fb726d48Sopenharmony_ci this.threadSwitchCountData = result; 195fb726d48Sopenharmony_ci this.threadSwitchCountPie!.config = { 196fb726d48Sopenharmony_ci appendPadding: 10, 197fb726d48Sopenharmony_ci data: result, 198fb726d48Sopenharmony_ci angleField: 'switchCount', 199fb726d48Sopenharmony_ci colorField: 'tid', 200fb726d48Sopenharmony_ci radius: 0.8, 201fb726d48Sopenharmony_ci label: { 202fb726d48Sopenharmony_ci type: 'outer', 203fb726d48Sopenharmony_ci }, 204fb726d48Sopenharmony_ci hoverHandler: (data): void => { 205fb726d48Sopenharmony_ci if (data) { 206fb726d48Sopenharmony_ci this.threadSwitchCountTbl!.setCurrentHover(data); 207fb726d48Sopenharmony_ci } else { 208fb726d48Sopenharmony_ci this.threadSwitchCountTbl!.mouseOut(); 209fb726d48Sopenharmony_ci } 210fb726d48Sopenharmony_ci }, 211fb726d48Sopenharmony_ci tip: (obj): string => { 212fb726d48Sopenharmony_ci return ` 213fb726d48Sopenharmony_ci <div> 214fb726d48Sopenharmony_ci <div>Thread_Id:${ 215fb726d48Sopenharmony_ci // @ts-ignore 216fb726d48Sopenharmony_ci obj.obj.tid}</div> 217fb726d48Sopenharmony_ci <div>Thread_Name:${ 218fb726d48Sopenharmony_ci // @ts-ignore 219fb726d48Sopenharmony_ci obj.obj.tName}</div> 220fb726d48Sopenharmony_ci <div>Switch Count:${ 221fb726d48Sopenharmony_ci // @ts-ignore 222fb726d48Sopenharmony_ci obj.obj.switchCount}</div> 223fb726d48Sopenharmony_ci <div>Process_Id:${ 224fb726d48Sopenharmony_ci // @ts-ignore 225fb726d48Sopenharmony_ci obj.obj.pid}</div> 226fb726d48Sopenharmony_ci </div> 227fb726d48Sopenharmony_ci `; 228fb726d48Sopenharmony_ci }, 229fb726d48Sopenharmony_ci interactions: [ 230fb726d48Sopenharmony_ci { 231fb726d48Sopenharmony_ci type: 'element-active', 232fb726d48Sopenharmony_ci }, 233fb726d48Sopenharmony_ci ], 234fb726d48Sopenharmony_ci }; 235fb726d48Sopenharmony_ci } 236fb726d48Sopenharmony_ci 237fb726d48Sopenharmony_ci /** 238fb726d48Sopenharmony_ci * 元素初始化,将html节点与内部变量进行绑定 239fb726d48Sopenharmony_ci */ 240fb726d48Sopenharmony_ci initElements(): void { 241fb726d48Sopenharmony_ci this.processSwitchCountProgress = this.shadowRoot!.querySelector<LitProgressBar>('#loading'); 242fb726d48Sopenharmony_ci this.processSwitchCountTbl = this.shadowRoot!.querySelector<LitTable>('#tb-process-switch-count'); 243fb726d48Sopenharmony_ci this.threadSwitchCountTbl = this.shadowRoot!.querySelector<LitTable>('#tb-thread-switch-count'); 244fb726d48Sopenharmony_ci this.processSwitchCountPie = this.shadowRoot!.querySelector<LitChartPie>('#pie_pro'); 245fb726d48Sopenharmony_ci this.threadSwitchCountPie = this.shadowRoot!.querySelector<LitChartPie>('#pie_thr'); 246fb726d48Sopenharmony_ci this.nodataPro = this.shadowRoot!.querySelector<TableNoData>('#nodata_pro'); 247fb726d48Sopenharmony_ci this.nodataThr = this.shadowRoot!.querySelector<TableNoData>('#nodata_thr'); 248fb726d48Sopenharmony_ci this.display_pro = this.shadowRoot!.querySelector<HTMLDivElement>('#display_pro'); 249fb726d48Sopenharmony_ci this.display_thr = this.shadowRoot!.querySelector<HTMLDivElement>('#display_thr'); 250fb726d48Sopenharmony_ci this.back = this.shadowRoot!.querySelector<HTMLDivElement>('#back'); 251fb726d48Sopenharmony_ci this.clickEventListener(); 252fb726d48Sopenharmony_ci this.hoverEventListener(); 253fb726d48Sopenharmony_ci this.addEventListener('contextmenu', (event) => { 254fb726d48Sopenharmony_ci event.preventDefault(); // 阻止默认的上下文菜单弹框 255fb726d48Sopenharmony_ci }); 256fb726d48Sopenharmony_ci } 257fb726d48Sopenharmony_ci 258fb726d48Sopenharmony_ci /** 259fb726d48Sopenharmony_ci * 点击监听事件函数块 260fb726d48Sopenharmony_ci */ 261fb726d48Sopenharmony_ci clickEventListener(): void { 262fb726d48Sopenharmony_ci // @ts-ignore 263fb726d48Sopenharmony_ci this.processSwitchCountTbl!.addEventListener('row-click', (evt: CustomEvent) => { 264fb726d48Sopenharmony_ci this.display_flag = false; 265fb726d48Sopenharmony_ci let data = evt.detail.data; 266fb726d48Sopenharmony_ci this.processId = data.pid; 267fb726d48Sopenharmony_ci this.display_thr!.style.display = 'block'; 268fb726d48Sopenharmony_ci this.display_pro!.style.display = 'none'; 269fb726d48Sopenharmony_ci this.queryLogicWorker( 270fb726d48Sopenharmony_ci 'scheduling-Process Top10Swicount', 271fb726d48Sopenharmony_ci 'query Process Top10 Switch Count Analysis Time:', 272fb726d48Sopenharmony_ci this.callBack.bind(this), 273fb726d48Sopenharmony_ci data.pid 274fb726d48Sopenharmony_ci ); 275fb726d48Sopenharmony_ci }); 276fb726d48Sopenharmony_ci this.processSwitchCountTbl!.addEventListener('column-click', (evt) => { 277fb726d48Sopenharmony_ci // @ts-ignore 278fb726d48Sopenharmony_ci this.sortByColumn(evt.detail, this.processSwitchCountData); 279fb726d48Sopenharmony_ci this.processSwitchCountTbl!.recycleDataSource = this.processSwitchCountData; 280fb726d48Sopenharmony_ci }); 281fb726d48Sopenharmony_ci this.threadSwitchCountTbl!.addEventListener('column-click', (evt) => { 282fb726d48Sopenharmony_ci // @ts-ignore 283fb726d48Sopenharmony_ci this.sortByColumn(evt.detail, this.threadSwitchCountData); 284fb726d48Sopenharmony_ci this.threadSwitchCountTbl!.recycleDataSource = this.threadSwitchCountData; 285fb726d48Sopenharmony_ci }); 286fb726d48Sopenharmony_ci 287fb726d48Sopenharmony_ci this.back!.addEventListener('click', (event) => { 288fb726d48Sopenharmony_ci this.display_flag = true; 289fb726d48Sopenharmony_ci this.display_pro!.style.display = 'block'; 290fb726d48Sopenharmony_ci this.display_thr!.style.display = 'none'; 291fb726d48Sopenharmony_ci }); 292fb726d48Sopenharmony_ci 293fb726d48Sopenharmony_ci } 294fb726d48Sopenharmony_ci 295fb726d48Sopenharmony_ci /** 296fb726d48Sopenharmony_ci * 移入事件监听函数块 297fb726d48Sopenharmony_ci */ 298fb726d48Sopenharmony_ci hoverEventListener(): void { 299fb726d48Sopenharmony_ci // @ts-ignore 300fb726d48Sopenharmony_ci this.processSwitchCountTbl!.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 } 308fb726d48Sopenharmony_ci this.processSwitchCountPie?.showHover(); 309fb726d48Sopenharmony_ci }); 310fb726d48Sopenharmony_ci // @ts-ignore 311fb726d48Sopenharmony_ci this.threadSwitchCountTbl!.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 } 319fb726d48Sopenharmony_ci this.threadSwitchCountPie?.showHover(); 320fb726d48Sopenharmony_ci }); 321fb726d48Sopenharmony_ci this.addEventListener('mouseenter', () => { 322fb726d48Sopenharmony_ci if (this.processSwitchCountTbl!.recycleDataSource.length > 0) { 323fb726d48Sopenharmony_ci this.processSwitchCountTbl?.reMeauseHeight(); 324fb726d48Sopenharmony_ci } 325fb726d48Sopenharmony_ci }); 326fb726d48Sopenharmony_ci } 327fb726d48Sopenharmony_ci 328fb726d48Sopenharmony_ci /** 329fb726d48Sopenharmony_ci * 表格数据排序 330fb726d48Sopenharmony_ci * @param detail 点击的列名,以及排序状态0 1 2分别代表不排序、升序排序、降序排序 331fb726d48Sopenharmony_ci * @param data 表格中需要排序的数据 332fb726d48Sopenharmony_ci */ 333fb726d48Sopenharmony_ci sortByColumn(detail: { key: string, sort: number }, data: Array<Top10ProcSwiCount>): void { 334fb726d48Sopenharmony_ci // @ts-ignore 335fb726d48Sopenharmony_ci function compare(processThreadCountProperty, sort, type) { 336fb726d48Sopenharmony_ci return function (a: unknown, b: unknown) { 337fb726d48Sopenharmony_ci if (type === 'number') { 338fb726d48Sopenharmony_ci // @ts-ignore 339fb726d48Sopenharmony_ci return sort === 2 340fb726d48Sopenharmony_ci // @ts-ignore 341fb726d48Sopenharmony_ci ? parseFloat(b[processThreadCountProperty]) - 342fb726d48Sopenharmony_ci // @ts-ignore 343fb726d48Sopenharmony_ci parseFloat(a[processThreadCountProperty]) 344fb726d48Sopenharmony_ci // @ts-ignore 345fb726d48Sopenharmony_ci : parseFloat(a[processThreadCountProperty]) - 346fb726d48Sopenharmony_ci // @ts-ignore 347fb726d48Sopenharmony_ci parseFloat(b[processThreadCountProperty]); 348fb726d48Sopenharmony_ci } else { 349fb726d48Sopenharmony_ci if (sort === 2) { 350fb726d48Sopenharmony_ci // @ts-ignore 351fb726d48Sopenharmony_ci return b[processThreadCountProperty] 352fb726d48Sopenharmony_ci .toString() 353fb726d48Sopenharmony_ci // @ts-ignore 354fb726d48Sopenharmony_ci .localeCompare(a[processThreadCountProperty].toString()); 355fb726d48Sopenharmony_ci } else { 356fb726d48Sopenharmony_ci // @ts-ignore 357fb726d48Sopenharmony_ci return a[processThreadCountProperty] 358fb726d48Sopenharmony_ci .toString() 359fb726d48Sopenharmony_ci // @ts-ignore 360fb726d48Sopenharmony_ci .localeCompare(b[processThreadCountProperty].toString()); 361fb726d48Sopenharmony_ci } 362fb726d48Sopenharmony_ci } 363fb726d48Sopenharmony_ci }; 364fb726d48Sopenharmony_ci } 365fb726d48Sopenharmony_ci if (detail.key === 'pName' || detail.key === 'tName') { 366fb726d48Sopenharmony_ci data.sort( 367fb726d48Sopenharmony_ci compare(detail.key, detail.sort, 'string') 368fb726d48Sopenharmony_ci ); 369fb726d48Sopenharmony_ci } else { 370fb726d48Sopenharmony_ci data.sort( 371fb726d48Sopenharmony_ci compare(detail.key, detail.sort, 'number') 372fb726d48Sopenharmony_ci ); 373fb726d48Sopenharmony_ci } 374fb726d48Sopenharmony_ci } 375fb726d48Sopenharmony_ci 376fb726d48Sopenharmony_ci /** 377fb726d48Sopenharmony_ci * 用于将元素节点挂载,大函数块拆分为样式、节点 378fb726d48Sopenharmony_ci * @returns 返回字符串形式的元素节点 379fb726d48Sopenharmony_ci */ 380fb726d48Sopenharmony_ci initHtml(): string { 381fb726d48Sopenharmony_ci return this.initStyleHtml() + this.initTagHtml(); 382fb726d48Sopenharmony_ci } 383fb726d48Sopenharmony_ci 384fb726d48Sopenharmony_ci /** 385fb726d48Sopenharmony_ci * 样式html代码块 386fb726d48Sopenharmony_ci * @returns 返回样式代码块字符串 387fb726d48Sopenharmony_ci */ 388fb726d48Sopenharmony_ci initStyleHtml(): string { 389fb726d48Sopenharmony_ci return ` 390fb726d48Sopenharmony_ci <style> 391fb726d48Sopenharmony_ci :host { 392fb726d48Sopenharmony_ci width: 100%; 393fb726d48Sopenharmony_ci height: 100%; 394fb726d48Sopenharmony_ci background-color: var(--dark-background5,#F6F6F6); 395fb726d48Sopenharmony_ci } 396fb726d48Sopenharmony_ci .pie-chart{ 397fb726d48Sopenharmony_ci display: flex; 398fb726d48Sopenharmony_ci box-sizing: border-box; 399fb726d48Sopenharmony_ci width: 500px; 400fb726d48Sopenharmony_ci height: 500px; 401fb726d48Sopenharmony_ci } 402fb726d48Sopenharmony_ci .tb_switch_count{ 403fb726d48Sopenharmony_ci flex: 1; 404fb726d48Sopenharmony_ci overflow: auto ; 405fb726d48Sopenharmony_ci border-radius: 5px; 406fb726d48Sopenharmony_ci border: solid 1px var(--dark-border1,#e0e0e0); 407fb726d48Sopenharmony_ci margin: 15px; 408fb726d48Sopenharmony_ci padding: 5px 15px 409fb726d48Sopenharmony_ci } 410fb726d48Sopenharmony_ci .switchcount-root{ 411fb726d48Sopenharmony_ci width: 100%; 412fb726d48Sopenharmony_ci height: 100%; 413fb726d48Sopenharmony_ci box-sizing: border-box; 414fb726d48Sopenharmony_ci display: flex; 415fb726d48Sopenharmony_ci flex-direction: row; 416fb726d48Sopenharmony_ci } 417fb726d48Sopenharmony_ci .bg{ 418fb726d48Sopenharmony_ci background-color: var(--dark-background,#FFFFFF); 419fb726d48Sopenharmony_ci padding-left: 10px; 420fb726d48Sopenharmony_ci } 421fb726d48Sopenharmony_ci </style> 422fb726d48Sopenharmony_ci `; 423fb726d48Sopenharmony_ci } 424fb726d48Sopenharmony_ci 425fb726d48Sopenharmony_ci /** 426fb726d48Sopenharmony_ci * 节点html代码块 427fb726d48Sopenharmony_ci * @returns 返回节点代码块字符串 428fb726d48Sopenharmony_ci */ 429fb726d48Sopenharmony_ci initTagHtml(): string { 430fb726d48Sopenharmony_ci return ` 431fb726d48Sopenharmony_ci <lit-progress-bar id='loading' style='height: 1px;width: 100%' loading></lit-progress-bar> 432fb726d48Sopenharmony_ci <div id='display_pro'> 433fb726d48Sopenharmony_ci <table-no-data id='nodata_pro' contentHeight='500px'> 434fb726d48Sopenharmony_ci <div class="root"> 435fb726d48Sopenharmony_ci <div style="width:100%;height: 45px;"></div> 436fb726d48Sopenharmony_ci <div class='switchcount-root'> 437fb726d48Sopenharmony_ci <div style='display: flex;flex-direction: column;align-items: center'> 438fb726d48Sopenharmony_ci <div>Statistics By Process's Switch Count</div> 439fb726d48Sopenharmony_ci <lit-chart-pie id='pie_pro' class='pie-chart'></lit-chart-pie> 440fb726d48Sopenharmony_ci </div> 441fb726d48Sopenharmony_ci <div class='tb_switch_count'> 442fb726d48Sopenharmony_ci <lit-table id='tb-process-switch-count' hideDownload style='height: auto'> 443fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='NO' data-index='NO' key='NO' align='flex-start' order></lit-table-column> 444fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='Process_Id' data-index='pid' key='pid' align='flex-start' order></lit-table-column> 445fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='Process_Name' data-index='pName' key='pName' align='flex-start' order></lit-table-column> 446fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='Switch Count' data-index='switchCount' key='switchCount' align='flex-start' order></lit-table-column> 447fb726d48Sopenharmony_ci </lit-table> 448fb726d48Sopenharmony_ci </div> 449fb726d48Sopenharmony_ci </div> 450fb726d48Sopenharmony_ci </div> 451fb726d48Sopenharmony_ci </table-no-data> 452fb726d48Sopenharmony_ci </div> 453fb726d48Sopenharmony_ci <div id='display_thr' style='display: none'> 454fb726d48Sopenharmony_ci <table-no-data id='nodata_thr' contentHeight='500px'> 455fb726d48Sopenharmony_ci <div class="root"> 456fb726d48Sopenharmony_ci <div class="bg" style="display: flex;flex-direction: row;"> 457fb726d48Sopenharmony_ci <div id="back" style="height: 45px;display: flex;flex-direction: row;align-items: center;cursor: pointer" title="Back Previous Level"> 458fb726d48Sopenharmony_ci <span style="width: 10px"></span>Previous Level<span style="width: 10px"></span><lit-icon name="vertical-align-top" size="20"></lit-icon> 459fb726d48Sopenharmony_ci </div> 460fb726d48Sopenharmony_ci </div> 461fb726d48Sopenharmony_ci <div class='switchcount-root'> 462fb726d48Sopenharmony_ci <div style='display: flex;flex-direction: column;align-items: center'> 463fb726d48Sopenharmony_ci <div>Statistics By Thread's Switch Count</div> 464fb726d48Sopenharmony_ci <lit-chart-pie id='pie_thr' class='pie-chart'></lit-chart-pie> 465fb726d48Sopenharmony_ci </div> 466fb726d48Sopenharmony_ci <div class='tb_switch_count'> 467fb726d48Sopenharmony_ci <lit-table id='tb-thread-switch-count' hideDownload style='height: auto'> 468fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='NO' data-index='NO' key='NO' align='flex-start' order></lit-table-column> 469fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='Process_Id' data-index='pid' key='pid' align='flex-start' order></lit-table-column> 470fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='Thread_Id' data-index='tid' key='tid' align='flex-start' order></lit-table-column> 471fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='Thread_Name' data-index='tName' key='tName' align='flex-start' order></lit-table-column> 472fb726d48Sopenharmony_ci <lit-table-column width='1fr' title='Switch Count' data-index='switchCount' key='switchCount' align='flex-start' order></lit-table-column> 473fb726d48Sopenharmony_ci </lit-table> 474fb726d48Sopenharmony_ci </div> 475fb726d48Sopenharmony_ci </div> 476fb726d48Sopenharmony_ci </div> 477fb726d48Sopenharmony_ci </table-no-data> 478fb726d48Sopenharmony_ci </div> 479fb726d48Sopenharmony_ci `; 480fb726d48Sopenharmony_ci } 481fb726d48Sopenharmony_ci} 482fb726d48Sopenharmony_ci 483fb726d48Sopenharmony_ciinterface Top10ProcSwiCount { 484fb726d48Sopenharmony_ci NO?: number, 485fb726d48Sopenharmony_ci pid?: number, 486fb726d48Sopenharmony_ci tid?: number, 487fb726d48Sopenharmony_ci pName?: string, 488fb726d48Sopenharmony_ci tName?: string, 489fb726d48Sopenharmony_ci switchCount?: number, 490fb726d48Sopenharmony_ci occurrences?: number 491fb726d48Sopenharmony_ci}