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 { LitChartColumn } from '../../../base-ui/chart/column/LitChartColumn';
19fb726d48Sopenharmony_ciimport '../../../base-ui/chart/column/LitChartColumn';
20fb726d48Sopenharmony_ciimport './CheckCpuSetting';
21fb726d48Sopenharmony_ciimport '../../../base-ui/icon/LitIcon';
22fb726d48Sopenharmony_ciimport { CheckCpuSetting } from './CheckCpuSetting';
23fb726d48Sopenharmony_ciimport { procedurePool } from '../../database/Procedure';
24fb726d48Sopenharmony_ciimport { info } from '../../../log/Log';
25fb726d48Sopenharmony_ciimport '../../../base-ui/progress-bar/LitProgressBar';
26fb726d48Sopenharmony_ciimport { LitProgressBar } from '../../../base-ui/progress-bar/LitProgressBar';
27fb726d48Sopenharmony_ciimport './TableNoData';
28fb726d48Sopenharmony_ciimport { TableNoData } from './TableNoData';
29fb726d48Sopenharmony_ciimport { getProbablyTime } from '../../database/logic-worker/ProcedureLogicWorkerCommon';
30fb726d48Sopenharmony_ciimport { SpSchedulingAnalysis } from './SpSchedulingAnalysis';
31fb726d48Sopenharmony_ciimport { Top20ThreadCpuUsageHtml } from './Top20ThreadCpuUsage.html';
32fb726d48Sopenharmony_ci
33fb726d48Sopenharmony_ci@element('top20-thread-cpu-usage')
34fb726d48Sopenharmony_ciexport class Top20ThreadCpuUsage extends BaseElement {
35fb726d48Sopenharmony_ci  traceChange: boolean = false;
36fb726d48Sopenharmony_ci  private table: LitTable | null | undefined;
37fb726d48Sopenharmony_ci  private tableBig: LitTable | null | undefined;
38fb726d48Sopenharmony_ci  private tableMid: LitTable | null | undefined;
39fb726d48Sopenharmony_ci  private tableSmall: LitTable | null | undefined;
40fb726d48Sopenharmony_ci  private chartTotal: LitChartColumn | null | undefined;
41fb726d48Sopenharmony_ci  private chart2: LitChartColumn | null | undefined;
42fb726d48Sopenharmony_ci  private chart3: LitChartColumn | null | undefined;
43fb726d48Sopenharmony_ci  private chart4: LitChartColumn | null | undefined;
44fb726d48Sopenharmony_ci  private cpuSetting: CheckCpuSetting | undefined | null;
45fb726d48Sopenharmony_ci  private setting: HTMLDivElement | null | undefined;
46fb726d48Sopenharmony_ci  private progress: LitProgressBar | null | undefined;
47fb726d48Sopenharmony_ci  private nodata: TableNoData | null | undefined;
48fb726d48Sopenharmony_ci  private map: Map<string, { chart: LitChartColumn; table: LitTable }> | undefined;
49fb726d48Sopenharmony_ci  private data: Array<unknown> = [];
50fb726d48Sopenharmony_ci  private dataBig: Array<unknown> = [];
51fb726d48Sopenharmony_ci  private dataMid: Array<unknown> = [];
52fb726d48Sopenharmony_ci  private dataSmall: Array<unknown> = [];
53fb726d48Sopenharmony_ci  private sort: unknown = {
54fb726d48Sopenharmony_ci    total: { key: '', sort: 0 },
55fb726d48Sopenharmony_ci    small: { key: '', sort: 0 },
56fb726d48Sopenharmony_ci    mid: { key: '', sort: 0 },
57fb726d48Sopenharmony_ci    big: { key: '', sort: 0 },
58fb726d48Sopenharmony_ci  };
59fb726d48Sopenharmony_ci
60fb726d48Sopenharmony_ci  private publicColumns = `
61fb726d48Sopenharmony_ci                <lit-table-column width="50px" title=" " data-index="no" key="no" align="flex-start"></lit-table-column>
62fb726d48Sopenharmony_ci                <lit-table-column width="50px" title="" data-index="visible" key="visible" align="flex-start">
63fb726d48Sopenharmony_ci                    <template>
64fb726d48Sopenharmony_ci                        <lit-icon name="{{ visible === 1 ? 'eye':'eye-close' }}" onclick="{
65fb726d48Sopenharmony_ci                            let data = this.parentElement.parentElement.data;
66fb726d48Sopenharmony_ci                            data.visible = data.visible === 1 ? 0 : 1
67fb726d48Sopenharmony_ci                            this.name = data.visible === 1 ? 'eye':'eye-close'
68fb726d48Sopenharmony_ci                            data.hideHandler()
69fb726d48Sopenharmony_ci                        }" size="20"></lit-icon>
70fb726d48Sopenharmony_ci                    </template>
71fb726d48Sopenharmony_ci                </lit-table-column>
72fb726d48Sopenharmony_ci                <lit-table-column width="100px" title="tid" data-index="tid" key="tid" align="flex-start" order></lit-table-column>
73fb726d48Sopenharmony_ci                <lit-table-column width="200px" title="t_name" data-index="tName" key="tName" align="flex-start" order></lit-table-column>
74fb726d48Sopenharmony_ci                <lit-table-column width="100px" title="pid" data-index="pid" key="pid" align="flex-start" order></lit-table-column>
75fb726d48Sopenharmony_ci                <lit-table-column width="200px" title="p_name" data-index="pName" key="pName" align="flex-start" order></lit-table-column>
76fb726d48Sopenharmony_ci        `;
77fb726d48Sopenharmony_ci  private bigColumn = `
78fb726d48Sopenharmony_ci                <lit-table-column width="100px" title="big core" data-index="bigTimeStr" key="bigTimeStr" align="flex-start" order></lit-table-column>
79fb726d48Sopenharmony_ci                <lit-table-column width="100px" title="%" data-index="bigPercent" key="bigPercent" align="flex-start" order></lit-table-column>
80fb726d48Sopenharmony_ci        `;
81fb726d48Sopenharmony_ci  private midColumn = `
82fb726d48Sopenharmony_ci                <lit-table-column width="100px" title="middle core" data-index="midTimeStr" key="midTimeStr" align="flex-start" order></lit-table-column>
83fb726d48Sopenharmony_ci                <lit-table-column width="100px" title="%" data-index="midPercent" key="midPercent" align="flex-start" order></lit-table-column>
84fb726d48Sopenharmony_ci        `;
85fb726d48Sopenharmony_ci  private smallColumn = `
86fb726d48Sopenharmony_ci                <lit-table-column width="100px" title="small core" data-index="smallTimeStr" key="smallTimeStr" align="flex-start" order></lit-table-column>
87fb726d48Sopenharmony_ci                <lit-table-column width="100px" title="%" data-index="smallPercent" key="smallPercent" align="flex-start" order></lit-table-column>
88fb726d48Sopenharmony_ci        `;
89fb726d48Sopenharmony_ci
90fb726d48Sopenharmony_ci  initElements(): void {
91fb726d48Sopenharmony_ci    this.nodata = this.shadowRoot!.querySelector<TableNoData>('#nodata');
92fb726d48Sopenharmony_ci    this.progress = this.shadowRoot!.querySelector<LitProgressBar>('#loading');
93fb726d48Sopenharmony_ci    this.table = this.shadowRoot!.querySelector<LitTable>('#tb-thread-usage');
94fb726d48Sopenharmony_ci    this.tableBig = this.shadowRoot!.querySelector<LitTable>('#tb-thread-big');
95fb726d48Sopenharmony_ci    this.tableMid = this.shadowRoot!.querySelector<LitTable>('#tb-thread-mid');
96fb726d48Sopenharmony_ci    this.tableSmall = this.shadowRoot!.querySelector<LitTable>('#tb-thread-small');
97fb726d48Sopenharmony_ci    this.chartTotal = this.shadowRoot!.querySelector<LitChartColumn>('#chart_total');
98fb726d48Sopenharmony_ci    this.chart2 = this.shadowRoot!.querySelector<LitChartColumn>('#chart_2');
99fb726d48Sopenharmony_ci    this.chart3 = this.shadowRoot!.querySelector<LitChartColumn>('#chart_3');
100fb726d48Sopenharmony_ci    this.chart4 = this.shadowRoot!.querySelector<LitChartColumn>('#chart_4');
101fb726d48Sopenharmony_ci    this.map = new Map<string, { chart: LitChartColumn; table: LitTable }>();
102fb726d48Sopenharmony_ci    this.map.set('total', { chart: this.chartTotal!, table: this.table! });
103fb726d48Sopenharmony_ci    this.map.set('small', { chart: this.chart2!, table: this.tableSmall! });
104fb726d48Sopenharmony_ci    this.map.set('mid', { chart: this.chart3!, table: this.tableMid! });
105fb726d48Sopenharmony_ci    this.map.set('big', { chart: this.chart4!, table: this.tableBig! });
106fb726d48Sopenharmony_ci    this.setting = this.shadowRoot!.querySelector<HTMLDivElement>('#setting');
107fb726d48Sopenharmony_ci    this.cpuSetting = this.shadowRoot!.querySelector<CheckCpuSetting>('#cpu_setting');
108fb726d48Sopenharmony_ci    this.cpuSetting!.cpuSetListener = (): void => {
109fb726d48Sopenharmony_ci      this.cpuSetting!.style.display = 'none';
110fb726d48Sopenharmony_ci      //@ts-ignore
111fb726d48Sopenharmony_ci      (this.shadowRoot!.querySelector('#total')! as unknown).style.display = 'grid';
112fb726d48Sopenharmony_ci      //@ts-ignore
113fb726d48Sopenharmony_ci      (this.shadowRoot!.querySelector('#small')! as unknown).style.display =
114fb726d48Sopenharmony_ci        CheckCpuSetting.small_cores.length > 0 ? 'grid' : 'none';
115fb726d48Sopenharmony_ci      //@ts-ignore
116fb726d48Sopenharmony_ci      (this.shadowRoot!.querySelector('#mid')! as unknown).style.display =
117fb726d48Sopenharmony_ci        CheckCpuSetting.mid_cores.length > 0 ? 'grid' : 'none';
118fb726d48Sopenharmony_ci      //@ts-ignore
119fb726d48Sopenharmony_ci      (this.shadowRoot!.querySelector('#big')! as unknown).style.display =
120fb726d48Sopenharmony_ci        CheckCpuSetting.big_cores.length > 0 ? 'grid' : 'none';
121fb726d48Sopenharmony_ci      this.queryData();
122fb726d48Sopenharmony_ci    };
123fb726d48Sopenharmony_ci    this.setting?.addEventListener('click', (): void => {
124fb726d48Sopenharmony_ci      for (let node of this.shadowRoot!.querySelectorAll('.content_grid')) {
125fb726d48Sopenharmony_ci        //@ts-ignore
126fb726d48Sopenharmony_ci        (node as unknown).style.display = 'none';
127fb726d48Sopenharmony_ci      }
128fb726d48Sopenharmony_ci      this.cpuSetting!.style.display = 'inline';
129fb726d48Sopenharmony_ci      this.cpuSetting?.init();
130fb726d48Sopenharmony_ci    });
131fb726d48Sopenharmony_ci    this.tabListener();
132fb726d48Sopenharmony_ci  }
133fb726d48Sopenharmony_ci
134fb726d48Sopenharmony_ci  private tabListener(): void {
135fb726d48Sopenharmony_ci    for (let key of this.map!.keys()) {
136fb726d48Sopenharmony_ci      let tab = this.map!.get(key)!.table;
137fb726d48Sopenharmony_ci      let chart = this.map!.get(key)!.chart;
138fb726d48Sopenharmony_ci      tab!.addEventListener('row-click', (evt: unknown): void => {
139fb726d48Sopenharmony_ci        //@ts-ignore
140fb726d48Sopenharmony_ci        let data = evt.detail.data;
141fb726d48Sopenharmony_ci        data.isSelected = true;
142fb726d48Sopenharmony_ci        // @ts-ignore
143fb726d48Sopenharmony_ci        if ((evt.detail as unknown).callBack) {
144fb726d48Sopenharmony_ci          // @ts-ignore
145fb726d48Sopenharmony_ci          (evt.detail as unknown).callBack(true);
146fb726d48Sopenharmony_ci        }
147fb726d48Sopenharmony_ci      });
148fb726d48Sopenharmony_ci      tab!.addEventListener('column-click', (evt: unknown): void => {
149fb726d48Sopenharmony_ci        //@ts-ignore
150fb726d48Sopenharmony_ci        this.sort[key].key = evt.detail.key;
151fb726d48Sopenharmony_ci        //@ts-ignore
152fb726d48Sopenharmony_ci        this.sort[key].sort = evt.detail.sort;
153fb726d48Sopenharmony_ci        if (key === 'total') {
154fb726d48Sopenharmony_ci          //@ts-ignore
155fb726d48Sopenharmony_ci          this.sortByColumn(evt.detail, tab, this.data);
156fb726d48Sopenharmony_ci        } else if (key === 'small') {
157fb726d48Sopenharmony_ci          //@ts-ignore
158fb726d48Sopenharmony_ci          this.sortByColumn(evt.detail, tab, this.dataSmall);
159fb726d48Sopenharmony_ci        } else if (key === 'mid') {
160fb726d48Sopenharmony_ci          //@ts-ignore
161fb726d48Sopenharmony_ci          this.sortByColumn(evt.detail, tab, this.dataMid);
162fb726d48Sopenharmony_ci        } else if (key === 'big') {
163fb726d48Sopenharmony_ci          //@ts-ignore
164fb726d48Sopenharmony_ci          this.sortByColumn(evt.detail, tab, this.dataBig);
165fb726d48Sopenharmony_ci        }
166fb726d48Sopenharmony_ci      });
167fb726d48Sopenharmony_ci      tab!.addEventListener('row-hover', (evt: unknown): void => {
168fb726d48Sopenharmony_ci        //@ts-ignore
169fb726d48Sopenharmony_ci        if (evt.detail.data) {
170fb726d48Sopenharmony_ci          //@ts-ignore
171fb726d48Sopenharmony_ci          let data = evt.detail.data;
172fb726d48Sopenharmony_ci          data.isHover = true;
173fb726d48Sopenharmony_ci          //@ts-ignore
174fb726d48Sopenharmony_ci          if ((evt.detail as unknown).callBack) {
175fb726d48Sopenharmony_ci            //@ts-ignore
176fb726d48Sopenharmony_ci            (evt.detail as unknown).callBack(true);
177fb726d48Sopenharmony_ci          }
178fb726d48Sopenharmony_ci          chart.showHoverColumn(data.no);
179fb726d48Sopenharmony_ci        }
180fb726d48Sopenharmony_ci      });
181fb726d48Sopenharmony_ci    }
182fb726d48Sopenharmony_ci  }
183fb726d48Sopenharmony_ci
184fb726d48Sopenharmony_ci  sortByColumn(detail: unknown, table: LitTable | null | undefined, data: Array<unknown>): void {
185fb726d48Sopenharmony_ci    // @ts-ignore
186fb726d48Sopenharmony_ci    function compare(threadCpuUsageProperty, sort, type) {
187fb726d48Sopenharmony_ci      return function (a: unknown, b: unknown) {
188fb726d48Sopenharmony_ci        if (type === 'number') {
189fb726d48Sopenharmony_ci          return sort === 2
190fb726d48Sopenharmony_ci            ? // @ts-ignore
191fb726d48Sopenharmony_ci              parseFloat(b[threadCpuUsageProperty]) - parseFloat(a[threadCpuUsageProperty])
192fb726d48Sopenharmony_ci            : //@ts-ignore
193fb726d48Sopenharmony_ci              parseFloat(a[threadCpuUsageProperty]) - parseFloat(b[threadCpuUsageProperty]);
194fb726d48Sopenharmony_ci        } else {
195fb726d48Sopenharmony_ci          if (sort === 2) {
196fb726d48Sopenharmony_ci            //@ts-ignore
197fb726d48Sopenharmony_ci            return b[threadCpuUsageProperty].toString().localeCompare(a[threadCpuUsageProperty].toString());
198fb726d48Sopenharmony_ci          } else {
199fb726d48Sopenharmony_ci            //@ts-ignore
200fb726d48Sopenharmony_ci            return a[threadCpuUsageProperty].toString().localeCompare(b[threadCpuUsageProperty].toString());
201fb726d48Sopenharmony_ci          }
202fb726d48Sopenharmony_ci        }
203fb726d48Sopenharmony_ci      };
204fb726d48Sopenharmony_ci    }
205fb726d48Sopenharmony_ci
206fb726d48Sopenharmony_ci    let type = 'number';
207fb726d48Sopenharmony_ci    //@ts-ignore
208fb726d48Sopenharmony_ci    let key = detail.key;
209fb726d48Sopenharmony_ci
210fb726d48Sopenharmony_ci    if (key === 'bigTimeStr') {
211fb726d48Sopenharmony_ci      key = 'big';
212fb726d48Sopenharmony_ci    } else if (key === 'midTimeStr') {
213fb726d48Sopenharmony_ci      key = 'mid';
214fb726d48Sopenharmony_ci    } else if (key === 'smallTimeStr') {
215fb726d48Sopenharmony_ci      key = 'small';
216fb726d48Sopenharmony_ci    } else if (
217fb726d48Sopenharmony_ci      key === 'bigPercent' ||
218fb726d48Sopenharmony_ci      key === 'ratio' ||
219fb726d48Sopenharmony_ci      key === 'tid' ||
220fb726d48Sopenharmony_ci      key === 'pid' ||
221fb726d48Sopenharmony_ci      key === 'midPercent' ||
222fb726d48Sopenharmony_ci      key.includes('cpu')
223fb726d48Sopenharmony_ci    ) {
224fb726d48Sopenharmony_ci    } else {
225fb726d48Sopenharmony_ci      type = 'string';
226fb726d48Sopenharmony_ci    }
227fb726d48Sopenharmony_ci    //@ts-ignore
228fb726d48Sopenharmony_ci    data.sort(compare(key, detail.sort, type));
229fb726d48Sopenharmony_ci    table!.recycleDataSource = data;
230fb726d48Sopenharmony_ci  }
231fb726d48Sopenharmony_ci
232fb726d48Sopenharmony_ci  init(): void {
233fb726d48Sopenharmony_ci    if (!this.traceChange) {
234fb726d48Sopenharmony_ci      for (let key of this.map!.keys()) {
235fb726d48Sopenharmony_ci        this.map!.get(key)!.table.reMeauseHeight();
236fb726d48Sopenharmony_ci      }
237fb726d48Sopenharmony_ci      return;
238fb726d48Sopenharmony_ci    }
239fb726d48Sopenharmony_ci    this.traceChange = false;
240fb726d48Sopenharmony_ci    for (let key of this.map!.keys()) {
241fb726d48Sopenharmony_ci      let table = this.map!.get(key)!.table;
242fb726d48Sopenharmony_ci      table.innerHTML = '';
243fb726d48Sopenharmony_ci      let columns = this.getTableColumns(key);
244fb726d48Sopenharmony_ci      for (let i = 0; i < SpSchedulingAnalysis.cpuCount; i++) {
245fb726d48Sopenharmony_ci        columns = `
246fb726d48Sopenharmony_ci                ${columns}
247fb726d48Sopenharmony_ci                <lit-table-column width="120px" title="cpu${i}(us)" data-index="cpu${i}" key="cpu${i}" align="flex-start" order></lit-table-column>
248fb726d48Sopenharmony_ci            `;
249fb726d48Sopenharmony_ci      }
250fb726d48Sopenharmony_ci      table.innerHTML = columns;
251fb726d48Sopenharmony_ci    }
252fb726d48Sopenharmony_ci
253fb726d48Sopenharmony_ci    if (!CheckCpuSetting.init_setting) {
254fb726d48Sopenharmony_ci      for (let node of this.shadowRoot!.querySelectorAll('.content_grid')) {
255fb726d48Sopenharmony_ci        //@ts-ignore
256fb726d48Sopenharmony_ci        (node as unknown).style.display = 'none';
257fb726d48Sopenharmony_ci      }
258fb726d48Sopenharmony_ci      this.cpuSetting!.style.display = 'inline';
259fb726d48Sopenharmony_ci      this.cpuSetting?.init();
260fb726d48Sopenharmony_ci    } else {
261fb726d48Sopenharmony_ci      this.queryData();
262fb726d48Sopenharmony_ci    }
263fb726d48Sopenharmony_ci  }
264fb726d48Sopenharmony_ci
265fb726d48Sopenharmony_ci  clearData(): void {
266fb726d48Sopenharmony_ci    this.traceChange = true;
267fb726d48Sopenharmony_ci    for (let key of this.map!.keys()) {
268fb726d48Sopenharmony_ci      this.map!.get(key)!.chart.dataSource = [];
269fb726d48Sopenharmony_ci      this.map!.get(key)!.table.recycleDataSource = [];
270fb726d48Sopenharmony_ci    }
271fb726d48Sopenharmony_ci  }
272fb726d48Sopenharmony_ci
273fb726d48Sopenharmony_ci  queryData(): void {
274fb726d48Sopenharmony_ci    this.progress!.loading = true;
275fb726d48Sopenharmony_ci    this.queryLogicWorker('scheduling-Thread CpuUsage', 'query Thread Cpu Usage Analysis Time:', (res): void => {
276fb726d48Sopenharmony_ci      //@ts-ignore
277fb726d48Sopenharmony_ci      this.nodata!.noData = res.keys().length === 0;
278fb726d48Sopenharmony_ci      for (let key of this.map!.keys()) {
279fb726d48Sopenharmony_ci        let obj = this.map!.get(key)!;
280fb726d48Sopenharmony_ci        //@ts-ignore
281fb726d48Sopenharmony_ci        let source: unknown[] = res.get(key) || [];
282fb726d48Sopenharmony_ci        source = source.map((it: unknown, index: number) => {
283fb726d48Sopenharmony_ci          let data: unknown = {
284fb726d48Sopenharmony_ci            //@ts-ignore
285fb726d48Sopenharmony_ci            pid: it.pid,
286fb726d48Sopenharmony_ci            //@ts-ignore
287fb726d48Sopenharmony_ci            pName: it.pName,
288fb726d48Sopenharmony_ci            //@ts-ignore
289fb726d48Sopenharmony_ci            tid: it.tid,
290fb726d48Sopenharmony_ci            //@ts-ignore
291fb726d48Sopenharmony_ci            tName: it.tName,
292fb726d48Sopenharmony_ci            //@ts-ignore
293fb726d48Sopenharmony_ci            total: it.total,
294fb726d48Sopenharmony_ci            //@ts-ignore
295fb726d48Sopenharmony_ci            big: it.big,
296fb726d48Sopenharmony_ci            //@ts-ignore
297fb726d48Sopenharmony_ci            mid: it.mid,
298fb726d48Sopenharmony_ci            //@ts-ignore
299fb726d48Sopenharmony_ci            small: it.small,
300fb726d48Sopenharmony_ci            no: index + 1,
301fb726d48Sopenharmony_ci            visible: 1,
302fb726d48Sopenharmony_ci            //@ts-ignore
303fb726d48Sopenharmony_ci            bigPercent: it.bigPercent,
304fb726d48Sopenharmony_ci            //@ts-ignore
305fb726d48Sopenharmony_ci            midPercent: it.midPercent,
306fb726d48Sopenharmony_ci            //@ts-ignore
307fb726d48Sopenharmony_ci            smallPercent: it.smallPercent,
308fb726d48Sopenharmony_ci            //@ts-ignore
309fb726d48Sopenharmony_ci            bigTimeStr: it.bigTimeStr,
310fb726d48Sopenharmony_ci            //@ts-ignore
311fb726d48Sopenharmony_ci            midTimeStr: it.midTimeStr,
312fb726d48Sopenharmony_ci            //@ts-ignore
313fb726d48Sopenharmony_ci            smallTimeStr: it.smallTimeStr,
314fb726d48Sopenharmony_ci            hideHandler: (): void => {
315fb726d48Sopenharmony_ci              //@ts-ignore
316fb726d48Sopenharmony_ci              let arr = source.filter((o) => o.visible === 1);
317fb726d48Sopenharmony_ci              obj.chart.dataSource = this.getArrayDataBySize(key, arr);
318fb726d48Sopenharmony_ci            },
319fb726d48Sopenharmony_ci          };
320fb726d48Sopenharmony_ci          for (let i = 0; i < SpSchedulingAnalysis.cpuCount; i++) {
321fb726d48Sopenharmony_ci            //@ts-ignore
322fb726d48Sopenharmony_ci            data[`cpu${i}`] = (it[`cpu${i}`] || 0) / 1000;
323fb726d48Sopenharmony_ci          }
324fb726d48Sopenharmony_ci          return data;
325fb726d48Sopenharmony_ci        });
326fb726d48Sopenharmony_ci        this.setChartConfig(obj, key, source);
327fb726d48Sopenharmony_ci        this.assignmentData(key, source, obj);
328fb726d48Sopenharmony_ci      }
329fb726d48Sopenharmony_ci      this.progress!.loading = false;
330fb726d48Sopenharmony_ci    });
331fb726d48Sopenharmony_ci  }
332fb726d48Sopenharmony_ci
333fb726d48Sopenharmony_ci  private assignmentData(key: string, source: unknown[], obj: { chart: LitChartColumn; table: LitTable }): void {
334fb726d48Sopenharmony_ci    if (key === 'total') {
335fb726d48Sopenharmony_ci      this.data = source;
336fb726d48Sopenharmony_ci    } else if (key === 'small') {
337fb726d48Sopenharmony_ci      this.dataSmall = source;
338fb726d48Sopenharmony_ci    } else if (key === 'mid') {
339fb726d48Sopenharmony_ci      this.dataMid = source;
340fb726d48Sopenharmony_ci    } else if (key === 'big') {
341fb726d48Sopenharmony_ci      this.dataBig = source;
342fb726d48Sopenharmony_ci    }
343fb726d48Sopenharmony_ci    //@ts-ignore
344fb726d48Sopenharmony_ci    if (this.sort[key].key !== '') {
345fb726d48Sopenharmony_ci      //@ts-ignore
346fb726d48Sopenharmony_ci      this.sortByColumn(this.sort[key], obj.table, source);
347fb726d48Sopenharmony_ci    } else {
348fb726d48Sopenharmony_ci      obj.table.recycleDataSource = source;
349fb726d48Sopenharmony_ci    }
350fb726d48Sopenharmony_ci  }
351fb726d48Sopenharmony_ci
352fb726d48Sopenharmony_ci  private setChartConfig(obj: { chart: LitChartColumn; table: LitTable }, key: string, source: unknown[]): void {
353fb726d48Sopenharmony_ci    obj.chart.config = {
354fb726d48Sopenharmony_ci      data: this.getArrayDataBySize(key, source),
355fb726d48Sopenharmony_ci      appendPadding: 10,
356fb726d48Sopenharmony_ci      xField: 'tid',
357fb726d48Sopenharmony_ci      yField: 'total',
358fb726d48Sopenharmony_ci      seriesField: key === 'total' ? 'size' : '',
359fb726d48Sopenharmony_ci      color: (a): string => {
360fb726d48Sopenharmony_ci        //@ts-ignore
361fb726d48Sopenharmony_ci        if (a.size === 'big core') {
362fb726d48Sopenharmony_ci          return '#2f72f8'; //@ts-ignore
363fb726d48Sopenharmony_ci        } else if (a.size === 'middle core') {
364fb726d48Sopenharmony_ci          return '#ffab67'; //@ts-ignore
365fb726d48Sopenharmony_ci        } else if (a.size === 'small core') {
366fb726d48Sopenharmony_ci          return '#a285d2';
367fb726d48Sopenharmony_ci        } else {
368fb726d48Sopenharmony_ci          return '#0a59f7';
369fb726d48Sopenharmony_ci        }
370fb726d48Sopenharmony_ci      },
371fb726d48Sopenharmony_ci      hoverHandler: (no): void => {
372fb726d48Sopenharmony_ci        this.setHover(source, no, obj);
373fb726d48Sopenharmony_ci      },
374fb726d48Sopenharmony_ci      tip: (a): string => {
375fb726d48Sopenharmony_ci        //@ts-ignore
376fb726d48Sopenharmony_ci        if (a && a[0]) {
377fb726d48Sopenharmony_ci          let tip = '';
378fb726d48Sopenharmony_ci          let total = 0; //@ts-ignore
379fb726d48Sopenharmony_ci          for (let obj of a) {
380fb726d48Sopenharmony_ci            total += obj.obj.total;
381fb726d48Sopenharmony_ci            tip = `${tip}
382fb726d48Sopenharmony_ci                                <div style="display:flex;flex-direction: row;align-items: center;">
383fb726d48Sopenharmony_ci                                    <div style="width: 10px;height: 5px;background-color: ${obj.color};
384fb726d48Sopenharmony_ci                                    margin-right: 5px"></div>
385fb726d48Sopenharmony_ci                                    <div>${obj.type || key}:${obj.obj.timeStr}</div>
386fb726d48Sopenharmony_ci                                </div>
387fb726d48Sopenharmony_ci                            `;
388fb726d48Sopenharmony_ci          }
389fb726d48Sopenharmony_ci          tip = `<div>
390fb726d48Sopenharmony_ci                                        <div>tid:${
391fb726d48Sopenharmony_ci                                          //@ts-ignore
392fb726d48Sopenharmony_ci                                          a[0].obj.tid
393fb726d48Sopenharmony_ci                                        }</div>
394fb726d48Sopenharmony_ci                                        ${tip}
395fb726d48Sopenharmony_ci                                        ${
396fb726d48Sopenharmony_ci                                          //@ts-ignore
397fb726d48Sopenharmony_ci                                          a.length > 1 ? `<div>total:${getProbablyTime(total)}</div>` : ''
398fb726d48Sopenharmony_ci                                        }
399fb726d48Sopenharmony_ci                                    </div>`;
400fb726d48Sopenharmony_ci          return tip;
401fb726d48Sopenharmony_ci        } else {
402fb726d48Sopenharmony_ci          return '';
403fb726d48Sopenharmony_ci        }
404fb726d48Sopenharmony_ci      },
405fb726d48Sopenharmony_ci      label: null,
406fb726d48Sopenharmony_ci    };
407fb726d48Sopenharmony_ci  }
408fb726d48Sopenharmony_ci
409fb726d48Sopenharmony_ci  private setHover(source: unknown[], no: number, obj: { chart: LitChartColumn; table: LitTable }): void {
410fb726d48Sopenharmony_ci    //@ts-ignore
411fb726d48Sopenharmony_ci    let data = source.find((it) => it.no === no);
412fb726d48Sopenharmony_ci    if (data) {
413fb726d48Sopenharmony_ci      //@ts-ignore
414fb726d48Sopenharmony_ci      data.isHover = true;
415fb726d48Sopenharmony_ci      obj.table!.setCurrentHover(data);
416fb726d48Sopenharmony_ci    } else {
417fb726d48Sopenharmony_ci      obj.table!.mouseOut();
418fb726d48Sopenharmony_ci    }
419fb726d48Sopenharmony_ci  }
420fb726d48Sopenharmony_ci
421fb726d48Sopenharmony_ci  getArrayDataBySize(type: string, arr: Array<unknown>): unknown[] {
422fb726d48Sopenharmony_ci    let data: unknown[] = [];
423fb726d48Sopenharmony_ci    for (let obj of arr) {
424fb726d48Sopenharmony_ci      if (type === 'total') {
425fb726d48Sopenharmony_ci        data.push({
426fb726d48Sopenharmony_ci          //@ts-ignore
427fb726d48Sopenharmony_ci          pid: obj.pid, //@ts-ignore
428fb726d48Sopenharmony_ci          pName: obj.pName, //@ts-ignore
429fb726d48Sopenharmony_ci          tid: obj.tid, //@ts-ignore
430fb726d48Sopenharmony_ci          tName: obj.tName, //@ts-ignore
431fb726d48Sopenharmony_ci          total: obj.big,
432fb726d48Sopenharmony_ci          size: 'big core', //@ts-ignore
433fb726d48Sopenharmony_ci          no: obj.no, //@ts-ignore
434fb726d48Sopenharmony_ci          timeStr: obj.bigTimeStr,
435fb726d48Sopenharmony_ci        });
436fb726d48Sopenharmony_ci        data.push({
437fb726d48Sopenharmony_ci          //@ts-ignore
438fb726d48Sopenharmony_ci          pid: obj.pid, //@ts-ignore
439fb726d48Sopenharmony_ci          pName: obj.pName, //@ts-ignore
440fb726d48Sopenharmony_ci          tid: obj.tid, //@ts-ignore
441fb726d48Sopenharmony_ci          tName: obj.tName, //@ts-ignore
442fb726d48Sopenharmony_ci          total: obj.mid,
443fb726d48Sopenharmony_ci          size: 'middle core', //@ts-ignore
444fb726d48Sopenharmony_ci          no: obj.no, //@ts-ignore
445fb726d48Sopenharmony_ci          timeStr: obj.midTimeStr,
446fb726d48Sopenharmony_ci        });
447fb726d48Sopenharmony_ci        data.push({
448fb726d48Sopenharmony_ci          //@ts-ignore
449fb726d48Sopenharmony_ci          pid: obj.pid, //@ts-ignore
450fb726d48Sopenharmony_ci          pName: obj.pName, //@ts-ignore
451fb726d48Sopenharmony_ci          tid: obj.tid, //@ts-ignore
452fb726d48Sopenharmony_ci          tName: obj.tName, //@ts-ignore
453fb726d48Sopenharmony_ci          total: obj.small,
454fb726d48Sopenharmony_ci          size: 'small core', //@ts-ignore
455fb726d48Sopenharmony_ci          no: obj.no, //@ts-ignore
456fb726d48Sopenharmony_ci          timeStr: obj.smallTimeStr,
457fb726d48Sopenharmony_ci        });
458fb726d48Sopenharmony_ci      } else {
459fb726d48Sopenharmony_ci        data.push({
460fb726d48Sopenharmony_ci          //@ts-ignore
461fb726d48Sopenharmony_ci          pid: obj.pid, //@ts-ignore
462fb726d48Sopenharmony_ci          pName: obj.pName, //@ts-ignore
463fb726d48Sopenharmony_ci          tid: obj.tid, //@ts-ignore
464fb726d48Sopenharmony_ci          tName: obj.tName, //@ts-ignore
465fb726d48Sopenharmony_ci          total: obj[type], //@ts-ignore
466fb726d48Sopenharmony_ci          no: obj.no, //@ts-ignore
467fb726d48Sopenharmony_ci          timeStr: obj[`${type}TimeStr`],
468fb726d48Sopenharmony_ci        });
469fb726d48Sopenharmony_ci      }
470fb726d48Sopenharmony_ci    }
471fb726d48Sopenharmony_ci    return data;
472fb726d48Sopenharmony_ci  }
473fb726d48Sopenharmony_ci
474fb726d48Sopenharmony_ci  queryLogicWorker(option: string, log: string, handler: (res: unknown) => void): void {
475fb726d48Sopenharmony_ci    let time = new Date().getTime();
476fb726d48Sopenharmony_ci    procedurePool.submitWithName(
477fb726d48Sopenharmony_ci      'logic0',
478fb726d48Sopenharmony_ci      option,
479fb726d48Sopenharmony_ci      {
480fb726d48Sopenharmony_ci        bigCores: CheckCpuSetting.big_cores,
481fb726d48Sopenharmony_ci        midCores: CheckCpuSetting.mid_cores,
482fb726d48Sopenharmony_ci        smallCores: CheckCpuSetting.small_cores,
483fb726d48Sopenharmony_ci      },
484fb726d48Sopenharmony_ci      undefined,
485fb726d48Sopenharmony_ci      handler
486fb726d48Sopenharmony_ci    );
487fb726d48Sopenharmony_ci    let durTime = new Date().getTime() - time;
488fb726d48Sopenharmony_ci    info(log, durTime);
489fb726d48Sopenharmony_ci  }
490fb726d48Sopenharmony_ci
491fb726d48Sopenharmony_ci  getTableColumns(type: string): string {
492fb726d48Sopenharmony_ci    if (type === 'total') {
493fb726d48Sopenharmony_ci      return `${this.publicColumns}${this.bigColumn}${this.midColumn}${this.smallColumn}`;
494fb726d48Sopenharmony_ci    } else if (type === 'big') {
495fb726d48Sopenharmony_ci      return `${this.publicColumns}${this.bigColumn}`;
496fb726d48Sopenharmony_ci    } else if (type === 'mid') {
497fb726d48Sopenharmony_ci      return `${this.publicColumns}${this.midColumn}`;
498fb726d48Sopenharmony_ci    } else if (type === 'small') {
499fb726d48Sopenharmony_ci      return `${this.publicColumns}${this.smallColumn}`;
500fb726d48Sopenharmony_ci    } else {
501fb726d48Sopenharmony_ci      return '';
502fb726d48Sopenharmony_ci    }
503fb726d48Sopenharmony_ci  }
504fb726d48Sopenharmony_ci
505fb726d48Sopenharmony_ci  initHtml(): string {
506fb726d48Sopenharmony_ci    return Top20ThreadCpuUsageHtml;
507fb726d48Sopenharmony_ci  }
508fb726d48Sopenharmony_ci}
509