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 { LitChartPie } from '../../../base-ui/chart/pie/LitChartPie'; 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-process-switch-count') 27fb726d48Sopenharmony_ciexport class Top20ProcessSwitchCount extends BaseElement { 28fb726d48Sopenharmony_ci traceChange: boolean = false; 29fb726d48Sopenharmony_ci private processSwitchCountTbl: LitTable | null | undefined; 30fb726d48Sopenharmony_ci private processSwitchCountPie: LitChartPie | null | undefined; 31fb726d48Sopenharmony_ci private processSwitchCountProgress: LitProgressBar | null | undefined; 32fb726d48Sopenharmony_ci private nodata: TableNoData | null | undefined; 33fb726d48Sopenharmony_ci private processSwitchCountData: Array<unknown> = []; 34fb726d48Sopenharmony_ci 35fb726d48Sopenharmony_ci initElements(): void { 36fb726d48Sopenharmony_ci this.nodata = this.shadowRoot!.querySelector<TableNoData>('#nodata'); 37fb726d48Sopenharmony_ci this.processSwitchCountProgress = this.shadowRoot!.querySelector<LitProgressBar>('#loading'); 38fb726d48Sopenharmony_ci this.processSwitchCountTbl = this.shadowRoot!.querySelector<LitTable>('#tb-process-switch-count'); 39fb726d48Sopenharmony_ci this.processSwitchCountPie = this.shadowRoot!.querySelector<LitChartPie>('#pie'); 40fb726d48Sopenharmony_ci 41fb726d48Sopenharmony_ci this.processSwitchCountTbl!.addEventListener('row-click', (evt: unknown): void => { 42fb726d48Sopenharmony_ci //@ts-ignore 43fb726d48Sopenharmony_ci let data = evt.detail.data; 44fb726d48Sopenharmony_ci data.isSelected = true; 45fb726d48Sopenharmony_ci // @ts-ignore 46fb726d48Sopenharmony_ci if ((evt.detail as unknown).callBack) { 47fb726d48Sopenharmony_ci // @ts-ignore 48fb726d48Sopenharmony_ci (evt.detail as unknown).callBack(true); 49fb726d48Sopenharmony_ci } 50fb726d48Sopenharmony_ci }); 51fb726d48Sopenharmony_ci 52fb726d48Sopenharmony_ci this.processSwitchCountTbl!.addEventListener('column-click', (evt): void => { 53fb726d48Sopenharmony_ci // @ts-ignore 54fb726d48Sopenharmony_ci this.sortByColumn(evt.detail); 55fb726d48Sopenharmony_ci }); 56fb726d48Sopenharmony_ci this.processSwitchCountTbl!.addEventListener('row-hover', (evt: unknown): void => { 57fb726d48Sopenharmony_ci //@ts-ignore 58fb726d48Sopenharmony_ci if (evt.detail.data) { 59fb726d48Sopenharmony_ci //@ts-ignore 60fb726d48Sopenharmony_ci let data = evt.detail.data; 61fb726d48Sopenharmony_ci data.isHover = true; //@ts-ignore 62fb726d48Sopenharmony_ci if ((evt.detail as unknown).callBack) { 63fb726d48Sopenharmony_ci //@ts-ignore 64fb726d48Sopenharmony_ci (evt.detail as unknown).callBack(true); 65fb726d48Sopenharmony_ci } 66fb726d48Sopenharmony_ci } 67fb726d48Sopenharmony_ci this.processSwitchCountPie?.showHover(); 68fb726d48Sopenharmony_ci }); 69fb726d48Sopenharmony_ci } 70fb726d48Sopenharmony_ci 71fb726d48Sopenharmony_ci init(): void { 72fb726d48Sopenharmony_ci if (!this.traceChange) { 73fb726d48Sopenharmony_ci if (this.processSwitchCountTbl!.recycleDataSource.length > 0) { 74fb726d48Sopenharmony_ci this.processSwitchCountTbl?.reMeauseHeight(); 75fb726d48Sopenharmony_ci } 76fb726d48Sopenharmony_ci return; 77fb726d48Sopenharmony_ci } 78fb726d48Sopenharmony_ci this.traceChange = false; 79fb726d48Sopenharmony_ci this.processSwitchCountProgress!.loading = true; 80fb726d48Sopenharmony_ci this.queryLogicWorker( 81fb726d48Sopenharmony_ci 'scheduling-Process SwitchCount', 82fb726d48Sopenharmony_ci 'query Process Switch Count Analysis Time:', 83fb726d48Sopenharmony_ci (res): void => { 84fb726d48Sopenharmony_ci //@ts-ignore 85fb726d48Sopenharmony_ci this.nodata!.noData = res === undefined || res.length === 0; //@ts-ignore 86fb726d48Sopenharmony_ci this.processSwitchCountTbl!.recycleDataSource = res; //@ts-ignore 87fb726d48Sopenharmony_ci this.processSwitchCountData = res; 88fb726d48Sopenharmony_ci this.processSwitchCountTbl?.reMeauseHeight(); 89fb726d48Sopenharmony_ci this.processSwitchCountPie!.config = { 90fb726d48Sopenharmony_ci appendPadding: 10, //@ts-ignore 91fb726d48Sopenharmony_ci data: res, 92fb726d48Sopenharmony_ci angleField: 'switchCount', 93fb726d48Sopenharmony_ci colorField: 'pid', 94fb726d48Sopenharmony_ci radius: 0.8, 95fb726d48Sopenharmony_ci tip: (obj): string => { 96fb726d48Sopenharmony_ci return `<div> 97fb726d48Sopenharmony_ci <div>pid:${ 98fb726d48Sopenharmony_ci // @ts-ignore 99fb726d48Sopenharmony_ci obj.obj.tid 100fb726d48Sopenharmony_ci }</div> 101fb726d48Sopenharmony_ci <div>p_name:${ 102fb726d48Sopenharmony_ci // @ts-ignore 103fb726d48Sopenharmony_ci obj.obj.tName 104fb726d48Sopenharmony_ci }</div> 105fb726d48Sopenharmony_ci <div>sched_switch count:${ 106fb726d48Sopenharmony_ci // @ts-ignore 107fb726d48Sopenharmony_ci obj.obj.switchCount 108fb726d48Sopenharmony_ci }</div> 109fb726d48Sopenharmony_ci </div> 110fb726d48Sopenharmony_ci `; 111fb726d48Sopenharmony_ci }, 112fb726d48Sopenharmony_ci label: { 113fb726d48Sopenharmony_ci type: 'outer', 114fb726d48Sopenharmony_ci }, 115fb726d48Sopenharmony_ci hoverHandler: (data): void => { 116fb726d48Sopenharmony_ci if (data) { 117fb726d48Sopenharmony_ci this.processSwitchCountTbl!.setCurrentHover(data); 118fb726d48Sopenharmony_ci } else { 119fb726d48Sopenharmony_ci this.processSwitchCountTbl!.mouseOut(); 120fb726d48Sopenharmony_ci } 121fb726d48Sopenharmony_ci }, 122fb726d48Sopenharmony_ci interactions: [ 123fb726d48Sopenharmony_ci { 124fb726d48Sopenharmony_ci type: 'element-active', 125fb726d48Sopenharmony_ci }, 126fb726d48Sopenharmony_ci ], 127fb726d48Sopenharmony_ci }; 128fb726d48Sopenharmony_ci this.processSwitchCountProgress!.loading = false; 129fb726d48Sopenharmony_ci } 130fb726d48Sopenharmony_ci ); 131fb726d48Sopenharmony_ci } 132fb726d48Sopenharmony_ci 133fb726d48Sopenharmony_ci clearData(): void { 134fb726d48Sopenharmony_ci this.traceChange = true; 135fb726d48Sopenharmony_ci this.processSwitchCountPie!.dataSource = []; 136fb726d48Sopenharmony_ci this.processSwitchCountTbl!.recycleDataSource = []; 137fb726d48Sopenharmony_ci } 138fb726d48Sopenharmony_ci 139fb726d48Sopenharmony_ci queryLogicWorker(option: string, log: string, handler: (res: unknown) => void): void { 140fb726d48Sopenharmony_ci let processSwitchCountTime = new Date().getTime(); 141fb726d48Sopenharmony_ci procedurePool.submitWithName('logic0', option, {}, undefined, handler); 142fb726d48Sopenharmony_ci let durTime = new Date().getTime() - processSwitchCountTime; 143fb726d48Sopenharmony_ci info(log, durTime); 144fb726d48Sopenharmony_ci } 145fb726d48Sopenharmony_ci 146fb726d48Sopenharmony_ci sortByColumn(detail: unknown): void { 147fb726d48Sopenharmony_ci // @ts-ignore 148fb726d48Sopenharmony_ci function compare(processSwitchCountProperty, sort, type) { 149fb726d48Sopenharmony_ci return function (a: unknown, b: unknown) { 150fb726d48Sopenharmony_ci if (type === 'number') { 151fb726d48Sopenharmony_ci return sort === 2 152fb726d48Sopenharmony_ci ? // @ts-ignore 153fb726d48Sopenharmony_ci parseFloat(b[processSwitchCountProperty]) - parseFloat(a[processSwitchCountProperty]) 154fb726d48Sopenharmony_ci : //@ts-ignore 155fb726d48Sopenharmony_ci parseFloat(a[processSwitchCountProperty]) - parseFloat(b[processSwitchCountProperty]); 156fb726d48Sopenharmony_ci } else { 157fb726d48Sopenharmony_ci if (sort === 2) { 158fb726d48Sopenharmony_ci //@ts-ignore 159fb726d48Sopenharmony_ci return b[processSwitchCountProperty].toString().localeCompare(a[processSwitchCountProperty].toString()); 160fb726d48Sopenharmony_ci } else { 161fb726d48Sopenharmony_ci //@ts-ignore 162fb726d48Sopenharmony_ci return a[processSwitchCountProperty].toString().localeCompare(b[processSwitchCountProperty].toString()); 163fb726d48Sopenharmony_ci } 164fb726d48Sopenharmony_ci } 165fb726d48Sopenharmony_ci }; 166fb726d48Sopenharmony_ci } 167fb726d48Sopenharmony_ci 168fb726d48Sopenharmony_ci //@ts-ignore 169fb726d48Sopenharmony_ci if (detail.key === 'NO' || detail.key === 'pid' || detail.key === 'switchCount' || detail.key === 'tid') { 170fb726d48Sopenharmony_ci //@ts-ignore 171fb726d48Sopenharmony_ci this.processSwitchCountData.sort(compare(detail.key, detail.sort, 'number')); 172fb726d48Sopenharmony_ci } else { 173fb726d48Sopenharmony_ci //@ts-ignore 174fb726d48Sopenharmony_ci this.processSwitchCountData.sort(compare(detail.key, detail.sort, 'string')); 175fb726d48Sopenharmony_ci } 176fb726d48Sopenharmony_ci this.processSwitchCountTbl!.recycleDataSource = this.processSwitchCountData; 177fb726d48Sopenharmony_ci } 178fb726d48Sopenharmony_ci 179fb726d48Sopenharmony_ci initHtml(): string { 180fb726d48Sopenharmony_ci return ` 181fb726d48Sopenharmony_ci <style> 182fb726d48Sopenharmony_ci :host { 183fb726d48Sopenharmony_ci width: 100%; 184fb726d48Sopenharmony_ci height: 100%; 185fb726d48Sopenharmony_ci background-color: var(--dark-background5,#F6F6F6); 186fb726d48Sopenharmony_ci } 187fb726d48Sopenharmony_ci .top-process-tb-switch-count{ 188fb726d48Sopenharmony_ci flex: 1; 189fb726d48Sopenharmony_ci overflow: auto ; 190fb726d48Sopenharmony_ci border-radius: 5px; 191fb726d48Sopenharmony_ci border: solid 1px var(--dark-border1,#e0e0e0); 192fb726d48Sopenharmony_ci margin: 15px; 193fb726d48Sopenharmony_ci padding: 5px 15px 194fb726d48Sopenharmony_ci } 195fb726d48Sopenharmony_ci .top-process-pie-chart{ 196fb726d48Sopenharmony_ci display: flex; 197fb726d48Sopenharmony_ci box-sizing: border-box; 198fb726d48Sopenharmony_ci width: 500px; 199fb726d48Sopenharmony_ci height: 500px; 200fb726d48Sopenharmony_ci } 201fb726d48Sopenharmony_ci .top-process-switch-root{ 202fb726d48Sopenharmony_ci display: flex; 203fb726d48Sopenharmony_ci flex-direction: row; 204fb726d48Sopenharmony_ci box-sizing: border-box; 205fb726d48Sopenharmony_ci width: 100%; 206fb726d48Sopenharmony_ci height: 100%; 207fb726d48Sopenharmony_ci } 208fb726d48Sopenharmony_ci </style> 209fb726d48Sopenharmony_ci <lit-progress-bar id="loading" style="height: 1px;width: 100%" loading></lit-progress-bar> 210fb726d48Sopenharmony_ci <table-no-data id="nodata" contentHeight="500px"> 211fb726d48Sopenharmony_ci <div class="top-process-switch-root"> 212fb726d48Sopenharmony_ci <div style="display: flex;flex-direction: column;align-items: center"> 213fb726d48Sopenharmony_ci <div>Statistics By Sched_Switch Count</div> 214fb726d48Sopenharmony_ci <lit-chart-pie id="pie" class="top-process-pie-chart"></lit-chart-pie> 215fb726d48Sopenharmony_ci </div> 216fb726d48Sopenharmony_ci <div class="top-process-tb-switch-count" > 217fb726d48Sopenharmony_ci <lit-table id="tb-process-switch-count" hideDownload style="height: auto"> 218fb726d48Sopenharmony_ci <lit-table-column width="1fr" title="NO" data-index="NO" key="NO" align="flex-start" order></lit-table-column> 219fb726d48Sopenharmony_ci <lit-table-column width="1fr" title="tid" data-index="tid" key="tid" align="flex-start" order></lit-table-column> 220fb726d48Sopenharmony_ci <lit-table-column width="1fr" title="t_name" data-index="tName" key="tName" align="flex-start" order></lit-table-column> 221fb726d48Sopenharmony_ci <lit-table-column width="1fr" title="pid" data-index="pid" key="pid" align="flex-start" order></lit-table-column> 222fb726d48Sopenharmony_ci <lit-table-column width="1fr" title="p_name" data-index="pName" key="pName" align="flex-start" order></lit-table-column> 223fb726d48Sopenharmony_ci <lit-table-column width="1fr" title="sched_switch count" data-index="switchCount" key="switchCount" align="flex-start" order></lit-table-column> 224fb726d48Sopenharmony_ci </lit-table> 225fb726d48Sopenharmony_ci </div> 226fb726d48Sopenharmony_ci </div> 227fb726d48Sopenharmony_ci </table-no-data> 228fb726d48Sopenharmony_ci `; 229fb726d48Sopenharmony_ci } 230fb726d48Sopenharmony_ci} 231