/* * Copyright (C) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { BaseElement, element } from '../../../base-ui/BaseElement'; import './Top20ThreadCpuUsage'; import './Top20ThreadRunTime'; import './Top20ProcessSwitchCount'; import './Top20ProcessThreadCount'; import './Top20FrequencyThread'; import { Top20ThreadCpuUsage } from './Top20ThreadCpuUsage'; import { Top20ThreadRunTime } from './Top20ThreadRunTime'; import { Top20ProcessThreadCount } from './Top20ProcessThreadCount'; import { Top20ProcessSwitchCount } from './Top20ProcessSwitchCount'; import { Top20FrequencyThread } from './Top20FrequencyThread'; import { SpStatisticsHttpUtil } from '../../../statistics/util/SpStatisticsHttpUtil'; import { TabThreadAnalysisHtml } from './TabThreadAnalysis.html'; @element('tab-thread-analysis') export class TabThreadAnalysis extends BaseElement { private currentTabID: string | undefined; private currentTab: BaseElement | undefined; private contentDiv: HTMLDivElement | null | undefined; private tab1: HTMLDivElement | null | undefined; private tab2: HTMLDivElement | null | undefined; private tab3: HTMLDivElement | null | undefined; private tab4: HTMLDivElement | null | undefined; private tab5: HTMLDivElement | null | undefined; private top20ThreadCpuUsage: Top20ThreadCpuUsage | undefined | null; private top20ThreadRunTime: Top20ThreadRunTime | undefined | null; private top20ProcessThreadCount: Top20ProcessThreadCount | undefined | null; private top20ProcessSwitchCount: Top20ProcessSwitchCount | undefined | null; private top20FrequencyThread: Top20FrequencyThread | undefined | null; initElements(): void { this.contentDiv = this.shadowRoot!.querySelector('#content'); this.tab1 = this.shadowRoot!.querySelector('#tab1'); this.tab2 = this.shadowRoot!.querySelector('#tab2'); this.tab3 = this.shadowRoot!.querySelector('#tab3'); this.tab4 = this.shadowRoot!.querySelector('#tab4'); this.tab5 = this.shadowRoot!.querySelector('#tab5'); this.top20ThreadCpuUsage = this.shadowRoot!.querySelector('#top20_thread_cpu_usage'); this.top20ThreadRunTime = this.shadowRoot!.querySelector('#top20_thread_run_time'); this.top20ProcessThreadCount = this.shadowRoot!.querySelector('#top20_process_thread_count'); this.top20ProcessSwitchCount = this.shadowRoot!.querySelector('#top20_process_switch_count'); this.top20FrequencyThread = this.shadowRoot!.querySelector('#top20_frequency_thread'); this.tab1!.addEventListener('click', (): void => { this.setClickTab(this.tab1!, this.top20ThreadCpuUsage!); }); this.tab2!.addEventListener('click', (): void => { this.setClickTab(this.tab2!, this.top20ThreadRunTime!); }); this.tab3!.addEventListener('click', (): void => { this.setClickTab(this.tab3!, this.top20ProcessThreadCount!); }); this.tab4!.addEventListener('click', (): void => { this.setClickTab(this.tab4!, this.top20ProcessSwitchCount!); }); this.tab5!.addEventListener('click', (): void => { this.setClickTab(this.tab5!, this.top20FrequencyThread!); }); } init(): void { this.top20FrequencyThread!.clearData(); this.top20ThreadCpuUsage!.clearData(); this.top20ThreadRunTime!.clearData(); this.top20ProcessSwitchCount!.clearData(); this.top20ProcessThreadCount!.clearData(); this.hideCurrentTab(); this.currentTabID = undefined; this.setClickTab(this.tab1!, this.top20ThreadCpuUsage!, true); } hideCurrentTab(): void { if (this.currentTabID) { let clickTab = this.shadowRoot!.querySelector(`#${this.currentTabID}`); if (clickTab) { clickTab.className = 'tag_bt'; } } if (this.currentTab) { this.currentTab.style.display = 'none'; } } setClickTab( tab: HTMLDivElement, showContent: | Top20ThreadCpuUsage | Top20ThreadRunTime | Top20ProcessSwitchCount | Top20ProcessThreadCount | Top20FrequencyThread, isInit: boolean = false ): void { if (!isInit) { let event = showContent.id .replace(/_/g, ' ') .toLowerCase() .replace(/( |^)[a-z]/g, (L: string) => L.toUpperCase()); SpStatisticsHttpUtil.addOrdinaryVisitAction({ event: event, action: 'scheduling_analysis', }); } if (this.currentTabID) { let clickTab = this.shadowRoot!.querySelector(`#${this.currentTabID}`); if (clickTab) { clickTab.className = 'tag_bt'; } } tab.className = 'tab_click'; if (tab.id !== this.currentTabID) { this.currentTabID = tab.id; if (this.currentTab) { this.currentTab.style.display = 'none'; } this.currentTab = showContent; showContent.style.display = 'inline'; showContent.init(); } } initHtml(): string { return TabThreadAnalysisHtml; } }