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