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 { LitChartPie } from '../../../base-ui/chart/pie/LitChartPie'; 18fb726d48Sopenharmony_ciimport { procedurePool } from '../../database/Procedure'; 19fb726d48Sopenharmony_ciimport { SpSchedulingAnalysis } from './SpSchedulingAnalysis'; 20fb726d48Sopenharmony_ciimport { info } from '../../../log/Log'; 21fb726d48Sopenharmony_ciimport { LitTable } from '../../../base-ui/table/lit-table'; 22fb726d48Sopenharmony_ciimport '../../../base-ui/progress-bar/LitProgressBar'; 23fb726d48Sopenharmony_ciimport { LitProgressBar } from '../../../base-ui/progress-bar/LitProgressBar'; 24fb726d48Sopenharmony_ciimport { getDataNo } from './utils/Utils'; 25fb726d48Sopenharmony_ciimport './TableNoData'; 26fb726d48Sopenharmony_ciimport { TableNoData } from './TableNoData'; 27fb726d48Sopenharmony_ciimport { pieChartColors } from '../../../base-ui/chart/pie/LitChartPieData'; 28fb726d48Sopenharmony_ciimport { TabCpuDetailsIdleHtml } from './TabCpuDetailsIdle.html'; 29fb726d48Sopenharmony_ci 30fb726d48Sopenharmony_ci@element('tab-cpu-details-idle') 31fb726d48Sopenharmony_ciexport class TabCpuDetailsIdle extends BaseElement { 32fb726d48Sopenharmony_ci private tableNoData: TableNoData | null | undefined; 33fb726d48Sopenharmony_ci private cpuDetailsLdlUsageTbl: LitTable | null | undefined; 34fb726d48Sopenharmony_ci private cpuDetailsLdlProgress: LitProgressBar | null | undefined; 35fb726d48Sopenharmony_ci traceChange: boolean = false; 36fb726d48Sopenharmony_ci private cpuDetailsLdlPie: LitChartPie | null | undefined; 37fb726d48Sopenharmony_ci private cpuDetailsLdlData: Array<unknown> = []; 38fb726d48Sopenharmony_ci private cpuDetailsLdlSortColumn: string = ''; 39fb726d48Sopenharmony_ci private sortType: number = 0; 40fb726d48Sopenharmony_ci 41fb726d48Sopenharmony_ci initElements(): void { 42fb726d48Sopenharmony_ci this.tableNoData = this.shadowRoot!.querySelector<TableNoData>('#table-no-data'); 43fb726d48Sopenharmony_ci this.cpuDetailsLdlProgress = this.shadowRoot!.querySelector<LitProgressBar>('#loading'); 44fb726d48Sopenharmony_ci this.cpuDetailsLdlPie = this.shadowRoot!.querySelector<LitChartPie>('#cpu_idle_chart-pie'); 45fb726d48Sopenharmony_ci this.cpuDetailsLdlUsageTbl = this.shadowRoot!.querySelector<LitTable>('#idle-tb-cpu-usage'); 46fb726d48Sopenharmony_ci 47fb726d48Sopenharmony_ci this.cpuDetailsLdlUsageTbl!.addEventListener('row-click', (evt: unknown): void => { 48fb726d48Sopenharmony_ci // @ts-ignore 49fb726d48Sopenharmony_ci let data = evt.detail.data; 50fb726d48Sopenharmony_ci data.isSelected = true; 51fb726d48Sopenharmony_ci // @ts-ignore 52fb726d48Sopenharmony_ci if ((evt.detail as unknown).callBack) { 53fb726d48Sopenharmony_ci // @ts-ignore 54fb726d48Sopenharmony_ci (evt.detail as unknown).callBack(true); 55fb726d48Sopenharmony_ci } 56fb726d48Sopenharmony_ci }); 57fb726d48Sopenharmony_ci 58fb726d48Sopenharmony_ci this.cpuDetailsLdlUsageTbl!.addEventListener('column-click', (evt: unknown): void => { 59fb726d48Sopenharmony_ci //@ts-ignore 60fb726d48Sopenharmony_ci this.cpuDetailsLdlSortColumn = evt.detail.key; //@ts-ignore 61fb726d48Sopenharmony_ci this.sortType = evt.detail.sort; 62fb726d48Sopenharmony_ci // @ts-ignore 63fb726d48Sopenharmony_ci this.sortByColumn(evt.detail); 64fb726d48Sopenharmony_ci }); 65fb726d48Sopenharmony_ci this.cpuDetailsLdlUsageTbl!.addEventListener('row-hover', (evt: unknown): void => { 66fb726d48Sopenharmony_ci //@ts-ignore 67fb726d48Sopenharmony_ci if (evt.detail.data) { 68fb726d48Sopenharmony_ci //@ts-ignore 69fb726d48Sopenharmony_ci let data = evt.detail.data; 70fb726d48Sopenharmony_ci data.isHover = true; //@ts-ignore 71fb726d48Sopenharmony_ci if ((evt.detail as unknown).callBack) { 72fb726d48Sopenharmony_ci //@ts-ignore 73fb726d48Sopenharmony_ci (evt.detail as unknown).callBack(true); 74fb726d48Sopenharmony_ci } 75fb726d48Sopenharmony_ci } 76fb726d48Sopenharmony_ci this.cpuDetailsLdlPie?.showHover(); 77fb726d48Sopenharmony_ci }); 78fb726d48Sopenharmony_ci } 79fb726d48Sopenharmony_ci 80fb726d48Sopenharmony_ci init(cpu: number): void { 81fb726d48Sopenharmony_ci this.queryPieChartDataByType('CPU Idle', cpu); 82fb726d48Sopenharmony_ci } 83fb726d48Sopenharmony_ci 84fb726d48Sopenharmony_ci queryPieChartDataByType(type: string, cpu: number): void { 85fb726d48Sopenharmony_ci if (this.traceChange) { 86fb726d48Sopenharmony_ci return; 87fb726d48Sopenharmony_ci } 88fb726d48Sopenharmony_ci this.cpuDetailsLdlProgress!.loading = true; 89fb726d48Sopenharmony_ci this.queryLoginWorker(`scheduling-${type}`, 'query Cpu Frequency Analysis Time:', (res): void => { 90fb726d48Sopenharmony_ci this.traceChange = true; 91fb726d48Sopenharmony_ci this.cpuDetailsLdlProgress!.loading = false; //@ts-ignore 92fb726d48Sopenharmony_ci this.cpuDetailsLdlData = res.get(cpu) || []; 93fb726d48Sopenharmony_ci this.cpuDetailsLdlData = getDataNo(this.cpuDetailsLdlData); 94fb726d48Sopenharmony_ci this.tableNoData!.noData = this.cpuDetailsLdlData.length === 0; 95fb726d48Sopenharmony_ci this.noData(this.cpuDetailsLdlData.length === 0); 96fb726d48Sopenharmony_ci this.setLdlPieConfig(type); 97fb726d48Sopenharmony_ci if (this.cpuDetailsLdlSortColumn !== '') { 98fb726d48Sopenharmony_ci this.sortByColumn({ 99fb726d48Sopenharmony_ci key: this.cpuDetailsLdlSortColumn, 100fb726d48Sopenharmony_ci sort: this.sortType, 101fb726d48Sopenharmony_ci }); 102fb726d48Sopenharmony_ci } else { 103fb726d48Sopenharmony_ci this.cpuDetailsLdlUsageTbl!.recycleDataSource = this.cpuDetailsLdlData; 104fb726d48Sopenharmony_ci } 105fb726d48Sopenharmony_ci this.cpuDetailsLdlUsageTbl?.reMeauseHeight(); 106fb726d48Sopenharmony_ci }); 107fb726d48Sopenharmony_ci } 108fb726d48Sopenharmony_ci 109fb726d48Sopenharmony_ci private setLdlPieConfig(type: string): void { 110fb726d48Sopenharmony_ci this.cpuDetailsLdlPie!.config = { 111fb726d48Sopenharmony_ci appendPadding: 0, 112fb726d48Sopenharmony_ci data: this.cpuDetailsLdlData, 113fb726d48Sopenharmony_ci angleField: 'sum', 114fb726d48Sopenharmony_ci colorField: 'value', 115fb726d48Sopenharmony_ci radius: 1, 116fb726d48Sopenharmony_ci label: { 117fb726d48Sopenharmony_ci type: 'outer', 118fb726d48Sopenharmony_ci color: 119fb726d48Sopenharmony_ci type !== 'CPU Idle' 120fb726d48Sopenharmony_ci ? undefined 121fb726d48Sopenharmony_ci : (it): string => { 122fb726d48Sopenharmony_ci //@ts-ignore 123fb726d48Sopenharmony_ci return pieChartColors[(it as unknown).value]; 124fb726d48Sopenharmony_ci }, 125fb726d48Sopenharmony_ci }, 126fb726d48Sopenharmony_ci hoverHandler: (data): void => { 127fb726d48Sopenharmony_ci if (data) { 128fb726d48Sopenharmony_ci this.cpuDetailsLdlUsageTbl!.setCurrentHover(data); 129fb726d48Sopenharmony_ci } else { 130fb726d48Sopenharmony_ci this.cpuDetailsLdlUsageTbl!.mouseOut(); 131fb726d48Sopenharmony_ci } 132fb726d48Sopenharmony_ci }, 133fb726d48Sopenharmony_ci tip: (idleObj): string => { 134fb726d48Sopenharmony_ci return `<div> 135fb726d48Sopenharmony_ci <div>idle:${ 136fb726d48Sopenharmony_ci // @ts-ignore 137fb726d48Sopenharmony_ci idleObj.obj.value 138fb726d48Sopenharmony_ci }</div> 139fb726d48Sopenharmony_ci <div>min:${ 140fb726d48Sopenharmony_ci // @ts-ignore 141fb726d48Sopenharmony_ci idleObj.obj.min 142fb726d48Sopenharmony_ci }</div> 143fb726d48Sopenharmony_ci <div>max:${ 144fb726d48Sopenharmony_ci // @ts-ignore 145fb726d48Sopenharmony_ci idleObj.obj.max 146fb726d48Sopenharmony_ci }</div> 147fb726d48Sopenharmony_ci <div>average:${ 148fb726d48Sopenharmony_ci // @ts-ignore 149fb726d48Sopenharmony_ci idleObj.obj.avg 150fb726d48Sopenharmony_ci }</div> 151fb726d48Sopenharmony_ci <div>duration:${ 152fb726d48Sopenharmony_ci // @ts-ignore 153fb726d48Sopenharmony_ci idleObj.obj.sumTimeStr 154fb726d48Sopenharmony_ci }</div> 155fb726d48Sopenharmony_ci <div>ratio:${ 156fb726d48Sopenharmony_ci // @ts-ignore 157fb726d48Sopenharmony_ci idleObj.obj.ratio 158fb726d48Sopenharmony_ci }%</div> 159fb726d48Sopenharmony_ci </div> 160fb726d48Sopenharmony_ci `; 161fb726d48Sopenharmony_ci }, 162fb726d48Sopenharmony_ci interactions: [ 163fb726d48Sopenharmony_ci { 164fb726d48Sopenharmony_ci type: 'element-active', 165fb726d48Sopenharmony_ci }, 166fb726d48Sopenharmony_ci ], 167fb726d48Sopenharmony_ci }; 168fb726d48Sopenharmony_ci } 169fb726d48Sopenharmony_ci 170fb726d48Sopenharmony_ci noData(value: boolean): void { 171fb726d48Sopenharmony_ci this.shadowRoot!.querySelector<HTMLDivElement>('.idle-chart-box')!.style.display = value ? 'none' : 'block'; 172fb726d48Sopenharmony_ci this.shadowRoot!.querySelector<HTMLDivElement>('.cpu_idle_table-box')!.style.width = value ? '100%' : '60%'; 173fb726d48Sopenharmony_ci } 174fb726d48Sopenharmony_ci 175fb726d48Sopenharmony_ci clearData(): void { 176fb726d48Sopenharmony_ci this.traceChange = false; 177fb726d48Sopenharmony_ci this.cpuDetailsLdlPie!.dataSource = []; 178fb726d48Sopenharmony_ci this.cpuDetailsLdlUsageTbl!.recycleDataSource = []; 179fb726d48Sopenharmony_ci this.noData(false); 180fb726d48Sopenharmony_ci } 181fb726d48Sopenharmony_ci 182fb726d48Sopenharmony_ci queryLoginWorker(idleType: string, log: string, handler: (res: unknown) => void): void { 183fb726d48Sopenharmony_ci let cpuDetailsldleTime = new Date().getTime(); 184fb726d48Sopenharmony_ci procedurePool.submitWithName( 185fb726d48Sopenharmony_ci 'logic0', 186fb726d48Sopenharmony_ci idleType, 187fb726d48Sopenharmony_ci { 188fb726d48Sopenharmony_ci endTs: SpSchedulingAnalysis.endTs, 189fb726d48Sopenharmony_ci total: SpSchedulingAnalysis.totalDur, 190fb726d48Sopenharmony_ci }, 191fb726d48Sopenharmony_ci undefined, 192fb726d48Sopenharmony_ci handler 193fb726d48Sopenharmony_ci ); 194fb726d48Sopenharmony_ci let durTime = new Date().getTime() - cpuDetailsldleTime; 195fb726d48Sopenharmony_ci info(log, durTime); 196fb726d48Sopenharmony_ci } 197fb726d48Sopenharmony_ci 198fb726d48Sopenharmony_ci sortByColumn(detail: unknown): void { 199fb726d48Sopenharmony_ci // @ts-ignore 200fb726d48Sopenharmony_ci function compare(cpuDetailsLdlProperty, sort, type) { 201fb726d48Sopenharmony_ci return function (a: unknown, b: unknown) { 202fb726d48Sopenharmony_ci if (type === 'number') { 203fb726d48Sopenharmony_ci return sort === 2 204fb726d48Sopenharmony_ci ? // @ts-ignore 205fb726d48Sopenharmony_ci parseFloat(b[cpuDetailsLdlProperty]) - parseFloat(a[cpuDetailsLdlProperty]) 206fb726d48Sopenharmony_ci : //@ts-ignore 207fb726d48Sopenharmony_ci parseFloat(a[cpuDetailsLdlProperty]) - parseFloat(b[cpuDetailsLdlProperty]); 208fb726d48Sopenharmony_ci } else { 209fb726d48Sopenharmony_ci if (sort === 2) { 210fb726d48Sopenharmony_ci //@ts-ignore 211fb726d48Sopenharmony_ci return b[cpuDetailsLdlProperty].toString().localeCompare(a[cpuDetailsLdlProperty].toString()); 212fb726d48Sopenharmony_ci } else { 213fb726d48Sopenharmony_ci //@ts-ignore 214fb726d48Sopenharmony_ci return a[cpuDetailsLdlProperty].toString().localeCompare(b[cpuDetailsLdlProperty].toString()); 215fb726d48Sopenharmony_ci } 216fb726d48Sopenharmony_ci } 217fb726d48Sopenharmony_ci }; 218fb726d48Sopenharmony_ci } 219fb726d48Sopenharmony_ci 220fb726d48Sopenharmony_ci //@ts-ignore 221fb726d48Sopenharmony_ci if (detail.key === 'min') { 222fb726d48Sopenharmony_ci //@ts-ignore 223fb726d48Sopenharmony_ci detail.key = 'minValue'; //@ts-ignore 224fb726d48Sopenharmony_ci this.cpuDetailsLdlData.sort(compare(detail.key, detail.sort, 'number')); //@ts-ignore 225fb726d48Sopenharmony_ci } else if (detail.key === 'max') { 226fb726d48Sopenharmony_ci //@ts-ignore 227fb726d48Sopenharmony_ci detail.key = 'maxValue'; //@ts-ignore 228fb726d48Sopenharmony_ci this.cpuDetailsLdlData.sort(compare(detail.key, detail.sort, 'number')); //@ts-ignore 229fb726d48Sopenharmony_ci } else if (detail.key === 'avg') { 230fb726d48Sopenharmony_ci //@ts-ignore 231fb726d48Sopenharmony_ci detail.key = 'avgValue'; //@ts-ignore 232fb726d48Sopenharmony_ci this.cpuDetailsLdlData.sort(compare(detail.key, detail.sort, 'number')); //@ts-ignore 233fb726d48Sopenharmony_ci } else if (detail.key === 'sumTimeStr') { 234fb726d48Sopenharmony_ci //@ts-ignore 235fb726d48Sopenharmony_ci detail.key = 'sum'; //@ts-ignore 236fb726d48Sopenharmony_ci this.cpuDetailsLdlData.sort(compare(detail.key, detail.sort, 'number')); //@ts-ignore 237fb726d48Sopenharmony_ci } else if (detail.key === 'value' || detail.key === 'ratio' || detail.key === 'index') { 238fb726d48Sopenharmony_ci //@ts-ignore 239fb726d48Sopenharmony_ci this.cpuDetailsLdlData.sort(compare(detail.key, detail.sort, 'number')); 240fb726d48Sopenharmony_ci } else { 241fb726d48Sopenharmony_ci //@ts-ignore 242fb726d48Sopenharmony_ci this.cpuDetailsLdlData.sort(compare(detail.key, detail.sort, 'string')); 243fb726d48Sopenharmony_ci } 244fb726d48Sopenharmony_ci this.cpuDetailsLdlUsageTbl!.recycleDataSource = this.cpuDetailsLdlData; 245fb726d48Sopenharmony_ci } 246fb726d48Sopenharmony_ci 247fb726d48Sopenharmony_ci initHtml(): string { 248fb726d48Sopenharmony_ci return TabCpuDetailsIdleHtml; 249fb726d48Sopenharmony_ci } 250fb726d48Sopenharmony_ci} 251