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 { LitTable } from '../../../base-ui/table/lit-table'; 20fb726d48Sopenharmony_ciimport { LitProgressBar } from '../../../base-ui/progress-bar/LitProgressBar'; 21fb726d48Sopenharmony_ciimport '../../../base-ui/progress-bar/LitProgressBar'; 22fb726d48Sopenharmony_ciimport { getDataNo } from './utils/Utils'; 23fb726d48Sopenharmony_ciimport './TableNoData'; 24fb726d48Sopenharmony_ciimport { TableNoData } from './TableNoData'; 25fb726d48Sopenharmony_ciimport { TabCpuDetailsThreadsHtml } from './TabCpuDetailsThreads.html'; 26fb726d48Sopenharmony_ci 27fb726d48Sopenharmony_ci@element('tab-cpu-details-threads') 28fb726d48Sopenharmony_ciexport class TabCpuDetailsThreads extends BaseElement { 29fb726d48Sopenharmony_ci private tableNoData: TableNoData | null | undefined; 30fb726d48Sopenharmony_ci private cpuDetailsThreadUsageTbl: LitTable | null | undefined; 31fb726d48Sopenharmony_ci private progress: LitProgressBar | null | undefined; 32fb726d48Sopenharmony_ci private cpuDetailsThreadPie: LitChartPie | null | undefined; 33fb726d48Sopenharmony_ci private data: Array<unknown> = []; 34fb726d48Sopenharmony_ci private cpuDetailsThreadSortColumn: string = ''; 35fb726d48Sopenharmony_ci private sortType: number = 0; 36fb726d48Sopenharmony_ci 37fb726d48Sopenharmony_ci initElements(): void { 38fb726d48Sopenharmony_ci this.tableNoData = this.shadowRoot!.querySelector<TableNoData>('#table-no-data'); 39fb726d48Sopenharmony_ci this.progress = this.shadowRoot!.querySelector<LitProgressBar>('#loading'); 40fb726d48Sopenharmony_ci this.cpuDetailsThreadPie = this.shadowRoot!.querySelector<LitChartPie>('#cpu-thread-chart-pie'); 41fb726d48Sopenharmony_ci this.cpuDetailsThreadUsageTbl = this.shadowRoot!.querySelector<LitTable>('#tb-cpu-usage'); 42fb726d48Sopenharmony_ci 43fb726d48Sopenharmony_ci this.shadowRoot!.querySelector<HTMLDivElement>('.cpu-thread-go-back')!.onclick = (e): void => { 44fb726d48Sopenharmony_ci if (!this.progress!.loading) { 45fb726d48Sopenharmony_ci this.parentNode!.querySelector<HTMLDivElement>('.d-box')!.style.display = 'flex'; 46fb726d48Sopenharmony_ci this.setShow = false; 47fb726d48Sopenharmony_ci } 48fb726d48Sopenharmony_ci }; 49fb726d48Sopenharmony_ci 50fb726d48Sopenharmony_ci this.cpuDetailsThreadUsageTbl!.addEventListener('row-click', (evt: unknown): void => { 51fb726d48Sopenharmony_ci // @ts-ignore 52fb726d48Sopenharmony_ci let data = evt.detail.data; 53fb726d48Sopenharmony_ci data.isSelected = true; 54fb726d48Sopenharmony_ci // @ts-ignore 55fb726d48Sopenharmony_ci if ((evt.detail as unknown).callBack) { 56fb726d48Sopenharmony_ci // @ts-ignore 57fb726d48Sopenharmony_ci (evt.detail as unknown).callBack(true); 58fb726d48Sopenharmony_ci } 59fb726d48Sopenharmony_ci }); 60fb726d48Sopenharmony_ci 61fb726d48Sopenharmony_ci this.cpuDetailsThreadUsageTbl!.addEventListener('column-click', (evt: unknown): void => { 62fb726d48Sopenharmony_ci //@ts-ignore 63fb726d48Sopenharmony_ci this.cpuDetailsThreadSortColumn = evt.detail.key; //@ts-ignore 64fb726d48Sopenharmony_ci this.sortType = evt.detail.sort; 65fb726d48Sopenharmony_ci // @ts-ignore 66fb726d48Sopenharmony_ci this.sortByColumn(evt.detail); 67fb726d48Sopenharmony_ci }); 68fb726d48Sopenharmony_ci this.cpuDetailsThreadUsageTbl!.addEventListener('row-hover', (evt: unknown): void => { 69fb726d48Sopenharmony_ci //@ts-ignore 70fb726d48Sopenharmony_ci if (evt.detail.data) { 71fb726d48Sopenharmony_ci //@ts-ignore 72fb726d48Sopenharmony_ci let data = evt.detail.data; 73fb726d48Sopenharmony_ci data.isHover = true; //@ts-ignore 74fb726d48Sopenharmony_ci if ((evt.detail as unknown).callBack) { 75fb726d48Sopenharmony_ci //@ts-ignore 76fb726d48Sopenharmony_ci (evt.detail as unknown).callBack(true); 77fb726d48Sopenharmony_ci } 78fb726d48Sopenharmony_ci } 79fb726d48Sopenharmony_ci this.cpuDetailsThreadPie?.showHover(); 80fb726d48Sopenharmony_ci }); 81fb726d48Sopenharmony_ci } 82fb726d48Sopenharmony_ci 83fb726d48Sopenharmony_ci init(cpu: number, it: unknown): void { 84fb726d48Sopenharmony_ci this.shadowRoot!.querySelector<HTMLDivElement>('.cpu-thread-subheading')!.textContent = 85fb726d48Sopenharmony_ci //@ts-ignore 86fb726d48Sopenharmony_ci `Threads in Freq ${it.value}`; 87fb726d48Sopenharmony_ci this.progress!.loading = true; 88fb726d48Sopenharmony_ci procedurePool.submitWithName( 89fb726d48Sopenharmony_ci 'logic0', 90fb726d48Sopenharmony_ci 'scheduling-CPU Frequency Thread', //@ts-ignore 91fb726d48Sopenharmony_ci { cpu: cpu, freq: (it as unknown).value }, 92fb726d48Sopenharmony_ci undefined, 93fb726d48Sopenharmony_ci (res: unknown): void => { 94fb726d48Sopenharmony_ci this.progress!.loading = false; 95fb726d48Sopenharmony_ci this.queryPieChartDataByType(res); 96fb726d48Sopenharmony_ci } 97fb726d48Sopenharmony_ci ); 98fb726d48Sopenharmony_ci } 99fb726d48Sopenharmony_ci 100fb726d48Sopenharmony_ci set setShow(v: boolean) { 101fb726d48Sopenharmony_ci if (v) { 102fb726d48Sopenharmony_ci this.style.display = 'flex'; 103fb726d48Sopenharmony_ci } else { 104fb726d48Sopenharmony_ci this.clearData(); 105fb726d48Sopenharmony_ci this.style.display = 'none'; 106fb726d48Sopenharmony_ci } 107fb726d48Sopenharmony_ci } 108fb726d48Sopenharmony_ci 109fb726d48Sopenharmony_ci queryPieChartDataByType(res: unknown): void { 110fb726d48Sopenharmony_ci //@ts-ignore 111fb726d48Sopenharmony_ci this.data = res || []; 112fb726d48Sopenharmony_ci this.data = getDataNo(this.data); 113fb726d48Sopenharmony_ci this.tableNoData!.noData = this.data.length === 0; 114fb726d48Sopenharmony_ci this.noData(this.data.length === 0); 115fb726d48Sopenharmony_ci this.cpuDetailsThreadPie!.config = { 116fb726d48Sopenharmony_ci appendPadding: 0, 117fb726d48Sopenharmony_ci data: this.data, 118fb726d48Sopenharmony_ci angleField: 'dur', 119fb726d48Sopenharmony_ci colorField: 'tName', 120fb726d48Sopenharmony_ci radius: 1, 121fb726d48Sopenharmony_ci label: { 122fb726d48Sopenharmony_ci type: 'outer', 123fb726d48Sopenharmony_ci }, 124fb726d48Sopenharmony_ci tip: (obj): string => { 125fb726d48Sopenharmony_ci return `<div> 126fb726d48Sopenharmony_ci <div>t_name:${ 127fb726d48Sopenharmony_ci // @ts-ignore 128fb726d48Sopenharmony_ci obj.obj.tName 129fb726d48Sopenharmony_ci }</div> 130fb726d48Sopenharmony_ci <div>tid:${ 131fb726d48Sopenharmony_ci // @ts-ignore 132fb726d48Sopenharmony_ci obj.obj.tid 133fb726d48Sopenharmony_ci }</div> 134fb726d48Sopenharmony_ci <div>p_name:${ 135fb726d48Sopenharmony_ci // @ts-ignore 136fb726d48Sopenharmony_ci obj.obj.pName 137fb726d48Sopenharmony_ci }</div> 138fb726d48Sopenharmony_ci <div>p_pid:${ 139fb726d48Sopenharmony_ci // @ts-ignore 140fb726d48Sopenharmony_ci obj.obj.pid 141fb726d48Sopenharmony_ci }</div> 142fb726d48Sopenharmony_ci <div>duration:${ 143fb726d48Sopenharmony_ci // @ts-ignore 144fb726d48Sopenharmony_ci obj.obj.durStr 145fb726d48Sopenharmony_ci }</div> 146fb726d48Sopenharmony_ci <div>ratio:${ 147fb726d48Sopenharmony_ci // @ts-ignore 148fb726d48Sopenharmony_ci obj.obj.ratio 149fb726d48Sopenharmony_ci }%</div> 150fb726d48Sopenharmony_ci </div> 151fb726d48Sopenharmony_ci `; 152fb726d48Sopenharmony_ci }, 153fb726d48Sopenharmony_ci hoverHandler: (data): void => { 154fb726d48Sopenharmony_ci if (data) { 155fb726d48Sopenharmony_ci this.cpuDetailsThreadUsageTbl!.setCurrentHover(data); 156fb726d48Sopenharmony_ci } else { 157fb726d48Sopenharmony_ci this.cpuDetailsThreadUsageTbl!.mouseOut(); 158fb726d48Sopenharmony_ci } 159fb726d48Sopenharmony_ci }, 160fb726d48Sopenharmony_ci interactions: [ 161fb726d48Sopenharmony_ci { 162fb726d48Sopenharmony_ci type: 'element-active', 163fb726d48Sopenharmony_ci }, 164fb726d48Sopenharmony_ci ], 165fb726d48Sopenharmony_ci }; 166fb726d48Sopenharmony_ci if (this.cpuDetailsThreadSortColumn !== '') { 167fb726d48Sopenharmony_ci this.sortByColumn({ key: this.cpuDetailsThreadSortColumn, sort: this.sortType }); 168fb726d48Sopenharmony_ci } else { 169fb726d48Sopenharmony_ci this.cpuDetailsThreadUsageTbl!.recycleDataSource = this.data; 170fb726d48Sopenharmony_ci } 171fb726d48Sopenharmony_ci this.cpuDetailsThreadUsageTbl?.reMeauseHeight(); 172fb726d48Sopenharmony_ci } 173fb726d48Sopenharmony_ci 174fb726d48Sopenharmony_ci noData(value: boolean): void { 175fb726d48Sopenharmony_ci this.shadowRoot!.querySelector<HTMLDivElement>('.cpu-thread-chart-box')!.style.display = value ? 'none' : 'block'; 176fb726d48Sopenharmony_ci this.shadowRoot!.querySelector<HTMLDivElement>('.cpu-thread-table-box')!.style.width = value ? '100%' : '60%'; 177fb726d48Sopenharmony_ci } 178fb726d48Sopenharmony_ci 179fb726d48Sopenharmony_ci clearData(): void { 180fb726d48Sopenharmony_ci this.cpuDetailsThreadPie!.dataSource = []; 181fb726d48Sopenharmony_ci this.cpuDetailsThreadUsageTbl!.recycleDataSource = []; 182fb726d48Sopenharmony_ci this.noData(false); 183fb726d48Sopenharmony_ci } 184fb726d48Sopenharmony_ci 185fb726d48Sopenharmony_ci sortByColumn(detail: unknown): void { 186fb726d48Sopenharmony_ci // @ts-ignore 187fb726d48Sopenharmony_ci function compare(cpuDetailsThreadProperty, sort, type) { 188fb726d48Sopenharmony_ci return function (a: unknown, b: unknown) { 189fb726d48Sopenharmony_ci if (type === 'number') { 190fb726d48Sopenharmony_ci // @ts-ignore 191fb726d48Sopenharmony_ci return sort === 2 192fb726d48Sopenharmony_ci // @ts-ignore 193fb726d48Sopenharmony_ci ? parseFloat(b[cpuDetailsThreadProperty]) - parseFloat(a[cpuDetailsThreadProperty]) 194fb726d48Sopenharmony_ci // @ts-ignore 195fb726d48Sopenharmony_ci : parseFloat(a[cpuDetailsThreadProperty]) - parseFloat(b[cpuDetailsThreadProperty]); 196fb726d48Sopenharmony_ci } else { 197fb726d48Sopenharmony_ci if (sort === 2) { 198fb726d48Sopenharmony_ci // @ts-ignore 199fb726d48Sopenharmony_ci return b[cpuDetailsThreadProperty].toString().localeCompare(a[cpuDetailsThreadProperty].toString()); 200fb726d48Sopenharmony_ci } else { 201fb726d48Sopenharmony_ci // @ts-ignore 202fb726d48Sopenharmony_ci return a[cpuDetailsThreadProperty].toString().localeCompare(b[cpuDetailsThreadProperty].toString()); 203fb726d48Sopenharmony_ci } 204fb726d48Sopenharmony_ci } 205fb726d48Sopenharmony_ci }; 206fb726d48Sopenharmony_ci } 207fb726d48Sopenharmony_ci 208fb726d48Sopenharmony_ci // @ts-ignore 209fb726d48Sopenharmony_ci if (detail.key === 'durStr') { 210fb726d48Sopenharmony_ci // @ts-ignore 211fb726d48Sopenharmony_ci detail.key = 'dur'; 212fb726d48Sopenharmony_ci // @ts-ignore 213fb726d48Sopenharmony_ci this.data.sort(compare(detail.key, detail.sort, 'number')); 214fb726d48Sopenharmony_ci } else if ( 215fb726d48Sopenharmony_ci // @ts-ignore 216fb726d48Sopenharmony_ci detail.key === 'value' || 217fb726d48Sopenharmony_ci // @ts-ignore 218fb726d48Sopenharmony_ci detail.key === 'ratio' || 219fb726d48Sopenharmony_ci // @ts-ignore 220fb726d48Sopenharmony_ci detail.key === 'index' || 221fb726d48Sopenharmony_ci // @ts-ignore 222fb726d48Sopenharmony_ci detail.key === 'tid' || 223fb726d48Sopenharmony_ci // @ts-ignore 224fb726d48Sopenharmony_ci detail.key === 'pid' 225fb726d48Sopenharmony_ci ) { 226fb726d48Sopenharmony_ci // @ts-ignore 227fb726d48Sopenharmony_ci this.data.sort(compare(detail.key, detail.sort, 'number')); 228fb726d48Sopenharmony_ci } else { 229fb726d48Sopenharmony_ci // @ts-ignore 230fb726d48Sopenharmony_ci this.data.sort(compare(detail.key, detail.sort, 'string')); 231fb726d48Sopenharmony_ci } 232fb726d48Sopenharmony_ci this.cpuDetailsThreadUsageTbl!.recycleDataSource = this.data; 233fb726d48Sopenharmony_ci } 234fb726d48Sopenharmony_ci 235fb726d48Sopenharmony_ci initHtml(): string { 236fb726d48Sopenharmony_ci return TabCpuDetailsThreadsHtml; 237fb726d48Sopenharmony_ci } 238fb726d48Sopenharmony_ci} 239