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 { SpSystemTrace } from './SpSystemTrace'; 17fb726d48Sopenharmony_ciimport { ThreadStruct, ThreadStructOnClick } from '../database/ui-worker/ProcedureWorkerThread'; 18fb726d48Sopenharmony_ciimport { TraceRow } from './trace/base/TraceRow'; 19fb726d48Sopenharmony_ciimport { JankStruct, JankStructOnClick } from '../database/ui-worker/ProcedureWorkerJank'; 20fb726d48Sopenharmony_ciimport { HeapSnapshotStruct, HeapSnapshotStructOnClick } from '../database/ui-worker/ProcedureWorkerHeapSnapshot'; 21fb726d48Sopenharmony_ciimport { FuncStruct, funcStructOnClick } from '../database/ui-worker/ProcedureWorkerFunc'; 22fb726d48Sopenharmony_ciimport { CpuFreqStruct, CpuFreqStructOnClick } from '../database/ui-worker/ProcedureWorkerFreq'; 23fb726d48Sopenharmony_ciimport { ClockStruct, ClockStructOnClick } from '../database/ui-worker/ProcedureWorkerClock'; 24fb726d48Sopenharmony_ciimport { DmaFenceStruct, DmaFenceStructOnClick } from '../database/ui-worker/ProcedureWorkerDmaFence'; 25fb726d48Sopenharmony_ciimport { SnapshotStruct, SnapshotStructOnClick } from '../database/ui-worker/ProcedureWorkerSnapshot'; 26fb726d48Sopenharmony_ciimport { IrqStruct, IrqStructOnClick } from '../database/ui-worker/ProcedureWorkerIrq'; 27fb726d48Sopenharmony_ciimport { HeapStruct, HeapStructOnClick } from '../database/ui-worker/ProcedureWorkerHeap'; 28fb726d48Sopenharmony_ciimport { JsCpuProfilerStruct, JsCpuProfilerStructOnClick } from '../database/ui-worker/ProcedureWorkerCpuProfiler'; 29fb726d48Sopenharmony_ciimport { AppStartupStruct, AppStartupStructOnClick } from '../database/ui-worker/ProcedureWorkerAppStartup'; 30fb726d48Sopenharmony_ciimport { AllAppStartupStruct, allAppStartupStructOnClick } from '../database/ui-worker/ProcedureWorkerAllAppStartup'; 31fb726d48Sopenharmony_ciimport { SoStruct, SoStructOnClick } from '../database/ui-worker/ProcedureWorkerSoInit'; 32fb726d48Sopenharmony_ciimport { FrameAnimationStruct, FrameAnimationStructOnClick } from '../database/ui-worker/ProcedureWorkerFrameAnimation'; 33fb726d48Sopenharmony_ciimport { FrameDynamicStruct, FrameDynamicStructOnClick } from '../database/ui-worker/ProcedureWorkerFrameDynamic'; 34fb726d48Sopenharmony_ciimport { FrameSpacingStruct, FrameSpacingStructOnClick } from '../database/ui-worker/ProcedureWorkerFrameSpacing'; 35fb726d48Sopenharmony_ciimport { SampleStruct, sampleStructOnClick } from '../database/ui-worker/ProcedureWorkerBpftrace'; 36fb726d48Sopenharmony_ciimport { SportRuler } from './trace/timer-shaft/SportRuler'; 37fb726d48Sopenharmony_ciimport { SpStatisticsHttpUtil } from '../../statistics/util/SpStatisticsHttpUtil'; 38fb726d48Sopenharmony_ciimport { LitSearch } from './trace/search/Search'; 39fb726d48Sopenharmony_ciimport { TabPaneCurrent } from './trace/sheet/TabPaneCurrent'; 40fb726d48Sopenharmony_ciimport type { SpKeyboard } from './SpKeyboard'; 41fb726d48Sopenharmony_ciimport { enableVSync } from './chart/VSync'; 42fb726d48Sopenharmony_ciimport { CpuStruct, CpuStructOnClick } from '../database/ui-worker/cpu/ProcedureWorkerCPU'; 43fb726d48Sopenharmony_ciimport { ProcessMemStruct } from '../database/ui-worker/ProcedureWorkerMem'; 44fb726d48Sopenharmony_ciimport { CpuStateStruct, CpuStateStructOnClick } from '../database/ui-worker/cpu/ProcedureWorkerCpuState'; 45fb726d48Sopenharmony_ciimport { 46fb726d48Sopenharmony_ci CpuFreqLimitsStruct, 47fb726d48Sopenharmony_ci CpuFreqLimitsStructOnClick 48fb726d48Sopenharmony_ci} from '../database/ui-worker/cpu/ProcedureWorkerCpuFreqLimits'; 49fb726d48Sopenharmony_ciimport { FlagsConfig } from './SpFlags'; 50fb726d48Sopenharmony_ciimport { LitMainMenu } from '../../base-ui/menu/LitMainMenu'; 51fb726d48Sopenharmony_ciimport { PerfToolsStructOnClick, PerfToolStruct } from '../database/ui-worker/ProcedureWorkerPerfTool'; 52fb726d48Sopenharmony_ciimport { Utils } from './trace/base/Utils'; 53fb726d48Sopenharmony_ciimport { BaseStruct } from '../bean/BaseStruct'; 54fb726d48Sopenharmony_ciimport { GpuCounterStruct, gpuCounterStructOnClick } from '../database/ui-worker/ProcedureWorkerGpuCounter'; 55fb726d48Sopenharmony_ciimport { HangStructOnClick } from '../database/ui-worker/ProcedureWorkerHang'; 56fb726d48Sopenharmony_ciimport { XpowerStruct, XpowerStructOnClick } from '../database/ui-worker/ProcedureWorkerXpower'; 57fb726d48Sopenharmony_ciimport { SpAiAnalysisPage } from './SpAiAnalysisPage'; 58fb726d48Sopenharmony_ci 59fb726d48Sopenharmony_cifunction timeoutJudge(sp: SpSystemTrace): number { 60fb726d48Sopenharmony_ci let timeoutJudge = window.setTimeout((): void => { 61fb726d48Sopenharmony_ci if (SpSystemTrace.wakeupList.length && CpuStruct.selectCpuStruct) { 62fb726d48Sopenharmony_ci let checkHandlerKey: boolean = true; 63fb726d48Sopenharmony_ci let saveSelectCpuStruct: unknown = JSON.parse(sessionStorage.getItem('saveselectcpustruct')!); 64fb726d48Sopenharmony_ci for (const item of SpSystemTrace.wakeupList) { 65fb726d48Sopenharmony_ci if (item.ts === CpuStruct.selectCpuStruct.startTime && item.dur === CpuStruct.selectCpuStruct.dur) { 66fb726d48Sopenharmony_ci checkHandlerKey = false; 67fb726d48Sopenharmony_ci if (SpSystemTrace.wakeupList[0].schedulingDesc) { 68fb726d48Sopenharmony_ci //@ts-ignore 69fb726d48Sopenharmony_ci SpSystemTrace.wakeupList.unshift(saveSelectCpuStruct); 70fb726d48Sopenharmony_ci } 71fb726d48Sopenharmony_ci sp.refreshCanvas(true); 72fb726d48Sopenharmony_ci break; 73fb726d48Sopenharmony_ci } else if ( 74fb726d48Sopenharmony_ci //@ts-ignore 75fb726d48Sopenharmony_ci saveSelectCpuStruct.startTime === CpuStruct.selectCpuStruct.startTime && 76fb726d48Sopenharmony_ci //@ts-ignore 77fb726d48Sopenharmony_ci saveSelectCpuStruct.dur === CpuStruct.selectCpuStruct.dur 78fb726d48Sopenharmony_ci ) { 79fb726d48Sopenharmony_ci // 如果点击的是第一层,保持唤醒树不变 80fb726d48Sopenharmony_ci checkHandlerKey = false; 81fb726d48Sopenharmony_ci sp.refreshCanvas(true); 82fb726d48Sopenharmony_ci break; 83fb726d48Sopenharmony_ci } 84fb726d48Sopenharmony_ci } 85fb726d48Sopenharmony_ci // 点击线程在唤醒树内 86fb726d48Sopenharmony_ci if (!checkHandlerKey) { 87fb726d48Sopenharmony_ci // 查询获取tab表格数据 88fb726d48Sopenharmony_ci window.publish(window.SmartEvent.UI.WakeupList, SpSystemTrace.wakeupList); 89fb726d48Sopenharmony_ci } else { 90fb726d48Sopenharmony_ci // 不在唤醒树内,清空数组 91fb726d48Sopenharmony_ci sp.wakeupListNull(); 92fb726d48Sopenharmony_ci sp.refreshCanvas(true); 93fb726d48Sopenharmony_ci } 94fb726d48Sopenharmony_ci } else { 95fb726d48Sopenharmony_ci sp.wakeupListNull(); 96fb726d48Sopenharmony_ci sp.refreshCanvas(true); 97fb726d48Sopenharmony_ci } 98fb726d48Sopenharmony_ci clearTimeout(timeoutJudge); 99fb726d48Sopenharmony_ci }, 10); 100fb726d48Sopenharmony_ci return timeoutJudge; 101fb726d48Sopenharmony_ci} 102fb726d48Sopenharmony_ci 103fb726d48Sopenharmony_cifunction threadClickHandlerFunc(sp: SpSystemTrace): (e: ThreadStruct) => void { 104fb726d48Sopenharmony_ci let threadClickHandler = (d: ThreadStruct): void => { 105fb726d48Sopenharmony_ci sp.observerScrollHeightEnable = false; 106fb726d48Sopenharmony_ci sp.scrollToProcess(`${d.cpu}`, '', 'cpu-data', true); 107fb726d48Sopenharmony_ci let cpuRow = sp.queryAllTraceRow<TraceRow<CpuStruct>>( 108fb726d48Sopenharmony_ci `trace-row[row-id='${Utils.getDistributedRowId(d.cpu)}'][row-type='cpu-data']`, 109fb726d48Sopenharmony_ci (row) => row.rowId === `${Utils.getDistributedRowId(d.cpu)}` && row.rowType === 'cpu-data' 110fb726d48Sopenharmony_ci )[0]; 111fb726d48Sopenharmony_ci if (cpuRow) { 112fb726d48Sopenharmony_ci sp.currentRow = cpuRow; 113fb726d48Sopenharmony_ci cpuRow.fixedList = [ 114fb726d48Sopenharmony_ci { 115fb726d48Sopenharmony_ci startTime: d.startTime, 116fb726d48Sopenharmony_ci dur: d.dur, 117fb726d48Sopenharmony_ci tid: d.tid, 118fb726d48Sopenharmony_ci id: d.id, 119fb726d48Sopenharmony_ci processId: d.pid, 120fb726d48Sopenharmony_ci cpu: d.cpu, 121fb726d48Sopenharmony_ci argSetID: d.argSetID, 122fb726d48Sopenharmony_ci }, 123fb726d48Sopenharmony_ci ]; 124fb726d48Sopenharmony_ci let findEntry = cpuRow!.fixedList[0]; 125fb726d48Sopenharmony_ci sp.rechargeCpuData( 126fb726d48Sopenharmony_ci // @ts-ignore 127fb726d48Sopenharmony_ci findEntry, // @ts-ignore 128fb726d48Sopenharmony_ci cpuRow.dataListCache.find((it) => it.startTime > findEntry.startTime) 129fb726d48Sopenharmony_ci ); 130fb726d48Sopenharmony_ci if ( 131fb726d48Sopenharmony_ci // @ts-ignore 132fb726d48Sopenharmony_ci findEntry!.startTime! + findEntry!.dur! < TraceRow.range!.startNS || // @ts-ignore 133fb726d48Sopenharmony_ci findEntry!.startTime! > TraceRow.range!.endNS 134fb726d48Sopenharmony_ci ) { 135fb726d48Sopenharmony_ci sp.timerShaftEL?.setRangeNS( 136fb726d48Sopenharmony_ci // @ts-ignore 137fb726d48Sopenharmony_ci findEntry!.startTime! - findEntry!.dur! * 2, // @ts-ignore 138fb726d48Sopenharmony_ci findEntry!.startTime! + findEntry!.dur! + findEntry!.dur! * 2 139fb726d48Sopenharmony_ci ); 140fb726d48Sopenharmony_ci } 141fb726d48Sopenharmony_ci sp.hoverStructNull().selectStructNull().wakeupListNull(); // @ts-ignore 142fb726d48Sopenharmony_ci CpuStruct.hoverCpuStruct = findEntry; // @ts-ignore 143fb726d48Sopenharmony_ci CpuStruct.selectCpuStruct = findEntry; // @ts-ignore 144fb726d48Sopenharmony_ci sp.timerShaftEL?.drawTriangle(findEntry!.startTime || 0, 'inverted'); 145fb726d48Sopenharmony_ci sp.traceSheetEL?.displayCpuData( 146fb726d48Sopenharmony_ci CpuStruct.selectCpuStruct!, 147fb726d48Sopenharmony_ci (wakeUpBean) => { 148fb726d48Sopenharmony_ci sp.removeLinkLinesByBusinessType('thread'); 149fb726d48Sopenharmony_ci CpuStruct.wakeupBean = wakeUpBean; 150fb726d48Sopenharmony_ci sp.refreshCanvas(true); 151fb726d48Sopenharmony_ci }, 152fb726d48Sopenharmony_ci cpuClickHandlerFunc(sp) 153fb726d48Sopenharmony_ci ); 154fb726d48Sopenharmony_ci } 155fb726d48Sopenharmony_ci }; 156fb726d48Sopenharmony_ci return threadClickHandler; 157fb726d48Sopenharmony_ci} 158fb726d48Sopenharmony_ci 159fb726d48Sopenharmony_ci//点击prio箭头刷新canvas 160fb726d48Sopenharmony_cifunction prioClickHandlerFunc(sp: SpSystemTrace): (d: unknown) => void { 161fb726d48Sopenharmony_ci return function (d: unknown): void { 162fb726d48Sopenharmony_ci // @ts-ignore 163fb726d48Sopenharmony_ci ThreadStruct.prioCount = d; 164fb726d48Sopenharmony_ci ThreadStruct.isClickPrio = true; 165fb726d48Sopenharmony_ci sp.refreshCanvas(true); 166fb726d48Sopenharmony_ci }; 167fb726d48Sopenharmony_ci} 168fb726d48Sopenharmony_ci 169fb726d48Sopenharmony_cifunction scrollToFuncHandlerFunc(sp: SpSystemTrace): Function { 170fb726d48Sopenharmony_ci let funClickHandle = (funcStruct: unknown): void => { 171fb726d48Sopenharmony_ci // @ts-ignore 172fb726d48Sopenharmony_ci if (funcStruct.chainId) { 173fb726d48Sopenharmony_ci } 174fb726d48Sopenharmony_ci sp.observerScrollHeightEnable = true; 175fb726d48Sopenharmony_ci // @ts-ignore 176fb726d48Sopenharmony_ci sp.moveRangeToCenter(funcStruct.startTs!, funcStruct.dur!); 177fb726d48Sopenharmony_ci sp.scrollToActFunc(funcStruct, false); 178fb726d48Sopenharmony_ci }; 179fb726d48Sopenharmony_ci return funClickHandle; 180fb726d48Sopenharmony_ci} 181fb726d48Sopenharmony_ci 182fb726d48Sopenharmony_cifunction scrollToFunc(sp: SpSystemTrace): Function { 183fb726d48Sopenharmony_ci let funClickHandle = (funcStruct: unknown): void => { 184fb726d48Sopenharmony_ci // @ts-ignore 185fb726d48Sopenharmony_ci if (funcStruct.chainId) { 186fb726d48Sopenharmony_ci } 187fb726d48Sopenharmony_ci sp.observerScrollHeightEnable = true; 188fb726d48Sopenharmony_ci // @ts-ignore 189fb726d48Sopenharmony_ci sp.scrollToActFunc(funcStruct, false); 190fb726d48Sopenharmony_ci }; 191fb726d48Sopenharmony_ci return funClickHandle; 192fb726d48Sopenharmony_ci} 193fb726d48Sopenharmony_ci 194fb726d48Sopenharmony_cifunction jankClickHandlerFunc(sp: SpSystemTrace): Function { 195fb726d48Sopenharmony_ci let jankClickHandler = (d: unknown): void => { 196fb726d48Sopenharmony_ci sp.observerScrollHeightEnable = true; 197fb726d48Sopenharmony_ci let jankRowParent: unknown; 198fb726d48Sopenharmony_ci //@ts-ignore 199fb726d48Sopenharmony_ci if (d.rowId === 'actual frameTime') { 200fb726d48Sopenharmony_ci jankRowParent = sp.shadowRoot?.querySelector<TraceRow<JankStruct>>("trace-row[row-id='frameTime']"); 201fb726d48Sopenharmony_ci } else { 202fb726d48Sopenharmony_ci jankRowParent = sp.shadowRoot?.querySelector<TraceRow<JankStruct>>( 203fb726d48Sopenharmony_ci //@ts-ignore 204fb726d48Sopenharmony_ci `trace-row[row-type='process'][row-id='${d.pid}']` 205fb726d48Sopenharmony_ci ); 206fb726d48Sopenharmony_ci } 207fb726d48Sopenharmony_ci //@ts-ignore 208fb726d48Sopenharmony_ci jankRowParent!.expansion = true; 209fb726d48Sopenharmony_ci let jankRow: unknown; 210fb726d48Sopenharmony_ci //@ts-ignore 211fb726d48Sopenharmony_ci jankRowParent.childrenList.forEach((item: TraceRow<JankStruct>) => { 212fb726d48Sopenharmony_ci //@ts-ignore 213fb726d48Sopenharmony_ci if (`${item.rowId}` === `${d.rowId}` && `${item.rowType}` === 'janks') { 214fb726d48Sopenharmony_ci jankRow = item; 215fb726d48Sopenharmony_ci } 216fb726d48Sopenharmony_ci }); 217fb726d48Sopenharmony_ci //@ts-ignore 218fb726d48Sopenharmony_ci sp.currentRow = jankRow; 219fb726d48Sopenharmony_ci if (jankRow) { 220fb726d48Sopenharmony_ci JankStruct.selectJankStructList.length = 0; 221fb726d48Sopenharmony_ci //@ts-ignore 222fb726d48Sopenharmony_ci let findJankEntry = jankRow!.dataListCache!.find( 223fb726d48Sopenharmony_ci //@ts-ignore 224fb726d48Sopenharmony_ci (dat: unknown) => `${dat.name}` === `${d.name}` && `${dat.pid}` === `${d.pid}` 225fb726d48Sopenharmony_ci ); 226fb726d48Sopenharmony_ci if (findJankEntry) { 227fb726d48Sopenharmony_ci if ( 228fb726d48Sopenharmony_ci findJankEntry!.ts! + findJankEntry!.dur! < TraceRow.range!.startNS || 229fb726d48Sopenharmony_ci findJankEntry!.ts! > TraceRow.range!.endNS 230fb726d48Sopenharmony_ci ) { 231fb726d48Sopenharmony_ci sp.timerShaftEL?.setRangeNS( 232fb726d48Sopenharmony_ci findJankEntry!.ts! - findJankEntry!.dur! * 2, 233fb726d48Sopenharmony_ci findJankEntry!.ts! + findJankEntry!.dur! + findJankEntry!.dur! * 2 234fb726d48Sopenharmony_ci ); 235fb726d48Sopenharmony_ci } 236fb726d48Sopenharmony_ci sp.hoverStructNull().selectStructNull().wakeupListNull(); 237fb726d48Sopenharmony_ci JankStruct.hoverJankStruct = findJankEntry; 238fb726d48Sopenharmony_ci JankStruct.selectJankStruct = findJankEntry; 239fb726d48Sopenharmony_ci sp.timerShaftEL?.drawTriangle(findJankEntry!.ts || 0, 'inverted'); 240fb726d48Sopenharmony_ci sp.traceSheetEL?.displayJankData( 241fb726d48Sopenharmony_ci JankStruct.selectJankStruct!, 242fb726d48Sopenharmony_ci (datas) => { 243fb726d48Sopenharmony_ci sp.removeLinkLinesByBusinessType('janks'); 244fb726d48Sopenharmony_ci // 绘制跟自己关联的线 245fb726d48Sopenharmony_ci datas.forEach((data) => { 246fb726d48Sopenharmony_ci //@ts-ignore 247fb726d48Sopenharmony_ci let endParentRow = sp.shadowRoot?.querySelector<TraceRow<BaseStruct>>( // @ts-ignore 248fb726d48Sopenharmony_ci `trace-row[row-type='process'][row-id='${data.pid}'][folder]` 249fb726d48Sopenharmony_ci ); 250fb726d48Sopenharmony_ci sp.drawJankLine(endParentRow, JankStruct.selectJankStruct!, data, true); 251fb726d48Sopenharmony_ci }); 252fb726d48Sopenharmony_ci }, 253fb726d48Sopenharmony_ci jankClickHandler 254fb726d48Sopenharmony_ci ); 255fb726d48Sopenharmony_ci } 256fb726d48Sopenharmony_ci //@ts-ignore 257fb726d48Sopenharmony_ci sp.scrollToProcess(jankRow.rowId!, jankRow.rowParentId!, jankRow.rowType!, true); 258fb726d48Sopenharmony_ci } 259fb726d48Sopenharmony_ci }; 260fb726d48Sopenharmony_ci return jankClickHandler; 261fb726d48Sopenharmony_ci} 262fb726d48Sopenharmony_ci 263fb726d48Sopenharmony_cifunction snapshotClickHandlerFunc(sp: SpSystemTrace): Function { 264fb726d48Sopenharmony_ci let snapshotClickHandler = (d: HeapSnapshotStruct): void => { 265fb726d48Sopenharmony_ci sp.observerScrollHeightEnable = true; 266fb726d48Sopenharmony_ci let snapshotRow = sp.shadowRoot?.querySelector<TraceRow<HeapSnapshotStruct>>(`trace-row[row-id='heapsnapshot']`); 267fb726d48Sopenharmony_ci let task = (): void => { 268fb726d48Sopenharmony_ci if (snapshotRow) { 269fb726d48Sopenharmony_ci let findEntry = snapshotRow!.dataListCache!.find((dat) => dat.startTs === d.startTs); 270fb726d48Sopenharmony_ci sp.hoverStructNull(); 271fb726d48Sopenharmony_ci sp.selectStructNull(); 272fb726d48Sopenharmony_ci sp.wakeupListNull(); 273fb726d48Sopenharmony_ci HeapSnapshotStruct.hoverSnapshotStruct = findEntry; 274fb726d48Sopenharmony_ci HeapSnapshotStruct.selectSnapshotStruct = findEntry; 275fb726d48Sopenharmony_ci } 276fb726d48Sopenharmony_ci }; 277fb726d48Sopenharmony_ci if (snapshotRow) { 278fb726d48Sopenharmony_ci if (snapshotRow!.isComplete) { 279fb726d48Sopenharmony_ci task(); 280fb726d48Sopenharmony_ci } else { 281fb726d48Sopenharmony_ci snapshotRow!.onComplete = task; 282fb726d48Sopenharmony_ci } 283fb726d48Sopenharmony_ci } 284fb726d48Sopenharmony_ci }; 285fb726d48Sopenharmony_ci return snapshotClickHandler; 286fb726d48Sopenharmony_ci} 287fb726d48Sopenharmony_ci 288fb726d48Sopenharmony_ci//@ts-ignore 289fb726d48Sopenharmony_cifunction cpuClickHandlerTask(threadRow: TraceRow<unknown>, sp: SpSystemTrace, d: CpuStruct): void { 290fb726d48Sopenharmony_ci if (threadRow) { 291fb726d48Sopenharmony_ci let findEntry = threadRow!.fixedList[0]; 292fb726d48Sopenharmony_ci if ( 293fb726d48Sopenharmony_ci //@ts-ignore 294fb726d48Sopenharmony_ci findEntry!.startTime! + findEntry!.dur! < TraceRow.range!.startNS || 295fb726d48Sopenharmony_ci //@ts-ignore 296fb726d48Sopenharmony_ci findEntry!.startTime! > TraceRow.range!.endNS 297fb726d48Sopenharmony_ci ) { 298fb726d48Sopenharmony_ci sp.timerShaftEL?.setRangeNS( 299fb726d48Sopenharmony_ci //@ts-ignore 300fb726d48Sopenharmony_ci findEntry!.startTime! - findEntry!.dur! * 2, 301fb726d48Sopenharmony_ci //@ts-ignore 302fb726d48Sopenharmony_ci findEntry!.startTime! + findEntry!.dur! + findEntry!.dur! * 2 303fb726d48Sopenharmony_ci ); 304fb726d48Sopenharmony_ci } 305fb726d48Sopenharmony_ci ThreadStruct.firstselectThreadStruct = ThreadStruct.selectThreadStruct; 306fb726d48Sopenharmony_ci sp.hoverStructNull().selectStructNull().wakeupListNull(); 307fb726d48Sopenharmony_ci //@ts-ignore 308fb726d48Sopenharmony_ci ThreadStruct.hoverThreadStruct = findEntry; 309fb726d48Sopenharmony_ci //@ts-ignore 310fb726d48Sopenharmony_ci ThreadStruct.selectThreadStruct = findEntry; 311fb726d48Sopenharmony_ci //@ts-ignore 312fb726d48Sopenharmony_ci sp.timerShaftEL?.drawTriangle(findEntry!.startTime || 0, 'inverted'); 313fb726d48Sopenharmony_ci sp.traceSheetEL?.displayThreadData( 314fb726d48Sopenharmony_ci ThreadStruct.selectThreadStruct!, 315fb726d48Sopenharmony_ci threadClickHandlerFunc(sp), // @ts-ignore 316fb726d48Sopenharmony_ci cpuClickHandlerFunc(sp), 317fb726d48Sopenharmony_ci prioClickHandlerFunc(sp), 318fb726d48Sopenharmony_ci (datas, str): void => { 319fb726d48Sopenharmony_ci sp.removeLinkLinesByBusinessType('thread'); 320fb726d48Sopenharmony_ci if (str === 'wakeup tid') { 321fb726d48Sopenharmony_ci datas.forEach((data) => { 322fb726d48Sopenharmony_ci //@ts-ignore 323fb726d48Sopenharmony_ci let endParentRow = sp.shadowRoot?.querySelector<TraceRow<unknown>>( //@ts-ignore 324fb726d48Sopenharmony_ci `trace-row[row-id='${data.pid}'][folder]` 325fb726d48Sopenharmony_ci ); 326fb726d48Sopenharmony_ci sp.drawThreadLine(endParentRow, ThreadStruct.firstselectThreadStruct, data); 327fb726d48Sopenharmony_ci }); 328fb726d48Sopenharmony_ci } 329fb726d48Sopenharmony_ci sp.refreshCanvas(true); 330fb726d48Sopenharmony_ci } 331fb726d48Sopenharmony_ci ); 332fb726d48Sopenharmony_ci sp.scrollToProcess(`${d.tid}`, `${d.processId}`, 'thread', true); 333fb726d48Sopenharmony_ci } 334fb726d48Sopenharmony_ci} 335fb726d48Sopenharmony_ci 336fb726d48Sopenharmony_cifunction cpuClickHandlerFunc(sp: SpSystemTrace) { 337fb726d48Sopenharmony_ci return function (d: CpuStruct): void { 338fb726d48Sopenharmony_ci //@ts-ignore 339fb726d48Sopenharmony_ci let traceRow = sp.shadowRoot?.querySelector<TraceRow<unknown>>( 340fb726d48Sopenharmony_ci `trace-row[row-id='${Utils.getDistributedRowId(d.processId)}'][row-type='process']` 341fb726d48Sopenharmony_ci ); 342fb726d48Sopenharmony_ci if (traceRow) { 343fb726d48Sopenharmony_ci traceRow.expansion = true; 344fb726d48Sopenharmony_ci } 345fb726d48Sopenharmony_ci sp.observerScrollHeightEnable = true; 346fb726d48Sopenharmony_ci let threadRow = sp.queryAllTraceRow<TraceRow<ThreadStruct>>( 347fb726d48Sopenharmony_ci `trace-row[row-id='${Utils.getDistributedRowId(d.tid)}'][row-type='thread']`, 348fb726d48Sopenharmony_ci (row) => row.rowId === `${d.tid}` && row.rowType === 'thread' 349fb726d48Sopenharmony_ci )[0]; 350fb726d48Sopenharmony_ci sp.currentRow = threadRow; 351fb726d48Sopenharmony_ci if (threadRow) { 352fb726d48Sopenharmony_ci threadRow.fixedList = [ 353fb726d48Sopenharmony_ci { 354fb726d48Sopenharmony_ci startTime: d.startTime, 355fb726d48Sopenharmony_ci dur: d.dur, 356fb726d48Sopenharmony_ci cpu: d.cpu, 357fb726d48Sopenharmony_ci id: d.id, 358fb726d48Sopenharmony_ci tid: d.tid, 359fb726d48Sopenharmony_ci state: d.state, 360fb726d48Sopenharmony_ci pid: d.processId, 361fb726d48Sopenharmony_ci argSetID: d.argSetID, 362fb726d48Sopenharmony_ci }, 363fb726d48Sopenharmony_ci ]; 364fb726d48Sopenharmony_ci if (threadRow!.isComplete) { 365fb726d48Sopenharmony_ci cpuClickHandlerTask(threadRow, sp, d); 366fb726d48Sopenharmony_ci } else { 367fb726d48Sopenharmony_ci sp.scrollToProcess(`${d.tid}`, `${d.processId}`, 'process', false); 368fb726d48Sopenharmony_ci sp.scrollToProcess(`${d.tid}`, `${d.processId}`, 'thread', true); 369fb726d48Sopenharmony_ci threadRow!.onComplete = (): void => cpuClickHandlerTask(threadRow, sp, d); 370fb726d48Sopenharmony_ci } 371fb726d48Sopenharmony_ci } 372fb726d48Sopenharmony_ci }; 373fb726d48Sopenharmony_ci} 374fb726d48Sopenharmony_ci 375fb726d48Sopenharmony_ci 376fb726d48Sopenharmony_cifunction allStructOnClick(clickRowType: string, sp: SpSystemTrace, row?: TraceRow<BaseStruct>, entry?: unknown): void { 377fb726d48Sopenharmony_ci CpuStructOnClick(clickRowType, sp, cpuClickHandlerFunc(sp), entry as CpuStruct) 378fb726d48Sopenharmony_ci .then(() => ThreadStructOnClick(clickRowType, sp, threadClickHandlerFunc(sp), cpuClickHandlerFunc(sp), 379fb726d48Sopenharmony_ci prioClickHandlerFunc(sp), entry as ThreadStruct)) 380fb726d48Sopenharmony_ci .then(() => funcStructOnClick(clickRowType, sp, row as TraceRow<FuncStruct>, 381fb726d48Sopenharmony_ci scrollToFuncHandlerFunc(sp), entry as FuncStruct)) 382fb726d48Sopenharmony_ci .then(() => CpuFreqStructOnClick(clickRowType, sp, entry as CpuFreqStruct)) 383fb726d48Sopenharmony_ci .then(() => CpuStateStructOnClick(clickRowType, sp, entry as CpuStateStruct)) 384fb726d48Sopenharmony_ci .then(() => CpuFreqLimitsStructOnClick(clickRowType, sp, entry as CpuFreqLimitsStruct)) 385fb726d48Sopenharmony_ci .then(() => ClockStructOnClick(clickRowType, sp, entry as ClockStruct)) 386fb726d48Sopenharmony_ci .then(() => XpowerStructOnClick(clickRowType, sp, entry as XpowerStruct)) 387fb726d48Sopenharmony_ci .then(() => HangStructOnClick(clickRowType, sp, scrollToFunc(sp))) 388fb726d48Sopenharmony_ci .then(() => DmaFenceStructOnClick(clickRowType, sp, entry as DmaFenceStruct)) 389fb726d48Sopenharmony_ci .then(() => SnapshotStructOnClick(clickRowType, sp, row as TraceRow<SnapshotStruct>, entry as SnapshotStruct)) 390fb726d48Sopenharmony_ci .then(() => IrqStructOnClick(clickRowType, sp, entry as IrqStruct)) 391fb726d48Sopenharmony_ci .then(() => HeapStructOnClick(clickRowType, sp, row as TraceRow<HeapStruct>, entry as HeapStruct)) 392fb726d48Sopenharmony_ci .then(() => JankStructOnClick(clickRowType, sp, row as TraceRow<JankStruct>, 393fb726d48Sopenharmony_ci jankClickHandlerFunc(sp), entry as JankStruct)) 394fb726d48Sopenharmony_ci .then(() => HeapSnapshotStructOnClick(clickRowType, sp, row as TraceRow<HeapSnapshotStruct>, 395fb726d48Sopenharmony_ci snapshotClickHandlerFunc(sp), entry as HeapSnapshotStruct)) 396fb726d48Sopenharmony_ci .then(() => JsCpuProfilerStructOnClick(clickRowType, sp, row as TraceRow<JsCpuProfilerStruct>, 397fb726d48Sopenharmony_ci entry as JsCpuProfilerStruct)) 398fb726d48Sopenharmony_ci .then(() => AppStartupStructOnClick(clickRowType, sp, scrollToFuncHandlerFunc(sp), entry as AppStartupStruct)) 399fb726d48Sopenharmony_ci .then(() => allAppStartupStructOnClick(clickRowType, sp, scrollToFuncHandlerFunc(sp), entry as AllAppStartupStruct)) 400fb726d48Sopenharmony_ci .then(() => SoStructOnClick(clickRowType, sp, scrollToFuncHandlerFunc(sp), entry as SoStruct)) 401fb726d48Sopenharmony_ci .then(() => FrameAnimationStructOnClick(clickRowType, sp, 402fb726d48Sopenharmony_ci scrollToFuncHandlerFunc(sp), row as TraceRow<FrameAnimationStruct>, entry as FrameAnimationStruct)) 403fb726d48Sopenharmony_ci .then(() => FrameDynamicStructOnClick(clickRowType, sp, row, entry as FrameDynamicStruct)) 404fb726d48Sopenharmony_ci .then(() => FrameSpacingStructOnClick(clickRowType, sp, row!, entry as FrameSpacingStruct)) 405fb726d48Sopenharmony_ci .then(() => sampleStructOnClick(clickRowType, sp, row as TraceRow<SampleStruct>, entry as SampleStruct)) 406fb726d48Sopenharmony_ci .then(() => gpuCounterStructOnClick(clickRowType, sp, entry as GpuCounterStruct)) 407fb726d48Sopenharmony_ci .then(() => PerfToolsStructOnClick(clickRowType, sp, entry as PerfToolStruct)) 408fb726d48Sopenharmony_ci .then(() => { 409fb726d48Sopenharmony_ci if (!JankStruct.hoverJankStruct && JankStruct.delJankLineFlag) { 410fb726d48Sopenharmony_ci sp.removeLinkLinesByBusinessType('janks'); 411fb726d48Sopenharmony_ci } 412fb726d48Sopenharmony_ci sp.observerScrollHeightEnable = false; 413fb726d48Sopenharmony_ci sp.selectFlag = null; 414fb726d48Sopenharmony_ci sp.timerShaftEL?.removeTriangle('inverted'); 415fb726d48Sopenharmony_ci if (!SportRuler.isMouseInSportRuler) { 416fb726d48Sopenharmony_ci sp.traceSheetEL?.setMode('hidden'); 417fb726d48Sopenharmony_ci sp.refreshCanvas(true, 'click'); 418fb726d48Sopenharmony_ci } 419fb726d48Sopenharmony_ci }) 420fb726d48Sopenharmony_ci .catch((e): void => { }); 421fb726d48Sopenharmony_ci // @ts-ignore 422fb726d48Sopenharmony_ci SpAiAnalysisPage.selectChangeListener(entry.startTime || entry.startTs, (entry.startTime! || entry.startTs) + entry.dur) 423fb726d48Sopenharmony_ci} 424fb726d48Sopenharmony_ciexport default function spSystemTraceOnClickHandler( 425fb726d48Sopenharmony_ci sp: SpSystemTrace, 426fb726d48Sopenharmony_ci clickRowType: string, 427fb726d48Sopenharmony_ci row?: TraceRow<BaseStruct>, 428fb726d48Sopenharmony_ci entry?: unknown 429fb726d48Sopenharmony_ci): void { 430fb726d48Sopenharmony_ci if (row) { 431fb726d48Sopenharmony_ci sp.currentRow = row; 432fb726d48Sopenharmony_ci sp.setAttribute('clickRow', clickRowType); 433fb726d48Sopenharmony_ci sp.setAttribute('rowName', row.name!); 434fb726d48Sopenharmony_ci sp.setAttribute('rowId', row.rowId!); 435fb726d48Sopenharmony_ci } 436fb726d48Sopenharmony_ci if (!sp.loadTraceCompleted) { 437fb726d48Sopenharmony_ci return; 438fb726d48Sopenharmony_ci } 439fb726d48Sopenharmony_ci sp.queryAllTraceRow().forEach((it): boolean => (it.rangeSelect = false)); 440fb726d48Sopenharmony_ci sp.selectStructNull(); 441fb726d48Sopenharmony_ci sp._slicesList.forEach((slice: { selected: boolean }): void => { 442fb726d48Sopenharmony_ci slice.selected = false; 443fb726d48Sopenharmony_ci }); 444fb726d48Sopenharmony_ci // 判断点击的线程是否在唤醒树内 445fb726d48Sopenharmony_ci timeoutJudge(sp); 446fb726d48Sopenharmony_ci allStructOnClick(clickRowType, sp, row, entry); 447fb726d48Sopenharmony_ci if (!JankStruct.selectJankStruct) { 448fb726d48Sopenharmony_ci sp.removeLinkLinesByBusinessType('janks'); 449fb726d48Sopenharmony_ci } 450fb726d48Sopenharmony_ci if (!ThreadStruct.selectThreadStruct) { 451fb726d48Sopenharmony_ci sp.removeLinkLinesByBusinessType('thread'); 452fb726d48Sopenharmony_ci } 453fb726d48Sopenharmony_ci if (!FuncStruct.selectFuncStruct) { 454fb726d48Sopenharmony_ci sp.removeLinkLinesByBusinessType('distributed', 'func'); 455fb726d48Sopenharmony_ci } 456fb726d48Sopenharmony_ci if (row) { 457fb726d48Sopenharmony_ci let pointEvent = sp.createPointEvent(row); 458fb726d48Sopenharmony_ci SpStatisticsHttpUtil.addOrdinaryVisitAction({ 459fb726d48Sopenharmony_ci action: 'trace_row', // @ts-ignore 460fb726d48Sopenharmony_ci event: pointEvent, 461fb726d48Sopenharmony_ci }); 462fb726d48Sopenharmony_ci } 463fb726d48Sopenharmony_ci} 464fb726d48Sopenharmony_ci 465fb726d48Sopenharmony_ci//@ts-ignore 466fb726d48Sopenharmony_cifunction handleActions(sp: SpSystemTrace, rows: Array<TraceRow<unknown>>, ev: MouseEvent): void { 467fb726d48Sopenharmony_ci if (sp.rangeSelect.isMouseDown && sp.rangeSelect.drag) { 468fb726d48Sopenharmony_ci let downRow = sp.visibleRows.find((row) => row.containPoint(ev)); 469fb726d48Sopenharmony_ci if (downRow && downRow.traceId !== Utils.currentSelectTrace) { 470fb726d48Sopenharmony_ci spSystemTraceDocumentOnMouseMoveMouseUp(sp, rows, ev); 471fb726d48Sopenharmony_ci return; 472fb726d48Sopenharmony_ci } 473fb726d48Sopenharmony_ci } 474fb726d48Sopenharmony_ci sp.rangeSelect.mouseMove(rows, ev); 475fb726d48Sopenharmony_ci if (sp.rangeSelect.rangeTraceRow!.length > 0) { 476fb726d48Sopenharmony_ci sp.tabCpuFreq!.rangeTraceRow = sp.rangeSelect.rangeTraceRow; 477fb726d48Sopenharmony_ci sp.tabCpuState!.rangeTraceRow = sp.rangeSelect.rangeTraceRow; 478fb726d48Sopenharmony_ci } 479fb726d48Sopenharmony_ci let search = document.querySelector('body > sp-application')!.shadowRoot!.querySelector<LitSearch>('#lit-search'); 480fb726d48Sopenharmony_ci if (sp.rangeSelect.isMouseDown && search?.isClearValue) { 481fb726d48Sopenharmony_ci spSystemTraceDocumentOnMouseMoveMouseDown(sp, search); 482fb726d48Sopenharmony_ci } else { 483fb726d48Sopenharmony_ci spSystemTraceDocumentOnMouseMoveMouseUp(sp, rows, ev); 484fb726d48Sopenharmony_ci } 485fb726d48Sopenharmony_ci} 486fb726d48Sopenharmony_ci 487fb726d48Sopenharmony_cifunction handleMouseInTimeShaft(sp: SpSystemTrace, ev: MouseEvent): boolean | undefined { 488fb726d48Sopenharmony_ci let isMouseInTimeShaft = sp.timerShaftEL?.containPoint(ev); 489fb726d48Sopenharmony_ci if (isMouseInTimeShaft) { 490fb726d48Sopenharmony_ci sp.tipEL!.style.display = 'none'; 491fb726d48Sopenharmony_ci sp.hoverStructNull(); 492fb726d48Sopenharmony_ci } 493fb726d48Sopenharmony_ci return isMouseInTimeShaft; 494fb726d48Sopenharmony_ci} 495fb726d48Sopenharmony_ci 496fb726d48Sopenharmony_ciexport function spSystemTraceDocumentOnMouseMove(sp: SpSystemTrace, ev: MouseEvent): void { 497fb726d48Sopenharmony_ci //@ts-ignore 498fb726d48Sopenharmony_ci if (!sp.loadTraceCompleted || (window as unknown).flagInputFocus || !sp.mouseEventEnable) { 499fb726d48Sopenharmony_ci return; 500fb726d48Sopenharmony_ci } 501fb726d48Sopenharmony_ci //@ts-ignore 502fb726d48Sopenharmony_ci if ((window as unknown).collectResize) { 503fb726d48Sopenharmony_ci sp.style.cursor = 'row-resize'; 504fb726d48Sopenharmony_ci sp.cancelDrag(); 505fb726d48Sopenharmony_ci return; 506fb726d48Sopenharmony_ci } 507fb726d48Sopenharmony_ci if (sp.isWASDKeyPress()) { 508fb726d48Sopenharmony_ci sp.hoverFlag = null; 509fb726d48Sopenharmony_ci ev.preventDefault(); 510fb726d48Sopenharmony_ci return; 511fb726d48Sopenharmony_ci } 512fb726d48Sopenharmony_ci if (ev.ctrlKey && ev.button === 0 && SpSystemTrace.isMouseLeftDown) { 513fb726d48Sopenharmony_ci // 计算当前tab组件的高度 514fb726d48Sopenharmony_ci let tabHeight: number = 515fb726d48Sopenharmony_ci sp.shadowRoot?.querySelector('trace-sheet')!.shadowRoot?.querySelector('lit-tabs')!.clientHeight! + 1; 516fb726d48Sopenharmony_ci // 计算当前屏幕内高与鼠标位置坐标高度的差值 517fb726d48Sopenharmony_ci let diffHeight: number = window.innerHeight - ev.clientY; 518fb726d48Sopenharmony_ci // 如果差值大于面板高度,意味着鼠标位于泳道区域,可以通过ctrl+鼠标左键移动。否则不予生效 519fb726d48Sopenharmony_ci if (diffHeight > tabHeight) { 520fb726d48Sopenharmony_ci sp.translateByMouseMove(ev); 521fb726d48Sopenharmony_ci } else { 522fb726d48Sopenharmony_ci // 若鼠标位于tab面板区,则将其中标志位置成false 523fb726d48Sopenharmony_ci SpSystemTrace.isMouseLeftDown = false; 524fb726d48Sopenharmony_ci } 525fb726d48Sopenharmony_ci } 526fb726d48Sopenharmony_ci sp.inFavoriteArea = sp.favoriteChartListEL?.containPoint(ev); 527fb726d48Sopenharmony_ci //@ts-ignore 528fb726d48Sopenharmony_ci if ((window as unknown).isSheetMove || sp.isMouseInSheet(ev)) { 529fb726d48Sopenharmony_ci sp.hoverStructNull(); 530fb726d48Sopenharmony_ci sp.tipEL!.style.display = 'none'; 531fb726d48Sopenharmony_ci return; 532fb726d48Sopenharmony_ci } 533fb726d48Sopenharmony_ci let isMouseInTimeShaft = handleMouseInTimeShaft(sp, ev); 534fb726d48Sopenharmony_ci let rows = sp.visibleRows; 535fb726d48Sopenharmony_ci sp.timerShaftEL?.documentOnMouseMove(ev, sp); 536fb726d48Sopenharmony_ci 537fb726d48Sopenharmony_ci if (isMouseInTimeShaft) { 538fb726d48Sopenharmony_ci return; 539fb726d48Sopenharmony_ci } 540fb726d48Sopenharmony_ci handleActions(sp, rows, ev); 541fb726d48Sopenharmony_ci} 542fb726d48Sopenharmony_ci 543fb726d48Sopenharmony_ciexport function spSystemTraceDocumentOnMouseMoveMouseDown(sp: SpSystemTrace, search: LitSearch): void { 544fb726d48Sopenharmony_ci sp.refreshCanvas(true, 'sp move down'); 545fb726d48Sopenharmony_ci if (TraceRow.rangeSelectObject) { 546fb726d48Sopenharmony_ci if (search && search.searchValue !== '') { 547fb726d48Sopenharmony_ci search.clear(); 548fb726d48Sopenharmony_ci search.valueChangeHandler?.(''); 549fb726d48Sopenharmony_ci } 550fb726d48Sopenharmony_ci } 551fb726d48Sopenharmony_ci} 552fb726d48Sopenharmony_ci 553fb726d48Sopenharmony_cifunction spSystemTraceDocumentOnMouseMoveMouseUp( 554fb726d48Sopenharmony_ci sp: SpSystemTrace, //@ts-ignore 555fb726d48Sopenharmony_ci rows: Array<TraceRow<unknown>>, 556fb726d48Sopenharmony_ci ev: MouseEvent 557fb726d48Sopenharmony_ci): void { 558fb726d48Sopenharmony_ci if (!sp.rowsPaneEL!.containPoint(ev, { left: 248 })) { 559fb726d48Sopenharmony_ci sp.hoverStructNull(); 560fb726d48Sopenharmony_ci } 561fb726d48Sopenharmony_ci const transformYMatch = sp.canvasPanel?.style.transform.match(/\((\d+)[^\)]+\)/); 562fb726d48Sopenharmony_ci const transformY = transformYMatch![1]; 563fb726d48Sopenharmony_ci let favoriteHeight = sp.favoriteChartListEL!.getBoundingClientRect().height; 564fb726d48Sopenharmony_ci // @ts-ignore 565fb726d48Sopenharmony_ci let memTr = rows.filter((item: unknown) => item.rowType === TraceRow.ROW_TYPE_MEM); 566fb726d48Sopenharmony_ci rows 567fb726d48Sopenharmony_ci .filter((it) => it.focusContain(ev, sp.inFavoriteArea!, Number(transformY), favoriteHeight) && it.collect === sp.inFavoriteArea) 568fb726d48Sopenharmony_ci .filter((it) => { 569fb726d48Sopenharmony_ci if (it.collect) { 570fb726d48Sopenharmony_ci return true; 571fb726d48Sopenharmony_ci } else { 572fb726d48Sopenharmony_ci return ( 573fb726d48Sopenharmony_ci it.getBoundingClientRect().bottom + it.getBoundingClientRect().height > 574fb726d48Sopenharmony_ci sp.favoriteChartListEL!.getBoundingClientRect().bottom 575fb726d48Sopenharmony_ci ); 576fb726d48Sopenharmony_ci } 577fb726d48Sopenharmony_ci }) 578fb726d48Sopenharmony_ci .forEach((tr): void => { 579fb726d48Sopenharmony_ci if (tr.rowType !== TraceRow.ROW_TYPE_CPU) { 580fb726d48Sopenharmony_ci CpuStruct.hoverCpuStruct = undefined; 581fb726d48Sopenharmony_ci } 582fb726d48Sopenharmony_ci if (tr.rowType !== TraceRow.ROW_TYPE_MEM) { 583fb726d48Sopenharmony_ci ProcessMemStruct.hoverProcessMemStruct = undefined; 584fb726d48Sopenharmony_ci memTr.forEach((i: unknown) => { 585fb726d48Sopenharmony_ci // @ts-ignore 586fb726d48Sopenharmony_ci i.focusHandler(ev); 587fb726d48Sopenharmony_ci }); 588fb726d48Sopenharmony_ci } 589fb726d48Sopenharmony_ci if (sp.currentRowType !== tr.rowType) { 590fb726d48Sopenharmony_ci sp.currentRowType = tr.rowType || ''; 591fb726d48Sopenharmony_ci } 592fb726d48Sopenharmony_ci tr.findHoverStruct?.(); 593fb726d48Sopenharmony_ci tr.focusHandler?.(ev); 594fb726d48Sopenharmony_ci }); 595fb726d48Sopenharmony_ci requestAnimationFrame(() => sp.refreshCanvas(true, 'sp move up')); 596fb726d48Sopenharmony_ci} 597fb726d48Sopenharmony_ci 598fb726d48Sopenharmony_ciexport function spSystemTraceDocumentOnMouseOut(sp: SpSystemTrace, ev: MouseEvent): void { 599fb726d48Sopenharmony_ci if (!sp.loadTraceCompleted) { 600fb726d48Sopenharmony_ci return; 601fb726d48Sopenharmony_ci } 602fb726d48Sopenharmony_ci CpuStruct.hoverCpuStruct = undefined; 603fb726d48Sopenharmony_ci TraceRow.isUserInteraction = false; 604fb726d48Sopenharmony_ci SpSystemTrace.isMouseLeftDown = false; 605fb726d48Sopenharmony_ci if (sp.isMouseInSheet(ev)) { 606fb726d48Sopenharmony_ci return; 607fb726d48Sopenharmony_ci } 608fb726d48Sopenharmony_ci if (ev.offsetX > sp.timerShaftEL!.canvas!.offsetLeft) { 609fb726d48Sopenharmony_ci sp.rangeSelect.mouseOut(ev); 610fb726d48Sopenharmony_ci sp.timerShaftEL?.documentOnMouseOut(ev); 611fb726d48Sopenharmony_ci } 612fb726d48Sopenharmony_ci} 613fb726d48Sopenharmony_ci 614fb726d48Sopenharmony_ciexport function spSystemTraceDocumentOnKeyPress(this: unknown, sp: SpSystemTrace, ev: KeyboardEvent): void { 615fb726d48Sopenharmony_ci SpSystemTrace.isKeyUp = false; 616fb726d48Sopenharmony_ci if (!sp.loadTraceCompleted || SpSystemTrace.isAiAsk) { 617fb726d48Sopenharmony_ci return; 618fb726d48Sopenharmony_ci } 619fb726d48Sopenharmony_ci let keyPress = ev.key.toLocaleLowerCase(); 620fb726d48Sopenharmony_ci TraceRow.isUserInteraction = true; 621fb726d48Sopenharmony_ci if (sp.isMousePointInSheet) { 622fb726d48Sopenharmony_ci return; 623fb726d48Sopenharmony_ci } 624fb726d48Sopenharmony_ci sp.observerScrollHeightEnable = false; 625fb726d48Sopenharmony_ci if (sp.keyboardEnable) { 626fb726d48Sopenharmony_ci if (keyPress === 'm') { 627fb726d48Sopenharmony_ci if (sp.selectFlag) { 628fb726d48Sopenharmony_ci sp.selectFlag!.selected = false; 629fb726d48Sopenharmony_ci } 630fb726d48Sopenharmony_ci sp.slicestime = sp.setSLiceMark(ev.shiftKey); 631fb726d48Sopenharmony_ci if (sp.slicestime) { 632fb726d48Sopenharmony_ci if (TraceRow.rangeSelectObject) { 633fb726d48Sopenharmony_ci let showTab = sp.getShowTab(); 634fb726d48Sopenharmony_ci sp.traceSheetEL 635fb726d48Sopenharmony_ci ?.displayTab<TabPaneCurrent>('tabpane-current', ...showTab) 636fb726d48Sopenharmony_ci .setCurrentSlicesTime(sp.slicestime); 637fb726d48Sopenharmony_ci } else { 638fb726d48Sopenharmony_ci sp.traceSheetEL?.displayTab<TabPaneCurrent>('tabpane-current').setCurrentSlicesTime(sp.slicestime); 639fb726d48Sopenharmony_ci } 640fb726d48Sopenharmony_ci } 641fb726d48Sopenharmony_ci } 642fb726d48Sopenharmony_ci if (keyPress === 'f') { 643fb726d48Sopenharmony_ci let search = document.querySelector('body > sp-application')!.shadowRoot!.querySelector<LitSearch>('#lit-search'); 644fb726d48Sopenharmony_ci if (search && search.searchValue !== '' && sp.currentRow !== undefined) { 645fb726d48Sopenharmony_ci sp.currentRow = undefined; 646fb726d48Sopenharmony_ci } 647fb726d48Sopenharmony_ci let isSelectSliceOrFlag = false; 648fb726d48Sopenharmony_ci // 设置当前选中的slicetime 649fb726d48Sopenharmony_ci let selectSlice: unknown = undefined; 650fb726d48Sopenharmony_ci sp._slicesList.forEach((slice: { selected: boolean }): void => { 651fb726d48Sopenharmony_ci if (slice.selected) { 652fb726d48Sopenharmony_ci selectSlice = slice; 653fb726d48Sopenharmony_ci } 654fb726d48Sopenharmony_ci }); 655fb726d48Sopenharmony_ci if (!!selectSlice) { 656fb726d48Sopenharmony_ci //@ts-ignore 657fb726d48Sopenharmony_ci sp.currentSlicesTime.startTime = selectSlice.startTime; 658fb726d48Sopenharmony_ci //@ts-ignore 659fb726d48Sopenharmony_ci sp.currentSlicesTime.endTime = selectSlice.endTime; 660fb726d48Sopenharmony_ci isSelectSliceOrFlag = true; 661fb726d48Sopenharmony_ci } 662fb726d48Sopenharmony_ci 663fb726d48Sopenharmony_ci if (sp.selectFlag && sp.selectFlag.selected) { 664fb726d48Sopenharmony_ci sp.currentSlicesTime.startTime = sp.selectFlag?.time; 665fb726d48Sopenharmony_ci sp.currentSlicesTime.endTime = sp.selectFlag?.time; 666fb726d48Sopenharmony_ci isSelectSliceOrFlag = true; 667fb726d48Sopenharmony_ci } 668fb726d48Sopenharmony_ci // 设置当前的slicesTime 669fb726d48Sopenharmony_ci !isSelectSliceOrFlag && sp.setCurrentSlicesTime(); 670fb726d48Sopenharmony_ci } 671fb726d48Sopenharmony_ci let keyPressWASD = keyPress === 'w' || keyPress === 'a' || keyPress === 's' || keyPress === 'd'; 672fb726d48Sopenharmony_ci if (keyPressWASD) { 673fb726d48Sopenharmony_ci sp.keyPressMap.set(keyPress, true); 674fb726d48Sopenharmony_ci if (sp.rangeSelect.isMouseDown && sp.rangeSelect.drag) { 675fb726d48Sopenharmony_ci sp.rangeSelect.mouseUp(); 676fb726d48Sopenharmony_ci } 677fb726d48Sopenharmony_ci sp.hoverFlag = null; 678fb726d48Sopenharmony_ci } 679fb726d48Sopenharmony_ci sp.timerShaftEL!.documentOnKeyPress(ev, sp.currentSlicesTime); 680fb726d48Sopenharmony_ci if (keyPress === 'f') { 681fb726d48Sopenharmony_ci sp.verticalScrollToRow(); 682fb726d48Sopenharmony_ci } 683fb726d48Sopenharmony_ci } else { 684fb726d48Sopenharmony_ci sp.stopWASD(); 685fb726d48Sopenharmony_ci } 686fb726d48Sopenharmony_ci} 687fb726d48Sopenharmony_ci 688fb726d48Sopenharmony_ciexport function spSystemTraceDocumentOnMouseDown(sp: SpSystemTrace, ev: MouseEvent): void { 689fb726d48Sopenharmony_ci if (!sp.loadTraceCompleted || !sp.mouseEventEnable) { 690fb726d48Sopenharmony_ci return; 691fb726d48Sopenharmony_ci } 692fb726d48Sopenharmony_ci if (sp.isWASDKeyPress()) { 693fb726d48Sopenharmony_ci ev.preventDefault(); 694fb726d48Sopenharmony_ci ev.stopPropagation(); 695fb726d48Sopenharmony_ci return; 696fb726d48Sopenharmony_ci } 697fb726d48Sopenharmony_ci if (ev.button === 0) { 698fb726d48Sopenharmony_ci SpSystemTrace.isMouseLeftDown = true; 699fb726d48Sopenharmony_ci if (ev.ctrlKey) { 700fb726d48Sopenharmony_ci ev.preventDefault(); 701fb726d48Sopenharmony_ci sp.style.cursor = 'move'; 702fb726d48Sopenharmony_ci sp.mouseCurrentPosition = ev.clientX; 703fb726d48Sopenharmony_ci return; 704fb726d48Sopenharmony_ci } 705fb726d48Sopenharmony_ci } 706fb726d48Sopenharmony_ci 707fb726d48Sopenharmony_ci TraceRow.isUserInteraction = true; 708fb726d48Sopenharmony_ci if (sp.isMouseInSheet(ev)) { 709fb726d48Sopenharmony_ci return; 710fb726d48Sopenharmony_ci } 711fb726d48Sopenharmony_ci sp.observerScrollHeightEnable = false; 712fb726d48Sopenharmony_ci if (ev.offsetX > sp.timerShaftEL!.canvas!.offsetLeft) { 713fb726d48Sopenharmony_ci let x = ev.offsetX - sp.timerShaftEL!.canvas!.offsetLeft; 714fb726d48Sopenharmony_ci let y = ev.offsetY; 715fb726d48Sopenharmony_ci sp.timerShaftEL?.documentOnMouseDown(ev); 716fb726d48Sopenharmony_ci if (y > sp.timerShaftEL!.offsetHeight) { 717fb726d48Sopenharmony_ci sp.rangeSelect.mouseDown(ev); 718fb726d48Sopenharmony_ci sp.rangeSelect.drag = true; 719fb726d48Sopenharmony_ci let downRow = sp.visibleRows.find((row) => row.containPoint(ev)); 720fb726d48Sopenharmony_ci Utils.currentSelectTrace = downRow?.traceId; 721fb726d48Sopenharmony_ci } 722fb726d48Sopenharmony_ci // 如果鼠标摁下事件发生在traceRow范围或时间轴(sportRuler除外)范围内,清除上次点击调用栈产生的所有的三角旗子 723fb726d48Sopenharmony_ci // ev.offsetY:鼠标在SpSystemTrace元素的y轴偏移量 724fb726d48Sopenharmony_ci if ( 725fb726d48Sopenharmony_ci ev.offsetY > sp.timerShaftEL!.clientHeight || 726fb726d48Sopenharmony_ci ev.offsetY < sp.timerShaftEL!.clientHeight - sp.timerShaftEL!.sportRuler!.frame.height 727fb726d48Sopenharmony_ci ) { 728fb726d48Sopenharmony_ci sp.clearTriangle(sp.timerShaftEL!.sportRuler!.flagList); 729fb726d48Sopenharmony_ci } 730fb726d48Sopenharmony_ci } else { 731fb726d48Sopenharmony_ci sp.rangeSelect.drag = false; 732fb726d48Sopenharmony_ci } 733fb726d48Sopenharmony_ci} 734fb726d48Sopenharmony_ci 735fb726d48Sopenharmony_cifunction handleTimerShaftActions(ev: MouseEvent, sp: SpSystemTrace): void { 736fb726d48Sopenharmony_ci if (ev.offsetX > sp.timerShaftEL!.canvas!.offsetLeft) { 737fb726d48Sopenharmony_ci let x = ev.offsetX - sp.timerShaftEL!.canvas!.offsetLeft; 738fb726d48Sopenharmony_ci let y = ev.offsetY; 739fb726d48Sopenharmony_ci if ( 740fb726d48Sopenharmony_ci sp.timerShaftEL!.sportRuler!.frame.contains(x, y) && 741fb726d48Sopenharmony_ci x > (TraceRow.rangeSelectObject?.startX || 0) && 742fb726d48Sopenharmony_ci x < (TraceRow.rangeSelectObject?.endX || 0) 743fb726d48Sopenharmony_ci ) { 744fb726d48Sopenharmony_ci let findSlicestime = sp.timerShaftEL!.sportRuler?.findSlicesTime(x, y); // 查找帽子 745fb726d48Sopenharmony_ci if (!findSlicestime) { 746fb726d48Sopenharmony_ci // 如果没有找到帽子,则绘制一个旗子 747fb726d48Sopenharmony_ci let time = Math.round( 748fb726d48Sopenharmony_ci (x * (TraceRow.range?.endNS! - TraceRow.range?.startNS!)) / sp.timerShaftEL!.canvas!.offsetWidth + 749fb726d48Sopenharmony_ci TraceRow.range?.startNS! 750fb726d48Sopenharmony_ci ); 751fb726d48Sopenharmony_ci sp.timerShaftEL!.sportRuler!.drawTriangle(time, 'squre'); 752fb726d48Sopenharmony_ci } 753fb726d48Sopenharmony_ci } 754fb726d48Sopenharmony_ci } 755fb726d48Sopenharmony_ci} 756fb726d48Sopenharmony_ci 757fb726d48Sopenharmony_ciexport function spSystemTraceDocumentOnMouseUp(sp: SpSystemTrace, ev: MouseEvent): void { 758fb726d48Sopenharmony_ci //@ts-ignore 759fb726d48Sopenharmony_ci if ((window as unknown).collectResize) { 760fb726d48Sopenharmony_ci return; 761fb726d48Sopenharmony_ci } 762fb726d48Sopenharmony_ci if (!sp.loadTraceCompleted || !sp.mouseEventEnable) { 763fb726d48Sopenharmony_ci return; 764fb726d48Sopenharmony_ci } 765fb726d48Sopenharmony_ci if (sp.isWASDKeyPress()) { 766fb726d48Sopenharmony_ci ev.preventDefault(); 767fb726d48Sopenharmony_ci ev.stopPropagation(); 768fb726d48Sopenharmony_ci return; 769fb726d48Sopenharmony_ci } 770fb726d48Sopenharmony_ci SpSystemTrace.isMouseLeftDown = false; 771fb726d48Sopenharmony_ci if (ev.ctrlKey) { 772fb726d48Sopenharmony_ci ev.preventDefault(); 773fb726d48Sopenharmony_ci sp.offsetMouse = 0; 774fb726d48Sopenharmony_ci sp.mouseCurrentPosition = 0; 775fb726d48Sopenharmony_ci sp.style.cursor = 'default'; 776fb726d48Sopenharmony_ci return; 777fb726d48Sopenharmony_ci } 778fb726d48Sopenharmony_ci TraceRow.isUserInteraction = false; 779fb726d48Sopenharmony_ci sp.rangeSelect.isMouseDown = false; 780fb726d48Sopenharmony_ci //@ts-ignore 781fb726d48Sopenharmony_ci if ((window as unknown).isSheetMove) { 782fb726d48Sopenharmony_ci return; 783fb726d48Sopenharmony_ci } 784fb726d48Sopenharmony_ci if (sp.isMouseInSheet(ev)) { 785fb726d48Sopenharmony_ci return; 786fb726d48Sopenharmony_ci } 787fb726d48Sopenharmony_ci handleTimerShaftActions(ev, sp); 788fb726d48Sopenharmony_ci if (!SportRuler.isMouseInSportRuler) { 789fb726d48Sopenharmony_ci sp.rangeSelect.mouseUp(ev); 790fb726d48Sopenharmony_ci } 791fb726d48Sopenharmony_ci sp.timerShaftEL?.documentOnMouseUp(ev); 792fb726d48Sopenharmony_ci} 793fb726d48Sopenharmony_ci 794fb726d48Sopenharmony_ciexport function spSystemTraceDocumentOnKeyUp(sp: SpSystemTrace, ev: KeyboardEvent): void { 795fb726d48Sopenharmony_ci SpSystemTrace.isKeyUp = true; 796fb726d48Sopenharmony_ci if (sp.times.size > 0) { 797fb726d48Sopenharmony_ci for (let timerId of sp.times) { 798fb726d48Sopenharmony_ci clearTimeout(timerId); 799fb726d48Sopenharmony_ci } 800fb726d48Sopenharmony_ci } 801fb726d48Sopenharmony_ci let flag: boolean = sp.parentElement 802fb726d48Sopenharmony_ci ?.querySelector('sp-record-trace')! 803fb726d48Sopenharmony_ci .shadowRoot?.querySelector('lit-main-menu-item[icon="file-config"]')! 804fb726d48Sopenharmony_ci .hasAttribute('back')!; 805fb726d48Sopenharmony_ci if (ev.key.toLocaleLowerCase() === String.fromCharCode(47) && !flag) { 806fb726d48Sopenharmony_ci if (SpSystemTrace.keyboardFlar) { 807fb726d48Sopenharmony_ci document 808fb726d48Sopenharmony_ci .querySelector('body > sp-application')! 809fb726d48Sopenharmony_ci .shadowRoot!.querySelector<SpKeyboard>('#sp-keyboard')!.style.visibility = 'visible'; 810fb726d48Sopenharmony_ci SpSystemTrace.keyboardFlar = false; 811fb726d48Sopenharmony_ci } else { 812fb726d48Sopenharmony_ci document 813fb726d48Sopenharmony_ci .querySelector('body > sp-application')! 814fb726d48Sopenharmony_ci .shadowRoot!.querySelector<SpKeyboard>('#sp-keyboard')!.style.visibility = 'hidden'; 815fb726d48Sopenharmony_ci SpSystemTrace.keyboardFlar = true; 816fb726d48Sopenharmony_ci } 817fb726d48Sopenharmony_ci } 818fb726d48Sopenharmony_ci if (!sp.loadTraceCompleted) { 819fb726d48Sopenharmony_ci return; 820fb726d48Sopenharmony_ci } 821fb726d48Sopenharmony_ci let flagsItem = window.localStorage.getItem(FlagsConfig.FLAGS_CONFIG_KEY); 822fb726d48Sopenharmony_ci let flagsItemJson = JSON.parse(flagsItem!); 823fb726d48Sopenharmony_ci if (flagsItemJson.VSync === 'Enabled') { 824fb726d48Sopenharmony_ci sp.keyboardEnable && enableVSync(false, ev, () => sp.refreshCanvas(true, 'sp key up')); 825fb726d48Sopenharmony_ci } 826fb726d48Sopenharmony_ci let keyPress = ev.key.toLocaleLowerCase(); 827fb726d48Sopenharmony_ci if (keyPress === 'w' || keyPress === 'a' || keyPress === 's' || keyPress === 'd') { 828fb726d48Sopenharmony_ci sp.keyPressMap.set(keyPress, false); 829fb726d48Sopenharmony_ci } 830fb726d48Sopenharmony_ci TraceRow.isUserInteraction = false; 831fb726d48Sopenharmony_ci sp.observerScrollHeightEnable = false; 832fb726d48Sopenharmony_ci sp.keyboardEnable && sp.timerShaftEL!.documentOnKeyUp(ev); 833fb726d48Sopenharmony_ci if (ev.code === 'Enter' || ev.code === 'NumpadEnter') { 834fb726d48Sopenharmony_ci document.removeEventListener('keydown', sp.documentOnKeyDown); 835fb726d48Sopenharmony_ci if (ev.shiftKey) { 836fb726d48Sopenharmony_ci sp.dispatchEvent( 837fb726d48Sopenharmony_ci new CustomEvent('trace-previous-data', { 838fb726d48Sopenharmony_ci detail: {}, 839fb726d48Sopenharmony_ci composed: false, 840fb726d48Sopenharmony_ci }) 841fb726d48Sopenharmony_ci ); 842fb726d48Sopenharmony_ci } else { 843fb726d48Sopenharmony_ci sp.dispatchEvent( 844fb726d48Sopenharmony_ci new CustomEvent('trace-next-data', { 845fb726d48Sopenharmony_ci detail: {}, 846fb726d48Sopenharmony_ci composed: false, 847fb726d48Sopenharmony_ci }) 848fb726d48Sopenharmony_ci ); 849fb726d48Sopenharmony_ci } 850fb726d48Sopenharmony_ci document.addEventListener('keydown', sp.documentOnKeyDown); 851fb726d48Sopenharmony_ci } 852fb726d48Sopenharmony_ci 853fb726d48Sopenharmony_ci if (ev.ctrlKey) { 854fb726d48Sopenharmony_ci spSystemTraceDocumentOnKeyUpCtrlKey(keyPress, sp, ev); 855fb726d48Sopenharmony_ci } 856fb726d48Sopenharmony_ci} 857fb726d48Sopenharmony_ci 858fb726d48Sopenharmony_cifunction spSystemTraceDocumentOnKeyUpCtrlKey(keyPress: string, sp: SpSystemTrace, ev: KeyboardEvent): void { 859fb726d48Sopenharmony_ci if (keyPress === 'b') { 860fb726d48Sopenharmony_ci let menuBox = document 861fb726d48Sopenharmony_ci .querySelector('body > sp-application')! 862fb726d48Sopenharmony_ci .shadowRoot?.querySelector('#main-menu') as LitMainMenu; 863fb726d48Sopenharmony_ci let searchBox = document 864fb726d48Sopenharmony_ci .querySelector('body > sp-application') 865fb726d48Sopenharmony_ci ?.shadowRoot?.querySelector('div > div.search-vessel') as HTMLDivElement; 866fb726d48Sopenharmony_ci let appContent = document 867fb726d48Sopenharmony_ci .querySelector('body > sp-application') 868fb726d48Sopenharmony_ci ?.shadowRoot?.querySelector('div > #app-content') as HTMLDivElement; 869fb726d48Sopenharmony_ci let rowPane = appContent 870fb726d48Sopenharmony_ci ?.querySelector('#sp-system-trace') 871fb726d48Sopenharmony_ci ?.shadowRoot?.querySelector('div > div.rows-pane') as HTMLDivElement; 872fb726d48Sopenharmony_ci let timerShaft = appContent 873fb726d48Sopenharmony_ci ?.querySelector('#sp-system-trace') 874fb726d48Sopenharmony_ci ?.shadowRoot?.querySelector('div > timer-shaft-element') as HTMLDivElement; 875fb726d48Sopenharmony_ci let spChartList = appContent 876fb726d48Sopenharmony_ci ?.querySelector('#sp-system-trace') 877fb726d48Sopenharmony_ci ?.shadowRoot?.querySelector('div > sp-chart-list') as HTMLDivElement; 878fb726d48Sopenharmony_ci let canvasEle = spChartList.shadowRoot?.querySelector('canvas') as unknown as HTMLDivElement; 879fb726d48Sopenharmony_ci let sidebarButton = searchBox!.querySelector('div > div.sidebar-button') as HTMLDivElement; 880fb726d48Sopenharmony_ci let importConfigDiv = searchBox!.querySelector('div > #import-key-path') as HTMLDivElement; 881fb726d48Sopenharmony_ci if (menuBox.style.zIndex! === '2000' || searchBox!.style.display !== 'none') { 882fb726d48Sopenharmony_ci SpSystemTrace.isHiddenMenu = true; 883fb726d48Sopenharmony_ci menuBox.style.width = '0px'; 884fb726d48Sopenharmony_ci menuBox.style.display = 'flex'; 885fb726d48Sopenharmony_ci menuBox.style.zIndex = '0'; 886fb726d48Sopenharmony_ci sidebarButton.style.width = '48px'; 887fb726d48Sopenharmony_ci importConfigDiv!.style.left = '45px'; 888fb726d48Sopenharmony_ci searchBox!.style.display = 'none'; 889fb726d48Sopenharmony_ci rowPane.style.maxHeight = '100%'; 890fb726d48Sopenharmony_ci } else { 891fb726d48Sopenharmony_ci SpSystemTrace.isHiddenMenu = false; 892fb726d48Sopenharmony_ci menuBox.style.width = '248px'; 893fb726d48Sopenharmony_ci menuBox.style.zIndex = '2000'; 894fb726d48Sopenharmony_ci menuBox.style.display = 'flex'; 895fb726d48Sopenharmony_ci sidebarButton.style.width = '0px'; 896fb726d48Sopenharmony_ci importConfigDiv!.style.left = '5px'; 897fb726d48Sopenharmony_ci searchBox!.style.display = ''; 898fb726d48Sopenharmony_ci rowPane.style.maxHeight = '100%'; 899fb726d48Sopenharmony_ci } 900fb726d48Sopenharmony_ci } 901fb726d48Sopenharmony_ci if (keyPress === '[' && sp._slicesList.length > 1) { 902fb726d48Sopenharmony_ci sp.selectFlag = undefined; 903fb726d48Sopenharmony_ci sp.MarkJump(sp._slicesList, 'slice', 'previous', ev); 904fb726d48Sopenharmony_ci } else if (keyPress === ',' && sp._flagList.length > 1) { 905fb726d48Sopenharmony_ci sp.MarkJump(sp._flagList, 'flag', 'previous', ev); 906fb726d48Sopenharmony_ci } else if (keyPress === ']' && sp._slicesList.length > 1) { 907fb726d48Sopenharmony_ci sp.selectFlag = undefined; 908fb726d48Sopenharmony_ci sp.MarkJump(sp._slicesList, 'slice', 'next', ev); 909fb726d48Sopenharmony_ci } else if (keyPress === '.' && sp._flagList.length > 1) { 910fb726d48Sopenharmony_ci sp.MarkJump(sp._flagList, 'flag', 'next', ev); 911fb726d48Sopenharmony_ci } else { 912fb726d48Sopenharmony_ci return; 913fb726d48Sopenharmony_ci } 914fb726d48Sopenharmony_ci} 915fb726d48Sopenharmony_ci 916fb726d48Sopenharmony_cifunction handleClickActions(sp: SpSystemTrace, x: number, y: number, ev: MouseEvent): void { 917fb726d48Sopenharmony_ci if ( 918fb726d48Sopenharmony_ci !( 919fb726d48Sopenharmony_ci sp.timerShaftEL!.sportRuler!.frame.contains(x, y) && 920fb726d48Sopenharmony_ci x > (TraceRow.rangeSelectObject?.startX || 0) && 921fb726d48Sopenharmony_ci x < (TraceRow.rangeSelectObject?.endX || 0) 922fb726d48Sopenharmony_ci ) 923fb726d48Sopenharmony_ci ) { 924fb726d48Sopenharmony_ci const transformYMatch = sp.canvasPanel?.style.transform.match(/\((\d+)[^\)]+\)/); 925fb726d48Sopenharmony_ci const transformY = transformYMatch![1]; 926fb726d48Sopenharmony_ci let inFavoriteArea = sp.favoriteChartListEL?.containPoint(ev); 927fb726d48Sopenharmony_ci let favoriteHeight = sp.favoriteChartListEL!.getBoundingClientRect().height; 928fb726d48Sopenharmony_ci let rows = sp.visibleRows.filter((it) => 929fb726d48Sopenharmony_ci it.focusContain(ev, inFavoriteArea!, Number(transformY), favoriteHeight) && it.collect === inFavoriteArea); 930fb726d48Sopenharmony_ci if (JankStruct.delJankLineFlag) { 931fb726d48Sopenharmony_ci sp.removeLinkLinesByBusinessType('janks'); 932fb726d48Sopenharmony_ci } 933fb726d48Sopenharmony_ci let strict = true; 934fb726d48Sopenharmony_ci let offset = false; 935fb726d48Sopenharmony_ci if ( 936fb726d48Sopenharmony_ci rows[0] && 937fb726d48Sopenharmony_ci (rows[0].rowType === TraceRow.ROW_TYPE_FRAME_DYNAMIC || rows[0].rowType === TraceRow.ROW_TYPE_FRAME_SPACING) 938fb726d48Sopenharmony_ci ) { 939fb726d48Sopenharmony_ci strict = false; 940fb726d48Sopenharmony_ci offset = true; 941fb726d48Sopenharmony_ci } 942fb726d48Sopenharmony_ci if (rows && rows[0] && (rows[0].getHoverStruct(strict, offset) || 943fb726d48Sopenharmony_ci (rows[0].rowType === TraceRow.ROW_TYPE_GPU_COUNTER && rows[0].getHoverStruct(false)))) { 944fb726d48Sopenharmony_ci sp.onClickHandler(rows[0]!.rowType!, rows[0], rows[0].getHoverStruct(strict, offset)); 945fb726d48Sopenharmony_ci sp.documentOnMouseMove(ev); 946fb726d48Sopenharmony_ci } else { 947fb726d48Sopenharmony_ci sp.clickEmptyArea(); 948fb726d48Sopenharmony_ci } 949fb726d48Sopenharmony_ci } 950fb726d48Sopenharmony_ci} 951fb726d48Sopenharmony_ci 952fb726d48Sopenharmony_ciexport function spSystemTraceDocumentOnClick(sp: SpSystemTrace, ev: MouseEvent): void { 953fb726d48Sopenharmony_ci if (!sp.loadTraceCompleted) { 954fb726d48Sopenharmony_ci return; 955fb726d48Sopenharmony_ci } 956fb726d48Sopenharmony_ci if (sp.isWASDKeyPress()) { 957fb726d48Sopenharmony_ci sp.hoverFlag = null; 958fb726d48Sopenharmony_ci ev.preventDefault(); 959fb726d48Sopenharmony_ci ev.stopPropagation(); 960fb726d48Sopenharmony_ci return; 961fb726d48Sopenharmony_ci } 962fb726d48Sopenharmony_ci //@ts-ignore 963fb726d48Sopenharmony_ci if ((window as unknown).isSheetMove) { 964fb726d48Sopenharmony_ci return; 965fb726d48Sopenharmony_ci } 966fb726d48Sopenharmony_ci if (sp.isMouseInSheet(ev)) { 967fb726d48Sopenharmony_ci return; 968fb726d48Sopenharmony_ci } 969fb726d48Sopenharmony_ci //@ts-ignore 970fb726d48Sopenharmony_ci if ((window as unknown).isPackUpTable) { 971fb726d48Sopenharmony_ci //@ts-ignore 972fb726d48Sopenharmony_ci (window as unknown).isPackUpTable = false; 973fb726d48Sopenharmony_ci return; 974fb726d48Sopenharmony_ci } 975fb726d48Sopenharmony_ci let x = ev.offsetX - sp.timerShaftEL!.canvas!.offsetLeft; 976fb726d48Sopenharmony_ci let y = ev.offsetY; 977fb726d48Sopenharmony_ci if (sp.timerShaftEL?.getRangeRuler()?.frame.contains(x, y)) { 978fb726d48Sopenharmony_ci sp.clickEmptyArea(); 979fb726d48Sopenharmony_ci return; 980fb726d48Sopenharmony_ci } 981fb726d48Sopenharmony_ci if (sp.rangeSelect.isDrag()) { 982fb726d48Sopenharmony_ci return; 983fb726d48Sopenharmony_ci } 984fb726d48Sopenharmony_ci handleClickActions(sp, x, y, ev); 985fb726d48Sopenharmony_ci ev.preventDefault(); 986fb726d48Sopenharmony_ci} 987fb726d48Sopenharmony_ci 988fb726d48Sopenharmony_ciexport function spSystemTraceDocumentOnKeyDown(sp: SpSystemTrace, ev: KeyboardEvent): void { 989fb726d48Sopenharmony_ci document.removeEventListener('keyup', sp.documentOnKeyUp); 990fb726d48Sopenharmony_ci sp.debounce(sp.continueSearch, 250, ev)(); 991fb726d48Sopenharmony_ci document.addEventListener('keyup', sp.documentOnKeyUp); 992fb726d48Sopenharmony_ci} 993