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 '../base-ui/menu/LitMainMenu';
18fb726d48Sopenharmony_ciimport '../base-ui/icon/LitIcon';
19fb726d48Sopenharmony_ciimport '../base-ui/loading/LitLoading'
20fb726d48Sopenharmony_ciimport { SpMetrics } from './component/SpMetrics';
21fb726d48Sopenharmony_ciimport { SpHelp } from './component/SpHelp';
22fb726d48Sopenharmony_ciimport './component/SpHelp';
23fb726d48Sopenharmony_ciimport { SpQuerySQL } from './component/SpQuerySQL';
24fb726d48Sopenharmony_ciimport './component/SpQuerySQL';
25fb726d48Sopenharmony_ciimport { SpSystemTrace } from './component/SpSystemTrace';
26fb726d48Sopenharmony_ciimport { LitMainMenu, MenuGroup, MenuItem } from '../base-ui/menu/LitMainMenu';
27fb726d48Sopenharmony_ciimport { SpInfoAndStats } from './component/SpInfoAndStas';
28fb726d48Sopenharmony_ciimport '../base-ui/progress-bar/LitProgressBar';
29fb726d48Sopenharmony_ciimport { LitProgressBar } from '../base-ui/progress-bar/LitProgressBar';
30fb726d48Sopenharmony_ciimport { SpRecordTrace } from './component/SpRecordTrace';
31fb726d48Sopenharmony_ciimport { SpWelcomePage } from './component/SpWelcomePage';
32fb726d48Sopenharmony_ciimport { LitSearch } from './component/trace/search/Search';
33fb726d48Sopenharmony_ciimport {
34fb726d48Sopenharmony_ci  getThreadPoolTraceBuffer,
35fb726d48Sopenharmony_ci  getThreadPoolTraceBufferCacheKey,
36fb726d48Sopenharmony_ci  setThreadPoolTraceBuffer,
37fb726d48Sopenharmony_ci  threadPool,
38fb726d48Sopenharmony_ci  threadPool2,
39fb726d48Sopenharmony_ci} from './database/SqlLite';
40fb726d48Sopenharmony_ciimport './component/trace/search/Search';
41fb726d48Sopenharmony_ciimport './component/SpWelcomePage';
42fb726d48Sopenharmony_ciimport './component/SpSystemTrace';
43fb726d48Sopenharmony_ciimport './component/SpRecordTrace';
44fb726d48Sopenharmony_ciimport './component/SpMetrics';
45fb726d48Sopenharmony_ciimport './component/SpInfoAndStas';
46fb726d48Sopenharmony_ciimport './component/trace/base/TraceRow';
47fb726d48Sopenharmony_ciimport './component/schedulingAnalysis/SpSchedulingAnalysis';
48fb726d48Sopenharmony_ciimport { error, info, log } from '../log/Log';
49fb726d48Sopenharmony_ciimport { LitMainMenuGroup } from '../base-ui/menu/LitMainMenuGroup';
50fb726d48Sopenharmony_ciimport { LitMainMenuItem } from '../base-ui/menu/LitMainMenuItem';
51fb726d48Sopenharmony_ciimport { LitIcon } from '../base-ui/icon/LitIcon';
52fb726d48Sopenharmony_ciimport { TraceRow } from './component/trace/base/TraceRow';
53fb726d48Sopenharmony_ciimport { SpSchedulingAnalysis } from './component/schedulingAnalysis/SpSchedulingAnalysis';
54fb726d48Sopenharmony_ciimport './component/trace/base/TraceRowConfig';
55fb726d48Sopenharmony_ciimport { TraceRowConfig } from './component/trace/base/TraceRowConfig';
56fb726d48Sopenharmony_ciimport { ColorUtils } from './component/trace/base/ColorUtils';
57fb726d48Sopenharmony_ciimport { SpStatisticsHttpUtil } from '../statistics/util/SpStatisticsHttpUtil';
58fb726d48Sopenharmony_ciimport { FlagsConfig, SpFlags } from './component/SpFlags';
59fb726d48Sopenharmony_ciimport './component/SpFlags';
60fb726d48Sopenharmony_ciimport './component/trace/base/CustomThemeColor';
61fb726d48Sopenharmony_ciimport { CustomThemeColor, Theme } from './component/trace/base/CustomThemeColor';
62fb726d48Sopenharmony_ciimport { convertPool } from './database/Convert';
63fb726d48Sopenharmony_ciimport { LongTraceDBUtils } from './database/LongTraceDBUtils';
64fb726d48Sopenharmony_ciimport { type SpKeyboard } from './component/SpKeyboard';
65fb726d48Sopenharmony_ciimport './component/SpKeyboard';
66fb726d48Sopenharmony_ciimport { parseKeyPathJson } from './component/Utils';
67fb726d48Sopenharmony_ciimport { Utils } from './component/trace/base/Utils';
68fb726d48Sopenharmony_ciimport {
69fb726d48Sopenharmony_ci  applicationHtml,
70fb726d48Sopenharmony_ci  clearTraceFileCache,
71fb726d48Sopenharmony_ci  findFreeSizeAlgorithm,
72fb726d48Sopenharmony_ci  getCurrentDataTime,
73fb726d48Sopenharmony_ci  indexedDataToBufferData,
74fb726d48Sopenharmony_ci  postLog,
75fb726d48Sopenharmony_ci  readTraceFileBuffer,
76fb726d48Sopenharmony_ci  TraceMode,
77fb726d48Sopenharmony_ci} from './SpApplicationPublicFunc';
78fb726d48Sopenharmony_ciimport { queryExistFtrace } from './database/sql/SqlLite.sql';
79fb726d48Sopenharmony_ciimport '../base-ui/chart/scatter/LitChartScatter';
80fb726d48Sopenharmony_ciimport { SpThirdParty } from './component/SpThirdParty';
81fb726d48Sopenharmony_ciimport './component/SpThirdParty';
82fb726d48Sopenharmony_ciimport { cancelCurrentTraceRowHighlight } from './component/SpSystemTrace.init';
83fb726d48Sopenharmony_ciimport './component/SpBubblesAI';
84fb726d48Sopenharmony_ciimport './component/SpAiAnalysisPage';
85fb726d48Sopenharmony_ciimport { shadowRootInput } from './component/trace/base/shadowRootInput';
86fb726d48Sopenharmony_ciimport { WebSocketManager } from '../webSocket/WebSocketManager';
87fb726d48Sopenharmony_ciimport { SpAiAnalysisPage } from './component/SpAiAnalysisPage';
88fb726d48Sopenharmony_ciimport './component/SpAdvertisement'
89fb726d48Sopenharmony_ciimport { toUSVString } from 'util';
90fb726d48Sopenharmony_ci
91fb726d48Sopenharmony_ci@element('sp-application')
92fb726d48Sopenharmony_ciexport class SpApplication extends BaseElement {
93fb726d48Sopenharmony_ci  private static loadingProgress: number = 0;
94fb726d48Sopenharmony_ci  private static progressStep: number = 2;
95fb726d48Sopenharmony_ci  longTraceHeadMessageList: Array<{
96fb726d48Sopenharmony_ci    pageNum: number;
97fb726d48Sopenharmony_ci    data: ArrayBuffer;
98fb726d48Sopenharmony_ci  }> = [];
99fb726d48Sopenharmony_ci
100fb726d48Sopenharmony_ci  longTraceDataList: Array<{
101fb726d48Sopenharmony_ci    fileType: string;
102fb726d48Sopenharmony_ci    index: number;
103fb726d48Sopenharmony_ci    pageNum: number;
104fb726d48Sopenharmony_ci    startOffsetSize: number;
105fb726d48Sopenharmony_ci    endOffsetSize: number;
106fb726d48Sopenharmony_ci  }> = [];
107fb726d48Sopenharmony_ci
108fb726d48Sopenharmony_ci  longTraceTypeMessageMap:
109fb726d48Sopenharmony_ci    | Map<
110fb726d48Sopenharmony_ci      number,
111fb726d48Sopenharmony_ci      Array<{
112fb726d48Sopenharmony_ci        fileType: string;
113fb726d48Sopenharmony_ci        startIndex: number;
114fb726d48Sopenharmony_ci        endIndex: number;
115fb726d48Sopenharmony_ci        size: number;
116fb726d48Sopenharmony_ci      }>
117fb726d48Sopenharmony_ci    >
118fb726d48Sopenharmony_ci    | undefined
119fb726d48Sopenharmony_ci    | null;
120fb726d48Sopenharmony_ci  static skinChange: Function | null | undefined = null;
121fb726d48Sopenharmony_ci  static skinChange2: Function | null | undefined = null;
122fb726d48Sopenharmony_ci  skinChangeArray: Array<Function> = [];
123fb726d48Sopenharmony_ci  private rootEL: HTMLDivElement | undefined | null;
124fb726d48Sopenharmony_ci  private headerDiv: HTMLDivElement | undefined | null;
125fb726d48Sopenharmony_ci  private spWelcomePage: SpWelcomePage | undefined | null;
126fb726d48Sopenharmony_ci  private spMetrics: SpMetrics | undefined | null;
127fb726d48Sopenharmony_ci  private spQuerySQL: SpQuerySQL | undefined | null;
128fb726d48Sopenharmony_ci  private spInfoAndStats: SpInfoAndStats | undefined | null;
129fb726d48Sopenharmony_ci  private spSystemTrace: SpSystemTrace | undefined | null;
130fb726d48Sopenharmony_ci  private spHelp: SpHelp | undefined | null;
131fb726d48Sopenharmony_ci  private spKeyboard: SpKeyboard | undefined | null;
132fb726d48Sopenharmony_ci  private spFlags: SpFlags | undefined | null;
133fb726d48Sopenharmony_ci  private spRecordTrace: SpRecordTrace | undefined | null;
134fb726d48Sopenharmony_ci  private spRecordTemplate: SpRecordTrace | undefined | null;
135fb726d48Sopenharmony_ci  private spSchedulingAnalysis: SpSchedulingAnalysis | undefined | null;
136fb726d48Sopenharmony_ci  private mainMenu: LitMainMenu | undefined | null;
137fb726d48Sopenharmony_ci  private menu: HTMLDivElement | undefined | null;
138fb726d48Sopenharmony_ci  private progressEL: LitProgressBar | undefined | null;
139fb726d48Sopenharmony_ci  private litSearch: LitSearch | undefined | null;
140fb726d48Sopenharmony_ci  private litRecordSearch: LitSearch | undefined | null;
141fb726d48Sopenharmony_ci  private sidebarButton: HTMLDivElement | undefined | null;
142fb726d48Sopenharmony_ci  private chartFilter: TraceRowConfig | undefined | null;
143fb726d48Sopenharmony_ci  private cutTraceFile: HTMLImageElement | undefined | null;
144fb726d48Sopenharmony_ci  private exportRecord: LitIcon | undefined | null;
145fb726d48Sopenharmony_ci  private longTracePage: HTMLDivElement | undefined | null;
146fb726d48Sopenharmony_ci  private customColor: CustomThemeColor | undefined | null;
147fb726d48Sopenharmony_ci  private filterConfig: LitIcon | undefined | null;
148fb726d48Sopenharmony_ci  private configClose: LitIcon | undefined | null;
149fb726d48Sopenharmony_ci  private spThirdParty: SpThirdParty | undefined | null;
150fb726d48Sopenharmony_ci  // 关键路径标识
151fb726d48Sopenharmony_ci  private importConfigDiv: HTMLInputElement | undefined | null;
152fb726d48Sopenharmony_ci  private closeKeyPath: HTMLDivElement | undefined | null;
153fb726d48Sopenharmony_ci  private importFileBt: HTMLInputElement | undefined | null;
154fb726d48Sopenharmony_ci  private contentLeftOption: HTMLDivElement | undefined | null;
155fb726d48Sopenharmony_ci  private contentCenterOption: HTMLDivElement | undefined | null;
156fb726d48Sopenharmony_ci  private contentRightOption: HTMLDivElement | undefined | null;
157fb726d48Sopenharmony_ci  private childComponent: Array<unknown> | undefined | null;
158fb726d48Sopenharmony_ci  private spAiAnalysisPage: SpAiAnalysisPage | undefined | null;
159fb726d48Sopenharmony_ci  private aiAnalysis: HTMLImageElement | undefined | null;
160fb726d48Sopenharmony_ci  private keyCodeMap = {
161fb726d48Sopenharmony_ci    61: true,
162fb726d48Sopenharmony_ci    107: true,
163fb726d48Sopenharmony_ci    109: true,
164fb726d48Sopenharmony_ci    173: true,
165fb726d48Sopenharmony_ci    187: true,
166fb726d48Sopenharmony_ci    189: true,
167fb726d48Sopenharmony_ci  };
168fb726d48Sopenharmony_ci  private traceFileName: string | undefined;
169fb726d48Sopenharmony_ci  private markJson: string | undefined;
170fb726d48Sopenharmony_ci  colorTransiton?: NodeJS.Timeout;
171fb726d48Sopenharmony_ci  static isLongTrace: boolean = false;
172fb726d48Sopenharmony_ci  fileTypeList: string[] = ['ebpf', 'arkts', 'hiperf'];
173fb726d48Sopenharmony_ci  private pageTimStamp: number = 0;
174fb726d48Sopenharmony_ci  private currentPageNum: number = 1;
175fb726d48Sopenharmony_ci  private currentDataTime: string[] = [];
176fb726d48Sopenharmony_ci  static traceType: String = '';
177fb726d48Sopenharmony_ci
178fb726d48Sopenharmony_ci  static get observedAttributes(): Array<string> {
179fb726d48Sopenharmony_ci    return ['server', 'sqlite', 'wasm', 'dark', 'vs', 'query-sql', 'subsection'];
180fb726d48Sopenharmony_ci  }
181fb726d48Sopenharmony_ci
182fb726d48Sopenharmony_ci  get dark(): boolean {
183fb726d48Sopenharmony_ci    return this.hasAttribute('dark');
184fb726d48Sopenharmony_ci  }
185fb726d48Sopenharmony_ci
186fb726d48Sopenharmony_ci  set dark(value) {
187fb726d48Sopenharmony_ci    if (value) {
188fb726d48Sopenharmony_ci      this.rootEL!.classList.add('dark');
189fb726d48Sopenharmony_ci      this.setAttribute('dark', '');
190fb726d48Sopenharmony_ci    } else {
191fb726d48Sopenharmony_ci      this.rootEL!.classList.remove('dark');
192fb726d48Sopenharmony_ci      this.removeAttribute('dark');
193fb726d48Sopenharmony_ci    }
194fb726d48Sopenharmony_ci    if (this.skinChangeArray.length > 0) {
195fb726d48Sopenharmony_ci      this.skinChangeArray.forEach((item) => item(value));
196fb726d48Sopenharmony_ci    }
197fb726d48Sopenharmony_ci    if (SpApplication.skinChange) {
198fb726d48Sopenharmony_ci      SpApplication.skinChange(value);
199fb726d48Sopenharmony_ci    }
200fb726d48Sopenharmony_ci    if (SpApplication.skinChange2) {
201fb726d48Sopenharmony_ci      SpApplication.skinChange2(value);
202fb726d48Sopenharmony_ci    }
203fb726d48Sopenharmony_ci
204fb726d48Sopenharmony_ci    if (this.spHelp) {
205fb726d48Sopenharmony_ci      this.spHelp.dark = value;
206fb726d48Sopenharmony_ci    }
207fb726d48Sopenharmony_ci  }
208fb726d48Sopenharmony_ci
209fb726d48Sopenharmony_ci  get sqlite(): boolean {
210fb726d48Sopenharmony_ci    return this.hasAttribute('sqlite');
211fb726d48Sopenharmony_ci  }
212fb726d48Sopenharmony_ci
213fb726d48Sopenharmony_ci  get wasm(): boolean {
214fb726d48Sopenharmony_ci    return this.hasAttribute('wasm');
215fb726d48Sopenharmony_ci  }
216fb726d48Sopenharmony_ci
217fb726d48Sopenharmony_ci  set wasm(isWasm: boolean) {
218fb726d48Sopenharmony_ci    if (isWasm) {
219fb726d48Sopenharmony_ci      this.setAttribute('wasm', '');
220fb726d48Sopenharmony_ci    } else {
221fb726d48Sopenharmony_ci      this.hasAttribute('wasm') && this.removeAttribute('wasm');
222fb726d48Sopenharmony_ci    }
223fb726d48Sopenharmony_ci  }
224fb726d48Sopenharmony_ci
225fb726d48Sopenharmony_ci  get server(): boolean {
226fb726d48Sopenharmony_ci    return this.hasAttribute('server');
227fb726d48Sopenharmony_ci  }
228fb726d48Sopenharmony_ci
229fb726d48Sopenharmony_ci  set server(s: boolean) {
230fb726d48Sopenharmony_ci    if (s) {
231fb726d48Sopenharmony_ci      this.setAttribute('server', '');
232fb726d48Sopenharmony_ci    } else {
233fb726d48Sopenharmony_ci      this.removeAttribute('server');
234fb726d48Sopenharmony_ci    }
235fb726d48Sopenharmony_ci  }
236fb726d48Sopenharmony_ci
237fb726d48Sopenharmony_ci  get querySql(): boolean {
238fb726d48Sopenharmony_ci    return this.hasAttribute('query-sql');
239fb726d48Sopenharmony_ci  }
240fb726d48Sopenharmony_ci
241fb726d48Sopenharmony_ci  set querySql(isShowMetric) {
242fb726d48Sopenharmony_ci    if (isShowMetric) {
243fb726d48Sopenharmony_ci      this.setAttribute('query-sql', '');
244fb726d48Sopenharmony_ci    } else {
245fb726d48Sopenharmony_ci      this.removeAttribute('query-sql');
246fb726d48Sopenharmony_ci    }
247fb726d48Sopenharmony_ci  }
248fb726d48Sopenharmony_ci
249fb726d48Sopenharmony_ci  set search(search: boolean) {
250fb726d48Sopenharmony_ci    if (search) {
251fb726d48Sopenharmony_ci      this.setAttribute('search', '');
252fb726d48Sopenharmony_ci    } else {
253fb726d48Sopenharmony_ci      this.removeAttribute('search');
254fb726d48Sopenharmony_ci    }
255fb726d48Sopenharmony_ci  }
256fb726d48Sopenharmony_ci
257fb726d48Sopenharmony_ci  get search(): boolean {
258fb726d48Sopenharmony_ci    return this.hasAttribute('search');
259fb726d48Sopenharmony_ci  }
260fb726d48Sopenharmony_ci
261fb726d48Sopenharmony_ci  addSkinListener(handler: Function): void {
262fb726d48Sopenharmony_ci    this.skinChangeArray.push(handler);
263fb726d48Sopenharmony_ci  }
264fb726d48Sopenharmony_ci
265fb726d48Sopenharmony_ci  removeSkinListener(handler: Function): void {
266fb726d48Sopenharmony_ci    this.skinChangeArray.splice(this.skinChangeArray.indexOf(handler), 1);
267fb726d48Sopenharmony_ci  }
268fb726d48Sopenharmony_ci
269fb726d48Sopenharmony_ci  initHtml(): string {
270fb726d48Sopenharmony_ci    return applicationHtml;
271fb726d48Sopenharmony_ci  }
272fb726d48Sopenharmony_ci
273fb726d48Sopenharmony_ci  initPlugin(): void {
274fb726d48Sopenharmony_ci    SpStatisticsHttpUtil.initStatisticsServerConfig();
275fb726d48Sopenharmony_ci    SpStatisticsHttpUtil.addUserVisitAction('visit');
276fb726d48Sopenharmony_ci    LongTraceDBUtils.getInstance().createDBAndTable().then();
277fb726d48Sopenharmony_ci  }
278fb726d48Sopenharmony_ci
279fb726d48Sopenharmony_ci  initElements(): void {
280fb726d48Sopenharmony_ci    this.wasm = true;
281fb726d48Sopenharmony_ci    this.initPlugin();
282fb726d48Sopenharmony_ci    this.querySql = true;
283fb726d48Sopenharmony_ci    this.rootEL = this.shadowRoot!.querySelector<HTMLDivElement>('.root');
284fb726d48Sopenharmony_ci    this.headerDiv = this.shadowRoot!.querySelector<HTMLDivElement>('.search-vessel');
285fb726d48Sopenharmony_ci    this.spWelcomePage = this.shadowRoot!.querySelector('#sp-welcome') as SpWelcomePage;
286fb726d48Sopenharmony_ci    this.spMetrics = this.shadowRoot!.querySelector<SpMetrics>('#sp-metrics') as SpMetrics; // new SpMetrics();
287fb726d48Sopenharmony_ci    this.spQuerySQL = this.shadowRoot!.querySelector<SpQuerySQL>('#sp-query-sql') as SpQuerySQL; // new SpQuerySQL();
288fb726d48Sopenharmony_ci    this.spInfoAndStats = this.shadowRoot!.querySelector<SpInfoAndStats>('#sp-info-and-stats'); // new SpInfoAndStats();
289fb726d48Sopenharmony_ci    this.spSystemTrace = this.shadowRoot!.querySelector<SpSystemTrace>('#sp-system-trace');
290fb726d48Sopenharmony_ci    this.spHelp = this.shadowRoot!.querySelector<SpHelp>('#sp-help');
291fb726d48Sopenharmony_ci    this.spKeyboard = this.shadowRoot!.querySelector<SpKeyboard>('#sp-keyboard') as SpKeyboard;
292fb726d48Sopenharmony_ci    this.spFlags = this.shadowRoot!.querySelector<SpFlags>('#sp-flags') as SpFlags;
293fb726d48Sopenharmony_ci    this.spRecordTrace = this.shadowRoot!.querySelector<SpRecordTrace>('#sp-record-trace');
294fb726d48Sopenharmony_ci    this.spRecordTemplate = this.shadowRoot!.querySelector<SpRecordTrace>('#sp-record-template');
295fb726d48Sopenharmony_ci    this.spSchedulingAnalysis = this.shadowRoot!.querySelector<SpSchedulingAnalysis>('#sp-scheduling-analysis');
296fb726d48Sopenharmony_ci    this.mainMenu = this.shadowRoot?.querySelector('#main-menu') as LitMainMenu;
297fb726d48Sopenharmony_ci    this.menu = this.mainMenu.shadowRoot?.querySelector('.menu-button') as HTMLDivElement;
298fb726d48Sopenharmony_ci    this.progressEL = this.shadowRoot?.querySelector('.progress') as LitProgressBar;
299fb726d48Sopenharmony_ci    this.litSearch = this.shadowRoot?.querySelector('#lit-search') as LitSearch;
300fb726d48Sopenharmony_ci    this.litRecordSearch = this.shadowRoot?.querySelector('#lit-record-search') as LitSearch;
301fb726d48Sopenharmony_ci    this.sidebarButton = this.shadowRoot?.querySelector('.sidebar-button');
302fb726d48Sopenharmony_ci    this.chartFilter = this.shadowRoot?.querySelector('.chart-filter') as TraceRowConfig;
303fb726d48Sopenharmony_ci    this.aiAnalysis = this.shadowRoot?.querySelector('.ai_analysis') as HTMLImageElement;
304fb726d48Sopenharmony_ci    this.cutTraceFile = this.shadowRoot?.querySelector('.cut-trace-file') as HTMLImageElement;
305fb726d48Sopenharmony_ci    this.exportRecord = this.shadowRoot?.querySelector('.export-record') as LitIcon;
306fb726d48Sopenharmony_ci    this.longTracePage = this.shadowRoot!.querySelector('.long_trace_page') as HTMLDivElement;
307fb726d48Sopenharmony_ci    this.customColor = this.shadowRoot?.querySelector('.custom-color') as CustomThemeColor;
308fb726d48Sopenharmony_ci    this.filterConfig = this.shadowRoot?.querySelector('.filter-config') as LitIcon;
309fb726d48Sopenharmony_ci    this.spThirdParty = this.shadowRoot!.querySelector('#sp-third-party') as SpThirdParty;
310fb726d48Sopenharmony_ci    this.configClose = this.shadowRoot
311fb726d48Sopenharmony_ci      ?.querySelector<HTMLElement>('.chart-filter')!
312fb726d48Sopenharmony_ci      .shadowRoot?.querySelector<LitIcon>('.config-close');
313fb726d48Sopenharmony_ci    this.importConfigDiv = this.shadowRoot?.querySelector<HTMLInputElement>('#import-key-path');
314fb726d48Sopenharmony_ci    this.closeKeyPath = this.shadowRoot?.querySelector<HTMLDivElement>('#close-key-path');
315fb726d48Sopenharmony_ci    this.importFileBt = this.shadowRoot?.querySelector<HTMLInputElement>('#import-config');
316fb726d48Sopenharmony_ci    this.contentRightOption = this.shadowRoot?.querySelector<HTMLDivElement>('.content-right-option');
317fb726d48Sopenharmony_ci    this.contentLeftOption = this.shadowRoot?.querySelector<HTMLDivElement>('.content-left-option');
318fb726d48Sopenharmony_ci    this.contentCenterOption = this.shadowRoot?.querySelector<HTMLDivElement>('.content-center-option');
319fb726d48Sopenharmony_ci    this.spAiAnalysisPage = this.shadowRoot!.querySelector('#sp-ai-analysis') as SpAiAnalysisPage;
320fb726d48Sopenharmony_ci    this.initElementsAttr();
321fb726d48Sopenharmony_ci    this.initEvents();
322fb726d48Sopenharmony_ci    this.initRecordEvents();
323fb726d48Sopenharmony_ci    this.initCustomEvents();
324fb726d48Sopenharmony_ci    this.initCustomColorHandler();
325fb726d48Sopenharmony_ci    this.initImportConfigEvent();
326fb726d48Sopenharmony_ci    this.initSlideMenuEvents();
327fb726d48Sopenharmony_ci    this.resetMenus();
328fb726d48Sopenharmony_ci    this.initGlobalEvents();
329fb726d48Sopenharmony_ci    this.initDocumentListener();
330fb726d48Sopenharmony_ci    this.initElementsEnd();
331fb726d48Sopenharmony_ci    this.connectWebSocket();
332fb726d48Sopenharmony_ci  }
333fb726d48Sopenharmony_ci  private connectWebSocket(): void {
334fb726d48Sopenharmony_ci    document.addEventListener('DOMContentLoaded', function () {//
335fb726d48Sopenharmony_ci      WebSocketManager.getInstance();
336fb726d48Sopenharmony_ci    });
337fb726d48Sopenharmony_ci  }
338fb726d48Sopenharmony_ci  private initElementsEnd(): void {
339fb726d48Sopenharmony_ci    let urlParams = new URL(window.location.href).searchParams;
340fb726d48Sopenharmony_ci    let jsonStr = '';
341fb726d48Sopenharmony_ci    if (urlParams && urlParams.get('json')) {
342fb726d48Sopenharmony_ci      jsonStr = decodeURIComponent(window.location.href.split('&').reverse()[0].split('=')[1]);
343fb726d48Sopenharmony_ci    }
344fb726d48Sopenharmony_ci    if (urlParams && urlParams.get('trace') && urlParams.get('link')) {
345fb726d48Sopenharmony_ci      this.openLineFileHandler(urlParams, jsonStr);
346fb726d48Sopenharmony_ci    } else if (urlParams && urlParams.get('action')) {
347fb726d48Sopenharmony_ci      this.helpClick(urlParams!);
348fb726d48Sopenharmony_ci    } else {
349fb726d48Sopenharmony_ci      this.openMenu(true);
350fb726d48Sopenharmony_ci    }
351fb726d48Sopenharmony_ci  }
352fb726d48Sopenharmony_ci
353fb726d48Sopenharmony_ci  private helpClick(urlParams: URLSearchParams): void {
354fb726d48Sopenharmony_ci    if (urlParams.get('action') === 'help') {
355fb726d48Sopenharmony_ci      SpStatisticsHttpUtil.addOrdinaryVisitAction({
356fb726d48Sopenharmony_ci        event: 'help_page',
357fb726d48Sopenharmony_ci        action: 'help_doc',
358fb726d48Sopenharmony_ci      });
359fb726d48Sopenharmony_ci      this.spHelp!.dark = this.dark;
360fb726d48Sopenharmony_ci      this.showContent(this.spHelp!);
361fb726d48Sopenharmony_ci    } else if (urlParams.get('action')!.length > 4) {
362fb726d48Sopenharmony_ci      this.showContent(this.spHelp!);
363fb726d48Sopenharmony_ci    }
364fb726d48Sopenharmony_ci  }
365fb726d48Sopenharmony_ci
366fb726d48Sopenharmony_ci  private initElementsAttr(): void {
367fb726d48Sopenharmony_ci    this.mainMenu!.setAttribute('main_menu', '1');
368fb726d48Sopenharmony_ci    this.chartFilter!.setAttribute('mode', '');
369fb726d48Sopenharmony_ci    this.chartFilter!.setAttribute('hidden', '');
370fb726d48Sopenharmony_ci    this.customColor!.setAttribute('mode', '');
371fb726d48Sopenharmony_ci    this.customColor!.setAttribute('hidden', '');
372fb726d48Sopenharmony_ci    this.childComponent = [
373fb726d48Sopenharmony_ci      this.spSystemTrace,
374fb726d48Sopenharmony_ci      this.spRecordTrace,
375fb726d48Sopenharmony_ci      this.spWelcomePage,
376fb726d48Sopenharmony_ci      this.spAiAnalysisPage,
377fb726d48Sopenharmony_ci      this.spMetrics,
378fb726d48Sopenharmony_ci      this.spQuerySQL,
379fb726d48Sopenharmony_ci      this.spSchedulingAnalysis,
380fb726d48Sopenharmony_ci      this.spInfoAndStats,
381fb726d48Sopenharmony_ci      this.spHelp,
382fb726d48Sopenharmony_ci      this.spRecordTemplate,
383fb726d48Sopenharmony_ci      this.spFlags,
384fb726d48Sopenharmony_ci      this.spKeyboard,
385fb726d48Sopenharmony_ci      this.spThirdParty,
386fb726d48Sopenharmony_ci    ];
387fb726d48Sopenharmony_ci  }
388fb726d48Sopenharmony_ci
389fb726d48Sopenharmony_ci  private openLongTraceFile(ev: unknown, isRecordTrace: boolean = false): void {
390fb726d48Sopenharmony_ci    this.returnOriginalUrl();
391fb726d48Sopenharmony_ci    this.wasm = true;
392fb726d48Sopenharmony_ci    this.openFileInit(true);
393fb726d48Sopenharmony_ci    // @ts-ignore
394fb726d48Sopenharmony_ci    let detail = ev.detail;
395fb726d48Sopenharmony_ci    let initRes = this.longTraceFileInit(isRecordTrace, detail);
396fb726d48Sopenharmony_ci    if (!isRecordTrace && initRes) {
397fb726d48Sopenharmony_ci      let readSize = 0;
398fb726d48Sopenharmony_ci      let timStamp = new Date().getTime();
399fb726d48Sopenharmony_ci      const { traceTypePage, allFileSize, normalTraceNames, specialTraceNames } = initRes;
400fb726d48Sopenharmony_ci      if (normalTraceNames.length <= 0) {
401fb726d48Sopenharmony_ci        return;
402fb726d48Sopenharmony_ci      }
403fb726d48Sopenharmony_ci      const readFiles = async (
404fb726d48Sopenharmony_ci        files: FileList,
405fb726d48Sopenharmony_ci        traceTypePage: Array<number>,
406fb726d48Sopenharmony_ci        normalNames: Array<string>,
407fb726d48Sopenharmony_ci        specialNames: Array<string>
408fb726d48Sopenharmony_ci      ): Promise<unknown> => {
409fb726d48Sopenharmony_ci        const promises = Array.from(files).map((file) => {
410fb726d48Sopenharmony_ci          if (normalNames.indexOf(file.name.toLowerCase()) >= 0) {
411fb726d48Sopenharmony_ci            return this.longTraceFileRead(file, true, traceTypePage, readSize, timStamp, allFileSize);
412fb726d48Sopenharmony_ci          } else if (specialNames.indexOf(file.name.toLowerCase()) >= 0) {
413fb726d48Sopenharmony_ci            return this.longTraceFileRead(file, false, traceTypePage, readSize, timStamp, allFileSize);
414fb726d48Sopenharmony_ci          } else {
415fb726d48Sopenharmony_ci            return;
416fb726d48Sopenharmony_ci          }
417fb726d48Sopenharmony_ci        });
418fb726d48Sopenharmony_ci        return Promise.all(promises);
419fb726d48Sopenharmony_ci      };
420fb726d48Sopenharmony_ci      this.litSearch!.setPercent('Read in file: ', 1);
421fb726d48Sopenharmony_ci      readFiles(detail, traceTypePage, normalTraceNames, specialTraceNames).then(() => {
422fb726d48Sopenharmony_ci        this.litSearch!.setPercent('Cut in file: ', 1);
423fb726d48Sopenharmony_ci        this.sendCutFileMessage(timStamp);
424fb726d48Sopenharmony_ci      });
425fb726d48Sopenharmony_ci    }
426fb726d48Sopenharmony_ci  }
427fb726d48Sopenharmony_ci
428fb726d48Sopenharmony_ci  private longTraceFileRead = async (
429fb726d48Sopenharmony_ci    file: File,
430fb726d48Sopenharmony_ci    isNormalType: boolean,
431fb726d48Sopenharmony_ci    traceTypePage: Array<number>,
432fb726d48Sopenharmony_ci    readSize: number,
433fb726d48Sopenharmony_ci    timStamp: number,
434fb726d48Sopenharmony_ci    allFileSize: number
435fb726d48Sopenharmony_ci  ): Promise<boolean> => {
436fb726d48Sopenharmony_ci    info('reading long trace file ', file.name);
437fb726d48Sopenharmony_ci    return new Promise((resolve, reject) => {
438fb726d48Sopenharmony_ci      let fr = new FileReader();
439fb726d48Sopenharmony_ci      let message = { fileType: '', startIndex: 0, endIndex: 0, size: 0 };
440fb726d48Sopenharmony_ci      info('Parse long trace using wasm mode ');
441fb726d48Sopenharmony_ci      const { fileType, pageNumber } = this.getFileTypeAndPages(file.name, isNormalType, traceTypePage);
442fb726d48Sopenharmony_ci      let chunk = 48 * 1024 * 1024;
443fb726d48Sopenharmony_ci      let offset = 0;
444fb726d48Sopenharmony_ci      let sliceLen = 0;
445fb726d48Sopenharmony_ci      let index = 1;
446fb726d48Sopenharmony_ci      fr.onload = (): void => {
447fb726d48Sopenharmony_ci        let data = fr.result as ArrayBuffer;
448fb726d48Sopenharmony_ci        LongTraceDBUtils.getInstance()
449fb726d48Sopenharmony_ci          .addLongTableData(data, fileType, timStamp, pageNumber, index, offset, sliceLen)
450fb726d48Sopenharmony_ci          .then(() => {
451fb726d48Sopenharmony_ci            this.longTraceFileReadMessagePush(index, isNormalType, pageNumber, offset, sliceLen, fileType, data);
452fb726d48Sopenharmony_ci            offset += sliceLen;
453fb726d48Sopenharmony_ci            if (offset < file.size) {
454fb726d48Sopenharmony_ci              index++;
455fb726d48Sopenharmony_ci            }
456fb726d48Sopenharmony_ci            continueReading();
457fb726d48Sopenharmony_ci          });
458fb726d48Sopenharmony_ci      };
459fb726d48Sopenharmony_ci      const continueReading = (): void => {
460fb726d48Sopenharmony_ci        if (offset >= file.size) {
461fb726d48Sopenharmony_ci          message.endIndex = index;
462fb726d48Sopenharmony_ci          message.size = file.size;
463fb726d48Sopenharmony_ci          this.longTraceFileReadMessageHandler(pageNumber, message);
464fb726d48Sopenharmony_ci          resolve(true);
465fb726d48Sopenharmony_ci          return;
466fb726d48Sopenharmony_ci        }
467fb726d48Sopenharmony_ci        if (index === 1) {
468fb726d48Sopenharmony_ci          message.fileType = fileType;
469fb726d48Sopenharmony_ci          message.startIndex = index;
470fb726d48Sopenharmony_ci        }
471fb726d48Sopenharmony_ci        sliceLen = Math.min(file.size - offset, chunk);
472fb726d48Sopenharmony_ci        let slice = file.slice(offset, offset + sliceLen);
473fb726d48Sopenharmony_ci        readSize += slice.size;
474fb726d48Sopenharmony_ci        let percentValue = ((readSize * 100) / allFileSize).toFixed(2);
475fb726d48Sopenharmony_ci        this.litSearch!.setPercent('Read in file: ', Number(percentValue));
476fb726d48Sopenharmony_ci        fr.readAsArrayBuffer(slice);
477fb726d48Sopenharmony_ci      };
478fb726d48Sopenharmony_ci      continueReading();
479fb726d48Sopenharmony_ci      fr.onerror = (): void => reject(false);
480fb726d48Sopenharmony_ci      info('read over long trace file ', file.name);
481fb726d48Sopenharmony_ci    });
482fb726d48Sopenharmony_ci  };
483fb726d48Sopenharmony_ci
484fb726d48Sopenharmony_ci  getFileTypeAndPages(
485fb726d48Sopenharmony_ci    fileName: string,
486fb726d48Sopenharmony_ci    isNormalType: boolean,
487fb726d48Sopenharmony_ci    traceTypePage: Array<number>
488fb726d48Sopenharmony_ci  ): {
489fb726d48Sopenharmony_ci    fileType: string;
490fb726d48Sopenharmony_ci    pageNumber: number;
491fb726d48Sopenharmony_ci  } {
492fb726d48Sopenharmony_ci    let fileType = 'trace';
493fb726d48Sopenharmony_ci    let pageNumber = 0;
494fb726d48Sopenharmony_ci    let firstLastIndexOf = fileName.lastIndexOf('.');
495fb726d48Sopenharmony_ci    let firstText = fileName.slice(0, firstLastIndexOf);
496fb726d48Sopenharmony_ci    let resultLastIndexOf = firstText.lastIndexOf('_');
497fb726d48Sopenharmony_ci    let searchResult = firstText.slice(resultLastIndexOf + 1, firstText.length);
498fb726d48Sopenharmony_ci    if (isNormalType) {
499fb726d48Sopenharmony_ci      pageNumber = traceTypePage.lastIndexOf(Number(searchResult));
500fb726d48Sopenharmony_ci    } else {
501fb726d48Sopenharmony_ci      fileType = searchResult;
502fb726d48Sopenharmony_ci    }
503fb726d48Sopenharmony_ci    return { fileType, pageNumber };
504fb726d48Sopenharmony_ci  }
505fb726d48Sopenharmony_ci
506fb726d48Sopenharmony_ci  private longTraceFileInit(
507fb726d48Sopenharmony_ci    isRecordTrace: boolean,
508fb726d48Sopenharmony_ci    detail: unknown
509fb726d48Sopenharmony_ci  ):
510fb726d48Sopenharmony_ci    | {
511fb726d48Sopenharmony_ci      traceTypePage: number[];
512fb726d48Sopenharmony_ci      allFileSize: number;
513fb726d48Sopenharmony_ci      normalTraceNames: string[];
514fb726d48Sopenharmony_ci      specialTraceNames: string[];
515fb726d48Sopenharmony_ci    }
516fb726d48Sopenharmony_ci    | undefined {
517fb726d48Sopenharmony_ci    if (!this.wasm) {
518fb726d48Sopenharmony_ci      this.progressEL!.loading = false;
519fb726d48Sopenharmony_ci      return;
520fb726d48Sopenharmony_ci    }
521fb726d48Sopenharmony_ci    if (this.longTracePage) {
522fb726d48Sopenharmony_ci      this.longTracePage.style.display = 'none';
523fb726d48Sopenharmony_ci      this.litSearch!.style.marginLeft = '0px';
524fb726d48Sopenharmony_ci      this.shadowRoot!.querySelector('.page-number-list')!.innerHTML = '';
525fb726d48Sopenharmony_ci    }
526fb726d48Sopenharmony_ci    this.currentPageNum = 1;
527fb726d48Sopenharmony_ci    if (isRecordTrace) {
528fb726d48Sopenharmony_ci      //@ts-ignore
529fb726d48Sopenharmony_ci      this.sendCutFileMessage(detail.timeStamp);
530fb726d48Sopenharmony_ci      return undefined;
531fb726d48Sopenharmony_ci    } else {
532fb726d48Sopenharmony_ci      this.longTraceHeadMessageList = [];
533fb726d48Sopenharmony_ci      this.longTraceTypeMessageMap = undefined;
534fb726d48Sopenharmony_ci      this.longTraceDataList = [];
535fb726d48Sopenharmony_ci      let traceTypePage: Array<number> = [];
536fb726d48Sopenharmony_ci      let allFileSize = 0;
537fb726d48Sopenharmony_ci      let normalTraceNames: Array<string> = [];
538fb726d48Sopenharmony_ci      let specialTraceNames: Array<string> = []; //@ts-ignore
539fb726d48Sopenharmony_ci      for (let index = 0; index < detail.length; index++) {
540fb726d48Sopenharmony_ci        //@ts-ignore
541fb726d48Sopenharmony_ci        let file = detail[index];
542fb726d48Sopenharmony_ci        let fileName = file.name as string;
543fb726d48Sopenharmony_ci        allFileSize += file.size;
544fb726d48Sopenharmony_ci        let specialMatch = fileName.match(/_(arkts|ebpf|hiperf)\.htrace$/);
545fb726d48Sopenharmony_ci        let normalMatch = fileName.match(/_\d{8}_\d{6}_\d+\.htrace$/);
546fb726d48Sopenharmony_ci        if (normalMatch) {
547fb726d48Sopenharmony_ci          normalTraceNames.push(fileName);
548fb726d48Sopenharmony_ci          let fileNameStr = fileName.split('.')[0];
549fb726d48Sopenharmony_ci          let pageMatch = fileNameStr.match(/\d+$/);
550fb726d48Sopenharmony_ci          if (pageMatch) {
551fb726d48Sopenharmony_ci            traceTypePage.push(Number(pageMatch[0]));
552fb726d48Sopenharmony_ci          }
553fb726d48Sopenharmony_ci        } else if (specialMatch) {
554fb726d48Sopenharmony_ci          specialTraceNames.push(fileName);
555fb726d48Sopenharmony_ci        }
556fb726d48Sopenharmony_ci      }
557fb726d48Sopenharmony_ci      if (normalTraceNames.length <= 0) {
558fb726d48Sopenharmony_ci        this.traceFileLoadFailedHandler('No large trace files exists in the folder!');
559fb726d48Sopenharmony_ci      }
560fb726d48Sopenharmony_ci      traceTypePage.sort((leftNum: number, rightNum: number) => leftNum - rightNum);
561fb726d48Sopenharmony_ci      return { traceTypePage, allFileSize, normalTraceNames, specialTraceNames };
562fb726d48Sopenharmony_ci    }
563fb726d48Sopenharmony_ci  }
564fb726d48Sopenharmony_ci
565fb726d48Sopenharmony_ci  longTraceFileReadMessagePush(
566fb726d48Sopenharmony_ci    index: number,
567fb726d48Sopenharmony_ci    isNormalType: boolean,
568fb726d48Sopenharmony_ci    pageNumber: number,
569fb726d48Sopenharmony_ci    offset: number,
570fb726d48Sopenharmony_ci    sliceLen: number,
571fb726d48Sopenharmony_ci    fileType: string,
572fb726d48Sopenharmony_ci    data: ArrayBuffer
573fb726d48Sopenharmony_ci  ): void {
574fb726d48Sopenharmony_ci    if (index === 1 && isNormalType) {
575fb726d48Sopenharmony_ci      this.longTraceHeadMessageList.push({
576fb726d48Sopenharmony_ci        pageNum: pageNumber,
577fb726d48Sopenharmony_ci        data: data.slice(offset, 1024),
578fb726d48Sopenharmony_ci      });
579fb726d48Sopenharmony_ci    }
580fb726d48Sopenharmony_ci    this.longTraceDataList.push({
581fb726d48Sopenharmony_ci      index: index,
582fb726d48Sopenharmony_ci      fileType: fileType,
583fb726d48Sopenharmony_ci      pageNum: pageNumber,
584fb726d48Sopenharmony_ci      startOffsetSize: offset,
585fb726d48Sopenharmony_ci      endOffsetSize: offset + sliceLen,
586fb726d48Sopenharmony_ci    });
587fb726d48Sopenharmony_ci  }
588fb726d48Sopenharmony_ci
589fb726d48Sopenharmony_ci  longTraceFileReadMessageHandler(pageNumber: number, message: unknown): void {
590fb726d48Sopenharmony_ci    if (this.longTraceTypeMessageMap) {
591fb726d48Sopenharmony_ci      if (this.longTraceTypeMessageMap?.has(pageNumber)) {
592fb726d48Sopenharmony_ci        let oldTypeList = this.longTraceTypeMessageMap?.get(pageNumber);
593fb726d48Sopenharmony_ci        //@ts-ignore
594fb726d48Sopenharmony_ci        oldTypeList?.push(message);
595fb726d48Sopenharmony_ci        this.longTraceTypeMessageMap?.set(pageNumber, oldTypeList!);
596fb726d48Sopenharmony_ci      } else {
597fb726d48Sopenharmony_ci        //@ts-ignore
598fb726d48Sopenharmony_ci        this.longTraceTypeMessageMap?.set(pageNumber, [message]);
599fb726d48Sopenharmony_ci      }
600fb726d48Sopenharmony_ci    } else {
601fb726d48Sopenharmony_ci      this.longTraceTypeMessageMap = new Map();
602fb726d48Sopenharmony_ci      //@ts-ignore
603fb726d48Sopenharmony_ci      this.longTraceTypeMessageMap.set(pageNumber, [message]);
604fb726d48Sopenharmony_ci    }
605fb726d48Sopenharmony_ci  }
606fb726d48Sopenharmony_ci
607fb726d48Sopenharmony_ci  private openTraceFile(ev: unknown, isClickHandle?: boolean): void {
608fb726d48Sopenharmony_ci    this.returnOriginalUrl();
609fb726d48Sopenharmony_ci    this.removeAttribute('custom-color');
610fb726d48Sopenharmony_ci    this.chartFilter!.setAttribute('hidden', '');
611fb726d48Sopenharmony_ci    this.customColor!.setAttribute('hidden', '');
612fb726d48Sopenharmony_ci    this.longTracePage!.style.display = 'none';
613fb726d48Sopenharmony_ci    this.litSearch!.style.marginLeft = '0px';
614fb726d48Sopenharmony_ci    // 诊断的db标记重置
615fb726d48Sopenharmony_ci    SpAiAnalysisPage.isRepeatedly = false;
616fb726d48Sopenharmony_ci    this.spAiAnalysisPage!.style.display = 'none';
617fb726d48Sopenharmony_ci    let pageListDiv = this.shadowRoot?.querySelector('.page-number-list') as HTMLDivElement;
618fb726d48Sopenharmony_ci    pageListDiv.innerHTML = '';
619fb726d48Sopenharmony_ci    this.openFileInit();
620fb726d48Sopenharmony_ci    if (this.importConfigDiv && this.closeKeyPath) {
621fb726d48Sopenharmony_ci      this.importConfigDiv.style.display = 'none';
622fb726d48Sopenharmony_ci      this.closeKeyPath.style.display = 'none';
623fb726d48Sopenharmony_ci    }
624fb726d48Sopenharmony_ci    //@ts-ignore
625fb726d48Sopenharmony_ci    let fileName = ev.name;
626fb726d48Sopenharmony_ci    this.traceFileName = fileName;
627fb726d48Sopenharmony_ci    let showFileName = fileName.lastIndexOf('.') === -1 ? fileName : fileName.substring(0, fileName.lastIndexOf('.'));
628fb726d48Sopenharmony_ci    window.sessionStorage.setItem('fileName', showFileName);
629fb726d48Sopenharmony_ci    TraceRow.rangeSelectObject = undefined;
630fb726d48Sopenharmony_ci    //@ts-ignore
631fb726d48Sopenharmony_ci    let typeStr = ev.slice(0, 100);
632fb726d48Sopenharmony_ci    let reader: FileReader | null = new FileReader();
633fb726d48Sopenharmony_ci    reader.readAsText(typeStr);
634fb726d48Sopenharmony_ci    reader.onloadend = (event): void => {
635fb726d48Sopenharmony_ci      let isIncludeMark = `${reader?.result}`.includes('MarkPositionJSON');
636fb726d48Sopenharmony_ci      let typeHeader;
637fb726d48Sopenharmony_ci      if (isIncludeMark) {
638fb726d48Sopenharmony_ci        let markLength = `${reader?.result}`.split('->')[0].replace('MarkPositionJSON', '');
639fb726d48Sopenharmony_ci        //@ts-ignore
640fb726d48Sopenharmony_ci        typeHeader = ev.slice(markLength.length + parseInt(markLength), markLength.length + parseInt(markLength) + 6);
641fb726d48Sopenharmony_ci      } else {
642fb726d48Sopenharmony_ci        //@ts-ignore
643fb726d48Sopenharmony_ci        typeHeader = ev.slice(0, 6);
644fb726d48Sopenharmony_ci      }
645fb726d48Sopenharmony_ci      let fileReader: FileReader | null = new FileReader();
646fb726d48Sopenharmony_ci      fileReader.readAsText(typeHeader);
647fb726d48Sopenharmony_ci      fileReader.onload = (event): void => {
648fb726d48Sopenharmony_ci        let headerStr: string = `${fileReader?.result}`;
649fb726d48Sopenharmony_ci        SpApplication.traceType = headerStr;
650fb726d48Sopenharmony_ci        if (headerStr.indexOf('SQLite') === 0) {
651fb726d48Sopenharmony_ci          info('Parse trace headerStr sql mode');
652fb726d48Sopenharmony_ci          this.wasm = false;
653fb726d48Sopenharmony_ci          //@ts-ignore
654fb726d48Sopenharmony_ci          this.handleSqliteMode(ev, showFileName, ev.size, fileName);
655fb726d48Sopenharmony_ci        } else {
656fb726d48Sopenharmony_ci          info('Parse trace using wasm mode ');
657fb726d48Sopenharmony_ci          this.wasm = true;
658fb726d48Sopenharmony_ci          //@ts-ignore
659fb726d48Sopenharmony_ci          this.handleWasmMode(ev, showFileName, ev.size, fileName);
660fb726d48Sopenharmony_ci        }
661fb726d48Sopenharmony_ci      }
662fb726d48Sopenharmony_ci    };
663fb726d48Sopenharmony_ci  }
664fb726d48Sopenharmony_ci
665fb726d48Sopenharmony_ci  private openDistributedTraceFile(ev: InputEvent): void {
666fb726d48Sopenharmony_ci    this.openFileInit(true);
667fb726d48Sopenharmony_ci    this.importConfigDiv!.style.display = 'none';
668fb726d48Sopenharmony_ci    this.closeKeyPath!.style.display = 'none';
669fb726d48Sopenharmony_ci    // @ts-ignore
670fb726d48Sopenharmony_ci    let fileList = ev.detail as FileList;
671fb726d48Sopenharmony_ci    if (fileList.length === 2) {
672fb726d48Sopenharmony_ci      this.handleDistributedWasmMode(fileList.item(0)!, fileList.item(1)!);
673fb726d48Sopenharmony_ci    } else {
674fb726d48Sopenharmony_ci      this.progressEL!.loading = false;
675fb726d48Sopenharmony_ci      this.litSearch!.setPercent('load distributed trace error', -1);
676fb726d48Sopenharmony_ci      this.resetMenus();
677fb726d48Sopenharmony_ci      this.freshMenuDisable(false);
678fb726d48Sopenharmony_ci      this.headerDiv!.style.pointerEvents = 'auto';
679fb726d48Sopenharmony_ci    }
680fb726d48Sopenharmony_ci  }
681fb726d48Sopenharmony_ci
682fb726d48Sopenharmony_ci  private openLineFileHandler(urlParams: URLSearchParams, jsonStr: string): void {
683fb726d48Sopenharmony_ci    Utils.currentTraceMode = TraceMode.NORMAL;
684fb726d48Sopenharmony_ci    this.openFileInit();
685fb726d48Sopenharmony_ci    this.openMenu(false);
686fb726d48Sopenharmony_ci    let downloadLineFile = urlParams.get('local') ? false : true;
687fb726d48Sopenharmony_ci    this.setProgress(downloadLineFile ? 'download trace file' : 'open trace file');
688fb726d48Sopenharmony_ci    this.downloadOnLineFile(
689fb726d48Sopenharmony_ci      urlParams.get('trace') as string,
690fb726d48Sopenharmony_ci      downloadLineFile,
691fb726d48Sopenharmony_ci      (arrayBuf, fileName, showFileName, fileSize) => {
692fb726d48Sopenharmony_ci        if (fileName.split('.').reverse()[0] === 'db') {
693fb726d48Sopenharmony_ci          this.wasm = false;
694fb726d48Sopenharmony_ci          this.handleSqliteMode(new File([arrayBuf], fileName), showFileName, fileSize, fileName, jsonStr);
695fb726d48Sopenharmony_ci        } else {
696fb726d48Sopenharmony_ci          this.handleWasmMode(new File([arrayBuf], fileName), showFileName, fileSize, fileName, jsonStr);
697fb726d48Sopenharmony_ci        }
698fb726d48Sopenharmony_ci      },
699fb726d48Sopenharmony_ci      (localPath) => {
700fb726d48Sopenharmony_ci        let path = urlParams.get('trace') as string;
701fb726d48Sopenharmony_ci        let fileName: string = '';
702fb726d48Sopenharmony_ci        let showFileName: string = '';
703fb726d48Sopenharmony_ci        if (urlParams.get('local')) {
704fb726d48Sopenharmony_ci          this.openMenu(true);
705fb726d48Sopenharmony_ci          fileName = urlParams.get('traceName') as string;
706fb726d48Sopenharmony_ci        } else {
707fb726d48Sopenharmony_ci          fileName = path.split('/').reverse()[0];
708fb726d48Sopenharmony_ci        }
709fb726d48Sopenharmony_ci        this.traceFileName = fileName;
710fb726d48Sopenharmony_ci        showFileName = fileName.lastIndexOf('.') === -1 ? fileName : fileName.substring(0, fileName.lastIndexOf('.'));
711fb726d48Sopenharmony_ci        TraceRow.rangeSelectObject = undefined;
712fb726d48Sopenharmony_ci        let localUrl = downloadLineFile ? `${window.location.origin}${localPath}` : urlParams.get('trace')!;
713fb726d48Sopenharmony_ci        fetch(localUrl)
714fb726d48Sopenharmony_ci          .then((res) => {
715fb726d48Sopenharmony_ci            res.arrayBuffer().then((arrayBuf) => {
716fb726d48Sopenharmony_ci              if (urlParams.get('local')) {
717fb726d48Sopenharmony_ci                URL.revokeObjectURL(localUrl);
718fb726d48Sopenharmony_ci              }
719fb726d48Sopenharmony_ci              this.handleWasmMode(new File([arrayBuf], fileName), showFileName, arrayBuf.byteLength, fileName);
720fb726d48Sopenharmony_ci            });
721fb726d48Sopenharmony_ci          })
722fb726d48Sopenharmony_ci          .catch((e) => {
723fb726d48Sopenharmony_ci            if (!downloadLineFile) {
724fb726d48Sopenharmony_ci              const firstQuestionMarkIndex = window.location.href.indexOf('?');
725fb726d48Sopenharmony_ci              location.replace(window.location.href.substring(0, firstQuestionMarkIndex));
726fb726d48Sopenharmony_ci            }
727fb726d48Sopenharmony_ci          });
728fb726d48Sopenharmony_ci      }
729fb726d48Sopenharmony_ci    );
730fb726d48Sopenharmony_ci  }
731fb726d48Sopenharmony_ci
732fb726d48Sopenharmony_ci  private openMenu(open: boolean): void {
733fb726d48Sopenharmony_ci    if (this.mainMenu) {
734fb726d48Sopenharmony_ci      this.mainMenu.style.width = open ? '248px' : '0px';
735fb726d48Sopenharmony_ci      this.mainMenu.style.zIndex = open ? '2000' : '0';
736fb726d48Sopenharmony_ci    }
737fb726d48Sopenharmony_ci    if (this.sidebarButton) {
738fb726d48Sopenharmony_ci      this.sidebarButton.style.width = open ? '0px' : '48px';
739fb726d48Sopenharmony_ci      this.importConfigDiv!.style.left = open ? '5px' : '45px';
740fb726d48Sopenharmony_ci      this.closeKeyPath!.style.left = open ? '25px' : '65px';
741fb726d48Sopenharmony_ci    }
742fb726d48Sopenharmony_ci  }
743fb726d48Sopenharmony_ci
744fb726d48Sopenharmony_ci  private initGlobalDropEvents(): void {
745fb726d48Sopenharmony_ci    let body = document.querySelector('body');
746fb726d48Sopenharmony_ci    body!.addEventListener(
747fb726d48Sopenharmony_ci      'drop',
748fb726d48Sopenharmony_ci      (e) => {
749fb726d48Sopenharmony_ci        e.preventDefault();
750fb726d48Sopenharmony_ci        e.stopPropagation();
751fb726d48Sopenharmony_ci        if (this.rootEL!.classList.contains('filedrag')) {
752fb726d48Sopenharmony_ci          this.rootEL!.classList.remove('filedrag');
753fb726d48Sopenharmony_ci        }
754fb726d48Sopenharmony_ci        //@ts-ignore
755fb726d48Sopenharmony_ci        if (e.dataTransfer.items !== undefined && e.dataTransfer.items.length > 0) {
756fb726d48Sopenharmony_ci          //@ts-ignore
757fb726d48Sopenharmony_ci          let item = e.dataTransfer.items[0];
758fb726d48Sopenharmony_ci          if (item.webkitGetAsEntry()?.isFile) {
759fb726d48Sopenharmony_ci            this.openTraceFile(item.getAsFile());
760fb726d48Sopenharmony_ci          } else if (item.webkitGetAsEntry()?.isDirectory) {
761fb726d48Sopenharmony_ci            this.litSearch!.setPercent('This File is not supported!', -1);
762fb726d48Sopenharmony_ci            this.progressEL!.loading = false;
763fb726d48Sopenharmony_ci            this.freshMenuDisable(false);
764fb726d48Sopenharmony_ci            this.mainMenu!.menus!.splice(2, 1);
765fb726d48Sopenharmony_ci            this.mainMenu!.menus = this.mainMenu!.menus!;
766fb726d48Sopenharmony_ci            this.spSystemTrace!.reset(null);
767fb726d48Sopenharmony_ci          }
768fb726d48Sopenharmony_ci        }
769fb726d48Sopenharmony_ci      },
770fb726d48Sopenharmony_ci      false
771fb726d48Sopenharmony_ci    );
772fb726d48Sopenharmony_ci  }
773fb726d48Sopenharmony_ci  private initGlobalEvents(): void {
774fb726d48Sopenharmony_ci    let body = document.querySelector('body');
775fb726d48Sopenharmony_ci    body!.addEventListener(
776fb726d48Sopenharmony_ci      'dragover',
777fb726d48Sopenharmony_ci      (e) => {
778fb726d48Sopenharmony_ci        e.preventDefault();
779fb726d48Sopenharmony_ci        e.stopPropagation();
780fb726d48Sopenharmony_ci        //@ts-ignore
781fb726d48Sopenharmony_ci        if (e.dataTransfer.items.length > 0 && e.dataTransfer.items[0].kind === 'file') {
782fb726d48Sopenharmony_ci          //@ts-ignore
783fb726d48Sopenharmony_ci          e.dataTransfer.dropEffect = 'copy';
784fb726d48Sopenharmony_ci          if (!this.rootEL!.classList.contains('filedrag')) {
785fb726d48Sopenharmony_ci            this.rootEL!.classList.add('filedrag');
786fb726d48Sopenharmony_ci          }
787fb726d48Sopenharmony_ci        }
788fb726d48Sopenharmony_ci      },
789fb726d48Sopenharmony_ci      false
790fb726d48Sopenharmony_ci    );
791fb726d48Sopenharmony_ci    body!.addEventListener(
792fb726d48Sopenharmony_ci      'dragleave',
793fb726d48Sopenharmony_ci      (e) => {
794fb726d48Sopenharmony_ci        e.stopPropagation();
795fb726d48Sopenharmony_ci        e.preventDefault();
796fb726d48Sopenharmony_ci        if (this.rootEL!.classList.contains('filedrag')) {
797fb726d48Sopenharmony_ci          this.rootEL!.classList.remove('filedrag');
798fb726d48Sopenharmony_ci        }
799fb726d48Sopenharmony_ci      },
800fb726d48Sopenharmony_ci      false
801fb726d48Sopenharmony_ci    );
802fb726d48Sopenharmony_ci    this.initGlobalDropEvents();
803fb726d48Sopenharmony_ci  }
804fb726d48Sopenharmony_ci
805fb726d48Sopenharmony_ci  private initDocumentListener(): void {
806fb726d48Sopenharmony_ci    document.addEventListener('file-error', () => {
807fb726d48Sopenharmony_ci      this.litSearch!.setPercent('This File is Error!', -1);
808fb726d48Sopenharmony_ci    });
809fb726d48Sopenharmony_ci    document.addEventListener('file-correct', () => {
810fb726d48Sopenharmony_ci      this.litSearch!.setPercent('', 101);
811fb726d48Sopenharmony_ci    });
812fb726d48Sopenharmony_ci    document.addEventListener('visibilitychange', () => {
813fb726d48Sopenharmony_ci      if (document.visibilityState === 'visible') {
814fb726d48Sopenharmony_ci        this.validateFileCacheLost();
815fb726d48Sopenharmony_ci        if (window.localStorage.getItem('Theme') === 'dark') {
816fb726d48Sopenharmony_ci          this.changeTheme(Theme.DARK);
817fb726d48Sopenharmony_ci        } else {
818fb726d48Sopenharmony_ci          this.changeTheme(Theme.LIGHT);
819fb726d48Sopenharmony_ci        }
820fb726d48Sopenharmony_ci      }
821fb726d48Sopenharmony_ci    });
822fb726d48Sopenharmony_ci    document.addEventListener('keydown', (event) => {
823fb726d48Sopenharmony_ci      const e = event || window.event;
824fb726d48Sopenharmony_ci      const ctrlKey = e.ctrlKey || e.metaKey;
825fb726d48Sopenharmony_ci      //@ts-ignore
826fb726d48Sopenharmony_ci      if (ctrlKey && this.keyCodeMap[e.keyCode]) {
827fb726d48Sopenharmony_ci        e.preventDefault();
828fb726d48Sopenharmony_ci      } else if (e.detail) {
829fb726d48Sopenharmony_ci        // Firefox
830fb726d48Sopenharmony_ci        event.returnValue = false;
831fb726d48Sopenharmony_ci      }
832fb726d48Sopenharmony_ci    });
833fb726d48Sopenharmony_ci    document.body.addEventListener(
834fb726d48Sopenharmony_ci      'wheel',
835fb726d48Sopenharmony_ci      (e) => {
836fb726d48Sopenharmony_ci        if (e.ctrlKey) {
837fb726d48Sopenharmony_ci          if (e.deltaY < 0) {
838fb726d48Sopenharmony_ci            e.preventDefault();
839fb726d48Sopenharmony_ci            return false;
840fb726d48Sopenharmony_ci          }
841fb726d48Sopenharmony_ci          if (e.deltaY > 0) {
842fb726d48Sopenharmony_ci            e.preventDefault();
843fb726d48Sopenharmony_ci            return false;
844fb726d48Sopenharmony_ci          }
845fb726d48Sopenharmony_ci        }
846fb726d48Sopenharmony_ci      },
847fb726d48Sopenharmony_ci      { passive: false }
848fb726d48Sopenharmony_ci    );
849fb726d48Sopenharmony_ci  }
850fb726d48Sopenharmony_ci
851fb726d48Sopenharmony_ci  private initNavigationMenu(multiTrace: boolean): MenuGroup[] {
852fb726d48Sopenharmony_ci    return [
853fb726d48Sopenharmony_ci      {
854fb726d48Sopenharmony_ci        collapsed: false,
855fb726d48Sopenharmony_ci        title: 'Navigation',
856fb726d48Sopenharmony_ci        second: false,
857fb726d48Sopenharmony_ci        icon: 'caret-down',
858fb726d48Sopenharmony_ci        describe: 'Open or record a new trace',
859fb726d48Sopenharmony_ci        children: [
860fb726d48Sopenharmony_ci          {
861fb726d48Sopenharmony_ci            title: 'Open trace file',
862fb726d48Sopenharmony_ci            icon: 'folder',
863fb726d48Sopenharmony_ci            fileChoose: true,
864fb726d48Sopenharmony_ci            fileHandler: (ev: InputEvent): void => {
865fb726d48Sopenharmony_ci              Utils.currentTraceMode = TraceMode.NORMAL;
866fb726d48Sopenharmony_ci              this.openTraceFile(ev.detail);
867fb726d48Sopenharmony_ci            },
868fb726d48Sopenharmony_ci          },
869fb726d48Sopenharmony_ci          {
870fb726d48Sopenharmony_ci            title: 'Record new trace',
871fb726d48Sopenharmony_ci            icon: 'copyhovered',
872fb726d48Sopenharmony_ci            clickHandler: (item: MenuItem): void => this.clickHandleByRecordNewTrace(),
873fb726d48Sopenharmony_ci          },
874fb726d48Sopenharmony_ci          {
875fb726d48Sopenharmony_ci            title: 'Record template',
876fb726d48Sopenharmony_ci            icon: 'copyhovered',
877fb726d48Sopenharmony_ci            clickHandler: (item: MenuItem): void => this.clickHandleByRecordTemplate(),
878fb726d48Sopenharmony_ci          },
879fb726d48Sopenharmony_ci        ],
880fb726d48Sopenharmony_ci      },
881fb726d48Sopenharmony_ci      {
882fb726d48Sopenharmony_ci        collapsed: !multiTrace,
883fb726d48Sopenharmony_ci        title: 'Open multiple trace',
884fb726d48Sopenharmony_ci        second: false,
885fb726d48Sopenharmony_ci        icon: 'caret-down',
886fb726d48Sopenharmony_ci        describe: 'long trace or distributed trace',
887fb726d48Sopenharmony_ci        children: [
888fb726d48Sopenharmony_ci          {
889fb726d48Sopenharmony_ci            title: 'Open long trace',
890fb726d48Sopenharmony_ci            icon: 'folder',
891fb726d48Sopenharmony_ci            fileChoose: true,
892fb726d48Sopenharmony_ci            clickHandler: (ev: InputEvent): void => {
893fb726d48Sopenharmony_ci              Utils.currentTraceMode = TraceMode.LONG_TRACE;
894fb726d48Sopenharmony_ci              this.openLongTraceFile(ev, true);
895fb726d48Sopenharmony_ci            },
896fb726d48Sopenharmony_ci            fileHandler: (ev: InputEvent): void => {
897fb726d48Sopenharmony_ci              Utils.currentTraceMode = TraceMode.LONG_TRACE;
898fb726d48Sopenharmony_ci              this.openLongTraceFile(ev);
899fb726d48Sopenharmony_ci            },
900fb726d48Sopenharmony_ci          },
901fb726d48Sopenharmony_ci          {
902fb726d48Sopenharmony_ci            title: 'Open distributed trace',
903fb726d48Sopenharmony_ci            icon: 'folder',
904fb726d48Sopenharmony_ci            multi: true,
905fb726d48Sopenharmony_ci            fileChoose: true,
906fb726d48Sopenharmony_ci            fileHandler: (ev: InputEvent): void => {
907fb726d48Sopenharmony_ci              Utils.currentTraceMode = TraceMode.DISTRIBUTED;
908fb726d48Sopenharmony_ci              this.openDistributedTraceFile(ev);
909fb726d48Sopenharmony_ci            },
910fb726d48Sopenharmony_ci          },
911fb726d48Sopenharmony_ci        ],
912fb726d48Sopenharmony_ci      },
913fb726d48Sopenharmony_ci    ];
914fb726d48Sopenharmony_ci  }
915fb726d48Sopenharmony_ci
916fb726d48Sopenharmony_ci  private initSupportMenus(): MenuGroup {
917fb726d48Sopenharmony_ci    return {
918fb726d48Sopenharmony_ci      collapsed: false,
919fb726d48Sopenharmony_ci      title: 'Support',
920fb726d48Sopenharmony_ci      second: false,
921fb726d48Sopenharmony_ci      icon: 'caret-down',
922fb726d48Sopenharmony_ci      describe: 'Support',
923fb726d48Sopenharmony_ci      children: [
924fb726d48Sopenharmony_ci        {
925fb726d48Sopenharmony_ci          title: 'Help Documents',
926fb726d48Sopenharmony_ci          icon: 'smart-help',
927fb726d48Sopenharmony_ci          clickHandler: (item: MenuItem): void => this.clickHandleByHelpDocuments(),
928fb726d48Sopenharmony_ci        },
929fb726d48Sopenharmony_ci        {
930fb726d48Sopenharmony_ci          title: 'Flags',
931fb726d48Sopenharmony_ci          icon: 'menu',
932fb726d48Sopenharmony_ci          clickHandler: (item: MenuItem): void => this.clickHandleByFlags(),
933fb726d48Sopenharmony_ci        },
934fb726d48Sopenharmony_ci        {
935fb726d48Sopenharmony_ci          title: 'Keyboard Shortcuts',
936fb726d48Sopenharmony_ci          icon: 'smart-help',
937fb726d48Sopenharmony_ci          clickHandler: (item: MenuItem): void => this.clickHandleByKeyboardShortcuts(),
938fb726d48Sopenharmony_ci        }
939fb726d48Sopenharmony_ci      ],
940fb726d48Sopenharmony_ci    };
941fb726d48Sopenharmony_ci  }
942fb726d48Sopenharmony_ci
943fb726d48Sopenharmony_ci  private clickHandleByHelpDocuments(): void {
944fb726d48Sopenharmony_ci    this.spHelp!.dark = this.dark;
945fb726d48Sopenharmony_ci    this.search = false;
946fb726d48Sopenharmony_ci    this.showContent(this.spHelp!);
947fb726d48Sopenharmony_ci    SpStatisticsHttpUtil.addOrdinaryVisitAction({
948fb726d48Sopenharmony_ci      event: 'help_page',
949fb726d48Sopenharmony_ci      action: 'help_doc',
950fb726d48Sopenharmony_ci    });
951fb726d48Sopenharmony_ci    this.changeUrl();
952fb726d48Sopenharmony_ci  }
953fb726d48Sopenharmony_ci
954fb726d48Sopenharmony_ci  private clickHandleByFlags(): void {
955fb726d48Sopenharmony_ci    this.returnOriginalUrl();
956fb726d48Sopenharmony_ci    this.search = false;
957fb726d48Sopenharmony_ci    this.showContent(this.spFlags!);
958fb726d48Sopenharmony_ci    SpStatisticsHttpUtil.addOrdinaryVisitAction({
959fb726d48Sopenharmony_ci      event: 'flags',
960fb726d48Sopenharmony_ci      action: 'flags',
961fb726d48Sopenharmony_ci    });
962fb726d48Sopenharmony_ci  }
963fb726d48Sopenharmony_ci
964fb726d48Sopenharmony_ci  private clickHandleByKeyboardShortcuts(): void {
965fb726d48Sopenharmony_ci    this.returnOriginalUrl();
966fb726d48Sopenharmony_ci    document
967fb726d48Sopenharmony_ci      .querySelector('body > sp-application')!
968fb726d48Sopenharmony_ci      .shadowRoot!.querySelector<HTMLDivElement>('#sp-keyboard')!.style.visibility = 'visible';
969fb726d48Sopenharmony_ci    SpSystemTrace.keyboardFlar = false;
970fb726d48Sopenharmony_ci    SpStatisticsHttpUtil.addOrdinaryVisitAction({
971fb726d48Sopenharmony_ci      event: 'Keyboard Shortcuts',
972fb726d48Sopenharmony_ci      action: 'Keyboard Shortcuts',
973fb726d48Sopenharmony_ci    });
974fb726d48Sopenharmony_ci  }
975fb726d48Sopenharmony_ci
976fb726d48Sopenharmony_ci  private clickHandleByRecordNewTrace(): void {
977fb726d48Sopenharmony_ci    this.returnOriginalUrl();
978fb726d48Sopenharmony_ci    this.spRecordTrace!.synchronizeDeviceList();
979fb726d48Sopenharmony_ci    this.spRecordTemplate!.record_template = false;
980fb726d48Sopenharmony_ci    this.spRecordTrace!.refreshConfig(true);
981fb726d48Sopenharmony_ci    this.showContent(this.spRecordTrace!);
982fb726d48Sopenharmony_ci  }
983fb726d48Sopenharmony_ci
984fb726d48Sopenharmony_ci  private clickHandleByRecordTemplate(): void {
985fb726d48Sopenharmony_ci    this.returnOriginalUrl();
986fb726d48Sopenharmony_ci    this.spRecordTemplate!.refreshHint();
987fb726d48Sopenharmony_ci    this.spRecordTemplate!.record_template = true;
988fb726d48Sopenharmony_ci    this.spRecordTemplate!.refreshConfig(false);
989fb726d48Sopenharmony_ci    this.spRecordTemplate!.synchronizeDeviceList();
990fb726d48Sopenharmony_ci    this.showContent(this.spRecordTemplate!);
991fb726d48Sopenharmony_ci  }
992fb726d48Sopenharmony_ci
993fb726d48Sopenharmony_ci  private changeUrl(): void {
994fb726d48Sopenharmony_ci    let url = new URL(window.location.href);
995fb726d48Sopenharmony_ci    let actionParam = url.searchParams.get('action');
996fb726d48Sopenharmony_ci    let newActionValue = 'help';
997fb726d48Sopenharmony_ci    if (actionParam) {
998fb726d48Sopenharmony_ci      url.searchParams.set('action', newActionValue);
999fb726d48Sopenharmony_ci    } else {
1000fb726d48Sopenharmony_ci      url.searchParams.append('action', newActionValue);
1001fb726d48Sopenharmony_ci    }
1002fb726d48Sopenharmony_ci    let newURL = url.href;
1003fb726d48Sopenharmony_ci    history.pushState({}, '', newURL);
1004fb726d48Sopenharmony_ci  }
1005fb726d48Sopenharmony_ci
1006fb726d48Sopenharmony_ci  private returnOriginalUrl(): void {
1007fb726d48Sopenharmony_ci    history.pushState({}, '', window.location.origin + window.location.pathname);
1008fb726d48Sopenharmony_ci  }
1009fb726d48Sopenharmony_ci
1010fb726d48Sopenharmony_ci  private handleSqliteMode(ev: unknown, showFileName: string, fileSize: number, fileName: string, jsonStr?: string): void {
1011fb726d48Sopenharmony_ci    let fileSizeStr = (fileSize / 1048576).toFixed(1);
1012fb726d48Sopenharmony_ci    postLog(fileName, fileSizeStr);
1013fb726d48Sopenharmony_ci    document.title = `${showFileName} (${fileSizeStr}M)`;
1014fb726d48Sopenharmony_ci    this.litSearch!.setPercent('', 0);
1015fb726d48Sopenharmony_ci    threadPool.init('sqlite').then((res) => {
1016fb726d48Sopenharmony_ci      let reader = new FileReader();
1017fb726d48Sopenharmony_ci      reader.readAsArrayBuffer(ev as Blob);
1018fb726d48Sopenharmony_ci      reader.onloadend = (ev): void => {
1019fb726d48Sopenharmony_ci        SpApplication.loadingProgress = 0;
1020fb726d48Sopenharmony_ci        SpApplication.progressStep = 3;
1021fb726d48Sopenharmony_ci        let data = this.markPositionHandler(reader.result as ArrayBuffer);
1022fb726d48Sopenharmony_ci        this.spSystemTrace!.loadDatabaseArrayBuffer(
1023fb726d48Sopenharmony_ci          data,
1024fb726d48Sopenharmony_ci          '',
1025fb726d48Sopenharmony_ci          (command: string, _: number) => {
1026fb726d48Sopenharmony_ci            this.setProgress(command);
1027fb726d48Sopenharmony_ci          },
1028fb726d48Sopenharmony_ci          false,
1029fb726d48Sopenharmony_ci          () => {
1030fb726d48Sopenharmony_ci            if (this.markJson) {
1031fb726d48Sopenharmony_ci              window.publish(window.SmartEvent.UI.ImportRecord, this.markJson);
1032fb726d48Sopenharmony_ci            }
1033fb726d48Sopenharmony_ci            if (jsonStr) {
1034fb726d48Sopenharmony_ci              window.publish(window.SmartEvent.UI.ImportRecord, jsonStr);
1035fb726d48Sopenharmony_ci            }
1036fb726d48Sopenharmony_ci            this.mainMenu!.menus!.splice(2, this.mainMenu!.menus!.length > 2 ? 1 : 0, {
1037fb726d48Sopenharmony_ci              collapsed: false,
1038fb726d48Sopenharmony_ci              title: 'Current Trace',
1039fb726d48Sopenharmony_ci              second: false,
1040fb726d48Sopenharmony_ci              icon: 'caret-down',
1041fb726d48Sopenharmony_ci              describe: 'Actions on the current trace',
1042fb726d48Sopenharmony_ci              children: this.getTraceOptionMenus(showFileName, fileSizeStr, fileName, true, false),
1043fb726d48Sopenharmony_ci            });
1044fb726d48Sopenharmony_ci            this.mainMenu!.menus!.splice(3, 1, {
1045fb726d48Sopenharmony_ci              collapsed: false,
1046fb726d48Sopenharmony_ci              title: 'Support',
1047fb726d48Sopenharmony_ci              second: false,
1048fb726d48Sopenharmony_ci              icon: 'caret-down',
1049fb726d48Sopenharmony_ci              describe: 'Support',
1050fb726d48Sopenharmony_ci              children: this.getTraceSupportMenus(),
1051fb726d48Sopenharmony_ci            });
1052fb726d48Sopenharmony_ci            this.litSearch!.setPercent('', 101);
1053fb726d48Sopenharmony_ci            this.chartFilter!.setAttribute('mode', '');
1054fb726d48Sopenharmony_ci            this.progressEL!.loading = false;
1055fb726d48Sopenharmony_ci            this.freshMenuDisable(false);
1056fb726d48Sopenharmony_ci            this.spInfoAndStats!.initInfoAndStatsData();
1057fb726d48Sopenharmony_ci            this.cutTraceFile!.style.display = 'none';
1058fb726d48Sopenharmony_ci            this.exportRecord!.style.display = 'none';
1059fb726d48Sopenharmony_ci            this.headerDiv!.style.pointerEvents = 'auto';
1060fb726d48Sopenharmony_ci          }
1061fb726d48Sopenharmony_ci        );
1062fb726d48Sopenharmony_ci      };
1063fb726d48Sopenharmony_ci    });
1064fb726d48Sopenharmony_ci  }
1065fb726d48Sopenharmony_ci
1066fb726d48Sopenharmony_ci  private handleDistributedWasmMode(file1: File, file2: File): void {
1067fb726d48Sopenharmony_ci    this.litSearch!.setPercent('', 1);
1068fb726d48Sopenharmony_ci    document.title = 'Distributed Trace';
1069fb726d48Sopenharmony_ci    let completeHandler = async (res: unknown): Promise<void> => {
1070fb726d48Sopenharmony_ci      await this.traceLoadCompleteHandler(res, '', '', file1.name, true, file2.name);
1071fb726d48Sopenharmony_ci    };
1072fb726d48Sopenharmony_ci    let typeHeader = file1.slice(0, 6);
1073fb726d48Sopenharmony_ci    let reader: FileReader | null = new FileReader();
1074fb726d48Sopenharmony_ci    reader.readAsText(typeHeader);
1075fb726d48Sopenharmony_ci    reader.onloadend = (event): void => {
1076fb726d48Sopenharmony_ci      let headerStr: string = `${reader?.result}`;
1077fb726d48Sopenharmony_ci      let traceType = 'wasm';
1078fb726d48Sopenharmony_ci      if (headerStr.indexOf('SQLite') === 0) {
1079fb726d48Sopenharmony_ci        traceType = 'sqlite';
1080fb726d48Sopenharmony_ci      }
1081fb726d48Sopenharmony_ci      Promise.all([threadPool.init(traceType), threadPool2.init(traceType)]).then(() => {
1082fb726d48Sopenharmony_ci        let wasmUrl = `https://${window.location.host.split(':')[0]}:${window.location.port}/application/wasm.json`;
1083fb726d48Sopenharmony_ci        Promise.all([file1.arrayBuffer(), file2.arrayBuffer()]).then((bufArr) => {
1084fb726d48Sopenharmony_ci          this.litSearch!.setPercent('ArrayBuffer loaded  ', 2);
1085fb726d48Sopenharmony_ci          SpApplication.loadingProgress = 0;
1086fb726d48Sopenharmony_ci          SpApplication.progressStep = 2;
1087fb726d48Sopenharmony_ci          let buf1 = this.markPositionHandler(bufArr[0]);
1088fb726d48Sopenharmony_ci          let buf2 = this.markPositionHandler(bufArr[1]);
1089fb726d48Sopenharmony_ci          info('initData start Parse Data');
1090fb726d48Sopenharmony_ci          this.spSystemTrace!.loadDatabaseArrayBuffer(
1091fb726d48Sopenharmony_ci            buf1,
1092fb726d48Sopenharmony_ci            wasmUrl,
1093fb726d48Sopenharmony_ci            (command: string, _: number) => this.setProgress(command),
1094fb726d48Sopenharmony_ci            true,
1095fb726d48Sopenharmony_ci            completeHandler,
1096fb726d48Sopenharmony_ci            buf2,
1097fb726d48Sopenharmony_ci            file1.name,
1098fb726d48Sopenharmony_ci            file2.name
1099fb726d48Sopenharmony_ci          );
1100fb726d48Sopenharmony_ci        });
1101fb726d48Sopenharmony_ci      });
1102fb726d48Sopenharmony_ci    };
1103fb726d48Sopenharmony_ci  }
1104fb726d48Sopenharmony_ci
1105fb726d48Sopenharmony_ci  private handleWasmMode(ev: unknown, showFileName: string, fileSize: number, fileName: string, jsonStr?: string): void {
1106fb726d48Sopenharmony_ci    this.litSearch!.setPercent('', 1);
1107fb726d48Sopenharmony_ci    if (fileName.endsWith('.json')) {
1108fb726d48Sopenharmony_ci      this.progressEL!.loading = true;
1109fb726d48Sopenharmony_ci      //@ts-ignore
1110fb726d48Sopenharmony_ci      self.spSystemTrace!.loadSample(ev).then(() => {
1111fb726d48Sopenharmony_ci        this.showContent(this.spSystemTrace!);
1112fb726d48Sopenharmony_ci        this.litSearch!.setPercent('', 101);
1113fb726d48Sopenharmony_ci        this.freshMenuDisable(false);
1114fb726d48Sopenharmony_ci        this.chartFilter!.setAttribute('mode', '');
1115fb726d48Sopenharmony_ci        this.progressEL!.loading = false;
1116fb726d48Sopenharmony_ci      });
1117fb726d48Sopenharmony_ci    } else if (fileName.endsWith('.csv')) {
1118fb726d48Sopenharmony_ci      this.progressEL!.loading = true;
1119fb726d48Sopenharmony_ci      this.spSystemTrace!.loadGpuCounter(ev as File).then(() => {
1120fb726d48Sopenharmony_ci        this.showContent(this.spSystemTrace!);
1121fb726d48Sopenharmony_ci        this.litSearch!.setPercent('', 101);
1122fb726d48Sopenharmony_ci        this.freshMenuDisable(false);
1123fb726d48Sopenharmony_ci        this.chartFilter!.setAttribute('mode', '');
1124fb726d48Sopenharmony_ci        this.progressEL!.loading = false;
1125fb726d48Sopenharmony_ci      });
1126fb726d48Sopenharmony_ci    } else {
1127fb726d48Sopenharmony_ci      let fileSizeStr = (fileSize / 1048576).toFixed(1);
1128fb726d48Sopenharmony_ci      postLog(fileName, fileSizeStr);
1129fb726d48Sopenharmony_ci      document.title = `${showFileName} (${fileSizeStr}M)`;
1130fb726d48Sopenharmony_ci      info('Parse trace using wasm mode ');
1131fb726d48Sopenharmony_ci      let completeHandler = async (res: unknown): Promise<void> => {
1132fb726d48Sopenharmony_ci        await this.traceLoadCompleteHandler(res, fileSizeStr, showFileName, fileName, false);
1133fb726d48Sopenharmony_ci        if (this.markJson) {
1134fb726d48Sopenharmony_ci          window.publish(window.SmartEvent.UI.ImportRecord, this.markJson);
1135fb726d48Sopenharmony_ci        }
1136fb726d48Sopenharmony_ci        if (jsonStr) {
1137fb726d48Sopenharmony_ci          window.publish(window.SmartEvent.UI.ImportRecord, jsonStr);
1138fb726d48Sopenharmony_ci        }
1139fb726d48Sopenharmony_ci      };
1140fb726d48Sopenharmony_ci      threadPool.init('wasm').then((res) => {
1141fb726d48Sopenharmony_ci        let reader: FileReader = new FileReader();
1142fb726d48Sopenharmony_ci        //@ts-ignore
1143fb726d48Sopenharmony_ci        reader.readAsArrayBuffer(ev);
1144fb726d48Sopenharmony_ci        reader.onloadend = (ev): void => {
1145fb726d48Sopenharmony_ci          info('read file onloadend');
1146fb726d48Sopenharmony_ci          this.litSearch!.setPercent('ArrayBuffer loaded  ', 2);
1147fb726d48Sopenharmony_ci          let wasmUrl = `https://${window.location.host.split(':')[0]}:${window.location.port}/application/wasm.json`;
1148fb726d48Sopenharmony_ci          SpApplication.loadingProgress = 0;
1149fb726d48Sopenharmony_ci          SpApplication.progressStep = 3;
1150fb726d48Sopenharmony_ci          let data = this.markPositionHandler(reader.result as ArrayBuffer);
1151fb726d48Sopenharmony_ci          info('initData start Parse Data');
1152fb726d48Sopenharmony_ci          this.spSystemTrace!.loadDatabaseArrayBuffer(
1153fb726d48Sopenharmony_ci            data,
1154fb726d48Sopenharmony_ci            wasmUrl,
1155fb726d48Sopenharmony_ci            (command: string, _: number) => this.setProgress(command),
1156fb726d48Sopenharmony_ci            false,
1157fb726d48Sopenharmony_ci            completeHandler
1158fb726d48Sopenharmony_ci          );
1159fb726d48Sopenharmony_ci        };
1160fb726d48Sopenharmony_ci      });
1161fb726d48Sopenharmony_ci    }
1162fb726d48Sopenharmony_ci  }
1163fb726d48Sopenharmony_ci
1164fb726d48Sopenharmony_ci  private markPositionHandler(buf: ArrayBuffer): ArrayBuffer {
1165fb726d48Sopenharmony_ci    const decoder = new TextDecoder('utf-8');
1166fb726d48Sopenharmony_ci    const headText = decoder.decode(buf.slice(0, 100));
1167fb726d48Sopenharmony_ci    let hasMark = headText.includes('MarkPositionJSON');
1168fb726d48Sopenharmony_ci    if (hasMark) {
1169fb726d48Sopenharmony_ci      let markLength = headText.split('->')[0].replace('MarkPositionJSON', '');
1170fb726d48Sopenharmony_ci      let mark = decoder.decode(buf.slice(0, markLength.length + parseInt(markLength)));
1171fb726d48Sopenharmony_ci      if (mark.includes('->')) {
1172fb726d48Sopenharmony_ci        this.markJson = mark.split('->')[1];
1173fb726d48Sopenharmony_ci      }
1174fb726d48Sopenharmony_ci      return buf.slice(markLength.length + parseInt(markLength));
1175fb726d48Sopenharmony_ci    } else {
1176fb726d48Sopenharmony_ci      return buf;
1177fb726d48Sopenharmony_ci    }
1178fb726d48Sopenharmony_ci  }
1179fb726d48Sopenharmony_ci
1180fb726d48Sopenharmony_ci  private async traceLoadCompleteHandler(
1181fb726d48Sopenharmony_ci    res: unknown,
1182fb726d48Sopenharmony_ci    fileSize: string,
1183fb726d48Sopenharmony_ci    showFileName: string,
1184fb726d48Sopenharmony_ci    fileName: string,
1185fb726d48Sopenharmony_ci    isDistributed: boolean,
1186fb726d48Sopenharmony_ci    fileName2?: string
1187fb726d48Sopenharmony_ci  ): Promise<void> {
1188fb726d48Sopenharmony_ci    let index = 3;
1189fb726d48Sopenharmony_ci    if (isDistributed) {
1190fb726d48Sopenharmony_ci      //分布式,隐藏 裁剪 trace 和 导出带记录的收藏trace 功能
1191fb726d48Sopenharmony_ci      this.cutTraceFile!.style.display = 'none';
1192fb726d48Sopenharmony_ci      this.exportRecord!.style.display = 'none';
1193fb726d48Sopenharmony_ci      this.litSearch?.setAttribute('distributed', '');
1194fb726d48Sopenharmony_ci      setThreadPoolTraceBuffer('1', null);
1195fb726d48Sopenharmony_ci      setThreadPoolTraceBuffer('2', null);
1196fb726d48Sopenharmony_ci    } else {
1197fb726d48Sopenharmony_ci      let existFtrace = await queryExistFtrace();
1198fb726d48Sopenharmony_ci      let isAllowTrace = true;
1199fb726d48Sopenharmony_ci      let sharedBuffer = getThreadPoolTraceBuffer('1');
1200fb726d48Sopenharmony_ci      if (sharedBuffer) {
1201fb726d48Sopenharmony_ci        let traceHeadData = new Uint8Array(sharedBuffer!.slice(0, 10));
1202fb726d48Sopenharmony_ci        let enc = new TextDecoder();
1203fb726d48Sopenharmony_ci        let headerStr = enc.decode(traceHeadData);
1204fb726d48Sopenharmony_ci        let rowTraceStr = Array.from(new Uint8Array(sharedBuffer!.slice(0, 2)))
1205fb726d48Sopenharmony_ci          .map((byte) => byte.toString(16).padStart(2, '0'))
1206fb726d48Sopenharmony_ci          .join('');
1207fb726d48Sopenharmony_ci        if (headerStr.indexOf('OHOSPROF') !== 0 && rowTraceStr.indexOf('49df') !== 0) {
1208fb726d48Sopenharmony_ci          isAllowTrace = false;
1209fb726d48Sopenharmony_ci        }
1210fb726d48Sopenharmony_ci        this.cutTraceFile!.style.display = 'block';
1211fb726d48Sopenharmony_ci        this.exportRecord!.style.display = 'block';
1212fb726d48Sopenharmony_ci        setThreadPoolTraceBuffer('1', null);
1213fb726d48Sopenharmony_ci      }
1214fb726d48Sopenharmony_ci      if (existFtrace.length > 0 && isAllowTrace) {
1215fb726d48Sopenharmony_ci        this.showConvertTraceMenu(fileName);
1216fb726d48Sopenharmony_ci        index = 4;
1217fb726d48Sopenharmony_ci      }
1218fb726d48Sopenharmony_ci    }
1219fb726d48Sopenharmony_ci
1220fb726d48Sopenharmony_ci    this.loadTraceCompleteMenuHandler(index);
1221fb726d48Sopenharmony_ci    //@ts-ignore
1222fb726d48Sopenharmony_ci    if (res.status) {
1223fb726d48Sopenharmony_ci      info('loadDatabaseArrayBuffer success');
1224fb726d48Sopenharmony_ci      if (isDistributed) {
1225fb726d48Sopenharmony_ci        Utils.distributedTrace.push(fileName || 'trace1');
1226fb726d48Sopenharmony_ci        Utils.distributedTrace.push(fileName2 || 'trace2');
1227fb726d48Sopenharmony_ci        this.litSearch!.setTraceSelectOptions();
1228fb726d48Sopenharmony_ci      } else {
1229fb726d48Sopenharmony_ci        //@ts-ignore
1230fb726d48Sopenharmony_ci        (window as unknown).traceFileName = fileName;
1231fb726d48Sopenharmony_ci      }
1232fb726d48Sopenharmony_ci      this.showCurrentTraceMenu(fileSize, showFileName, fileName, isDistributed);
1233fb726d48Sopenharmony_ci      if (!isDistributed) {
1234fb726d48Sopenharmony_ci        this.importConfigDiv!.style.display = Utils.getInstance().getSchedSliceMap().size > 0 ? 'block' : 'none';
1235fb726d48Sopenharmony_ci      }
1236fb726d48Sopenharmony_ci      this.showContent(this.spSystemTrace!);
1237fb726d48Sopenharmony_ci      this.litSearch!.setPercent('', 101);
1238fb726d48Sopenharmony_ci      this.chartFilter!.setAttribute('mode', '');
1239fb726d48Sopenharmony_ci      this.freshMenuDisable(false);
1240fb726d48Sopenharmony_ci    } else {
1241fb726d48Sopenharmony_ci      info('loadDatabaseArrayBuffer failed');
1242fb726d48Sopenharmony_ci      //@ts-ignore
1243fb726d48Sopenharmony_ci      this.litSearch!.setPercent(res.msg || 'This File is not supported!', -1);
1244fb726d48Sopenharmony_ci      this.resetMenus();
1245fb726d48Sopenharmony_ci      this.freshMenuDisable(false);
1246fb726d48Sopenharmony_ci    }
1247fb726d48Sopenharmony_ci    this.progressEL!.loading = false;
1248fb726d48Sopenharmony_ci    this.headerDiv!.style.pointerEvents = 'auto';
1249fb726d48Sopenharmony_ci    this.spInfoAndStats!.initInfoAndStatsData();
1250fb726d48Sopenharmony_ci  }
1251fb726d48Sopenharmony_ci
1252fb726d48Sopenharmony_ci  private resetMenus(multiTrace: boolean = false): void {
1253fb726d48Sopenharmony_ci    this.mainMenu!.menus = [...this.initNavigationMenu(multiTrace), this.initSupportMenus()];
1254fb726d48Sopenharmony_ci  }
1255fb726d48Sopenharmony_ci
1256fb726d48Sopenharmony_ci  private showConvertTraceMenu(fileName: string): void {
1257fb726d48Sopenharmony_ci    this.mainMenu!.menus!.splice(3, 1, {
1258fb726d48Sopenharmony_ci      collapsed: false,
1259fb726d48Sopenharmony_ci      title: 'Convert trace',
1260fb726d48Sopenharmony_ci      second: false,
1261fb726d48Sopenharmony_ci      icon: 'caret-down',
1262fb726d48Sopenharmony_ci      describe: 'Convert to other formats',
1263fb726d48Sopenharmony_ci      children: this.pushConvertTrace(fileName),
1264fb726d48Sopenharmony_ci    });
1265fb726d48Sopenharmony_ci  }
1266fb726d48Sopenharmony_ci
1267fb726d48Sopenharmony_ci  private showCurrentTraceMenu(fileSize: string, showFileName: string, fileName: string, isDistributed: boolean): void {
1268fb726d48Sopenharmony_ci    this.mainMenu!.menus!.splice(2, this.mainMenu!.menus!.length > 2 ? 1 : 0, {
1269fb726d48Sopenharmony_ci      collapsed: false,
1270fb726d48Sopenharmony_ci      title: 'Current Trace',
1271fb726d48Sopenharmony_ci      second: false,
1272fb726d48Sopenharmony_ci      icon: 'caret-down',
1273fb726d48Sopenharmony_ci      describe: 'Actions on the current trace',
1274fb726d48Sopenharmony_ci      children: this.getTraceOptionMenus(showFileName, fileSize, fileName, false, isDistributed),
1275fb726d48Sopenharmony_ci    });
1276fb726d48Sopenharmony_ci  }
1277fb726d48Sopenharmony_ci
1278fb726d48Sopenharmony_ci  private loadTraceCompleteMenuHandler(index: number): void {
1279fb726d48Sopenharmony_ci    this.mainMenu!.menus!.splice(index, 1, {
1280fb726d48Sopenharmony_ci      collapsed: false,
1281fb726d48Sopenharmony_ci      title: 'Support',
1282fb726d48Sopenharmony_ci      second: false,
1283fb726d48Sopenharmony_ci      icon: 'caret-down',
1284fb726d48Sopenharmony_ci      describe: 'Support',
1285fb726d48Sopenharmony_ci      children: [
1286fb726d48Sopenharmony_ci        {
1287fb726d48Sopenharmony_ci          title: 'Help Documents',
1288fb726d48Sopenharmony_ci          icon: 'smart-help',
1289fb726d48Sopenharmony_ci          clickHandler: (item: MenuItem): void => this.clickHandleByHelpDocuments(),
1290fb726d48Sopenharmony_ci        },
1291fb726d48Sopenharmony_ci        {
1292fb726d48Sopenharmony_ci          title: 'Flags',
1293fb726d48Sopenharmony_ci          icon: 'menu',
1294fb726d48Sopenharmony_ci          clickHandler: (item: MenuItem): void => this.clickHandleByFlags(),
1295fb726d48Sopenharmony_ci        },
1296fb726d48Sopenharmony_ci        {
1297fb726d48Sopenharmony_ci          title: 'Keyboard Shortcuts',
1298fb726d48Sopenharmony_ci          icon: 'smart-help',
1299fb726d48Sopenharmony_ci          clickHandler: (item: MenuItem): void => this.clickHandleByKeyboardShortcuts(),
1300fb726d48Sopenharmony_ci        },
1301fb726d48Sopenharmony_ci      ],
1302fb726d48Sopenharmony_ci    });
1303fb726d48Sopenharmony_ci  }
1304fb726d48Sopenharmony_ci
1305fb726d48Sopenharmony_ci  private validateGetTraceFileByPage(): boolean {
1306fb726d48Sopenharmony_ci    if (!this.wasm) {
1307fb726d48Sopenharmony_ci      this.progressEL!.loading = false;
1308fb726d48Sopenharmony_ci      return false;
1309fb726d48Sopenharmony_ci    }
1310fb726d48Sopenharmony_ci    return this.pageTimStamp !== 0;
1311fb726d48Sopenharmony_ci  }
1312fb726d48Sopenharmony_ci
1313fb726d48Sopenharmony_ci  private queryFileByPage(
1314fb726d48Sopenharmony_ci    instance: LongTraceDBUtils,
1315fb726d48Sopenharmony_ci    indexedDbPageNum: number,
1316fb726d48Sopenharmony_ci    maxTraceFileLength: number,
1317fb726d48Sopenharmony_ci    traceRange: IDBKeyRange
1318fb726d48Sopenharmony_ci  ): void {
1319fb726d48Sopenharmony_ci    instance.indexedDBHelp.get(instance.tableName, traceRange, 'QueryFileByPage').then((result) => {
1320fb726d48Sopenharmony_ci      let traceData = indexedDataToBufferData(result);
1321fb726d48Sopenharmony_ci      let ebpfRange = this.getIDBKeyRange(indexedDbPageNum, 'ebpf_new');
1322fb726d48Sopenharmony_ci      let arkTsRange = this.getIDBKeyRange(indexedDbPageNum, 'arkts_new');
1323fb726d48Sopenharmony_ci      let hiperfRange = this.getIDBKeyRange(indexedDbPageNum, 'hiperf_new');
1324fb726d48Sopenharmony_ci      Promise.all([
1325fb726d48Sopenharmony_ci        instance.getByRange(ebpfRange),
1326fb726d48Sopenharmony_ci        instance.getByRange(arkTsRange),
1327fb726d48Sopenharmony_ci        instance.getByRange(hiperfRange),
1328fb726d48Sopenharmony_ci      ]).then((otherResult) => {
1329fb726d48Sopenharmony_ci        let ebpfData = indexedDataToBufferData(otherResult[0]);
1330fb726d48Sopenharmony_ci        let arkTsData = indexedDataToBufferData(otherResult[1]);
1331fb726d48Sopenharmony_ci        let hiperfData = indexedDataToBufferData(otherResult[2]);
1332fb726d48Sopenharmony_ci        let traceArray = new Uint8Array(traceData);
1333fb726d48Sopenharmony_ci        let ebpfArray = new Uint8Array(ebpfData);
1334fb726d48Sopenharmony_ci        let arkTsArray = new Uint8Array(arkTsData);
1335fb726d48Sopenharmony_ci        let hiPerfArray = new Uint8Array(hiperfData);
1336fb726d48Sopenharmony_ci        let allOtherData = [ebpfData, arkTsData, hiperfData];
1337fb726d48Sopenharmony_ci        let otherDataLength = traceData.byteLength + ebpfData.byteLength + arkTsData.byteLength + hiperfData.byteLength;
1338fb726d48Sopenharmony_ci        let timeStamp =
1339fb726d48Sopenharmony_ci          this.currentDataTime[0] +
1340fb726d48Sopenharmony_ci          this.currentDataTime[1] +
1341fb726d48Sopenharmony_ci          this.currentDataTime[2] +
1342fb726d48Sopenharmony_ci          '_' +
1343fb726d48Sopenharmony_ci          this.currentDataTime[3] +
1344fb726d48Sopenharmony_ci          this.currentDataTime[4] +
1345fb726d48Sopenharmony_ci          this.currentDataTime[5];
1346fb726d48Sopenharmony_ci        this.traceFileName = `hiprofiler_long_${timeStamp}_${indexedDbPageNum}.htrace`;
1347fb726d48Sopenharmony_ci        if (otherDataLength > maxTraceFileLength) {
1348fb726d48Sopenharmony_ci          if (traceData.byteLength > maxTraceFileLength) {
1349fb726d48Sopenharmony_ci            this.traceFileLoadFailedHandler('hitrace file too big!');
1350fb726d48Sopenharmony_ci          } else {
1351fb726d48Sopenharmony_ci            let freeDataLength = maxTraceFileLength - traceData.byteLength;
1352fb726d48Sopenharmony_ci            let freeDataIndex = findFreeSizeAlgorithm(
1353fb726d48Sopenharmony_ci              [ebpfData.byteLength, arkTsData.byteLength, hiperfData.byteLength],
1354fb726d48Sopenharmony_ci              freeDataLength
1355fb726d48Sopenharmony_ci            );
1356fb726d48Sopenharmony_ci            let finalData = [traceData];
1357fb726d48Sopenharmony_ci            freeDataIndex.forEach((dataIndex) => {
1358fb726d48Sopenharmony_ci              finalData.push(allOtherData[dataIndex]);
1359fb726d48Sopenharmony_ci            });
1360fb726d48Sopenharmony_ci            const file = new File([new Blob(finalData)], this.traceFileName);
1361fb726d48Sopenharmony_ci            this.handleWasmMode(file, file.name, file.size, this.traceFileName);
1362fb726d48Sopenharmony_ci          }
1363fb726d48Sopenharmony_ci        } else {
1364fb726d48Sopenharmony_ci          let fileBlob = new Blob([traceArray, ebpfArray, arkTsArray, hiPerfArray]);
1365fb726d48Sopenharmony_ci          const file = new File([fileBlob], this.traceFileName);
1366fb726d48Sopenharmony_ci          this.handleWasmMode(file, file.name, file.size, file.name);
1367fb726d48Sopenharmony_ci        }
1368fb726d48Sopenharmony_ci        this.refreshLongTraceButtonStyle();
1369fb726d48Sopenharmony_ci        this.longTracePage!.style.display = 'flex';
1370fb726d48Sopenharmony_ci      });
1371fb726d48Sopenharmony_ci    });
1372fb726d48Sopenharmony_ci  }
1373fb726d48Sopenharmony_ci
1374fb726d48Sopenharmony_ci  private refreshLongTraceButtonStyle(): void {
1375fb726d48Sopenharmony_ci    let pageListDiv = this.shadowRoot?.querySelector('.page-number-list') as HTMLDivElement;
1376fb726d48Sopenharmony_ci    let pageNodeList = pageListDiv.querySelectorAll<HTMLDivElement>('div');
1377fb726d48Sopenharmony_ci    let pageInput = this.shadowRoot?.querySelector<HTMLInputElement>('.page-input');
1378fb726d48Sopenharmony_ci    let previewButton: HTMLDivElement | null | undefined =
1379fb726d48Sopenharmony_ci      this.shadowRoot?.querySelector<HTMLDivElement>('#preview-button');
1380fb726d48Sopenharmony_ci    let nextButton: HTMLDivElement | null | undefined = this.shadowRoot?.querySelector<HTMLDivElement>('#next-button');
1381fb726d48Sopenharmony_ci    let pageConfirmEl = this.shadowRoot?.querySelector<HTMLDivElement>('.confirm-button');
1382fb726d48Sopenharmony_ci    pageInput!.style.pointerEvents = 'auto';
1383fb726d48Sopenharmony_ci    pageNodeList.forEach((pageItem) => {
1384fb726d48Sopenharmony_ci      pageItem.style.pointerEvents = 'auto';
1385fb726d48Sopenharmony_ci    });
1386fb726d48Sopenharmony_ci    nextButton!.style.pointerEvents = 'auto';
1387fb726d48Sopenharmony_ci    nextButton!.style.opacity = '1';
1388fb726d48Sopenharmony_ci    previewButton!.style.pointerEvents = 'auto';
1389fb726d48Sopenharmony_ci    previewButton!.style.opacity = '1';
1390fb726d48Sopenharmony_ci    if (this.currentPageNum === 1) {
1391fb726d48Sopenharmony_ci      previewButton!.style.pointerEvents = 'none';
1392fb726d48Sopenharmony_ci      previewButton!.style.opacity = '0.7';
1393fb726d48Sopenharmony_ci    } else if (this.currentPageNum === this.longTraceHeadMessageList.length) {
1394fb726d48Sopenharmony_ci      nextButton!.style.pointerEvents = 'none';
1395fb726d48Sopenharmony_ci      nextButton!.style.opacity = '0.7';
1396fb726d48Sopenharmony_ci    }
1397fb726d48Sopenharmony_ci    //
1398fb726d48Sopenharmony_ci    pageConfirmEl!.style.pointerEvents = 'auto';
1399fb726d48Sopenharmony_ci  }
1400fb726d48Sopenharmony_ci
1401fb726d48Sopenharmony_ci  private getTraceFileByPage(pageNumber: number): void {
1402fb726d48Sopenharmony_ci    this.openFileInit(true);
1403fb726d48Sopenharmony_ci    if (this.validateGetTraceFileByPage()) {
1404fb726d48Sopenharmony_ci      let indexedDbPageNum = pageNumber - 1;
1405fb726d48Sopenharmony_ci      let maxTraceFileLength = 400 * 1024 * 1024;
1406fb726d48Sopenharmony_ci      let traceRange = this.getIDBKeyRange(indexedDbPageNum, 'trace');
1407fb726d48Sopenharmony_ci      let instance = LongTraceDBUtils.getInstance();
1408fb726d48Sopenharmony_ci      this.queryFileByPage(instance, indexedDbPageNum, maxTraceFileLength, traceRange);
1409fb726d48Sopenharmony_ci    }
1410fb726d48Sopenharmony_ci  }
1411fb726d48Sopenharmony_ci
1412fb726d48Sopenharmony_ci  private traceFileLoadFailedHandler(reason: string): void {
1413fb726d48Sopenharmony_ci    this.litSearch!.isLoading = false;
1414fb726d48Sopenharmony_ci    this.litSearch!.setPercent(reason, -1);
1415fb726d48Sopenharmony_ci    this.progressEL!.loading = false;
1416fb726d48Sopenharmony_ci    this.freshMenuDisable(false);
1417fb726d48Sopenharmony_ci  }
1418fb726d48Sopenharmony_ci
1419fb726d48Sopenharmony_ci  private getIDBKeyRange(indexedDbPageNum: number, key: string): IDBKeyRange {
1420fb726d48Sopenharmony_ci    return IDBKeyRange.bound(
1421fb726d48Sopenharmony_ci      [this.pageTimStamp, key, indexedDbPageNum],
1422fb726d48Sopenharmony_ci      [this.pageTimStamp, key, indexedDbPageNum],
1423fb726d48Sopenharmony_ci      false,
1424fb726d48Sopenharmony_ci      false
1425fb726d48Sopenharmony_ci    );
1426fb726d48Sopenharmony_ci  }
1427fb726d48Sopenharmony_ci
1428fb726d48Sopenharmony_ci  private refreshPageListHandler(
1429fb726d48Sopenharmony_ci    pageListDiv: HTMLDivElement,
1430fb726d48Sopenharmony_ci    previewButton: HTMLDivElement,
1431fb726d48Sopenharmony_ci    nextButton: HTMLDivElement,
1432fb726d48Sopenharmony_ci    pageInput: HTMLInputElement
1433fb726d48Sopenharmony_ci  ): void {
1434fb726d48Sopenharmony_ci    this.progressEL!.loading = true;
1435fb726d48Sopenharmony_ci    this.refreshPageList(
1436fb726d48Sopenharmony_ci      pageListDiv,
1437fb726d48Sopenharmony_ci      previewButton!,
1438fb726d48Sopenharmony_ci      nextButton!,
1439fb726d48Sopenharmony_ci      pageInput!,
1440fb726d48Sopenharmony_ci      this.currentPageNum,
1441fb726d48Sopenharmony_ci      this.longTraceHeadMessageList.length
1442fb726d48Sopenharmony_ci    );
1443fb726d48Sopenharmony_ci    this.getTraceFileByPage(this.currentPageNum);
1444fb726d48Sopenharmony_ci  }
1445fb726d48Sopenharmony_ci
1446fb726d48Sopenharmony_ci  private sendCutFileMessage(timStamp: number): void {
1447fb726d48Sopenharmony_ci    this.pageTimStamp = timStamp;
1448fb726d48Sopenharmony_ci    threadPool.init('wasm').then(() => {
1449fb726d48Sopenharmony_ci      let headUintArray = new Uint8Array(this.longTraceHeadMessageList.length * 1024);
1450fb726d48Sopenharmony_ci      let headOffset = 0;
1451fb726d48Sopenharmony_ci      this.longTraceHeadMessageList = this.longTraceHeadMessageList.sort(
1452fb726d48Sopenharmony_ci        (leftMessage, rightMessage) => leftMessage.pageNum - rightMessage.pageNum
1453fb726d48Sopenharmony_ci      );
1454fb726d48Sopenharmony_ci      for (let index = 0; index < this.longTraceHeadMessageList.length; index++) {
1455fb726d48Sopenharmony_ci        let currentUintArray = new Uint8Array(this.longTraceHeadMessageList[index].data);
1456fb726d48Sopenharmony_ci        headUintArray.set(currentUintArray, headOffset);
1457fb726d48Sopenharmony_ci        headOffset += currentUintArray.length;
1458fb726d48Sopenharmony_ci      }
1459fb726d48Sopenharmony_ci      threadPool.submit(
1460fb726d48Sopenharmony_ci        'ts-cut-file',
1461fb726d48Sopenharmony_ci        '',
1462fb726d48Sopenharmony_ci        {
1463fb726d48Sopenharmony_ci          headArray: headUintArray,
1464fb726d48Sopenharmony_ci          timeStamp: timStamp,
1465fb726d48Sopenharmony_ci          splitFileInfo: this.longTraceTypeMessageMap?.get(0),
1466fb726d48Sopenharmony_ci          splitDataList: this.longTraceDataList,
1467fb726d48Sopenharmony_ci        },
1468fb726d48Sopenharmony_ci        (res: Array<unknown>) => {
1469fb726d48Sopenharmony_ci          this.litSearch!.setPercent('Cut in file ', 100);
1470fb726d48Sopenharmony_ci          this.currentDataTime = getCurrentDataTime();
1471fb726d48Sopenharmony_ci          if (this.longTraceHeadMessageList.length > 0) {
1472fb726d48Sopenharmony_ci            this.getTraceFileByPage(this.currentPageNum);
1473fb726d48Sopenharmony_ci            this.litSearch!.style.marginLeft = '80px';
1474fb726d48Sopenharmony_ci            this.longTracePage!.style.display = 'flex';
1475fb726d48Sopenharmony_ci            this.initCutFileEvent();
1476fb726d48Sopenharmony_ci          } else {
1477fb726d48Sopenharmony_ci            this.progressEL!.loading = false;
1478fb726d48Sopenharmony_ci            this.litSearch!.setPercent('Missing basic trace in the large-file scenario!', -1);
1479fb726d48Sopenharmony_ci            this.freshMenuDisable(false);
1480fb726d48Sopenharmony_ci            return;
1481fb726d48Sopenharmony_ci          }
1482fb726d48Sopenharmony_ci        },
1483fb726d48Sopenharmony_ci        'long_trace'
1484fb726d48Sopenharmony_ci      );
1485fb726d48Sopenharmony_ci    });
1486fb726d48Sopenharmony_ci  }
1487fb726d48Sopenharmony_ci
1488fb726d48Sopenharmony_ci  private initCutFileEvent(): void {
1489fb726d48Sopenharmony_ci    let pageListDiv = this.shadowRoot?.querySelector('.page-number-list') as HTMLDivElement;
1490fb726d48Sopenharmony_ci    let previewButton: HTMLDivElement | null | undefined =
1491fb726d48Sopenharmony_ci      this.shadowRoot?.querySelector<HTMLDivElement>('#preview-button');
1492fb726d48Sopenharmony_ci    let nextButton: HTMLDivElement | null | undefined = this.shadowRoot?.querySelector<HTMLDivElement>('#next-button');
1493fb726d48Sopenharmony_ci    let pageInput = this.shadowRoot?.querySelector<HTMLInputElement>('.page-input');
1494fb726d48Sopenharmony_ci    pageListDiv.innerHTML = '';
1495fb726d48Sopenharmony_ci    this.refreshPageList(
1496fb726d48Sopenharmony_ci      pageListDiv,
1497fb726d48Sopenharmony_ci      previewButton!,
1498fb726d48Sopenharmony_ci      nextButton!,
1499fb726d48Sopenharmony_ci      pageInput!,
1500fb726d48Sopenharmony_ci      this.currentPageNum,
1501fb726d48Sopenharmony_ci      this.longTraceHeadMessageList.length
1502fb726d48Sopenharmony_ci    );
1503fb726d48Sopenharmony_ci    this.initCutFileNextOrPreEvents(previewButton!, nextButton!, pageListDiv, pageInput!);
1504fb726d48Sopenharmony_ci    let nodeListOf = pageListDiv.querySelectorAll<HTMLDivElement>('div');
1505fb726d48Sopenharmony_ci    nodeListOf.forEach((divEL, index) => {
1506fb726d48Sopenharmony_ci      divEL.addEventListener('click', () => {
1507fb726d48Sopenharmony_ci        if (this.progressEL!.loading) {
1508fb726d48Sopenharmony_ci          return;
1509fb726d48Sopenharmony_ci        }
1510fb726d48Sopenharmony_ci        if (divEL.textContent === '...') {
1511fb726d48Sopenharmony_ci          let freeSize = Number(nodeListOf[index + 1].textContent) - Number(nodeListOf[index - 1].textContent);
1512fb726d48Sopenharmony_ci          this.currentPageNum = Math.floor(freeSize / 2 + Number(nodeListOf[index - 1].textContent));
1513fb726d48Sopenharmony_ci        } else {
1514fb726d48Sopenharmony_ci          this.currentPageNum = Number(divEL.textContent);
1515fb726d48Sopenharmony_ci        }
1516fb726d48Sopenharmony_ci        this.refreshPageListHandler(pageListDiv, previewButton!, nextButton!, pageInput!);
1517fb726d48Sopenharmony_ci      });
1518fb726d48Sopenharmony_ci    });
1519fb726d48Sopenharmony_ci    pageInput!.addEventListener('input', () => {
1520fb726d48Sopenharmony_ci      let value = pageInput!.value;
1521fb726d48Sopenharmony_ci      value = value.replace(/\D/g, '');
1522fb726d48Sopenharmony_ci      if (value) {
1523fb726d48Sopenharmony_ci        value = Math.min(this.longTraceHeadMessageList.length, parseInt(value)).toString();
1524fb726d48Sopenharmony_ci      }
1525fb726d48Sopenharmony_ci      pageInput!.value = value;
1526fb726d48Sopenharmony_ci    });
1527fb726d48Sopenharmony_ci    let pageConfirmEl = this.shadowRoot?.querySelector<HTMLDivElement>('.confirm-button');
1528fb726d48Sopenharmony_ci    pageConfirmEl!.addEventListener('click', () => {
1529fb726d48Sopenharmony_ci      if (this.progressEL!.loading) {
1530fb726d48Sopenharmony_ci        return;
1531fb726d48Sopenharmony_ci      }
1532fb726d48Sopenharmony_ci      this.currentPageNum = Number(pageInput!.value);
1533fb726d48Sopenharmony_ci      this.refreshPageListHandler(pageListDiv, previewButton!, nextButton!, pageInput!);
1534fb726d48Sopenharmony_ci    });
1535fb726d48Sopenharmony_ci  }
1536fb726d48Sopenharmony_ci
1537fb726d48Sopenharmony_ci  private initCutFileNextOrPreEvents(
1538fb726d48Sopenharmony_ci    previewButton: HTMLDivElement,
1539fb726d48Sopenharmony_ci    nextButton: HTMLDivElement,
1540fb726d48Sopenharmony_ci    pageListDiv: HTMLDivElement,
1541fb726d48Sopenharmony_ci    pageInput: HTMLInputElement
1542fb726d48Sopenharmony_ci  ): void {
1543fb726d48Sopenharmony_ci    if (previewButton) {
1544fb726d48Sopenharmony_ci      previewButton.addEventListener('click', () => {
1545fb726d48Sopenharmony_ci        if (this.progressEL!.loading || this.currentPageNum === 1) {
1546fb726d48Sopenharmony_ci          return;
1547fb726d48Sopenharmony_ci        }
1548fb726d48Sopenharmony_ci        if (this.currentPageNum > 1) {
1549fb726d48Sopenharmony_ci          this.currentPageNum--;
1550fb726d48Sopenharmony_ci          this.refreshPageListHandler(pageListDiv, previewButton!, nextButton!, pageInput!);
1551fb726d48Sopenharmony_ci        }
1552fb726d48Sopenharmony_ci      });
1553fb726d48Sopenharmony_ci    }
1554fb726d48Sopenharmony_ci    nextButton!.addEventListener('click', () => {
1555fb726d48Sopenharmony_ci      if (this.progressEL!.loading || this.currentPageNum === this.longTraceHeadMessageList.length) {
1556fb726d48Sopenharmony_ci        return;
1557fb726d48Sopenharmony_ci      }
1558fb726d48Sopenharmony_ci      if (this.currentPageNum < this.longTraceHeadMessageList.length) {
1559fb726d48Sopenharmony_ci        this.currentPageNum++;
1560fb726d48Sopenharmony_ci        this.refreshPageListHandler(pageListDiv, previewButton!, nextButton!, pageInput!);
1561fb726d48Sopenharmony_ci      }
1562fb726d48Sopenharmony_ci    });
1563fb726d48Sopenharmony_ci  }
1564fb726d48Sopenharmony_ci
1565fb726d48Sopenharmony_ci  private initCustomColorHandler(): void {
1566fb726d48Sopenharmony_ci    let customColorShow = this.shadowRoot
1567fb726d48Sopenharmony_ci      ?.querySelector('lit-main-menu')!
1568fb726d48Sopenharmony_ci      .shadowRoot!.querySelector('.customColor') as HTMLDivElement;
1569fb726d48Sopenharmony_ci    customColorShow.addEventListener('click', (ev) => {
1570fb726d48Sopenharmony_ci      if (this!.hasAttribute('custom-color')) {
1571fb726d48Sopenharmony_ci        this!.removeAttribute('custom-color');
1572fb726d48Sopenharmony_ci        this.customColor!.setAttribute('hidden', '');
1573fb726d48Sopenharmony_ci        this.customColor!.cancelOperate();
1574fb726d48Sopenharmony_ci      } else {
1575fb726d48Sopenharmony_ci        this!.removeAttribute('chart_filter');
1576fb726d48Sopenharmony_ci        this.chartFilter!.setAttribute('hidden', '');
1577fb726d48Sopenharmony_ci        this!.setAttribute('custom-color', '');
1578fb726d48Sopenharmony_ci        this.customColor!.removeAttribute('hidden');
1579fb726d48Sopenharmony_ci      }
1580fb726d48Sopenharmony_ci    });
1581fb726d48Sopenharmony_ci  }
1582fb726d48Sopenharmony_ci
1583fb726d48Sopenharmony_ci  private openFileInit(multiTrace: boolean = false): void {
1584fb726d48Sopenharmony_ci    clearTraceFileCache();
1585fb726d48Sopenharmony_ci    this.litSearch!.clear();
1586fb726d48Sopenharmony_ci    Utils.currentSelectTrace = undefined;
1587fb726d48Sopenharmony_ci    this.markJson = undefined;
1588fb726d48Sopenharmony_ci    if (!multiTrace) {
1589fb726d48Sopenharmony_ci      this.longTracePage!.style.display = 'none';
1590fb726d48Sopenharmony_ci    }
1591fb726d48Sopenharmony_ci    this.litSearch?.removeAttribute('distributed');
1592fb726d48Sopenharmony_ci    SpStatisticsHttpUtil.addOrdinaryVisitAction({
1593fb726d48Sopenharmony_ci      event: 'open_trace',
1594fb726d48Sopenharmony_ci      action: 'open_trace',
1595fb726d48Sopenharmony_ci    });
1596fb726d48Sopenharmony_ci    info('openTraceFile');
1597fb726d48Sopenharmony_ci    this.headerDiv!.style.pointerEvents = 'none';
1598fb726d48Sopenharmony_ci    this.spSystemTrace!.clearPointPair();
1599fb726d48Sopenharmony_ci    this.spSystemTrace!.reset((command: string, percent: number): void => {
1600fb726d48Sopenharmony_ci      this.setProgress(command);
1601fb726d48Sopenharmony_ci    });
1602fb726d48Sopenharmony_ci    threadPool2.reset().then();
1603fb726d48Sopenharmony_ci    window.publish(window.SmartEvent.UI.MouseEventEnable, {
1604fb726d48Sopenharmony_ci      mouseEnable: false,
1605fb726d48Sopenharmony_ci    });
1606fb726d48Sopenharmony_ci    window.clearTraceRowComplete();
1607fb726d48Sopenharmony_ci    SpSchedulingAnalysis.resetCpu();
1608fb726d48Sopenharmony_ci    this.resetMenus(multiTrace);
1609fb726d48Sopenharmony_ci    this.freshMenuDisable(true);
1610fb726d48Sopenharmony_ci    this.showContent(this.spSystemTrace!);
1611fb726d48Sopenharmony_ci    this.progressEL!.loading = true;
1612fb726d48Sopenharmony_ci  }
1613fb726d48Sopenharmony_ci
1614fb726d48Sopenharmony_ci  private restoreDownLoadIcons(): void {
1615fb726d48Sopenharmony_ci    let querySelectorAll = this.mainMenu!.shadowRoot?.querySelectorAll<LitMainMenuGroup>('lit-main-menu-group');
1616fb726d48Sopenharmony_ci    querySelectorAll!.forEach((menuGroup) => {
1617fb726d48Sopenharmony_ci      let attribute = menuGroup.getAttribute('title');
1618fb726d48Sopenharmony_ci      if (attribute === 'Convert trace') {
1619fb726d48Sopenharmony_ci        let querySelectors = menuGroup.querySelectorAll<LitMainMenuItem>('lit-main-menu-item');
1620fb726d48Sopenharmony_ci        querySelectors.forEach((item) => {
1621fb726d48Sopenharmony_ci          if (item.getAttribute('title') === 'Convert to .systrace') {
1622fb726d48Sopenharmony_ci            item!.setAttribute('icon', 'download');
1623fb726d48Sopenharmony_ci            let querySelector = item!.shadowRoot?.querySelector('.icon') as LitIcon;
1624fb726d48Sopenharmony_ci            querySelector.removeAttribute('spin');
1625fb726d48Sopenharmony_ci          }
1626fb726d48Sopenharmony_ci        });
1627fb726d48Sopenharmony_ci      }
1628fb726d48Sopenharmony_ci    });
1629fb726d48Sopenharmony_ci  }
1630fb726d48Sopenharmony_ci
1631fb726d48Sopenharmony_ci  private postConvert(fileName: string): void {
1632fb726d48Sopenharmony_ci    let newFileName = fileName.substring(0, fileName.lastIndexOf('.')) + '.systrace';
1633fb726d48Sopenharmony_ci    let aElement = document.createElement('a');
1634fb726d48Sopenharmony_ci    convertPool.submitWithName('getConvertData', (status: boolean, msg: string, results: Blob) => {
1635fb726d48Sopenharmony_ci      aElement.href = URL.createObjectURL(results);
1636fb726d48Sopenharmony_ci      aElement.download = newFileName;
1637fb726d48Sopenharmony_ci      let timeoutId = 0;
1638fb726d48Sopenharmony_ci      aElement.addEventListener('click', (ev) => {
1639fb726d48Sopenharmony_ci        clearTimeout(timeoutId);
1640fb726d48Sopenharmony_ci        timeoutId = window.setTimeout(() => {
1641fb726d48Sopenharmony_ci          this.restoreDownLoadIcons();
1642fb726d48Sopenharmony_ci        }, 2000);
1643fb726d48Sopenharmony_ci      });
1644fb726d48Sopenharmony_ci      aElement.click();
1645fb726d48Sopenharmony_ci      window.URL.revokeObjectURL(aElement.href);
1646fb726d48Sopenharmony_ci    });
1647fb726d48Sopenharmony_ci  }
1648fb726d48Sopenharmony_ci
1649fb726d48Sopenharmony_ci  private pushConvertTrace(fileName: string): Array<MenuItem> {
1650fb726d48Sopenharmony_ci    let instance = this;
1651fb726d48Sopenharmony_ci    let menus = [];
1652fb726d48Sopenharmony_ci    menus.push({
1653fb726d48Sopenharmony_ci      title: 'Convert to .systrace',
1654fb726d48Sopenharmony_ci      icon: 'download',
1655fb726d48Sopenharmony_ci      clickHandler: function () {
1656fb726d48Sopenharmony_ci        convertPool.init('convert').then((item) => {
1657fb726d48Sopenharmony_ci          let querySelectorAll =
1658fb726d48Sopenharmony_ci            instance.mainMenu!.shadowRoot?.querySelectorAll<LitMainMenuGroup>('lit-main-menu-group');
1659fb726d48Sopenharmony_ci          querySelectorAll!.forEach((menuGroup) => {
1660fb726d48Sopenharmony_ci            let attribute = menuGroup.getAttribute('title');
1661fb726d48Sopenharmony_ci            if (attribute === 'Convert trace') {
1662fb726d48Sopenharmony_ci              let querySelectors = menuGroup.querySelectorAll<LitMainMenuItem>('lit-main-menu-item');
1663fb726d48Sopenharmony_ci              querySelectors.forEach((item) => {
1664fb726d48Sopenharmony_ci                if (item.getAttribute('title') === 'Convert to .systrace') {
1665fb726d48Sopenharmony_ci                  item!.setAttribute('icon', 'convert-loading');
1666fb726d48Sopenharmony_ci                  item!.classList.add('pending');
1667fb726d48Sopenharmony_ci                  item!.style.fontKerning = '';
1668fb726d48Sopenharmony_ci                  let querySelector = item!.shadowRoot?.querySelector('.icon') as LitIcon;
1669fb726d48Sopenharmony_ci                  querySelector.setAttribute('spin', '');
1670fb726d48Sopenharmony_ci                }
1671fb726d48Sopenharmony_ci              });
1672fb726d48Sopenharmony_ci            }
1673fb726d48Sopenharmony_ci          });
1674fb726d48Sopenharmony_ci          instance.postConvert(fileName);
1675fb726d48Sopenharmony_ci        });
1676fb726d48Sopenharmony_ci      },
1677fb726d48Sopenharmony_ci    });
1678fb726d48Sopenharmony_ci    return menus;
1679fb726d48Sopenharmony_ci  }
1680fb726d48Sopenharmony_ci
1681fb726d48Sopenharmony_ci  private setProgress(command: string): void {
1682fb726d48Sopenharmony_ci    if (command === 'database ready' && SpApplication.loadingProgress < 50) {
1683fb726d48Sopenharmony_ci      SpApplication.progressStep = 6;
1684fb726d48Sopenharmony_ci    }
1685fb726d48Sopenharmony_ci    if (command === 'process' && SpApplication.loadingProgress < 92) {
1686fb726d48Sopenharmony_ci      SpApplication.loadingProgress = 92 + Math.round(Math.random() * SpApplication.progressStep);
1687fb726d48Sopenharmony_ci    } else {
1688fb726d48Sopenharmony_ci      SpApplication.loadingProgress += Math.round(Math.random() * SpApplication.progressStep + Math.random());
1689fb726d48Sopenharmony_ci    }
1690fb726d48Sopenharmony_ci    if (SpApplication.loadingProgress > 99) {
1691fb726d48Sopenharmony_ci      SpApplication.loadingProgress = 99;
1692fb726d48Sopenharmony_ci    }
1693fb726d48Sopenharmony_ci    info('setPercent :' + command + 'percent :' + SpApplication.loadingProgress);
1694fb726d48Sopenharmony_ci    this.litSearch!.setPercent(command + '  ', SpApplication.loadingProgress);
1695fb726d48Sopenharmony_ci  }
1696fb726d48Sopenharmony_ci
1697fb726d48Sopenharmony_ci  private getTraceOptionMenus(
1698fb726d48Sopenharmony_ci    showFileName: string,
1699fb726d48Sopenharmony_ci    fileSize: string,
1700fb726d48Sopenharmony_ci    fileName: string,
1701fb726d48Sopenharmony_ci    isServer: boolean,
1702fb726d48Sopenharmony_ci    isDistributed: boolean,
1703fb726d48Sopenharmony_ci    dbName?: string
1704fb726d48Sopenharmony_ci  ): Array<MenuItem> {
1705fb726d48Sopenharmony_ci    let menus = [
1706fb726d48Sopenharmony_ci      {
1707fb726d48Sopenharmony_ci        title: isDistributed ? 'Distributed Trace' : `${showFileName} (${fileSize}M)`,
1708fb726d48Sopenharmony_ci        icon: 'file-fill',
1709fb726d48Sopenharmony_ci        clickHandler: (): void => {
1710fb726d48Sopenharmony_ci          this.search = true;
1711fb726d48Sopenharmony_ci          this.showContent(this.spSystemTrace!);
1712fb726d48Sopenharmony_ci        },
1713fb726d48Sopenharmony_ci      },
1714fb726d48Sopenharmony_ci    ];
1715fb726d48Sopenharmony_ci    if (
1716fb726d48Sopenharmony_ci      !isDistributed &&
1717fb726d48Sopenharmony_ci      Utils.getInstance().getWinCpuCount() > 0 &&
1718fb726d48Sopenharmony_ci      FlagsConfig.getFlagsConfigEnableStatus('SchedulingAnalysis')
1719fb726d48Sopenharmony_ci    ) {
1720fb726d48Sopenharmony_ci      menus.push({
1721fb726d48Sopenharmony_ci        title: 'Scheduling Analysis',
1722fb726d48Sopenharmony_ci        icon: 'piechart-circle-fil',
1723fb726d48Sopenharmony_ci        clickHandler: (): void => {
1724fb726d48Sopenharmony_ci          SpStatisticsHttpUtil.addOrdinaryVisitAction({
1725fb726d48Sopenharmony_ci            event: 'Scheduling Analysis',
1726fb726d48Sopenharmony_ci            action: 'scheduling_analysis',
1727fb726d48Sopenharmony_ci          });
1728fb726d48Sopenharmony_ci          this.showContent(this.spSchedulingAnalysis!);
1729fb726d48Sopenharmony_ci          this.spSchedulingAnalysis!.init();
1730fb726d48Sopenharmony_ci        },
1731fb726d48Sopenharmony_ci      });
1732fb726d48Sopenharmony_ci    }
1733fb726d48Sopenharmony_ci    if (!isDistributed) {
1734fb726d48Sopenharmony_ci      menus.push({
1735fb726d48Sopenharmony_ci        title: 'Download File',
1736fb726d48Sopenharmony_ci        icon: 'download', // @ts-ignore
1737fb726d48Sopenharmony_ci        fileModel: this.wasm ? 'wasm' : 'db',
1738fb726d48Sopenharmony_ci        clickHandler: (): void => {
1739fb726d48Sopenharmony_ci          this.download(this.mainMenu!, fileName, isServer, dbName);
1740fb726d48Sopenharmony_ci          SpStatisticsHttpUtil.addOrdinaryVisitAction({
1741fb726d48Sopenharmony_ci            event: 'download',
1742fb726d48Sopenharmony_ci            action: 'download',
1743fb726d48Sopenharmony_ci          });
1744fb726d48Sopenharmony_ci        },
1745fb726d48Sopenharmony_ci      });
1746fb726d48Sopenharmony_ci      menus.push({
1747fb726d48Sopenharmony_ci        title: 'Download Database',
1748fb726d48Sopenharmony_ci        icon: 'download', // @ts-ignore
1749fb726d48Sopenharmony_ci        fileModel: this.wasm ? 'wasm' : 'db',
1750fb726d48Sopenharmony_ci        clickHandler: (): void => {
1751fb726d48Sopenharmony_ci          this.downloadDB(this.mainMenu!, fileName);
1752fb726d48Sopenharmony_ci          SpStatisticsHttpUtil.addOrdinaryVisitAction({
1753fb726d48Sopenharmony_ci            event: 'download_db',
1754fb726d48Sopenharmony_ci            action: 'download',
1755fb726d48Sopenharmony_ci          });
1756fb726d48Sopenharmony_ci        },
1757fb726d48Sopenharmony_ci      });
1758fb726d48Sopenharmony_ci      this.getTraceQuerySqlMenus(menus);
1759fb726d48Sopenharmony_ci    }
1760fb726d48Sopenharmony_ci    return menus;
1761fb726d48Sopenharmony_ci  }
1762fb726d48Sopenharmony_ci
1763fb726d48Sopenharmony_ci  private getTraceSupportMenus(): Array<MenuItem> {
1764fb726d48Sopenharmony_ci    return [
1765fb726d48Sopenharmony_ci      {
1766fb726d48Sopenharmony_ci        title: 'Help Documents',
1767fb726d48Sopenharmony_ci        icon: 'smart-help',
1768fb726d48Sopenharmony_ci        clickHandler: (item: MenuItem): void => {
1769fb726d48Sopenharmony_ci          this.spHelp!.dark = this.dark;
1770fb726d48Sopenharmony_ci          this.search = false;
1771fb726d48Sopenharmony_ci          this.showContent(this.spHelp!);
1772fb726d48Sopenharmony_ci          SpStatisticsHttpUtil.addOrdinaryVisitAction({
1773fb726d48Sopenharmony_ci            event: 'help_page',
1774fb726d48Sopenharmony_ci            action: 'help_doc',
1775fb726d48Sopenharmony_ci          });
1776fb726d48Sopenharmony_ci        },
1777fb726d48Sopenharmony_ci      },
1778fb726d48Sopenharmony_ci      {
1779fb726d48Sopenharmony_ci        title: 'Flags',
1780fb726d48Sopenharmony_ci        icon: 'menu',
1781fb726d48Sopenharmony_ci        fileModel: this.wasm ? 'wasm' : 'db',
1782fb726d48Sopenharmony_ci        clickHandler: (item: MenuItem): void => {
1783fb726d48Sopenharmony_ci          this.search = false;
1784fb726d48Sopenharmony_ci          this.showContent(this.spFlags!);
1785fb726d48Sopenharmony_ci          SpStatisticsHttpUtil.addOrdinaryVisitAction({
1786fb726d48Sopenharmony_ci            event: 'flags',
1787fb726d48Sopenharmony_ci            action: 'flags',
1788fb726d48Sopenharmony_ci          });
1789fb726d48Sopenharmony_ci        },
1790fb726d48Sopenharmony_ci      },
1791fb726d48Sopenharmony_ci      {
1792fb726d48Sopenharmony_ci        title: 'Keyboard Shortcuts',
1793fb726d48Sopenharmony_ci        icon: 'smart-help',
1794fb726d48Sopenharmony_ci        clickHandler: (item: MenuItem): void => {
1795fb726d48Sopenharmony_ci          document
1796fb726d48Sopenharmony_ci            .querySelector('body > sp-application')!
1797fb726d48Sopenharmony_ci            .shadowRoot!.querySelector<HTMLDivElement>('#sp-keyboard')!.style.visibility = 'visible';
1798fb726d48Sopenharmony_ci          SpStatisticsHttpUtil.addOrdinaryVisitAction({
1799fb726d48Sopenharmony_ci            event: 'Keyboard Shortcuts',
1800fb726d48Sopenharmony_ci            action: 'Keyboard Shortcuts',
1801fb726d48Sopenharmony_ci          });
1802fb726d48Sopenharmony_ci        },
1803fb726d48Sopenharmony_ci      },
1804fb726d48Sopenharmony_ci      {
1805fb726d48Sopenharmony_ci        title: '第三方文件',
1806fb726d48Sopenharmony_ci        icon: 'file-fill',
1807fb726d48Sopenharmony_ci        fileModel: this.wasm ? 'wasm' : 'db',
1808fb726d48Sopenharmony_ci        clickHandler: (item: MenuItem): void => {
1809fb726d48Sopenharmony_ci          this.search = false;
1810fb726d48Sopenharmony_ci          this.showContent(this.spThirdParty!);
1811fb726d48Sopenharmony_ci        },
1812fb726d48Sopenharmony_ci      },
1813fb726d48Sopenharmony_ci    ];
1814fb726d48Sopenharmony_ci  }
1815fb726d48Sopenharmony_ci
1816fb726d48Sopenharmony_ci  private getTraceQuerySqlMenus(menus: Array<unknown>): void {
1817fb726d48Sopenharmony_ci    if (this.querySql) {
1818fb726d48Sopenharmony_ci      if (this.spQuerySQL) {
1819fb726d48Sopenharmony_ci        this.spQuerySQL!.reset();
1820fb726d48Sopenharmony_ci        menus.push({
1821fb726d48Sopenharmony_ci          title: 'Query (SQL)',
1822fb726d48Sopenharmony_ci          icon: 'filesearch',
1823fb726d48Sopenharmony_ci          clickHandler: () => {
1824fb726d48Sopenharmony_ci            this.showContent(this.spQuerySQL!);
1825fb726d48Sopenharmony_ci          },
1826fb726d48Sopenharmony_ci        });
1827fb726d48Sopenharmony_ci      }
1828fb726d48Sopenharmony_ci      if (this.spMetrics) {
1829fb726d48Sopenharmony_ci        this.spMetrics!.reset();
1830fb726d48Sopenharmony_ci        menus.push({
1831fb726d48Sopenharmony_ci          title: 'Metrics',
1832fb726d48Sopenharmony_ci          icon: 'metric',
1833fb726d48Sopenharmony_ci          fileModel: this.wasm ? 'wasm' : 'db',
1834fb726d48Sopenharmony_ci          clickHandler: () => {
1835fb726d48Sopenharmony_ci            this.showContent(this.spMetrics!);
1836fb726d48Sopenharmony_ci          },
1837fb726d48Sopenharmony_ci        });
1838fb726d48Sopenharmony_ci      }
1839fb726d48Sopenharmony_ci      if (this.spInfoAndStats) {
1840fb726d48Sopenharmony_ci        menus.push({
1841fb726d48Sopenharmony_ci          title: 'Info and stats',
1842fb726d48Sopenharmony_ci          icon: 'info',
1843fb726d48Sopenharmony_ci          clickHandler: () => {
1844fb726d48Sopenharmony_ci            SpStatisticsHttpUtil.addOrdinaryVisitAction({
1845fb726d48Sopenharmony_ci              event: 'info',
1846fb726d48Sopenharmony_ci              action: 'info_stats',
1847fb726d48Sopenharmony_ci            });
1848fb726d48Sopenharmony_ci            this.showContent(this.spInfoAndStats!);
1849fb726d48Sopenharmony_ci          },
1850fb726d48Sopenharmony_ci        });
1851fb726d48Sopenharmony_ci      }
1852fb726d48Sopenharmony_ci    }
1853fb726d48Sopenharmony_ci  }
1854fb726d48Sopenharmony_ci
1855fb726d48Sopenharmony_ci  private initSlideMenuEvents(): void {
1856fb726d48Sopenharmony_ci    //打开侧边栏
1857fb726d48Sopenharmony_ci    this.sidebarButton!.onclick = (e): void => {
1858fb726d48Sopenharmony_ci      if (this.sidebarButton) {
1859fb726d48Sopenharmony_ci        this.sidebarButton.style.width = '0px';
1860fb726d48Sopenharmony_ci        this.importConfigDiv!.style.left = '5px';
1861fb726d48Sopenharmony_ci        this.contentLeftOption!.style.left = '5px';
1862fb726d48Sopenharmony_ci        this.closeKeyPath!.style.left = '25px';
1863fb726d48Sopenharmony_ci      }
1864fb726d48Sopenharmony_ci      if (this.mainMenu) {
1865fb726d48Sopenharmony_ci        this.mainMenu.style.width = '248px';
1866fb726d48Sopenharmony_ci        this.mainMenu.style.zIndex = '2000';
1867fb726d48Sopenharmony_ci        this.mainMenu.style.display = 'flex';
1868fb726d48Sopenharmony_ci      }
1869fb726d48Sopenharmony_ci    };
1870fb726d48Sopenharmony_ci    let icon: HTMLDivElement | undefined | null = this.mainMenu?.shadowRoot?.querySelector('div.header > div');
1871fb726d48Sopenharmony_ci    icon!.style.pointerEvents = 'none';
1872fb726d48Sopenharmony_ci    icon!.onclick = (e): void => {
1873fb726d48Sopenharmony_ci      if (this.mainMenu) {
1874fb726d48Sopenharmony_ci        this.mainMenu.style.width = '0px';
1875fb726d48Sopenharmony_ci        this.mainMenu.style.display = 'flex';
1876fb726d48Sopenharmony_ci        this.mainMenu.style.zIndex = '0';
1877fb726d48Sopenharmony_ci      }
1878fb726d48Sopenharmony_ci      if (this.sidebarButton) {
1879fb726d48Sopenharmony_ci        this.sidebarButton.style.width = '48px';
1880fb726d48Sopenharmony_ci        this.importConfigDiv!.style.left = '45px';
1881fb726d48Sopenharmony_ci        this.contentLeftOption!.style.left = '45px';
1882fb726d48Sopenharmony_ci        this.closeKeyPath!.style.left = '65px';
1883fb726d48Sopenharmony_ci      }
1884fb726d48Sopenharmony_ci    };
1885fb726d48Sopenharmony_ci  }
1886fb726d48Sopenharmony_ci
1887fb726d48Sopenharmony_ci  private initImportConfigEvent(): void {
1888fb726d48Sopenharmony_ci    this.importFileBt?.addEventListener('change', (): void => {
1889fb726d48Sopenharmony_ci      let files = this.importFileBt!.files;
1890fb726d48Sopenharmony_ci      if (files && files.length === 1) {
1891fb726d48Sopenharmony_ci        const reader = new FileReader();
1892fb726d48Sopenharmony_ci        reader.readAsText(files[0], 'UTF-8');
1893fb726d48Sopenharmony_ci        reader.onload = (e): void => {
1894fb726d48Sopenharmony_ci          if (e.target?.result) {
1895fb726d48Sopenharmony_ci            try {
1896fb726d48Sopenharmony_ci              const result = parseKeyPathJson(e.target.result as string);
1897fb726d48Sopenharmony_ci              window.publish(window.SmartEvent.UI.KeyPath, result);
1898fb726d48Sopenharmony_ci              this.closeKeyPath!.style.display = 'block';
1899fb726d48Sopenharmony_ci            } catch {
1900fb726d48Sopenharmony_ci              error('json Parse Failed');
1901fb726d48Sopenharmony_ci              this.litSearch!.setPercent('Json Parse Failed!', -1);
1902fb726d48Sopenharmony_ci              window.setTimeout(() => {
1903fb726d48Sopenharmony_ci                this.litSearch!.setPercent('Json Parse Failed!', 101);
1904fb726d48Sopenharmony_ci              }, 1000);
1905fb726d48Sopenharmony_ci            }
1906fb726d48Sopenharmony_ci          } else {
1907fb726d48Sopenharmony_ci            window.publish(window.SmartEvent.UI.KeyPath, []);
1908fb726d48Sopenharmony_ci            this.closeKeyPath!.style.display = 'none';
1909fb726d48Sopenharmony_ci          }
1910fb726d48Sopenharmony_ci        };
1911fb726d48Sopenharmony_ci      }
1912fb726d48Sopenharmony_ci      this.importFileBt!.files = null;
1913fb726d48Sopenharmony_ci      this.importFileBt!.value = '';
1914fb726d48Sopenharmony_ci    });
1915fb726d48Sopenharmony_ci    if (this.closeKeyPath) {
1916fb726d48Sopenharmony_ci      this.closeKeyPath.addEventListener('click', (): void => {
1917fb726d48Sopenharmony_ci        window.publish(window.SmartEvent.UI.KeyPath, []);
1918fb726d48Sopenharmony_ci        this.closeKeyPath!.style.display = 'none';
1919fb726d48Sopenharmony_ci      });
1920fb726d48Sopenharmony_ci    }
1921fb726d48Sopenharmony_ci  }
1922fb726d48Sopenharmony_ci
1923fb726d48Sopenharmony_ci  private initCustomEvents(): void {
1924fb726d48Sopenharmony_ci    window.subscribe(window.SmartEvent.UI.MenuTrace, () => this.showContent(this.spSystemTrace!));
1925fb726d48Sopenharmony_ci    window.subscribe(window.SmartEvent.UI.Error, (err) => {
1926fb726d48Sopenharmony_ci      //@ts-ignore
1927fb726d48Sopenharmony_ci      this.litSearch!.setPercent(err, -1);
1928fb726d48Sopenharmony_ci      this.progressEL!.loading = false;
1929fb726d48Sopenharmony_ci      this.freshMenuDisable(false);
1930fb726d48Sopenharmony_ci    }); //@ts-ignore
1931fb726d48Sopenharmony_ci    window.subscribe(window.SmartEvent.UI.Loading, (arg: { loading: boolean; text?: string }) => {
1932fb726d48Sopenharmony_ci      if (arg.text) {
1933fb726d48Sopenharmony_ci        this.litSearch!.setPercent(arg.text || '', arg.loading ? -1 : 101);
1934fb726d48Sopenharmony_ci      }
1935fb726d48Sopenharmony_ci      if (this.headerDiv) {
1936fb726d48Sopenharmony_ci        this.headerDiv.style.pointerEvents = arg.loading ? 'none' : 'auto';
1937fb726d48Sopenharmony_ci      }
1938fb726d48Sopenharmony_ci      window.publish(window.SmartEvent.UI.MouseEventEnable, {
1939fb726d48Sopenharmony_ci        mouseEnable: !arg.loading,
1940fb726d48Sopenharmony_ci      });
1941fb726d48Sopenharmony_ci      this.progressEL!.loading = arg.loading;
1942fb726d48Sopenharmony_ci    });
1943fb726d48Sopenharmony_ci  }
1944fb726d48Sopenharmony_ci
1945fb726d48Sopenharmony_ci  private initEvents(): void {
1946fb726d48Sopenharmony_ci    this.addEventListener('copy', function (event) {
1947fb726d48Sopenharmony_ci      SpSystemTrace.isMouseLeftDown = false;
1948fb726d48Sopenharmony_ci      let clipdata = event.clipboardData;
1949fb726d48Sopenharmony_ci      let value = clipdata!.getData('text/plain');
1950fb726d48Sopenharmony_ci      let searchValue = value.toString().trim();
1951fb726d48Sopenharmony_ci      clipdata!.setData('text/plain', searchValue);
1952fb726d48Sopenharmony_ci    });
1953fb726d48Sopenharmony_ci    this.initSearchEvents();
1954fb726d48Sopenharmony_ci    this.initSystemTraceEvents();
1955fb726d48Sopenharmony_ci    this.filterConfig!.addEventListener('click', (ev) => {
1956fb726d48Sopenharmony_ci      SpSystemTrace.isMouseLeftDown = false;
1957fb726d48Sopenharmony_ci      this.filterRowConfigClickHandle();
1958fb726d48Sopenharmony_ci    });
1959fb726d48Sopenharmony_ci    this.configClose!.addEventListener('click', (ev) => {
1960fb726d48Sopenharmony_ci      this.filterRowConfigClickHandle();
1961fb726d48Sopenharmony_ci    });
1962fb726d48Sopenharmony_ci    this.cutTraceFile!.addEventListener('click', (ev) => {
1963fb726d48Sopenharmony_ci      this.croppingFile(this.progressEL!, this.litSearch!);
1964fb726d48Sopenharmony_ci    });
1965fb726d48Sopenharmony_ci
1966fb726d48Sopenharmony_ci    this.aiAnalysis!.addEventListener('click', (ev) => {
1967fb726d48Sopenharmony_ci      if (this.spAiAnalysisPage!.style.visibility === 'hidden') {
1968fb726d48Sopenharmony_ci        this.spAiAnalysisPage!.style.display = 'block';
1969fb726d48Sopenharmony_ci        this.spAiAnalysisPage!.style.visibility = 'visible';
1970fb726d48Sopenharmony_ci      } else {
1971fb726d48Sopenharmony_ci        this.spAiAnalysisPage!.style.visibility = 'hidden';
1972fb726d48Sopenharmony_ci        this.spAiAnalysisPage!.style.display = 'none';
1973fb726d48Sopenharmony_ci      }
1974fb726d48Sopenharmony_ci    })
1975fb726d48Sopenharmony_ci
1976fb726d48Sopenharmony_ci    // 鼠标拖动改变大小
1977fb726d48Sopenharmony_ci    this.aiPageResize()
1978fb726d48Sopenharmony_ci  }
1979fb726d48Sopenharmony_ci
1980fb726d48Sopenharmony_ci  private aiPageResize() {
1981fb726d48Sopenharmony_ci    const resizableDiv = this.spAiAnalysisPage!;
1982fb726d48Sopenharmony_ci    let isResizing = false;
1983fb726d48Sopenharmony_ci
1984fb726d48Sopenharmony_ci    resizableDiv.addEventListener('mousemove', (e) => {
1985fb726d48Sopenharmony_ci      if (Math.abs(e.clientX - resizableDiv.getBoundingClientRect().left) < 5) {
1986fb726d48Sopenharmony_ci        resizableDiv.style.cursor = 'e-resize';
1987fb726d48Sopenharmony_ci      } else {
1988fb726d48Sopenharmony_ci        resizableDiv.style.cursor = 'default';
1989fb726d48Sopenharmony_ci      }
1990fb726d48Sopenharmony_ci    })
1991fb726d48Sopenharmony_ci
1992fb726d48Sopenharmony_ci    resizableDiv.addEventListener('mousedown', function (e) {
1993fb726d48Sopenharmony_ci      isResizing = true;
1994fb726d48Sopenharmony_ci      if (e.clientX - resizableDiv.getBoundingClientRect().left < 5) {
1995fb726d48Sopenharmony_ci        document.addEventListener('mousemove', changeAiWidth);
1996fb726d48Sopenharmony_ci      }
1997fb726d48Sopenharmony_ci      document.addEventListener('mouseup', mouseUp);
1998fb726d48Sopenharmony_ci    });
1999fb726d48Sopenharmony_ci
2000fb726d48Sopenharmony_ci
2001fb726d48Sopenharmony_ci    function changeAiWidth(e: any) {
2002fb726d48Sopenharmony_ci      resizableDiv.style.cursor = 'e-resize';
2003fb726d48Sopenharmony_ci      resizableDiv.style.width = window.innerWidth - e.clientX + 'px';
2004fb726d48Sopenharmony_ci    }
2005fb726d48Sopenharmony_ci
2006fb726d48Sopenharmony_ci    function mouseUp() {
2007fb726d48Sopenharmony_ci      isResizing = false;
2008fb726d48Sopenharmony_ci      document.removeEventListener('mousemove', changeAiWidth);
2009fb726d48Sopenharmony_ci      document.removeEventListener('mouseup', mouseUp);
2010fb726d48Sopenharmony_ci    }
2011fb726d48Sopenharmony_ci  }
2012fb726d48Sopenharmony_ci
2013fb726d48Sopenharmony_ci  private filterRowConfigClickHandle(): void {
2014fb726d48Sopenharmony_ci    if (this!.hasAttribute('chart_filter')) {
2015fb726d48Sopenharmony_ci      this!.removeAttribute('chart_filter');
2016fb726d48Sopenharmony_ci      this.chartFilter!.setAttribute('hidden', '');
2017fb726d48Sopenharmony_ci    } else {
2018fb726d48Sopenharmony_ci      this!.removeAttribute('custom-color');
2019fb726d48Sopenharmony_ci      this.customColor!.setAttribute('hidden', '');
2020fb726d48Sopenharmony_ci      this.customColor!.cancelOperate();
2021fb726d48Sopenharmony_ci      this!.setAttribute('chart_filter', '');
2022fb726d48Sopenharmony_ci      this.chartFilter!.removeAttribute('hidden');
2023fb726d48Sopenharmony_ci    }
2024fb726d48Sopenharmony_ci  }
2025fb726d48Sopenharmony_ci
2026fb726d48Sopenharmony_ci  private initRecordEvents(): void {
2027fb726d48Sopenharmony_ci    this.exportRecord?.addEventListener('click', () => {
2028fb726d48Sopenharmony_ci      this.headerDiv!.style.pointerEvents = 'none';
2029fb726d48Sopenharmony_ci      window.publish(window.SmartEvent.UI.Loading, { loading: true, text: 'Downloading trace file with mark' });
2030fb726d48Sopenharmony_ci      window.publish(window.SmartEvent.UI.ExportRecord, { bt: this.exportRecord });
2031fb726d48Sopenharmony_ci    });
2032fb726d48Sopenharmony_ci  }
2033fb726d48Sopenharmony_ci
2034fb726d48Sopenharmony_ci  private initSearchChangeEvents(): void {
2035fb726d48Sopenharmony_ci    let timer: NodeJS.Timeout;
2036fb726d48Sopenharmony_ci    this.litSearch!.valueChangeHandler = (value: string): void => {
2037fb726d48Sopenharmony_ci      Utils.currentSelectTrace = this.litSearch?.getSearchTraceId();
2038fb726d48Sopenharmony_ci      this.litSearch!.currenSearchValue = value;
2039fb726d48Sopenharmony_ci      if (value.length > 0) {
2040fb726d48Sopenharmony_ci        this.progressEL!.loading = true;
2041fb726d48Sopenharmony_ci      } else {
2042fb726d48Sopenharmony_ci        this.progressEL!.loading = false;
2043fb726d48Sopenharmony_ci      }
2044fb726d48Sopenharmony_ci      if (this.litSearch!.list.length > 0) {
2045fb726d48Sopenharmony_ci        let currentEntry = this.litSearch!.list[this.litSearch!.index];
2046fb726d48Sopenharmony_ci        cancelCurrentTraceRowHighlight(this.spSystemTrace!, currentEntry);
2047fb726d48Sopenharmony_ci      }
2048fb726d48Sopenharmony_ci      this.litSearch!.list = [];
2049fb726d48Sopenharmony_ci      if (timer) {
2050fb726d48Sopenharmony_ci        clearTimeout(timer);
2051fb726d48Sopenharmony_ci      }
2052fb726d48Sopenharmony_ci      timer = setTimeout(() => {
2053fb726d48Sopenharmony_ci        this.litSearch!.isClearValue = false;
2054fb726d48Sopenharmony_ci        if (value.length > 0) {
2055fb726d48Sopenharmony_ci          let list = [];
2056fb726d48Sopenharmony_ci          this.spSystemTrace!.searchCPU(value).then((cpus) => {
2057fb726d48Sopenharmony_ci            list = cpus;
2058fb726d48Sopenharmony_ci            let asyncFuncArr = this.spSystemTrace!.seachAsyncFunc(value);
2059fb726d48Sopenharmony_ci            this.spSystemTrace!.searchFunction(list, asyncFuncArr, value).then((mixedResults) => {
2060fb726d48Sopenharmony_ci              if (this.litSearch!.searchValue !== '') {
2061fb726d48Sopenharmony_ci                if (!Utils.isDistributedMode()) {
2062fb726d48Sopenharmony_ci                  this.litSearch!.list = this.spSystemTrace!.searchSdk(mixedResults, value);
2063fb726d48Sopenharmony_ci                } else {
2064fb726d48Sopenharmony_ci                  this.litSearch!.list = mixedResults;
2065fb726d48Sopenharmony_ci                }
2066fb726d48Sopenharmony_ci                this.litSearch!.index = this.spSystemTrace!.showStruct(false, -1, this.litSearch!.list);
2067fb726d48Sopenharmony_ci              }
2068fb726d48Sopenharmony_ci              this.progressEL!.loading = false;
2069fb726d48Sopenharmony_ci            });
2070fb726d48Sopenharmony_ci          });
2071fb726d48Sopenharmony_ci        } else {
2072fb726d48Sopenharmony_ci          let indexEL = this.litSearch!.shadowRoot!.querySelector<HTMLSpanElement>('#index');
2073fb726d48Sopenharmony_ci          indexEL!.textContent = '0';
2074fb726d48Sopenharmony_ci          this.litSearch!.list = [];
2075fb726d48Sopenharmony_ci          this.spSystemTrace?.visibleRows.forEach((it) => {
2076fb726d48Sopenharmony_ci            it.highlight = false;
2077fb726d48Sopenharmony_ci            it.draw();
2078fb726d48Sopenharmony_ci          });
2079fb726d48Sopenharmony_ci          this.spSystemTrace?.timerShaftEL?.removeTriangle('inverted');
2080fb726d48Sopenharmony_ci        }
2081fb726d48Sopenharmony_ci      }, 1000);
2082fb726d48Sopenharmony_ci    };
2083fb726d48Sopenharmony_ci  }
2084fb726d48Sopenharmony_ci  private initSearchEvents(): void {
2085fb726d48Sopenharmony_ci    this.litSearch!.addEventListener('previous-data', (ev) => {
2086fb726d48Sopenharmony_ci      if (this.progressEL!.loading) {
2087fb726d48Sopenharmony_ci        return;
2088fb726d48Sopenharmony_ci      }
2089fb726d48Sopenharmony_ci      this.litSearch!.index = this.spSystemTrace!.showStruct(true, this.litSearch!.index, this.litSearch!.list);
2090fb726d48Sopenharmony_ci      this.litSearch!.blur();
2091fb726d48Sopenharmony_ci    });
2092fb726d48Sopenharmony_ci    this.litSearch!.addEventListener('next-data', (ev) => {
2093fb726d48Sopenharmony_ci      if (this.progressEL!.loading) {
2094fb726d48Sopenharmony_ci        return;
2095fb726d48Sopenharmony_ci      }
2096fb726d48Sopenharmony_ci      this.litSearch!.index = this.spSystemTrace!.showStruct(false, this.litSearch!.index, this.litSearch!.list);
2097fb726d48Sopenharmony_ci      this.litSearch!.blur();
2098fb726d48Sopenharmony_ci    });
2099fb726d48Sopenharmony_ci    // 翻页事件
2100fb726d48Sopenharmony_ci    this.litSearch!.addEventListener('retarget-data', (ev) => {
2101fb726d48Sopenharmony_ci      if (this.progressEL!.loading) {
2102fb726d48Sopenharmony_ci        return;
2103fb726d48Sopenharmony_ci      }
2104fb726d48Sopenharmony_ci      this.litSearch!.index = this.spSystemTrace!.showStruct(
2105fb726d48Sopenharmony_ci        false,
2106fb726d48Sopenharmony_ci        //@ts-ignore
2107fb726d48Sopenharmony_ci        ev.detail.value,
2108fb726d48Sopenharmony_ci        this.litSearch!.list,
2109fb726d48Sopenharmony_ci        //@ts-ignore
2110fb726d48Sopenharmony_ci        ev.detail.value
2111fb726d48Sopenharmony_ci      );
2112fb726d48Sopenharmony_ci      this.litSearch!.blur();
2113fb726d48Sopenharmony_ci    });
2114fb726d48Sopenharmony_ci    this.litSearch!.addEventListener('trace-change', (e): void => {
2115fb726d48Sopenharmony_ci      this.spSystemTrace?.clickEmptyArea();
2116fb726d48Sopenharmony_ci      this.spSystemTrace!.searchTargetTraceHandler();
2117fb726d48Sopenharmony_ci    });
2118fb726d48Sopenharmony_ci    this.initSearchChangeEvents();
2119fb726d48Sopenharmony_ci  }
2120fb726d48Sopenharmony_ci
2121fb726d48Sopenharmony_ci  private initSystemTraceEvents(): void {
2122fb726d48Sopenharmony_ci    this.spSystemTrace?.addEventListener('trace-previous-data', (ev) => {
2123fb726d48Sopenharmony_ci      if (this.progressEL!.loading) {
2124fb726d48Sopenharmony_ci        return;
2125fb726d48Sopenharmony_ci      }
2126fb726d48Sopenharmony_ci      this.litSearch!.index = this.spSystemTrace!.showStruct(true, this.litSearch!.index, this.litSearch!.list);
2127fb726d48Sopenharmony_ci    });
2128fb726d48Sopenharmony_ci    this.spSystemTrace?.addEventListener('trace-next-data', (ev) => {
2129fb726d48Sopenharmony_ci      if (this.progressEL!.loading) {
2130fb726d48Sopenharmony_ci        return;
2131fb726d48Sopenharmony_ci      }
2132fb726d48Sopenharmony_ci      this.litSearch!.index = this.spSystemTrace!.showStruct(false, this.litSearch!.index, this.litSearch!.list);
2133fb726d48Sopenharmony_ci    });
2134fb726d48Sopenharmony_ci  }
2135fb726d48Sopenharmony_ci
2136fb726d48Sopenharmony_ci  private showContent(showNode: HTMLElement): void {
2137fb726d48Sopenharmony_ci    if (showNode === this.spSystemTrace) {
2138fb726d48Sopenharmony_ci      this.menu!.style.pointerEvents = 'auto';
2139fb726d48Sopenharmony_ci      this.sidebarButton!.style.pointerEvents = 'auto';
2140fb726d48Sopenharmony_ci      this.search = true;
2141fb726d48Sopenharmony_ci      this.litRecordSearch!.style.display = 'none';
2142fb726d48Sopenharmony_ci      this.litSearch!.style.display = 'block';
2143fb726d48Sopenharmony_ci      this.contentRightOption!.style.display = 'flex';
2144fb726d48Sopenharmony_ci      this.contentLeftOption!.style.display = 'flex';
2145fb726d48Sopenharmony_ci      this.contentCenterOption!.style.display = 'flex';
2146fb726d48Sopenharmony_ci      window.publish(window.SmartEvent.UI.KeyboardEnable, {
2147fb726d48Sopenharmony_ci        enable: true,
2148fb726d48Sopenharmony_ci      });
2149fb726d48Sopenharmony_ci      this.filterConfig!.style.visibility = 'visible';
2150fb726d48Sopenharmony_ci    } else {
2151fb726d48Sopenharmony_ci      this.removeAttribute('custom-color');
2152fb726d48Sopenharmony_ci      this.customColor!.setAttribute('hidden', '');
2153fb726d48Sopenharmony_ci      this.customColor!.cancelOperate();
2154fb726d48Sopenharmony_ci      this.menu!.style.pointerEvents = 'none';
2155fb726d48Sopenharmony_ci      this.sidebarButton!.style.pointerEvents = 'none';
2156fb726d48Sopenharmony_ci      this.search = this.litSearch!.isLoading;
2157fb726d48Sopenharmony_ci      this.contentRightOption!.style.display = 'none';
2158fb726d48Sopenharmony_ci      this.contentLeftOption!.style.display = 'none';
2159fb726d48Sopenharmony_ci      this.contentCenterOption!.style.display = 'none';
2160fb726d48Sopenharmony_ci      if (!this.search) {
2161fb726d48Sopenharmony_ci        this.litSearch!.style.display = 'none';
2162fb726d48Sopenharmony_ci        this.litRecordSearch!.style.display = 'block';
2163fb726d48Sopenharmony_ci      }
2164fb726d48Sopenharmony_ci      window.publish(window.SmartEvent.UI.KeyboardEnable, {
2165fb726d48Sopenharmony_ci        enable: false,
2166fb726d48Sopenharmony_ci      });
2167fb726d48Sopenharmony_ci      this.filterConfig!.style.visibility = 'hidden';
2168fb726d48Sopenharmony_ci      this.removeAttribute('chart_filter');
2169fb726d48Sopenharmony_ci      this.chartFilter!.setAttribute('hidden', '');
2170fb726d48Sopenharmony_ci    }
2171fb726d48Sopenharmony_ci    this.childComponent!.forEach((node) => {
2172fb726d48Sopenharmony_ci      if (this.hasAttribute('chart_filter')) {
2173fb726d48Sopenharmony_ci        this.removeAttribute('chart_filter');
2174fb726d48Sopenharmony_ci      }
2175fb726d48Sopenharmony_ci      if (this.hasAttribute('custom-color')) {
2176fb726d48Sopenharmony_ci        this.removeAttribute('custom-color');
2177fb726d48Sopenharmony_ci        this.customColor!.setAttribute('hidden', '');
2178fb726d48Sopenharmony_ci        this.customColor!.cancelOperate();
2179fb726d48Sopenharmony_ci      }
2180fb726d48Sopenharmony_ci      if (node === showNode) {
2181fb726d48Sopenharmony_ci        showNode.style.visibility = 'visible';
2182fb726d48Sopenharmony_ci        let recordSetting = document.querySelector("body > sp-application")?.shadowRoot?.querySelector("#sp-record-trace")?.shadowRoot?.querySelector("#app-content > record-setting");
2183fb726d48Sopenharmony_ci        shadowRootInput.preventBubbling(recordSetting!);
2184fb726d48Sopenharmony_ci      } else {
2185fb726d48Sopenharmony_ci        (node! as HTMLElement).style.visibility = 'hidden';
2186fb726d48Sopenharmony_ci      }
2187fb726d48Sopenharmony_ci    });
2188fb726d48Sopenharmony_ci  }
2189fb726d48Sopenharmony_ci
2190fb726d48Sopenharmony_ci  private validateFileCacheLost(): void {
2191fb726d48Sopenharmony_ci    caches.has(getThreadPoolTraceBufferCacheKey('1')).then((exist): void => {
2192fb726d48Sopenharmony_ci      if (!exist) {
2193fb726d48Sopenharmony_ci        this.mainMenu!.menus?.forEach((mg) => {
2194fb726d48Sopenharmony_ci          mg.children.forEach((mi: MenuItem) => {
2195fb726d48Sopenharmony_ci            if (mi.title === 'Download File') {
2196fb726d48Sopenharmony_ci              mi.disabled = true;
2197fb726d48Sopenharmony_ci            }
2198fb726d48Sopenharmony_ci          });
2199fb726d48Sopenharmony_ci        });
2200fb726d48Sopenharmony_ci        this.cutTraceFile!.style.display = 'none';
2201fb726d48Sopenharmony_ci        this.mainMenu!.menus = this.mainMenu!.menus;
2202fb726d48Sopenharmony_ci      }
2203fb726d48Sopenharmony_ci    });
2204fb726d48Sopenharmony_ci  }
2205fb726d48Sopenharmony_ci
2206fb726d48Sopenharmony_ci  private refreshPageList(
2207fb726d48Sopenharmony_ci    pageListDiv: HTMLDivElement,
2208fb726d48Sopenharmony_ci    previewButton: HTMLDivElement,
2209fb726d48Sopenharmony_ci    nextButton: HTMLDivElement,
2210fb726d48Sopenharmony_ci    pageInput: HTMLInputElement,
2211fb726d48Sopenharmony_ci    currentPageNum: number,
2212fb726d48Sopenharmony_ci    maxPageNumber: number
2213fb726d48Sopenharmony_ci  ): void {
2214fb726d48Sopenharmony_ci    if (pageInput) {
2215fb726d48Sopenharmony_ci      pageInput.textContent = currentPageNum.toString();
2216fb726d48Sopenharmony_ci      pageInput.value = currentPageNum.toString();
2217fb726d48Sopenharmony_ci      pageInput.style.pointerEvents = 'none';
2218fb726d48Sopenharmony_ci    }
2219fb726d48Sopenharmony_ci    let pageText: string[] = [];
2220fb726d48Sopenharmony_ci    if (maxPageNumber > 7) {
2221fb726d48Sopenharmony_ci      pageText = this.largePageHandler(currentPageNum, maxPageNumber, previewButton, nextButton);
2222fb726d48Sopenharmony_ci    } else {
2223fb726d48Sopenharmony_ci      pageText = [];
2224fb726d48Sopenharmony_ci      for (let index = 0; index < maxPageNumber; index++) {
2225fb726d48Sopenharmony_ci        pageText.push((index + 1).toString());
2226fb726d48Sopenharmony_ci      }
2227fb726d48Sopenharmony_ci    }
2228fb726d48Sopenharmony_ci    this.pageNodeHandler(pageListDiv, pageText, currentPageNum);
2229fb726d48Sopenharmony_ci  }
2230fb726d48Sopenharmony_ci
2231fb726d48Sopenharmony_ci  private pageNodeHandler(pageListDiv: HTMLDivElement, pageText: Array<string>, currentPageNum: number): void {
2232fb726d48Sopenharmony_ci    let pageNodeList = pageListDiv.querySelectorAll<HTMLDivElement>('div');
2233fb726d48Sopenharmony_ci    if (pageNodeList.length > 0) {
2234fb726d48Sopenharmony_ci      pageNodeList.forEach((page, index) => {
2235fb726d48Sopenharmony_ci        page.textContent = pageText[index].toString();
2236fb726d48Sopenharmony_ci        page.title = pageText[index];
2237fb726d48Sopenharmony_ci        if (currentPageNum.toString() === pageText[index]) {
2238fb726d48Sopenharmony_ci          page.setAttribute('selected', '');
2239fb726d48Sopenharmony_ci        } else {
2240fb726d48Sopenharmony_ci          if (page.hasAttribute('selected')) {
2241fb726d48Sopenharmony_ci            page.removeAttribute('selected');
2242fb726d48Sopenharmony_ci          }
2243fb726d48Sopenharmony_ci        }
2244fb726d48Sopenharmony_ci      });
2245fb726d48Sopenharmony_ci    } else {
2246fb726d48Sopenharmony_ci      pageListDiv.innerHTML = '';
2247fb726d48Sopenharmony_ci      pageText.forEach((page) => {
2248fb726d48Sopenharmony_ci        let element = document.createElement('div');
2249fb726d48Sopenharmony_ci        element.className = 'page-number pagination';
2250fb726d48Sopenharmony_ci        element.textContent = page.toString();
2251fb726d48Sopenharmony_ci        element.title = page.toString();
2252fb726d48Sopenharmony_ci        if (currentPageNum.toString() === page.toString()) {
2253fb726d48Sopenharmony_ci          element.setAttribute('selected', '');
2254fb726d48Sopenharmony_ci        }
2255fb726d48Sopenharmony_ci        pageListDiv.appendChild(element);
2256fb726d48Sopenharmony_ci      });
2257fb726d48Sopenharmony_ci    }
2258fb726d48Sopenharmony_ci  }
2259fb726d48Sopenharmony_ci
2260fb726d48Sopenharmony_ci  private largePageHandler(
2261fb726d48Sopenharmony_ci    currentPageNum: number,
2262fb726d48Sopenharmony_ci    maxPageNumber: number,
2263fb726d48Sopenharmony_ci    previewButton: HTMLDivElement,
2264fb726d48Sopenharmony_ci    nextButton: HTMLDivElement
2265fb726d48Sopenharmony_ci  ): Array<string> {
2266fb726d48Sopenharmony_ci    switch (currentPageNum) {
2267fb726d48Sopenharmony_ci      case 1:
2268fb726d48Sopenharmony_ci      case 2:
2269fb726d48Sopenharmony_ci      case 3:
2270fb726d48Sopenharmony_ci      case 4:
2271fb726d48Sopenharmony_ci      case 5:
2272fb726d48Sopenharmony_ci        return ['1', '2', '3', '4', '5', '...', maxPageNumber.toString()];
2273fb726d48Sopenharmony_ci      case maxPageNumber:
2274fb726d48Sopenharmony_ci      case maxPageNumber - 1:
2275fb726d48Sopenharmony_ci      case maxPageNumber - 2:
2276fb726d48Sopenharmony_ci      case maxPageNumber - 3:
2277fb726d48Sopenharmony_ci      case maxPageNumber - 4:
2278fb726d48Sopenharmony_ci        return [
2279fb726d48Sopenharmony_ci          '1',
2280fb726d48Sopenharmony_ci          '...',
2281fb726d48Sopenharmony_ci          (maxPageNumber - 4).toString(),
2282fb726d48Sopenharmony_ci          (maxPageNumber - 3).toString(),
2283fb726d48Sopenharmony_ci          (maxPageNumber - 2).toString(),
2284fb726d48Sopenharmony_ci          (maxPageNumber - 1).toString(),
2285fb726d48Sopenharmony_ci          maxPageNumber.toString(),
2286fb726d48Sopenharmony_ci        ];
2287fb726d48Sopenharmony_ci      default:
2288fb726d48Sopenharmony_ci        nextButton.style.pointerEvents = 'auto';
2289fb726d48Sopenharmony_ci        previewButton!.style.pointerEvents = 'auto';
2290fb726d48Sopenharmony_ci        nextButton.style.opacity = '1';
2291fb726d48Sopenharmony_ci        previewButton!.style.opacity = '1';
2292fb726d48Sopenharmony_ci        return [
2293fb726d48Sopenharmony_ci          '1',
2294fb726d48Sopenharmony_ci          '...',
2295fb726d48Sopenharmony_ci          (currentPageNum - 1).toString(),
2296fb726d48Sopenharmony_ci          currentPageNum.toString(),
2297fb726d48Sopenharmony_ci          (currentPageNum + 1).toString(),
2298fb726d48Sopenharmony_ci          '...',
2299fb726d48Sopenharmony_ci          maxPageNumber.toString(),
2300fb726d48Sopenharmony_ci        ];
2301fb726d48Sopenharmony_ci    }
2302fb726d48Sopenharmony_ci  }
2303fb726d48Sopenharmony_ci
2304fb726d48Sopenharmony_ci  /**
2305fb726d48Sopenharmony_ci   * 修改颜色或者主题,重新绘制侧边栏和泳道图
2306fb726d48Sopenharmony_ci   * @param theme 当前主题(深色和浅色)
2307fb726d48Sopenharmony_ci   * @param colorsArray 预览的情况下传入
2308fb726d48Sopenharmony_ci   */
2309fb726d48Sopenharmony_ci  changeTheme(theme: Theme, colorsArray?: Array<string>): void {
2310fb726d48Sopenharmony_ci    if (!colorsArray) {
2311fb726d48Sopenharmony_ci      this.customColor!.setRadioChecked(theme);
2312fb726d48Sopenharmony_ci    }
2313fb726d48Sopenharmony_ci    if (theme === Theme.DARK) {
2314fb726d48Sopenharmony_ci      this.changeDarkTheme(colorsArray);
2315fb726d48Sopenharmony_ci    } else {
2316fb726d48Sopenharmony_ci      this.changeLightTheme(colorsArray);
2317fb726d48Sopenharmony_ci    }
2318fb726d48Sopenharmony_ci    this.spSystemTrace!.timerShaftEL!.rangeRuler!.draw();
2319fb726d48Sopenharmony_ci    if (this.colorTransiton) {
2320fb726d48Sopenharmony_ci      clearTimeout(this.colorTransiton);
2321fb726d48Sopenharmony_ci    }
2322fb726d48Sopenharmony_ci    this.colorTransiton = setTimeout(() => (this.mainMenu!.style.transition = '0s'), 1000);
2323fb726d48Sopenharmony_ci  }
2324fb726d48Sopenharmony_ci
2325fb726d48Sopenharmony_ci  private changeDarkTheme(colorsArray?: Array<string>): void {
2326fb726d48Sopenharmony_ci    let menuGroup = this.mainMenu!.shadowRoot?.querySelectorAll<LitMainMenuGroup>('lit-main-menu-group');
2327fb726d48Sopenharmony_ci    let menuItem = this.mainMenu!.shadowRoot?.querySelectorAll<LitMainMenuItem>('lit-main-menu-item');
2328fb726d48Sopenharmony_ci    this.mainMenu!.style.backgroundColor = '#262f3c';
2329fb726d48Sopenharmony_ci    this.mainMenu!.style.transition = '1s';
2330fb726d48Sopenharmony_ci    menuGroup!.forEach((item) => {
2331fb726d48Sopenharmony_ci      let groupName = item!.shadowRoot!.querySelector('.group-name') as LitMainMenuGroup;
2332fb726d48Sopenharmony_ci      let groupDescribe = item!.shadowRoot!.querySelector('.group-describe') as LitMainMenuGroup;
2333fb726d48Sopenharmony_ci      groupName.style.color = 'white';
2334fb726d48Sopenharmony_ci      groupDescribe.style.color = 'white';
2335fb726d48Sopenharmony_ci    });
2336fb726d48Sopenharmony_ci    menuItem!.forEach((item) => {
2337fb726d48Sopenharmony_ci      item.style.color = 'white';
2338fb726d48Sopenharmony_ci    });
2339fb726d48Sopenharmony_ci    if (
2340fb726d48Sopenharmony_ci      !colorsArray &&
2341fb726d48Sopenharmony_ci      window.localStorage.getItem('DarkThemeColors') &&
2342fb726d48Sopenharmony_ci      ColorUtils.FUNC_COLOR_B !== JSON.parse(window.localStorage.getItem('DarkThemeColors')!)
2343fb726d48Sopenharmony_ci    ) {
2344fb726d48Sopenharmony_ci      ColorUtils.MD_PALETTE = JSON.parse(window.localStorage.getItem('DarkThemeColors')!);
2345fb726d48Sopenharmony_ci      ColorUtils.FUNC_COLOR = JSON.parse(window.localStorage.getItem('DarkThemeColors')!);
2346fb726d48Sopenharmony_ci    } else if (colorsArray) {
2347fb726d48Sopenharmony_ci      ColorUtils.MD_PALETTE = colorsArray;
2348fb726d48Sopenharmony_ci      ColorUtils.FUNC_COLOR = colorsArray;
2349fb726d48Sopenharmony_ci    } else {
2350fb726d48Sopenharmony_ci      ColorUtils.MD_PALETTE = ColorUtils.FUNC_COLOR_B;
2351fb726d48Sopenharmony_ci      ColorUtils.FUNC_COLOR = ColorUtils.FUNC_COLOR_B;
2352fb726d48Sopenharmony_ci    }
2353fb726d48Sopenharmony_ci  }
2354fb726d48Sopenharmony_ci
2355fb726d48Sopenharmony_ci  private changeLightTheme(colorsArray?: Array<string>): void {
2356fb726d48Sopenharmony_ci    let menuGroup = this.mainMenu!.shadowRoot?.querySelectorAll<LitMainMenuGroup>('lit-main-menu-group');
2357fb726d48Sopenharmony_ci    let menuItem = this.mainMenu!.shadowRoot?.querySelectorAll<LitMainMenuItem>('lit-main-menu-item');
2358fb726d48Sopenharmony_ci    this.mainMenu!.style.backgroundColor = 'white';
2359fb726d48Sopenharmony_ci    this.mainMenu!.style.transition = '1s';
2360fb726d48Sopenharmony_ci    menuGroup!.forEach((item) => {
2361fb726d48Sopenharmony_ci      let groupName = item!.shadowRoot!.querySelector('.group-name') as LitMainMenuGroup;
2362fb726d48Sopenharmony_ci      let groupDescribe = item!.shadowRoot!.querySelector('.group-describe') as LitMainMenuGroup;
2363fb726d48Sopenharmony_ci      groupName.style.color = 'black';
2364fb726d48Sopenharmony_ci      groupDescribe.style.color = '#92959b';
2365fb726d48Sopenharmony_ci    });
2366fb726d48Sopenharmony_ci    menuItem!.forEach((item) => {
2367fb726d48Sopenharmony_ci      item.style.color = 'black';
2368fb726d48Sopenharmony_ci    });
2369fb726d48Sopenharmony_ci    if (
2370fb726d48Sopenharmony_ci      !colorsArray &&
2371fb726d48Sopenharmony_ci      window.localStorage.getItem('LightThemeColors') &&
2372fb726d48Sopenharmony_ci      ColorUtils.FUNC_COLOR_A !== JSON.parse(window.localStorage.getItem('LightThemeColors')!)
2373fb726d48Sopenharmony_ci    ) {
2374fb726d48Sopenharmony_ci      ColorUtils.MD_PALETTE = JSON.parse(window.localStorage.getItem('LightThemeColors')!);
2375fb726d48Sopenharmony_ci      ColorUtils.FUNC_COLOR = JSON.parse(window.localStorage.getItem('LightThemeColors')!);
2376fb726d48Sopenharmony_ci    } else if (colorsArray) {
2377fb726d48Sopenharmony_ci      ColorUtils.MD_PALETTE = colorsArray;
2378fb726d48Sopenharmony_ci      ColorUtils.FUNC_COLOR = colorsArray;
2379fb726d48Sopenharmony_ci    } else {
2380fb726d48Sopenharmony_ci      ColorUtils.MD_PALETTE = ColorUtils.FUNC_COLOR_A;
2381fb726d48Sopenharmony_ci      ColorUtils.FUNC_COLOR = ColorUtils.FUNC_COLOR_A;
2382fb726d48Sopenharmony_ci    }
2383fb726d48Sopenharmony_ci  }
2384fb726d48Sopenharmony_ci
2385fb726d48Sopenharmony_ci  private downloadOnLineFile(
2386fb726d48Sopenharmony_ci    url: string,
2387fb726d48Sopenharmony_ci    download: boolean,
2388fb726d48Sopenharmony_ci    openUrl: (buffer: ArrayBuffer, fileName: string, showFileName: string, fileSize: number) => void,
2389fb726d48Sopenharmony_ci    openFileHandler: (path: string) => void
2390fb726d48Sopenharmony_ci  ): void {
2391fb726d48Sopenharmony_ci    if (download) {
2392fb726d48Sopenharmony_ci      fetch(url)
2393fb726d48Sopenharmony_ci        .then((res) => {
2394fb726d48Sopenharmony_ci          res.arrayBuffer().then((arrayBuf) => {
2395fb726d48Sopenharmony_ci            let fileName = url.split('/').reverse()[0];
2396fb726d48Sopenharmony_ci            this.traceFileName = fileName;
2397fb726d48Sopenharmony_ci            let showFileName =
2398fb726d48Sopenharmony_ci              fileName.lastIndexOf('.') === -1 ? fileName : fileName.substring(0, fileName.lastIndexOf('.'));
2399fb726d48Sopenharmony_ci            openUrl(arrayBuf, fileName, showFileName, arrayBuf.byteLength);
2400fb726d48Sopenharmony_ci          });
2401fb726d48Sopenharmony_ci        })
2402fb726d48Sopenharmony_ci        .catch((e) => {
2403fb726d48Sopenharmony_ci          let api = `${window.location.origin}/application/download-file`;
2404fb726d48Sopenharmony_ci          fetch(api, {
2405fb726d48Sopenharmony_ci            method: 'POST',
2406fb726d48Sopenharmony_ci            headers: {
2407fb726d48Sopenharmony_ci              'Content-Type': 'application/x-www-form-urlencoded',
2408fb726d48Sopenharmony_ci            },
2409fb726d48Sopenharmony_ci            body: new URLSearchParams({
2410fb726d48Sopenharmony_ci              url: url,
2411fb726d48Sopenharmony_ci            }),
2412fb726d48Sopenharmony_ci          })
2413fb726d48Sopenharmony_ci            .then((response) => response.json())
2414fb726d48Sopenharmony_ci            .then((res) => {
2415fb726d48Sopenharmony_ci              if (res.code === 0 && res.success) {
2416fb726d48Sopenharmony_ci                let resultUrl = res.data.url;
2417fb726d48Sopenharmony_ci                if (resultUrl) {
2418fb726d48Sopenharmony_ci                  openFileHandler(resultUrl.toString().replace(/\\/g, '/'));
2419fb726d48Sopenharmony_ci                }
2420fb726d48Sopenharmony_ci              }
2421fb726d48Sopenharmony_ci            });
2422fb726d48Sopenharmony_ci        });
2423fb726d48Sopenharmony_ci    } else {
2424fb726d48Sopenharmony_ci      openFileHandler(url);
2425fb726d48Sopenharmony_ci    }
2426fb726d48Sopenharmony_ci  }
2427fb726d48Sopenharmony_ci
2428fb726d48Sopenharmony_ci  private croppingFile(progressEL: LitProgressBar, litSearch: LitSearch): void {
2429fb726d48Sopenharmony_ci    let cutLeftNs = TraceRow.rangeSelectObject?.startNS || 0;
2430fb726d48Sopenharmony_ci    let cutRightNs = TraceRow.rangeSelectObject?.endNS || 0;
2431fb726d48Sopenharmony_ci    if (cutRightNs === cutLeftNs) {
2432fb726d48Sopenharmony_ci      return;
2433fb726d48Sopenharmony_ci    }
2434fb726d48Sopenharmony_ci    let recordStartNS = window.recordStartNS;
2435fb726d48Sopenharmony_ci    let cutLeftTs = recordStartNS + cutLeftNs;
2436fb726d48Sopenharmony_ci    let cutRightTs = recordStartNS + cutRightNs;
2437fb726d48Sopenharmony_ci    let minCutDur = 1_000_000;
2438fb726d48Sopenharmony_ci    if (cutRightTs - cutLeftTs < minCutDur) {
2439fb726d48Sopenharmony_ci      let unitTs = (cutRightTs - cutLeftTs) / 2;
2440fb726d48Sopenharmony_ci      let midTs = cutLeftTs + unitTs;
2441fb726d48Sopenharmony_ci      cutLeftTs = midTs - minCutDur / 2;
2442fb726d48Sopenharmony_ci      cutRightTs = midTs + minCutDur / 2;
2443fb726d48Sopenharmony_ci    }
2444fb726d48Sopenharmony_ci    progressEL.loading = true;
2445fb726d48Sopenharmony_ci    threadPool.cutFile(cutLeftTs, cutRightTs, (status: boolean, msg: string, cutBuffer?: ArrayBuffer) => {
2446fb726d48Sopenharmony_ci      progressEL.loading = false;
2447fb726d48Sopenharmony_ci      if (status) {
2448fb726d48Sopenharmony_ci        FlagsConfig.updateFlagsConfig('FfrtConvert', 'Disabled');
2449fb726d48Sopenharmony_ci        let traceFileName = this.traceFileName as string;
2450fb726d48Sopenharmony_ci        let cutIndex = traceFileName.indexOf('_cut_');
2451fb726d48Sopenharmony_ci        let fileType = traceFileName.substring(traceFileName.lastIndexOf('.'));
2452fb726d48Sopenharmony_ci        let traceName = document.title.replace(/\s*\([^)]*\)/g, '').trim();
2453fb726d48Sopenharmony_ci        if (cutIndex !== -1) {
2454fb726d48Sopenharmony_ci          traceName = traceName.substring(0, cutIndex);
2455fb726d48Sopenharmony_ci        }
2456fb726d48Sopenharmony_ci        if (cutBuffer !== undefined && cutBuffer.byteLength <= 12) {
2457fb726d48Sopenharmony_ci          this.litSearch!.setPercent('The cut is empty data. Select a time range for valid data!', -1);
2458fb726d48Sopenharmony_ci          this.progressEL!.loading = false;
2459fb726d48Sopenharmony_ci          this.freshMenuDisable(false);
2460fb726d48Sopenharmony_ci          return;
2461fb726d48Sopenharmony_ci        }
2462fb726d48Sopenharmony_ci        let blobUrl = URL.createObjectURL(new Blob([cutBuffer!]));
2463fb726d48Sopenharmony_ci        window.open(
2464fb726d48Sopenharmony_ci          `index.html?link=true&local=true&traceName=${encodeURIComponent(
2465fb726d48Sopenharmony_ci            traceName
2466fb726d48Sopenharmony_ci          )}_cut_${cutLeftTs}${fileType}&trace=${encodeURIComponent(blobUrl)}`
2467fb726d48Sopenharmony_ci        );
2468fb726d48Sopenharmony_ci      } else {
2469fb726d48Sopenharmony_ci        litSearch.setPercent(msg, -1);
2470fb726d48Sopenharmony_ci        window.setTimeout(() => {
2471fb726d48Sopenharmony_ci          litSearch.setPercent(msg, 101);
2472fb726d48Sopenharmony_ci        }, 1000);
2473fb726d48Sopenharmony_ci      }
2474fb726d48Sopenharmony_ci    });
2475fb726d48Sopenharmony_ci  }
2476fb726d48Sopenharmony_ci
2477fb726d48Sopenharmony_ci  private downloadDB(mainMenu: LitMainMenu, fileDbName: string): void {
2478fb726d48Sopenharmony_ci    let fileName = `${fileDbName?.substring(0, fileDbName?.lastIndexOf('.'))}.db`;
2479fb726d48Sopenharmony_ci    threadPool.submit(
2480fb726d48Sopenharmony_ci      'download-db',
2481fb726d48Sopenharmony_ci      '',
2482fb726d48Sopenharmony_ci      {},
2483fb726d48Sopenharmony_ci      (reqBufferDB: ArrayBuffer) => {
2484fb726d48Sopenharmony_ci        let a = document.createElement('a');
2485fb726d48Sopenharmony_ci        a.href = URL.createObjectURL(new Blob([reqBufferDB]));
2486fb726d48Sopenharmony_ci        a.download = fileName;
2487fb726d48Sopenharmony_ci        a.click();
2488fb726d48Sopenharmony_ci        this.itemIconLoading(mainMenu, 'Current Trace', 'Download Database', true);
2489fb726d48Sopenharmony_ci        let timer = setInterval(() => {
2490fb726d48Sopenharmony_ci          this.itemIconLoading(mainMenu, 'Current Trace', 'Download Database', false);
2491fb726d48Sopenharmony_ci          clearInterval(timer);
2492fb726d48Sopenharmony_ci        }, 4000);
2493fb726d48Sopenharmony_ci        // 存入缓存
2494fb726d48Sopenharmony_ci        caches.open(`${fileName}`).then((cache) => {
2495fb726d48Sopenharmony_ci          let headers = new Headers();
2496fb726d48Sopenharmony_ci          headers.append('Content-type', 'application/octet-stream');
2497fb726d48Sopenharmony_ci          headers.append('Content-Transfer-Encoding', 'binary');
2498fb726d48Sopenharmony_ci          return cache.put(`${fileName}`, new Response(reqBufferDB, { status: 200 }));
2499fb726d48Sopenharmony_ci        })
2500fb726d48Sopenharmony_ci      },
2501fb726d48Sopenharmony_ci      'download-db'
2502fb726d48Sopenharmony_ci    );
2503fb726d48Sopenharmony_ci  }
2504fb726d48Sopenharmony_ci
2505fb726d48Sopenharmony_ci  private async download(mainMenu: LitMainMenu, fileName: string, isServer: boolean, dbName?: string): Promise<void> {
2506fb726d48Sopenharmony_ci    let a = document.createElement('a');
2507fb726d48Sopenharmony_ci    if (isServer) {
2508fb726d48Sopenharmony_ci      if (dbName !== '') {
2509fb726d48Sopenharmony_ci        let file = dbName?.substring(0, dbName?.lastIndexOf('.')) + fileName.substring(fileName.lastIndexOf('.'));
2510fb726d48Sopenharmony_ci        a.href = `https://${window.location.host.split(':')[0]}:${window.location.port}${file}`;
2511fb726d48Sopenharmony_ci      } else {
2512fb726d48Sopenharmony_ci        return;
2513fb726d48Sopenharmony_ci      }
2514fb726d48Sopenharmony_ci    } else {
2515fb726d48Sopenharmony_ci      let buffer = await readTraceFileBuffer();
2516fb726d48Sopenharmony_ci      if (buffer) {
2517fb726d48Sopenharmony_ci        a.href = URL.createObjectURL(new Blob([buffer]));
2518fb726d48Sopenharmony_ci      }
2519fb726d48Sopenharmony_ci    }
2520fb726d48Sopenharmony_ci    a.download = fileName;
2521fb726d48Sopenharmony_ci    a.click();
2522fb726d48Sopenharmony_ci    window.URL.revokeObjectURL(a.href);
2523fb726d48Sopenharmony_ci    this.itemIconLoading(mainMenu, 'Current Trace', 'Download File', true);
2524fb726d48Sopenharmony_ci    let timer = setInterval(() => {
2525fb726d48Sopenharmony_ci      this.itemIconLoading(mainMenu, 'Current Trace', 'Download File', false);
2526fb726d48Sopenharmony_ci      clearInterval(timer);
2527fb726d48Sopenharmony_ci    }, 4000);
2528fb726d48Sopenharmony_ci  }
2529fb726d48Sopenharmony_ci
2530fb726d48Sopenharmony_ci  private itemIconLoading(mainMenu: LitMainMenu, groupName: string, itemName: string, start: boolean): void {
2531fb726d48Sopenharmony_ci    let currentTraceGroup = mainMenu.shadowRoot?.querySelector<LitMainMenuGroup>(
2532fb726d48Sopenharmony_ci      `lit-main-menu-group[title='${groupName}']`
2533fb726d48Sopenharmony_ci    );
2534fb726d48Sopenharmony_ci    let downloadItem = currentTraceGroup!.querySelector<LitMainMenuItem>(`lit-main-menu-item[title='${itemName}']`);
2535fb726d48Sopenharmony_ci    let downloadIcon = downloadItem!.shadowRoot?.querySelector('.icon') as LitIcon;
2536fb726d48Sopenharmony_ci    if (start) {
2537fb726d48Sopenharmony_ci      downloadItem!.setAttribute('icon', 'convert-loading');
2538fb726d48Sopenharmony_ci      downloadIcon.setAttribute('spin', '');
2539fb726d48Sopenharmony_ci    } else {
2540fb726d48Sopenharmony_ci      downloadItem!.setAttribute('icon', 'download');
2541fb726d48Sopenharmony_ci      downloadIcon.removeAttribute('spin');
2542fb726d48Sopenharmony_ci    }
2543fb726d48Sopenharmony_ci  }
2544fb726d48Sopenharmony_ci
2545fb726d48Sopenharmony_ci  freshMenuDisable(disable: boolean): void {
2546fb726d48Sopenharmony_ci    // @ts-ignore
2547fb726d48Sopenharmony_ci    this.mainMenu!.menus[0].children[0].disabled = disable;
2548fb726d48Sopenharmony_ci    // @ts-ignore
2549fb726d48Sopenharmony_ci    this.mainMenu!.menus[0].children[1].disabled = disable;
2550fb726d48Sopenharmony_ci    if (this.mainMenu!.menus!.length > 2) {
2551fb726d48Sopenharmony_ci      // @ts-ignore
2552fb726d48Sopenharmony_ci      this.mainMenu!.menus[1].children.map((it) => (it.disabled = disable));
2553fb726d48Sopenharmony_ci    }
2554fb726d48Sopenharmony_ci    this.mainMenu!.menus = this.mainMenu!.menus;
2555fb726d48Sopenharmony_ci    this.filterConfig!.style.visibility = disable ? 'hidden' : 'visible';
2556fb726d48Sopenharmony_ci  }
2557fb726d48Sopenharmony_ci}
2558