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 { SpSchedulingAnalysis } from './SpSchedulingAnalysis'; 19fb726d48Sopenharmony_ciimport { procedurePool } from '../../database/Procedure'; 20fb726d48Sopenharmony_ciimport { info } from '../../../log/Log'; 21fb726d48Sopenharmony_ciimport '../../../base-ui/progress-bar/LitProgressBar'; 22fb726d48Sopenharmony_ciimport { LitProgressBar } from '../../../base-ui/progress-bar/LitProgressBar'; 23fb726d48Sopenharmony_ciimport './TableNoData'; 24fb726d48Sopenharmony_ciimport { TableNoData } from './TableNoData'; 25fb726d48Sopenharmony_ci 26fb726d48Sopenharmony_ci@element('top20-thread-run-time') 27fb726d48Sopenharmony_ciexport class Top20ThreadRunTime extends BaseElement { 28fb726d48Sopenharmony_ci traceChange: boolean = false; 29fb726d48Sopenharmony_ci private threadRunTimeTbl: LitTable | null | undefined; 30fb726d48Sopenharmony_ci private threadRunTimeProgress: LitProgressBar | null | undefined; 31fb726d48Sopenharmony_ci private nodata: TableNoData | null | undefined; 32fb726d48Sopenharmony_ci private threadRunTimeData: Array<unknown> = []; 33fb726d48Sopenharmony_ci 34fb726d48Sopenharmony_ci initElements(): void { 35fb726d48Sopenharmony_ci this.threadRunTimeProgress = this.shadowRoot!.querySelector<LitProgressBar>('#loading'); 36fb726d48Sopenharmony_ci this.threadRunTimeTbl = this.shadowRoot!.querySelector<LitTable>('#tb-thread-run-time'); 37fb726d48Sopenharmony_ci this.nodata = this.shadowRoot!.querySelector<TableNoData>('#nodata'); 38fb726d48Sopenharmony_ci 39fb726d48Sopenharmony_ci this.threadRunTimeTbl!.addEventListener('row-click', (evt: unknown): void => { 40fb726d48Sopenharmony_ci //@ts-ignore 41fb726d48Sopenharmony_ci let data = evt.detail.data; 42fb726d48Sopenharmony_ci data.isSelected = true; 43fb726d48Sopenharmony_ci // @ts-ignore 44fb726d48Sopenharmony_ci if ((evt.detail as unknown).callBack) { 45fb726d48Sopenharmony_ci // @ts-ignore 46fb726d48Sopenharmony_ci (evt.detail as unknown).callBack(true); 47fb726d48Sopenharmony_ci } 48fb726d48Sopenharmony_ci }); 49fb726d48Sopenharmony_ci 50fb726d48Sopenharmony_ci this.threadRunTimeTbl!.addEventListener('column-click', (evt): void => { 51fb726d48Sopenharmony_ci // @ts-ignore 52fb726d48Sopenharmony_ci this.sortByColumn(evt.detail); 53fb726d48Sopenharmony_ci }); 54fb726d48Sopenharmony_ci } 55fb726d48Sopenharmony_ci 56fb726d48Sopenharmony_ci init(): void { 57fb726d48Sopenharmony_ci if (!this.traceChange) { 58fb726d48Sopenharmony_ci if (this.threadRunTimeTbl!.recycleDataSource.length > 0) { 59fb726d48Sopenharmony_ci this.threadRunTimeTbl?.reMeauseHeight(); 60fb726d48Sopenharmony_ci } 61fb726d48Sopenharmony_ci return; 62fb726d48Sopenharmony_ci } 63fb726d48Sopenharmony_ci this.threadRunTimeProgress!.loading = true; 64fb726d48Sopenharmony_ci this.traceChange = false; 65fb726d48Sopenharmony_ci this.queryLogicWorker('scheduling-Thread RunTime', 'query Thread Cpu Run Time Analysis Time:', (res): void => { 66fb726d48Sopenharmony_ci //@ts-ignore 67fb726d48Sopenharmony_ci this.nodata!.noData = res === undefined || res.length === 0; 68fb726d48Sopenharmony_ci //@ts-ignore 69fb726d48Sopenharmony_ci this.threadRunTimeTbl!.recycleDataSource = res; 70fb726d48Sopenharmony_ci this.threadRunTimeTbl?.reMeauseHeight(); 71fb726d48Sopenharmony_ci this.threadRunTimeProgress!.loading = false; 72fb726d48Sopenharmony_ci //@ts-ignore 73fb726d48Sopenharmony_ci this.threadRunTimeData = res; 74fb726d48Sopenharmony_ci }); 75fb726d48Sopenharmony_ci } 76fb726d48Sopenharmony_ci 77fb726d48Sopenharmony_ci clearData(): void { 78fb726d48Sopenharmony_ci this.traceChange = true; 79fb726d48Sopenharmony_ci this.threadRunTimeTbl!.recycleDataSource = []; 80fb726d48Sopenharmony_ci } 81fb726d48Sopenharmony_ci 82fb726d48Sopenharmony_ci queryLogicWorker(option: string, log: string, handler: (res: unknown) => void): void { 83fb726d48Sopenharmony_ci let threadRunTime = new Date().getTime(); 84fb726d48Sopenharmony_ci procedurePool.submitWithName('logic0', option, { cpuMax: SpSchedulingAnalysis.cpuCount - 1 }, undefined, handler); 85fb726d48Sopenharmony_ci let durTime = new Date().getTime() - threadRunTime; 86fb726d48Sopenharmony_ci info(log, durTime); 87fb726d48Sopenharmony_ci } 88fb726d48Sopenharmony_ci 89fb726d48Sopenharmony_ci sortByColumn(detail: unknown): void { 90fb726d48Sopenharmony_ci // @ts-ignore 91fb726d48Sopenharmony_ci function compare(threadRunTimeProperty, sort, type) { 92fb726d48Sopenharmony_ci return function (a: unknown, b: unknown) { 93fb726d48Sopenharmony_ci if (type === 'number') { 94fb726d48Sopenharmony_ci return sort === 2 95fb726d48Sopenharmony_ci ? // @ts-ignore 96fb726d48Sopenharmony_ci parseFloat(b[threadRunTimeProperty]) - parseFloat(a[threadRunTimeProperty]) 97fb726d48Sopenharmony_ci : //@ts-ignore 98fb726d48Sopenharmony_ci parseFloat(a[threadRunTimeProperty]) - parseFloat(b[threadRunTimeProperty]); 99fb726d48Sopenharmony_ci } else { 100fb726d48Sopenharmony_ci if (sort === 2) { 101fb726d48Sopenharmony_ci //@ts-ignore 102fb726d48Sopenharmony_ci return b[threadRunTimeProperty].toString().localeCompare(a[threadRunTimeProperty].toString()); 103fb726d48Sopenharmony_ci } else { 104fb726d48Sopenharmony_ci //@ts-ignore 105fb726d48Sopenharmony_ci return a[threadRunTimeProperty].toString().localeCompare(b[threadRunTimeProperty].toString()); 106fb726d48Sopenharmony_ci } 107fb726d48Sopenharmony_ci } 108fb726d48Sopenharmony_ci }; 109fb726d48Sopenharmony_ci } 110fb726d48Sopenharmony_ci //@ts-ignore 111fb726d48Sopenharmony_ci let key = detail.key; 112fb726d48Sopenharmony_ci if (key === 'maxDurationStr') { 113fb726d48Sopenharmony_ci key = 'maxDuration'; 114fb726d48Sopenharmony_ci //@ts-ignore 115fb726d48Sopenharmony_ci this.threadRunTimeData.sort(compare(key, detail.sort, 'number')); 116fb726d48Sopenharmony_ci } else if (key === 'cpu' || key === 'no' || key === 'pid' || key === 'tid' || key === 'timestamp') { 117fb726d48Sopenharmony_ci //@ts-ignore 118fb726d48Sopenharmony_ci this.threadRunTimeData.sort(compare(key, detail.sort, 'number')); 119fb726d48Sopenharmony_ci } else { 120fb726d48Sopenharmony_ci //@ts-ignore 121fb726d48Sopenharmony_ci this.threadRunTimeData.sort(compare(key, detail.sort, 'string')); 122fb726d48Sopenharmony_ci } 123fb726d48Sopenharmony_ci this.threadRunTimeTbl!.recycleDataSource = this.threadRunTimeData; 124fb726d48Sopenharmony_ci } 125fb726d48Sopenharmony_ci 126fb726d48Sopenharmony_ci initHtml(): string { 127fb726d48Sopenharmony_ci return ` 128fb726d48Sopenharmony_ci <style> 129fb726d48Sopenharmony_ci :host { 130fb726d48Sopenharmony_ci width: 100%; 131fb726d48Sopenharmony_ci height: 100%; 132fb726d48Sopenharmony_ci background-color: var(--dark-background5,#F6F6F6); 133fb726d48Sopenharmony_ci } 134fb726d48Sopenharmony_ci .tb_run_time{ 135fb726d48Sopenharmony_ci overflow: auto ; 136fb726d48Sopenharmony_ci border-radius: 5px; 137fb726d48Sopenharmony_ci border: solid 1px var(--dark-border1,#e0e0e0); 138fb726d48Sopenharmony_ci margin: 10px 10px 0 10px; 139fb726d48Sopenharmony_ci padding: 5px 15px 140fb726d48Sopenharmony_ci } 141fb726d48Sopenharmony_ci </style> 142fb726d48Sopenharmony_ci <lit-progress-bar id="loading" style="height: 1px;width: 100%" loading></lit-progress-bar> 143fb726d48Sopenharmony_ci <div style="height: 5px"></div> 144fb726d48Sopenharmony_ci <div class="tb_run_time" > 145fb726d48Sopenharmony_ci <table-no-data id="nodata" contentHeight="500px"> 146fb726d48Sopenharmony_ci <lit-table id="tb-thread-run-time" style="height: auto;" hideDownload> 147fb726d48Sopenharmony_ci <lit-table-column width="90px" title="NO" data-index="no" key="no" align="flex-start" order></lit-table-column> 148fb726d48Sopenharmony_ci <lit-table-column width="140px" title="tid" data-index="tid" key="tid" align="flex-start" order></lit-table-column> 149fb726d48Sopenharmony_ci <lit-table-column width="240px" title="t_name" data-index="tName" key="tName" align="flex-start" order></lit-table-column> 150fb726d48Sopenharmony_ci <lit-table-column width="140px" title="pid" data-index="pid" key="pid" align="flex-start" order></lit-table-column> 151fb726d48Sopenharmony_ci <lit-table-column width="240px" title="p_name" data-index="pName" key="pName" align="flex-start" order></lit-table-column> 152fb726d48Sopenharmony_ci <lit-table-column width="140px" title="max duration" data-index="maxDurationStr" key="maxDurationStr" align="flex-start" order></lit-table-column> 153fb726d48Sopenharmony_ci <lit-table-column width="200px" title="timestamp" data-index="timestamp" key="timestamp" align="flex-start" order> 154fb726d48Sopenharmony_ci <template> 155fb726d48Sopenharmony_ci <div onclick="{ 156fb726d48Sopenharmony_ci window.publish(window.SmartEvent.UI.SliceMark,this.parentElement.parentElement.data) 157fb726d48Sopenharmony_ci }">{{timestamp}}</div> 158fb726d48Sopenharmony_ci </template> 159fb726d48Sopenharmony_ci </lit-table-column> 160fb726d48Sopenharmony_ci <lit-table-column width="140px" title="cpu" data-index="cpu" key="cpu" align="flex-start" order></lit-table-column> 161fb726d48Sopenharmony_ci </lit-table> 162fb726d48Sopenharmony_ci </table-no-data> 163fb726d48Sopenharmony_ci </div> 164fb726d48Sopenharmony_ci <div style="height: 10px"></div> 165fb726d48Sopenharmony_ci `; 166fb726d48Sopenharmony_ci } 167fb726d48Sopenharmony_ci} 168