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