From 7006508e1bb2653c858dba380380582fa6933171 Mon Sep 17 00:00:00 2001 From: wangziyi Date: Sat, 27 Jul 2024 16:03:09 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E8=A7=A3=E5=86=B2=E7=AA=81=E8=A1=A5?= =?UTF-8?q?=E5=85=85=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9=E5=91=8A=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangziyi --- ide/src/trace/component/trace/sheet/process/TabPaneSlices.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ide/src/trace/component/trace/sheet/process/TabPaneSlices.ts b/ide/src/trace/component/trace/sheet/process/TabPaneSlices.ts index 8ec4a667..11ac0d06 100644 --- a/ide/src/trace/component/trace/sheet/process/TabPaneSlices.ts +++ b/ide/src/trace/component/trace/sheet/process/TabPaneSlices.ts @@ -96,8 +96,8 @@ export class TabPaneSlices extends BaseElement { count.process = ' '; count.wallDuration = parseFloat((sumWall / 1000000.0).toFixed(5)); count.occurrences = sumOcc; - count.tabTitle = 'Summary'; - count.allName = processSlicesResult.map((item: any) => item.name); + count.tabTitle = 'Summary';//@ts-ignore + count.allName = processSlicesResult.map((item: unknown) => item.name); count.asyncNames = asyncNames; count.asyncCatNames = asyncCatNames; processSlicesResult.splice(0, 0, count); //@ts-ignore -- Gitee From 2f24d139fad470804a2123cedd6b44d174624237 Mon Sep 17 00:00:00 2001 From: liufei Date: Sat, 27 Jul 2024 16:57:20 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=91=8A=E8=AD=A6?= =?UTF-8?q?=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: liufei --- ide/src/base-ui/table/lit-table.ts | 2 +- ide/src/trace/component/SpFlags.ts | 28 +++++---- .../trace/component/chart/SpProcessChart.ts | 9 ++- .../trace/sheet/cpu/TabPaneBoxChild.ts | 4 +- .../TabPaneFilesystemStatistics.ts | 2 +- .../TabPaneNMStatisticAnalysis.ts | 2 +- .../data-trafic/EnergySysEventReceiver.ts | 2 +- .../ProcedureLogicWorkerFileSystem.ts | 2 +- .../ProcedureLogicWorkerJsCpuProfiler.ts | 4 +- .../ProcedureLogicWorkerNativeNemory.ts | 6 +- .../logic-worker/ProcedureLogicWorkerPerf.ts | 10 ++-- ide/src/trace/database/sql/Func.sql.ts | 58 +++++++++---------- 12 files changed, 69 insertions(+), 60 deletions(-) diff --git a/ide/src/base-ui/table/lit-table.ts b/ide/src/base-ui/table/lit-table.ts index 285db091..43978361 100644 --- a/ide/src/base-ui/table/lit-table.ts +++ b/ide/src/base-ui/table/lit-table.ts @@ -639,7 +639,7 @@ export class LitTable extends HTMLElement { .map((a) => (a as unknown).data) .map((a) => { if ('children' in a) { - Reflect.deleteProperty(a, "chlidren") + Reflect.deleteProperty(a, 'chlidren'); } return a; }); diff --git a/ide/src/trace/component/SpFlags.ts b/ide/src/trace/component/SpFlags.ts index 1e527a07..98016219 100644 --- a/ide/src/trace/component/SpFlags.ts +++ b/ide/src/trace/component/SpFlags.ts @@ -19,17 +19,17 @@ const VSYNC_VAL = { 'VsyncGeneratior': 'H:VsyncGenerator', 'Vsync-rs': 'H:rs_SendVsync', 'Vsync-app': 'H:app_SendVsync' -} +}; const CAT_SORT = { 'Business first': 'business', 'Thread first': 'thread' -} +}; const CONFIG_STATE = { 'VSync': ['vsyncValue', 'VsyncGeneratior'], 'Start&Finish Trace Category': ['catValue', 'Business first'] -} +}; @element('sp-flags') export class SpFlags extends BaseElement { @@ -82,11 +82,14 @@ export class SpFlags extends BaseElement { configDiv.appendChild(description); } //监听flag-select的状态选择 - private flagSelectListener(configSelect: any): void { + private flagSelectListener(configSelect: unknown): void { + // @ts-ignore let title = configSelect.getAttribute('title'); let listSelect = this.shadowRoot?.querySelector(`#${CONFIG_STATE[title as keyof typeof CONFIG_STATE][0]}`); + // @ts-ignore FlagsConfig.updateFlagsConfig(title!, configSelect.selectedOptions[0].value); if (CONFIG_STATE[title as keyof typeof CONFIG_STATE]) { + // @ts-ignore if (configSelect.selectedOptions[0].value === 'Enabled') { listSelect?.removeAttribute('disabled'); } else { @@ -156,7 +159,7 @@ export class SpFlags extends BaseElement { if (config.title === 'Start&Finish Trace Category') { let configKey = CONFIG_STATE['Start&Finish Trace Category' as keyof typeof CONFIG_STATE][0]; - let configFooterDiv = this.createPersonOption(CAT_SORT, configKey, config.addInfo!.catValue, config.title) + let configFooterDiv = this.createPersonOption(CAT_SORT, configKey, config.addInfo!.catValue, config.title); configDiv.appendChild(configFooterDiv); } @@ -164,7 +167,7 @@ export class SpFlags extends BaseElement { }); } - private createPersonOption(list: any, key: string, defaultKey: string, parentOption: string): HTMLDivElement { + private createPersonOption(list: unknown, key: string, defaultKey: string, parentOption: string): HTMLDivElement { let configFooterDiv = document.createElement('div'); configFooterDiv.className = 'config_footer'; let vsyncLableEl = document.createElement('lable'); @@ -173,12 +176,15 @@ export class SpFlags extends BaseElement { vsyncTypeEl.setAttribute('id', key); vsyncTypeEl.className = 'flag-select'; //根据给出的list遍历添加option下来选框 - for(let k of Object.keys(list)) { + // @ts-ignore + for (let k of Object.keys(list)) { let option = document.createElement('option'); // VsyncGeneratior = H:VsyncGenerator + // @ts-ignore option.value = list[k]; option.textContent = k; + // @ts-ignore if (list[k] === defaultKey) { - option.selected = true; + option.selected = true; FlagsConfig.updateFlagsConfig(key, option.value); } vsyncTypeEl.appendChild(option); @@ -250,7 +256,7 @@ export class FlagsConfig { title: 'VSync', switchOptions: [{ option: 'Enabled' }, { option: 'Disabled', selected: true }], describeContent: 'VSync Signal drawing', - addInfo: {vsyncValue: VSYNC_VAL['VsyncGeneratior'] }, + addInfo: { vsyncValue: VSYNC_VAL.VsyncGeneratior }, }, { title: 'LTPO', @@ -261,7 +267,7 @@ export class FlagsConfig { title: 'Start&Finish Trace Category', switchOptions: [{ option: 'Enabled' }, { option: 'Disabled', selected: true }], describeContent: 'Asynchronous trace aggregation', - addInfo: {catValue: CAT_SORT['Business first'] }, + addInfo: { catValue: CAT_SORT['Business first'] }, }, { title: 'UserPluginsRow', @@ -377,7 +383,7 @@ export class FlagsConfig { let list = window.localStorage.getItem(FlagsConfig.FLAGS_CONFIG_KEY); let listJson = JSON.parse(list!); let catSelectValue = listJson[value]; - return catSelectValue + return catSelectValue; } static updateFlagsConfig(key: string, value: unknown): void { diff --git a/ide/src/trace/component/chart/SpProcessChart.ts b/ide/src/trace/component/chart/SpProcessChart.ts index b902feb8..49aec65e 100644 --- a/ide/src/trace/component/chart/SpProcessChart.ts +++ b/ide/src/trace/component/chart/SpProcessChart.ts @@ -1272,7 +1272,7 @@ export class SpProcessChart { // @ts-ignore let modifiedObject = { ...object }; modifiedObject.startTime = modifiedObject.startTs; - Reflect.deleteProperty(modifiedObject, "startTs"); + Reflect.deleteProperty(modifiedObject, 'startTs'); modifiedObject.rowId = name; modifiedObject.type = 'func'; SpProcessChart.asyncFuncCache.push({ ...modifiedObject }); @@ -1280,7 +1280,10 @@ export class SpProcessChart { //Async Function addAsyncFunction(it: { pid: number; processName: string | null }, processRow: TraceRow): void { let isCategoryAsyncfunc: boolean = FlagsConfig.getFlagsConfigEnableStatus('Start&Finish Trace Category'); - let asyncRemoveCatArr: unknown[], asyncCat: unknown, setArrayLenThanOne: unknown, setArrayLenOnlyOne: unknown; + let asyncRemoveCatArr: unknown[]; + let asyncCat: unknown; + let setArrayLenThanOne: unknown; + let setArrayLenOnlyOne: unknown; //@ts-ignore let asyncFuncList = this.processAsyncFuncMap[it.pid] || []; if (!asyncFuncList.length) { @@ -1373,7 +1376,7 @@ export class SpProcessChart { asyncRemoveCatArr.push(el); } } - asyncCat = flag ? Utils.groupBy(asyncCatArr, 'cat') : Object.fromEntries(asyncCatMap) + asyncCat = flag ? Utils.groupBy(asyncCatArr, 'cat') : Object.fromEntries(asyncCatMap); return { asyncRemoveCatArr, asyncCat }; } //处理cat字段为null的数据,按funname分类,分别按len>1和=1去处理 diff --git a/ide/src/trace/component/trace/sheet/cpu/TabPaneBoxChild.ts b/ide/src/trace/component/trace/sheet/cpu/TabPaneBoxChild.ts index 017518e9..9d4617ef 100644 --- a/ide/src/trace/component/trace/sheet/cpu/TabPaneBoxChild.ts +++ b/ide/src/trace/component/trace/sheet/cpu/TabPaneBoxChild.ts @@ -70,7 +70,7 @@ export class TabPaneBoxChild extends BaseElement { getDataByDB(val: BoxJumpParam): void { this.boxChildTbl!.loading = true; - sliceChildBoxSender( 'state-box', val.leftNs, val.rightNs, val.threadId!, val.processId!, + sliceChildBoxSender('state-box', val.leftNs, val.rightNs, val.threadId!, val.processId!, val.cpus, val.state, val.traceId!).then((result: unknown): void => { this.boxChildTbl!.loading = false; // @ts-ignore if (result.length !== null && result.length > 0) { // @ts-ignore @@ -116,7 +116,7 @@ export class TabPaneBoxChild extends BaseElement { } } } - ); + ); } initHtml(): string { diff --git a/ide/src/trace/component/trace/sheet/file-system/TabPaneFilesystemStatistics.ts b/ide/src/trace/component/trace/sheet/file-system/TabPaneFilesystemStatistics.ts index 62c1b312..afbf6b84 100644 --- a/ide/src/trace/component/trace/sheet/file-system/TabPaneFilesystemStatistics.ts +++ b/ide/src/trace/component/trace/sheet/file-system/TabPaneFilesystemStatistics.ts @@ -228,7 +228,7 @@ export class TabPaneFileStatistics extends BaseElement { fileStatisticsA.node[key] - fileStatisticsB.node[key] : this.fileStatisticsSortType === 2 ? // @ts-ignore - fileStatisticsB.node[key] - fileStatisticsA.node[key] : 0 + fileStatisticsB.node[key] - fileStatisticsA.node[key] : 0; }); // @ts-ignore fileStatisticsAllNode.children.forEach((item: unknown): void => { // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/native-memory/TabPaneNMStatisticAnalysis.ts b/ide/src/trace/component/trace/sheet/native-memory/TabPaneNMStatisticAnalysis.ts index f53b3b65..4cdc85e5 100644 --- a/ide/src/trace/component/trace/sheet/native-memory/TabPaneNMStatisticAnalysis.ts +++ b/ide/src/trace/component/trace/sheet/native-memory/TabPaneNMStatisticAnalysis.ts @@ -1157,7 +1157,7 @@ export class TabPaneNMStatisticAnalysis extends BaseElement { this.currentLevelReleaseCount += item.count; } } - } + }; for (let itemData of dbArray) { // @ts-ignore diff --git a/ide/src/trace/database/data-trafic/EnergySysEventReceiver.ts b/ide/src/trace/database/data-trafic/EnergySysEventReceiver.ts index bb844e9a..52ce06a2 100644 --- a/ide/src/trace/database/data-trafic/EnergySysEventReceiver.ts +++ b/ide/src/trace/database/data-trafic/EnergySysEventReceiver.ts @@ -321,7 +321,7 @@ function eventNameWithPowerRunninglock(beanData: unknown, it: unknown, systemDat // @ts-ignore beanData.type = 1; systemDataList.push(beanData); - Reflect.deleteProperty(tokedIds,'number'); + Reflect.deleteProperty(tokedIds, 'number'); } } } diff --git a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerFileSystem.ts b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerFileSystem.ts index 49e718cd..4cb5b881 100644 --- a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerFileSystem.ts +++ b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerFileSystem.ts @@ -1103,7 +1103,7 @@ and s.start_ts <= ${selectionParam.rightNs} + t.start_ts ${sqlFilter} and callch clearSplitMapData(symbolName: string): void { if (symbolName in this.splitMapData) { - Reflect.deleteProperty(this.splitMapData,symbolName); + Reflect.deleteProperty(this.splitMapData, symbolName); } } } diff --git a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerJsCpuProfiler.ts b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerJsCpuProfiler.ts index 38a56983..36e10382 100644 --- a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerJsCpuProfiler.ts +++ b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerJsCpuProfiler.ts @@ -322,7 +322,7 @@ export class ProcedureLogicWorkerJsCpuProfiler extends LogicHandler { chartTreeArray: Array, reverseTreeArray: Array ): void { - let recursionTree = (chartFrame: JsCpuProfilerChartFrame): void=> { + let recursionTree = (chartFrame: JsCpuProfilerChartFrame): void => { // isSelect为框选/点选范围内的函数,其他都不需要处理 if (!chartFrame.isSelect) { return; @@ -344,7 +344,7 @@ export class ProcedureLogicWorkerJsCpuProfiler extends LogicHandler { recursionTree(children); } } - } + }; //递归树结构 for (const chartFrame of chartTreeArray) { diff --git a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerNativeNemory.ts b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerNativeNemory.ts index 43e98936..7904c120 100644 --- a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerNativeNemory.ts +++ b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerNativeNemory.ts @@ -506,9 +506,9 @@ export class ProcedureLogicWorkerNativeMemory extends LogicHandler { if (nmMemoryColumn === 'index' || nmMemoryColumn === 'startTs' || nmMemoryColumn === 'heapSize') { return nmMemorySort === 1 ? //@ts-ignore - memoryLeftData[nmMemoryColumn] - memoryRightData[nmMemoryColumn] + memoryLeftData[nmMemoryColumn] - memoryRightData[nmMemoryColumn] : //@ts-ignore - memoryRightData[nmMemoryColumn] - memoryLeftData[nmMemoryColumn]; + memoryRightData[nmMemoryColumn] - memoryLeftData[nmMemoryColumn]; } else { if (nmMemorySort === 1) { //@ts-ignore @@ -1180,7 +1180,7 @@ export class ProcedureLogicWorkerNativeMemory extends LogicHandler { } clearSplitMapData(symbolName: string): void { if (symbolName in this.splitMapData) { - Reflect.deleteProperty(this.splitMapData,symbolName); + Reflect.deleteProperty(this.splitMapData, symbolName); } } resolvingNMCallAction(params: unknown[]): NativeHookCallInfo[] { diff --git a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts index f782cfd1..edeaa0f3 100644 --- a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts +++ b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts @@ -239,7 +239,7 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { //@ts-ignore if (data.params.list) { // 若前端存储过调用栈信息与被调用栈信息,可考虑从此处一起返回给主线程 - //@ts-ignore + //@ts-ignore let arr = convertJSON(data.params.list) || []; //@ts-ignore let result = dealAsyncData(arr, this.callChainData, this.dataCache.nmHeapFrameMap, this.dataCache.dataDict, this.searchValue); @@ -256,7 +256,7 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { } else { //@ts-ignore this.searchValue = data.params.searchValue; - //@ts-ignore + //@ts-ignore this.queryPerfAsync(data.params); } } @@ -427,8 +427,8 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { (` + str + `)` + eventStr + ` AND time between ${ - //@ts-ignore - args.leftNs} and ${args.rightNs} + //@ts-ignore + args.leftNs} and ${args.rightNs} `, {}); } @@ -814,7 +814,7 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { clearSplitMapData(symbolName: string): void { if (symbolName in this.splitMapData) { - Reflect.deleteProperty(this.splitMapData,symbolName); + Reflect.deleteProperty(this.splitMapData, symbolName); } } diff --git a/ide/src/trace/database/sql/Func.sql.ts b/ide/src/trace/database/sql/Func.sql.ts index 0e34bb3e..59ab5966 100644 --- a/ide/src/trace/database/sql/Func.sql.ts +++ b/ide/src/trace/database/sql/Func.sql.ts @@ -159,7 +159,7 @@ export const queryProcessAsyncFuncCat = ( startTs: number; endTs: number; } -): Promise> => +): Promise> => query( 'queryProcessAsyncFuncCat', ` @@ -182,7 +182,7 @@ export const queryProcessAsyncFuncCat = ( startTs not null order by cat; `, - {} + {} ); export const getMaxDepthByTid = (traceId?: string): //@ts-ignore @@ -348,28 +348,28 @@ export const getTabDetails = ( funTids?: Array ): //@ts-ignore Promise> => { - let asyncCondition = ''; - let catCondition = ''; - let syncCondition = ''; - if (key === 'async') { - asyncCondition = ` + let asyncCondition = ''; + let catCondition = ''; + let syncCondition = ''; + if (key === 'async') { + asyncCondition = ` and c.cookie not null and c.parent_id not null ` - } else if (key === 'sync') { - syncCondition = ` + } else if (key === 'sync') { + syncCondition = ` and A.tid in (${funTids!.join(',')}) and c.cookie is null ` - } - let condition = ` + } + let condition = ` ${asyncCondition} ${catCondition} ${syncCondition} ${`and P.pid in (${asyncPid.join(',')})`} - ${`and c.name in (${asyncNames.map((it) => "\"" + it + "\"").join(',')})`} + ${`and c.name in (${asyncNames.map((it) => '\"' + it + '\"').join(',')})`} ` - let sql = ` + let sql = ` SELECT c.name AS name, c.dur AS duration, @@ -389,17 +389,17 @@ export const getTabDetails = ( and not ((C.ts - D.start_ts + C.dur < ${leftNS}) or (C.ts - D.start_ts > ${rightNS})) ${condition} ` - return query('getTabDetails', sql, {}); - } - export const getCatDetails = ( - asyncNames: Array, - catName: Array, - asyncPid: Array, - leftNS: number, - rightNS: number - ): //@ts-ignore - Promise> => { - let sql = ` + return query('getTabDetails', sql, {}); +} +export const getCatDetails = ( + asyncNames: Array, + catName: Array, + asyncPid: Array, + leftNS: number, + rightNS: number +): //@ts-ignore + Promise> => { + let sql = ` SELECT c.name AS name, c.dur AS duration, @@ -425,14 +425,14 @@ export const getTabDetails = ( and P.pid in (${asyncPid.join(',')}) and - c.cat in (${catName.map((it) => "\"" + it + "\"").join(',')}) + c.cat in (${catName.map((it) => '\"' + it + '\"').join(',')}) and - c.name in (${asyncNames.map((it) => "\"" + it + "\"").join(',')}) + c.name in (${asyncNames.map((it) => '\"' + it + '\"').join(',')}) and not ((C.ts - D.start_ts + C.dur < ${leftNS}) or (C.ts - D.start_ts > ${rightNS})) - ` - return query('getCatDetails', sql, {}); - } + `; + return query('getCatDetails', sql, {}); +}; export const getTabSlicesAsyncCatFunc = ( asyncCatNames: Array, asyncCatPid: Array, -- Gitee From 614c250e709d7bff807205679ead018c9ba47bb5 Mon Sep 17 00:00:00 2001 From: liufei Date: Mon, 29 Jul 2024 11:21:54 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=91=8A=E8=AD=A64?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: liufei --- ide/src/base-ui/table/lit-table.ts | 5 +- ide/src/base-ui/utils/CSVFormater.ts | 65 +++-------- .../trace/component/chart/SpBpftraceChart.ts | 103 ++++++++++++++---- ide/src/trace/component/chart/SpClockChart.ts | 2 +- .../component/chart/SpPerfOutputDataChart.ts | 7 +- .../trace/component/chart/SpProcessChart.ts | 6 +- .../trace/component/trace/base/RangeSelect.ts | 6 +- .../trace/component/trace/base/TraceRow.ts | 6 +- .../bpftrace/TabPaneSampleInstruction.ts | 2 +- .../TabPaneSampleInstructionDistributions.ts | 2 +- .../TabPaneSampleInstructionSelection.ts | 4 +- .../file-system/TabPaneIOTierStatistics.ts | 12 +- .../trace/sheet/frequsage/TabPaneFreqUsage.ts | 14 ++- .../trace/sheet/hiperf/TabPerfProfile.ts | 2 +- .../sheet/smaps/TabPaneSmapsStatistics.ts | 2 + .../database/data-trafic/SliceReceiver.ts | 6 +- .../logic-worker/ProcedureLogicWorkerPerf.ts | 4 +- ide/src/trace/database/sql/Func.sql.ts | 10 +- ide/src/trace/database/sql/Smaps.sql.ts | 6 +- ide/src/trace/database/sql/SqlLite.sql.ts | 4 +- 20 files changed, 152 insertions(+), 116 deletions(-) diff --git a/ide/src/base-ui/table/lit-table.ts b/ide/src/base-ui/table/lit-table.ts index 43978361..c5117917 100644 --- a/ide/src/base-ui/table/lit-table.ts +++ b/ide/src/base-ui/table/lit-table.ts @@ -1536,8 +1536,9 @@ export class LitTable extends HTMLElement { td.onclick = (event: unknown): void => { this.dispatchEvent( new CustomEvent('td-click', { - detail: {//@ts-ignore - ...rowData.data,//@ts-ignore + detail: { + //@ts-ignore + ...rowData.data, }, composed: true, }) diff --git a/ide/src/base-ui/utils/CSVFormater.ts b/ide/src/base-ui/utils/CSVFormater.ts index 5942db54..3d2092ca 100644 --- a/ide/src/base-ui/utils/CSVFormater.ts +++ b/ide/src/base-ui/utils/CSVFormater.ts @@ -111,43 +111,22 @@ export class JSONToCSV { } static saveCsvFile(fileName: unknown, csvData: unknown): void { - let browserType: unknown = this.browserType(); + let alink: unknown = document.createElement('a'); // @ts-ignore - if (!browserType.edge || !browserType.ie) { - let alink: unknown = document.createElement('a'); - // @ts-ignore - alink.id = 'csvDownloadLink'; - // @ts-ignore - alink.href = this.getDownloadUrl(csvData); - // @ts-ignore - document.body.appendChild(alink); - let linkDom: unknown = document.getElementById('csvDownloadLink'); - // @ts-ignore - linkDom.setAttribute('download', fileName); - // @ts-ignore - linkDom.click(); - // @ts-ignore - document.body.removeChild(linkDom); - // @ts-ignore - } else if (browserType.ie >= 10 || browserType.edge === 'edge') { - // @ts-ignore - (navigator as unknown).msSaveBlob( - new Blob(['\uFEFF' + csvData], { - type: 'text/csv', - }), - fileName - ); - } else { - let oWin: unknown = window.top?.open('about:blank', '_blank'); - // @ts-ignore - oWin.document.write('sep=,\r\n' + csvData); - // @ts-ignore - oWin.document.close(); - // @ts-ignore - oWin.document.execCommand('SaveAs', true, fileName); - // @ts-ignore - oWin.close(); - } + alink.id = 'csvDownloadLink'; + // @ts-ignore + alink.href = this.getDownloadUrl(csvData); + // @ts-ignore + document.body.appendChild(alink); + let linkDom: unknown = document.getElementById('csvDownloadLink'); + // @ts-ignore + linkDom.setAttribute('download', fileName); + // @ts-ignore + linkDom.click(); + // @ts-ignore + document.body.removeChild(linkDom); + // @ts-ignore + } static getDownloadUrl(csvData: unknown): string | undefined { @@ -161,20 +140,6 @@ export class JSONToCSV { } } - static browserType(): { edge: string; ie: string; firefox: string; opera: string; - safari: string} { - const type = { edge: '', ie: '', firefox: '', opera: '', safari: '' }; - const agent = navigator.userAgent.toLowerCase(); - let has; - (has = agent.indexOf('edge') !== -1 ? (type.edge = 'edge') : - agent.match(/rv:([\d.]+)\) like gecko/)) ? (type.ie = has[1]) : - (has = agent.match(/msie ([\d.]+)/)) ? (type.ie = has[1]) : - (has = agent.match(/firefox\/([\d.]+)/)) ? (type.firefox = has[1]) : - (has = agent.match(/opera.([\d.]+)/)) ? (type.opera = has[1]) : - (has = agent.match(/version\/([\d.]+).*safari/)) ? (type.safari = has[1]) : 0; - return type; - } - static treeDepth(depth: number): string { let str = ''; for (let i = 0; i < depth; i++) { diff --git a/ide/src/trace/component/chart/SpBpftraceChart.ts b/ide/src/trace/component/chart/SpBpftraceChart.ts index d22c7bdf..755d251f 100644 --- a/ide/src/trace/component/chart/SpBpftraceChart.ts +++ b/ide/src/trace/component/chart/SpBpftraceChart.ts @@ -39,7 +39,7 @@ export class SpBpftraceChart { } } - async initSample(start_ts: number, file: any): Promise> { + async initSample(start_ts: number, file: unknown): Promise> { let traceRow = TraceRow.skeleton(); traceRow.rowId = 'bpftrace'; traceRow.index = 0; @@ -57,16 +57,22 @@ export class SpBpftraceChart { this.addTraceRowEventListener(traceRow, start_ts); //单独上传 if (file) { - this.getJsonData(file).then((res: any) => { + this.getJsonData(file).then((res: unknown) => { + // @ts-ignore const propertyData = res.data; + // @ts-ignore const treeNodes = res.relation.children || [res.relation.RS.children[0]]; const uniqueProperty = this.removeDuplicates(propertyData); const flattenTreeArray = this.getFlattenTreeData(treeNodes); - const height = (Math.max(...flattenTreeArray.map((obj: any) => obj.depth)) + 1) * 20; + // @ts-ignore + const height = (Math.max(...flattenTreeArray.map((obj: unknown) => obj.depth)) + 1) * 20; + // @ts-ignore const sampleProperty = this.setRelationDataProperty(flattenTreeArray, uniqueProperty); + // @ts-ignore const startTS = flattenTreeArray[0].property[0].begin; traceRow.supplier = () => new Promise((resolve): void => { + // @ts-ignore resolve(sampleProperty); }); traceRow.onThreadHandler = (useCache) => { @@ -84,6 +90,7 @@ export class SpBpftraceChart { type: 'bpftrace', start_ts: startTS, uniqueProperty: uniqueProperty, + // @ts-ignore flattenTreeArray: flattenTreeArray, }, traceRow @@ -127,16 +134,21 @@ export class SpBpftraceChart { * @param row * @param start_ts */ - addTraceRowEventListener(row: TraceRow, start_ts: number) { - row.uploadEl?.addEventListener('sample-file-change', (e: any) => { - this.getJsonData(e).then((res: any) => { + // @ts-ignore + addTraceRowEventListener(row: TraceRow, start_ts: number) { + row.uploadEl?.addEventListener('sample-file-change', (e: unknown) => { + this.getJsonData(e).then((res: unknown) => { this.resetChartData(row); + // @ts-ignore const propertyData = res.data; + // @ts-ignore const treeNodes = res.relation.children || [res.relation.RS.children[0]]; const uniqueProperty = this.removeDuplicates(propertyData); const flattenTreeArray = this.getFlattenTreeData(treeNodes); - const height = (Math.max(...flattenTreeArray.map((obj: any) => obj.depth)) + 1) * 20; + // @ts-ignore + const height = (Math.max(...flattenTreeArray.map((obj: unknown) => obj.depth)) + 1) * 20; const sampleProperty = this.setRelationDataProperty(flattenTreeArray, uniqueProperty); + // @ts-ignore const startTS = start_ts > 0 ? start_ts : flattenTreeArray[0].property[0].begin; row.supplier = () => new Promise((resolve): void => { @@ -157,6 +169,7 @@ export class SpBpftraceChart { type: 'bpftrace', start_ts: startTS, uniqueProperty: uniqueProperty, + // @ts-ignore flattenTreeArray: flattenTreeArray, }, row @@ -172,7 +185,8 @@ export class SpBpftraceChart { * 清空缓存 * @param row */ - resetChartData(row: TraceRow) { + // @ts-ignore + resetChartData(row: TraceRow) { row.dataList = []; row.dataList2 = []; row.dataListCache = []; @@ -184,11 +198,13 @@ export class SpBpftraceChart { * @param file * @returns */ - getJsonData(file: any): Promise { + getJsonData(file: unknown): Promise { return new Promise((resolve, reject) => { let reader = new FileReader(); + // @ts-ignore reader.readAsText(file.detail || file); - reader.onloadend = (e: any) => { + reader.onloadend = (e: unknown) => { + // @ts-ignore const fileContent = e.target?.result; try { resolve(JSON.parse(fileContent)); @@ -211,21 +227,31 @@ export class SpBpftraceChart { * @param parentName * @returns */ - getFlattenTreeData(treeData: Array, depth: number = 0, parentName: string = ''): Array { + getFlattenTreeData(treeData: Array, depth: number = 0, parentName: string = ''): Array { let result: Array = []; treeData.forEach((node) => { + // @ts-ignore const name: string = node.function_name; - const newNode: any = {}; + const newNode: unknown = {}; if (name.indexOf('unknown') > -1) { + // @ts-ignore newNode.children = this.getUnknownAllChildrenNames(node); } + // @ts-ignore newNode.detail = node.detail; + // @ts-ignore newNode.depth = depth; + // @ts-ignore newNode.name = name; + // @ts-ignore newNode.parentName = parentName; + // @ts-ignore newNode.property = []; + // @ts-ignore result.push(newNode); + // @ts-ignore if (node.children) { + // @ts-ignore result = result.concat(this.getFlattenTreeData(node.children, depth + 1, node.function_name)); } }); @@ -237,14 +263,18 @@ export class SpBpftraceChart { * @param propertyData * @returns */ - removeDuplicates(propertyData: Array): Array { - const result: Array = []; + removeDuplicates(propertyData: Array): Array { + const result: Array = []; propertyData.forEach((propertyGroup) => { - const groups: Array = []; - propertyGroup.forEach((property: any) => { + const groups: Array = []; + // @ts-ignore + propertyGroup.forEach((property: unknown) => { + // @ts-ignore const duplicateObj = groups.find((group) => group.func_name === property.func_name); if (duplicateObj) { + // @ts-ignore duplicateObj.begin = Math.min(duplicateObj.begin, property.begin); + // @ts-ignore duplicateObj.end = Math.max(duplicateObj.end, property.end); } else { groups.push(property); @@ -260,60 +290,82 @@ export class SpBpftraceChart { * @param relationData * @param propertyData */ - setRelationDataProperty(relationData: Array, propertyData: Array): Array { + setRelationDataProperty(relationData: Array, propertyData: Array): Array { const sampleProperty = relationData; //数组每一项进行比对 propertyData.forEach((propertyGroup) => { - propertyGroup.forEach((property: any) => { + // @ts-ignore + propertyGroup.forEach((property: unknown) => { + // @ts-ignore const relation = sampleProperty.find((relation) => relation.name === property.func_name); //property属性存储每帧数据 + // @ts-ignore relation?.property.push({ + // @ts-ignore name: property.func_name, + // @ts-ignore detail: relation.detail, + // @ts-ignore end: property.end, + // @ts-ignore begin: property.begin, + // @ts-ignore depth: relation.depth, + // @ts-ignore instructions: property.instructions, + // @ts-ignore cycles: property.cycles, }); }); }); //获取所有名字为unknown的数据 + // @ts-ignore const unknownRelation = sampleProperty.filter((relation) => relation.name.indexOf('unknown') > -1); //二维数组 用于存放unknown下所有子节点的数据 - let twoDimensionalArray: Array = []; - let result: Array = []; + let twoDimensionalArray: Array = []; + let result: Array = []; unknownRelation.forEach((unknownItem) => { result = []; twoDimensionalArray = []; + // @ts-ignore const children = unknownItem.children; //先获取到unknwon节点下每个子节点的property Object.keys(children).forEach((key) => { + // @ts-ignore unknownItem.children[key] = sampleProperty.find((relation) => relation.name === key).property; }); //将每个子节点的property加到二维数组中 - Object.values(children).forEach((value: any) => { + Object.values(children).forEach((value: unknown) => { + // @ts-ignore if (value.length > 0) { twoDimensionalArray.push(value); } }); if (twoDimensionalArray.length > 0) { //取每列的最大值和最小值 + // @ts-ignore for (let i = 0; i < twoDimensionalArray[0].length; i++) { const data = { + // @ts-ignore name: unknownItem.name, + // @ts-ignore detail: unknownItem.detail, + // @ts-ignore begin: twoDimensionalArray[0][i].begin, end: 0, + // @ts-ignore depth: unknownItem.depth, }; for (let j = 0; j < twoDimensionalArray.length; j++) { + // @ts-ignore data.end = Math.max(twoDimensionalArray[j][i].end, data.end); + // @ts-ignore data.begin = Math.min(twoDimensionalArray[j][i].begin, data.begin); } result.push(data); } + // @ts-ignore unknownItem.property = result; } }); @@ -325,16 +377,21 @@ export class SpBpftraceChart { * @param node * @param names */ - getUnknownAllChildrenNames(node: any, names: any = {}): object { + getUnknownAllChildrenNames(node: unknown, names: unknown = {}): object { + // @ts-ignore if (node.children) { - node.children.forEach((child: any) => { + // @ts-ignore + node.children.forEach((child: unknown) => { + // @ts-ignore if (child.function_name.indexOf('unknown') < 0) { + // @ts-ignore names[child.function.name] = []; } else { this.getUnknownAllChildrenNames(child, names); } }); } + // @ts-ignore return names; } } diff --git a/ide/src/trace/component/chart/SpClockChart.ts b/ide/src/trace/component/chart/SpClockChart.ts index 2b4344b9..a521cb0a 100644 --- a/ide/src/trace/component/chart/SpClockChart.ts +++ b/ide/src/trace/component/chart/SpClockChart.ts @@ -193,7 +193,7 @@ export class SpClockChart { } // @ts-ignore - async initDmaFence(folder: TraceRow): void { + async initDmaFence(folder: TraceRow): Promise { let dmaFenceNameList = await queryDmaFenceName(); if (dmaFenceNameList.length) { let dmaFenceList = []; diff --git a/ide/src/trace/component/chart/SpPerfOutputDataChart.ts b/ide/src/trace/component/chart/SpPerfOutputDataChart.ts index 78bc407f..5a3f79c2 100644 --- a/ide/src/trace/component/chart/SpPerfOutputDataChart.ts +++ b/ide/src/trace/component/chart/SpPerfOutputDataChart.ts @@ -38,11 +38,14 @@ export class SpPerfOutputDataChart { } let perfToolsDur = await queryPerfToolsDur(); if (perfToolsDur.length > 0) { + // @ts-ignore this.dur = perfToolsDur[0].dur; } else { this.dur = 3000000000; } + // @ts-ignore this.perfOutputArr = perfOutputData[0].name.split(':')[2].split(','); + // @ts-ignore let endTime: number = perfOutputData[0].ts; this.startTime = endTime - window.recordStartNS - this.dur!; if (this.startTime < 0) { @@ -80,7 +83,7 @@ export class SpPerfOutputDataChart { traceRow.canvasRestore(context, this.trace); }; } -//@ts-ignore + //@ts-ignore async initData(folder: TraceRow): Promise { let perfToolStartTime = new Date().getTime(); let perfToolList = [ @@ -127,7 +130,7 @@ export class SpPerfOutputDataChart { let durTime = new Date().getTime() - perfToolStartTime; info('The time to load the ClockData is: ', durTime); } -//@ts-ignore + //@ts-ignore async initFolder(): Promise> { let perfFolder = TraceRow.skeleton(); perfFolder.rowId = 'perfTool'; diff --git a/ide/src/trace/component/chart/SpProcessChart.ts b/ide/src/trace/component/chart/SpProcessChart.ts index 49aec65e..71a4ff65 100644 --- a/ide/src/trace/component/chart/SpProcessChart.ts +++ b/ide/src/trace/component/chart/SpProcessChart.ts @@ -1300,7 +1300,7 @@ export class SpProcessChart { let param: Array = aggregateData[key]; //@ts-ignore this.makeAddAsyncFunction(param, it, processRow, key); - }) + }); } else { //不聚合异步trace let asyncFuncGroup = Utils.groupBy(asyncFuncList, 'funName'); @@ -1415,7 +1415,7 @@ export class SpProcessChart { it: { pid: number; processName: string | null }, processRow: TraceRow, key: string - ) { + ): void { let maxDepth: number = -1; let i = 0; let mapDepth = new Map(); @@ -1480,7 +1480,7 @@ export class SpProcessChart { it: { pid: number; processName: string | null }, processRow: TraceRow, key: string - ) { + ): void { const maxHeight = this.calMaxHeight(asyncFunctions); // @ts-ignore const namesSet = new Set(asyncFunctions.map((item) => item.funName)); diff --git a/ide/src/trace/component/trace/base/RangeSelect.ts b/ide/src/trace/component/trace/base/RangeSelect.ts index 8beeff57..934c3633 100644 --- a/ide/src/trace/component/trace/base/RangeSelect.ts +++ b/ide/src/trace/component/trace/base/RangeSelect.ts @@ -367,6 +367,7 @@ export class RangeSelect { // @ts-ignore private handleRangeSelectAndDraw(rows: Array>, ev: MouseEvent): void { let rangeSelect: RangeSelectStruct | undefined; + let result: boolean; this.rangeTraceRow = rows.filter((it) => { if (it.rangeSelect) { if (!rangeSelect) { @@ -395,8 +396,11 @@ export class RangeSelect { } } TraceRow.rangeSelectObject = rangeSelect; - return true; + result = true; + } else { + result = false; } + return result; }); this.timerShaftEL!.sportRuler!.isRangeSelect = (this.rangeTraceRow?.length || 0) > 0; this.timerShaftEL!.sportRuler!.draw(); diff --git a/ide/src/trace/component/trace/base/TraceRow.ts b/ide/src/trace/component/trace/base/TraceRow.ts index 096350dc..42060004 100644 --- a/ide/src/trace/component/trace/base/TraceRow.ts +++ b/ide/src/trace/component/trace/base/TraceRow.ts @@ -587,8 +587,8 @@ export class TraceRow extends HTMLElement { offset: boolean = false, maxKey: string | undefined = undefined ): T | undefined { + let item: T | undefined; if (this.isHover) { - let item: T | undefined; if (maxKey) { let arr = this.dataListCache .filter((re) => re.frame && isFrameContainPoint(re.frame, this.hoverX, this.hoverY, strict, offset)) // @ts-ignore @@ -599,8 +599,10 @@ export class TraceRow extends HTMLElement { (re) => re.frame && isFrameContainPoint(re.frame, this.hoverX, this.hoverY, strict, offset) ); } - return item; + } else { + item = undefined; } + return item; } // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstruction.ts b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstruction.ts index 9900179a..55a69ca9 100644 --- a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstruction.ts +++ b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstruction.ts @@ -355,7 +355,7 @@ export class TabPaneSampleInstruction extends BaseElement { * @param canvasY * @returns */ - searchDataByCoord(nodes: unknown, canvasX: number, canvasY: number) { + searchDataByCoord(nodes: unknown, canvasX: number, canvasY: number): void | null { // @ts-ignore for (const key in nodes) { // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionDistributions.ts b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionDistributions.ts index a7c7dd0f..ef58348a 100644 --- a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionDistributions.ts +++ b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionDistributions.ts @@ -136,7 +136,7 @@ export class TabPaneSampleInstructionDistributions extends BaseElement { * @param canvasY * @returns */ - searchDataByCoord(nodes: unknown, canvasX: number, canvasY: number) { + searchDataByCoord(nodes: unknown, canvasX: number, canvasY: number): void | null { // @ts-ignore for (let i = 0; i < nodes.length; i++) { // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionSelection.ts b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionSelection.ts index 17350170..96b91294 100644 --- a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionSelection.ts +++ b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionSelection.ts @@ -355,7 +355,7 @@ export class TabPaneSampleInstructionSelection extends BaseElement { * @param canvasY * @returns */ - searchDataByCoord(nodes: unknown, canvasX: number, canvasY: number) { + searchDataByCoord(nodes: unknown, canvasX: number, canvasY: number): void | null { // @ts-ignore for (const key in nodes) { // @ts-ignore @@ -410,7 +410,7 @@ export class TabPaneSampleInstructionSelection extends BaseElement { * @param instructionData * @returns */ - getAvgInstructionData(instructionData: Array) { + getAvgInstructionData(instructionData: Array): unknown { // @ts-ignore const length = instructionData[0].property.length; // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/file-system/TabPaneIOTierStatistics.ts b/ide/src/trace/component/trace/sheet/file-system/TabPaneIOTierStatistics.ts index c53ae91f..950a741a 100644 --- a/ide/src/trace/component/trace/sheet/file-system/TabPaneIOTierStatistics.ts +++ b/ide/src/trace/component/trace/sheet/file-system/TabPaneIOTierStatistics.ts @@ -333,13 +333,13 @@ export class TabPaneIOTierStatistics extends BaseElement { allNode.children.forEach((item: unknown): void => { // @ts-ignore item.children.sort((ioTierStatItemA: unknown, ioTierStatItemB: unknown) => { - if (this.ioTierStatisticsSortType === 1) { + return this.ioTierStatisticsSortType === 1 ? // @ts-ignore - return ioTierStatItemA.node[key] - ioTierStatItemB.node[key]; - } else if (this.ioTierStatisticsSortType === 2) { - // @ts-ignore - return ioTierStatItemB.node[key] - ioTierStatItemA.node[key]; - } + ioTierStatItemA.node[key] - ioTierStatItemB.node[key] : + this.ioTierStatisticsSortType === 2 ? + // @ts-ignore + ioTierStatItemB.node[key] - ioTierStatItemA.node[key] : 0; + }); // @ts-ignore item.children.forEach((ioTierStatItem: unknown): void => { // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/frequsage/TabPaneFreqUsage.ts b/ide/src/trace/component/trace/sheet/frequsage/TabPaneFreqUsage.ts index f0a38ae2..70dadfc3 100644 --- a/ide/src/trace/component/trace/sheet/frequsage/TabPaneFreqUsage.ts +++ b/ide/src/trace/component/trace/sheet/frequsage/TabPaneFreqUsage.ts @@ -73,7 +73,7 @@ export class TabPaneFreqUsage extends BaseElement { } const LEFT_TIME: number = threadStatesParam.leftNs + threadStatesParam.recordStartNs; const RIGHT_TIME: number = threadStatesParam.rightNs + threadStatesParam.recordStartNs; - const args = {leftNs: LEFT_TIME, rightNs: RIGHT_TIME, cpuArray: cpuArray}; + const args = { leftNs: LEFT_TIME, rightNs: RIGHT_TIME, cpuArray: cpuArray }; let resultArr: Array = orgnazitionMap(runningResult, cpuFreqData, args); // 递归拿出来最底层的数据,并以进程层级的数据作为分割 this.recursion(resultArr); @@ -368,9 +368,10 @@ function returnObj( ? SpSegmentationChart.freqInfoMapData.get(item.cpu)?.get(cpuFreqData.value) : cpuFreqData.value )!; + let result: RunningFreqData | undefined; switch (flag) { case 1: - return { + result = { thread: item.pid + '_' + item.tid, consumption: consumption * item.dur, cpu: item.cpu, @@ -379,7 +380,7 @@ function returnObj( percent: (item.dur / sum) * PERCENT, }; case 2: - return { + result = { thread: item.pid + '_' + item.tid, consumption: consumption * (cpuFreqData.ts + cpuFreqData.dur - item.ts), cpu: item.cpu, @@ -388,7 +389,7 @@ function returnObj( percent: ((cpuFreqData.ts + cpuFreqData.dur - item.ts) / sum) * PERCENT, }; case 3: - return { + result = { thread: item.pid + '_' + item.tid, consumption: consumption * (item.dur + item.ts - cpuFreqData.ts), cpu: item.cpu, @@ -397,7 +398,7 @@ function returnObj( percent: ((item.dur + item.ts - cpuFreqData.ts) / sum) * PERCENT, }; case 4: - return { + result = { thread: item.pid + '_' + item.tid, consumption: consumption * cpuFreqData.dur, cpu: item.cpu, @@ -406,7 +407,7 @@ function returnObj( percent: (cpuFreqData.dur / sum) * PERCENT, }; case 5: - return { + result = { thread: item.pid + '_' + item.tid, consumption: 0, cpu: item.cpu, @@ -415,6 +416,7 @@ function returnObj( percent: (item.dur / sum) * PERCENT, }; } + return result; } /** diff --git a/ide/src/trace/component/trace/sheet/hiperf/TabPerfProfile.ts b/ide/src/trace/component/trace/sheet/hiperf/TabPerfProfile.ts index 065e4701..06617249 100644 --- a/ide/src/trace/component/trace/sheet/hiperf/TabPerfProfile.ts +++ b/ide/src/trace/component/trace/sheet/hiperf/TabPerfProfile.ts @@ -679,7 +679,7 @@ export class TabpanePerfProfile extends BaseElement { perfProfileArgs.push({ funcName: 'onlyKernel', funcArgs: [isOnlyKernel], - }) + }); perfProfileArgs.push({ funcName: 'getCallChainsBySampleIds', funcArgs: [isTopDown], diff --git a/ide/src/trace/component/trace/sheet/smaps/TabPaneSmapsStatistics.ts b/ide/src/trace/component/trace/sheet/smaps/TabPaneSmapsStatistics.ts index c6995bcc..da50b6b5 100644 --- a/ide/src/trace/component/trace/sheet/smaps/TabPaneSmapsStatistics.ts +++ b/ide/src/trace/component/trace/sheet/smaps/TabPaneSmapsStatistics.ts @@ -78,6 +78,7 @@ export class TabPaneSmapsStatistics extends BaseElement { async queryDataByDB(smapsVal: SelectionParam): Promise { getTabSmapsMaxSize(smapsVal.leftNs, smapsVal.rightNs, (MemoryConfig.getInstance().interval * 1000_000) / 5).then( (maxRes) => { + // @ts-ignore this.sumSize = maxRes[0].max_value; } ); @@ -219,6 +220,7 @@ export class TabPaneSmapsStatistics extends BaseElement { async setSmaps(data: SelectionParam): Promise { getTabSmapsStatisticMaxSize(data.leftNs).then((maxRes) => { + // @ts-ignore this.sumSize = maxRes[0].max_value; }); await getTabSmapsStatisticData(data.leftNs).then((result) => { diff --git a/ide/src/trace/database/data-trafic/SliceReceiver.ts b/ide/src/trace/database/data-trafic/SliceReceiver.ts index d1108d46..bd942e4f 100644 --- a/ide/src/trace/database/data-trafic/SliceReceiver.ts +++ b/ide/src/trace/database/data-trafic/SliceReceiver.ts @@ -423,12 +423,12 @@ function getChildBoxDb(data: unknown): void { } //@ts-ignore return condition && Math.max(data.params.leftNs, it.startTime!) < Math.min(data.params.rightNs, it.startTime! + it.dur!); - }) + }); postMsg(data, childBoxDb); } //处理processId和threadId -function handleIdParams(id: number | number[] | undefined) { - let setId; +function handleIdParams(id: number | number[] | undefined): Set { + let setId: Set; if (Array.isArray(id) || typeof id === 'number') { setId = new Set(Array.isArray(id) ? id : [id]); } else { diff --git a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts index edeaa0f3..0127df75 100644 --- a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts +++ b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts @@ -879,11 +879,11 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { prev.count += pfcall.count; prev.totalEvent += pfcall.totalEvent; prev.eventCount += pfcall.eventCount; - return total + return total; } } total.push(pfcall); - return total + return total; }, [] as PerfCallChainMerageData[]); for (const child of item.children) { mergeChildren(child); diff --git a/ide/src/trace/database/sql/Func.sql.ts b/ide/src/trace/database/sql/Func.sql.ts index 59ab5966..bb2d52bb 100644 --- a/ide/src/trace/database/sql/Func.sql.ts +++ b/ide/src/trace/database/sql/Func.sql.ts @@ -355,12 +355,12 @@ export const getTabDetails = ( asyncCondition = ` and c.cookie not null and c.parent_id not null - ` + `; } else if (key === 'sync') { syncCondition = ` and A.tid in (${funTids!.join(',')}) and c.cookie is null - ` + `; } let condition = ` ${asyncCondition} @@ -368,7 +368,7 @@ export const getTabDetails = ( ${syncCondition} ${`and P.pid in (${asyncPid.join(',')})`} ${`and c.name in (${asyncNames.map((it) => '\"' + it + '\"').join(',')})`} - ` + `; let sql = ` SELECT c.name AS name, @@ -388,9 +388,9 @@ export const getTabDetails = ( c.dur >= -1 and not ((C.ts - D.start_ts + C.dur < ${leftNS}) or (C.ts - D.start_ts > ${rightNS})) ${condition} - ` + `; return query('getTabDetails', sql, {}); -} +}; export const getCatDetails = ( asyncNames: Array, catName: Array, diff --git a/ide/src/trace/database/sql/Smaps.sql.ts b/ide/src/trace/database/sql/Smaps.sql.ts index effdd7fa..bf617025 100644 --- a/ide/src/trace/database/sql/Smaps.sql.ts +++ b/ide/src/trace/database/sql/Smaps.sql.ts @@ -36,7 +36,7 @@ export const querySmapsData = (columnName: string): Promise> => { $columnName: columnName } ); -export const querySmapsDataMax = (columnName: string): Promise> => +export const querySmapsDataMax = (columnName: string): Promise> => query( 'querySmapsDataMax', ` @@ -47,7 +47,7 @@ export const querySmapsDataMax = (columnName: string): Promise> => ); export const getTabSmapsMaxSize = (leftNs: number, rightNs: number, dur: number): - Promise> => + Promise> => query( 'getTabSmapsMaxRss', ` @@ -123,7 +123,7 @@ export const querySmapsRecordTabData = ( where type = ${typeId} and (timeStamp - start_ts) = ${startNs}` ); -export const getTabSmapsStatisticMaxSize = (rightNs: number): Promise> => +export const getTabSmapsStatisticMaxSize = (rightNs: number): Promise> => query( 'getTabSmapsStatisticMaxRss', ` diff --git a/ide/src/trace/database/sql/SqlLite.sql.ts b/ide/src/trace/database/sql/SqlLite.sql.ts index 3c878536..638520aa 100644 --- a/ide/src/trace/database/sql/SqlLite.sql.ts +++ b/ide/src/trace/database/sql/SqlLite.sql.ts @@ -1539,7 +1539,7 @@ Promise> => { $cpu: cpu, }); }; -export const queryPerfOutputData = (): Promise> => +export const queryPerfOutputData = (): Promise> => query( 'queryPerfOutputData', `SELECT @@ -1548,7 +1548,7 @@ export const queryPerfOutputData = (): Promise> => FROM callstack where name like '%PERFORMANCE_DATA%'` ); -export const queryPerfToolsDur = (): Promise> => +export const queryPerfToolsDur = (): Promise> => query( 'queryPerfToolsDur', `SELECT -- Gitee From ffa832066055f1e84682437350881b9a177d98bf Mon Sep 17 00:00:00 2001 From: liufei Date: Mon, 29 Jul 2024 14:28:48 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=91=8A=E8=AD=A65?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: liufei --- ide/src/base-ui/table/lit-table.ts | 3 +- ide/src/trace/component/SpSystemTrace.init.ts | 3 +- .../trace/component/chart/SpProcessChart.ts | 131 ++++++++++++------ .../trace/sheet/cpu/TabPaneBoxChild.ts | 60 +++++--- .../database/data-trafic/utils/DataFilter.ts | 24 ++-- 5 files changed, 147 insertions(+), 74 deletions(-) diff --git a/ide/src/base-ui/table/lit-table.ts b/ide/src/base-ui/table/lit-table.ts index c5117917..167485ff 100644 --- a/ide/src/base-ui/table/lit-table.ts +++ b/ide/src/base-ui/table/lit-table.ts @@ -1931,7 +1931,8 @@ export class LitTable extends HTMLElement { new CustomEvent('icon-click', { detail: { // @ts-ignore - ...rowData.data, // @ts-ignore + ...rowData.data, + // @ts-ignore data: rowData.data, callBack: (isSelected: boolean): void => { //是否爲单选 diff --git a/ide/src/trace/component/SpSystemTrace.init.ts b/ide/src/trace/component/SpSystemTrace.init.ts index bdb56ead..6a73dbc2 100644 --- a/ide/src/trace/component/SpSystemTrace.init.ts +++ b/ide/src/trace/component/SpSystemTrace.init.ts @@ -966,7 +966,8 @@ function findEntryTypeFunc(sp: SpSystemTrace, findEntry: unknown): void { // @ts-ignore cookie: findEntry.cookie, // @ts-ignore - row_id: findEntry.rowId ? findEntry.rowId : null,//因异步trace分类出的rowId类型有三种,故新增row_id字段,该字段为异步方法的对应的rowId,支持搜索查询定位到该方法属于那个row,只有缓存的异步trace数据中含该字段 + //因异步trace分类出的rowId类型有三种,故新增row_id字段,该字段为异步方法的对应的rowId,支持搜索查询定位到该方法属于那个row,只有缓存的异步trace数据中含该字段 + row_id: findEntry.rowId ? findEntry.rowId : null, }, true ); diff --git a/ide/src/trace/component/chart/SpProcessChart.ts b/ide/src/trace/component/chart/SpProcessChart.ts index 71a4ff65..e558a624 100644 --- a/ide/src/trace/component/chart/SpProcessChart.ts +++ b/ide/src/trace/component/chart/SpProcessChart.ts @@ -176,7 +176,8 @@ export class SpProcessChart { key: number, asyncFuncGroups: Array ): TraceRow { - let funcRow = TraceRow.skeleton(); //@ts-ignore + let funcRow = TraceRow.skeleton(); + //@ts-ignore funcRow.rowId = `${asyncFuncGroups[0].funName}-${key}`; //@ts-ignore funcRow.asyncFuncName = asyncFuncGroups[0].funName; funcRow.asyncFuncNamePID = key; @@ -184,7 +185,8 @@ export class SpProcessChart { funcRow.enableCollapseChart(FOLD_HEIGHT, this.trace); //允许折叠泳道图 funcRow.rowParentId = `${parentRow.rowId}`; funcRow.rowHidden = !parentRow.expansion; - funcRow.style.width = '100%'; //@ts-ignore + funcRow.style.width = '100%'; + //@ts-ignore funcRow.name = `${asyncFuncGroups[0].funName} ${key}`; funcRow.setAttribute('children', ''); funcRow.supplierFrame = async (): Promise => { @@ -219,14 +221,16 @@ export class SpProcessChart { left: unknown, right: unknown ): boolean => //@ts-ignore - Math.max(left.startTs + left.dur, right.startTs + right.dur) - Math.min(left.startTs, right.startTs) < //@ts-ignore + Math.max(left.startTs + left.dur, right.startTs + right.dur) - Math.min(left.startTs, right.startTs) < + //@ts-ignore left.dur + right.dur; let depths: unknown = []; let createDepth = (currentDepth: number, index: number): void => { //@ts-ignore if (depths[currentDepth] === undefined || !isIntersect(depths[currentDepth], res[index])) { //@ts-ignore - res[index].depth = currentDepth; //@ts-ignore + res[index].depth = currentDepth; + //@ts-ignore depths[currentDepth] = res[index]; } else { createDepth(++currentDepth, index); @@ -235,10 +239,12 @@ export class SpProcessChart { res.forEach((it, i): void => { //@ts-ignore res[i].funName = this.traceId ? Utils.getInstance().getCallStatckMap().get(`${this.traceId}_${res[i].id!}`) : Utils.getInstance().getCallStatckMap().get(res[i].id!); //@ts-ignore - res[i].threadName = Utils.getInstance().getThreadMap().get(res[i].tid!); //@ts-ignore + res[i].threadName = Utils.getInstance().getThreadMap().get(res[i].tid!); + //@ts-ignore if (it.dur === -1 || it.dur === null || it.dur === undefined) { //@ts-ignore - it.dur = (TraceRow.range?.endNS || 0) - it.startTs; //@ts-ignore + it.dur = (TraceRow.range?.endNS || 0) - it.startTs; + //@ts-ignore it.flag = 'Did not end'; } createDepth(0, i); @@ -414,7 +420,8 @@ export class SpProcessChart { renderServiceProcess = await queryRsProcess(); } // @ts-ignore - info('ProcessList Data size is: ', processList!.length); // @ts-ignore + info('ProcessList Data size is: ', processList!.length); + // @ts-ignore await this.initProcessRow(processList, allTaskPoolPid, allJankProcess, renderServiceProcess, traceId); let durTime = new Date().getTime() - time; info('The time to load the Process data is: ', durTime); @@ -456,9 +463,12 @@ export class SpProcessChart { info('fetch per process pid,switch_count,thread_count,slice_count,mem_count'); pidCountArray.forEach((it) => { //@ts-ignore - this.processThreadDataCountMap.set(it.pid, it.switch_count); //@ts-ignore - this.processThreadCountMap.set(it.pid, it.thread_count); //@ts-ignore - this.processFuncDataCountMap.set(it.pid, it.slice_count); //@ts-ignore + this.processThreadDataCountMap.set(it.pid, it.switch_count); + //@ts-ignore + this.processThreadCountMap.set(it.pid, it.thread_count); + //@ts-ignore + this.processFuncDataCountMap.set(it.pid, it.slice_count); + //@ts-ignore this.processMemDataCountMap.set(it.pid, it.mem_count); }); let eventCountList: Array = await queryEventCountMap(traceId); @@ -468,12 +478,13 @@ export class SpProcessChart { return pre; }, {}); // threadStateList转数组 - let threadArray = Array.from(SpProcessChart.threadStateList); // [['1235-1235',12312321312],['12-12',4546465]] + let threadArray = Array.from(SpProcessChart.threadStateList); // @ts-ignore 排序 threadArray.sort((a: Array, b: Array) => // @ts-ignore b[1] - a[1]); - let queryProcessThreadsByTableResult = await queryProcessThreadsByTable(traceId); // @ts-ignore + let queryProcessThreadsByTableResult = await queryProcessThreadsByTable(traceId); + // @ts-ignore // 全量threads排序 // @ts-ignore this.processThreads = Utils.sortThreadRow(threadArray, queryProcessThreadsByTableResult, 'thread'); @@ -1061,9 +1072,12 @@ export class SpProcessChart { thread: ThreadStruct, processRow: TraceRow, threadRow: TraceRow, - threads: ThreadStruct[], //@ts-ignore - threadRowArr: TraceRow[], //@ts-ignore - actualRow: TraceRow | null, //@ts-ignore + threads: ThreadStruct[], + //@ts-ignore + threadRowArr: TraceRow[], + //@ts-ignore + actualRow: TraceRow | null, + //@ts-ignore expectedRow: TraceRow | null, startupRow: TraceRow | null | undefined, soRow: TraceRow | null | undefined @@ -1074,7 +1088,8 @@ export class SpProcessChart { if (threadRow.name === `${it.processName} ${it.pid}`) { this.renderRow = threadRow; } - let flag = threads.length === index + 1 && !this.threadFuncMaxDepthMap.has(`${thread.upid}-${thread.tid}`); //@ts-ignore + let flag = threads.length === index + 1 && !this.threadFuncMaxDepthMap.has(`${thread.upid}-${thread.tid}`); + //@ts-ignore processRow.sortRenderServiceData(threadRow, threadRow, threadRowArr, flag); } else { if (threadRow.rowId === threadRow.rowParentId) { @@ -1109,7 +1124,8 @@ export class SpProcessChart { //@ts-ignore let max = this.threadFuncMaxDepthMap.get(`${thread.upid}-${thread.tid}`) || 1; let maxHeight = max * 18 + 6; - let funcRow = TraceRow.skeleton(this.traceId); //@ts-ignore + let funcRow = TraceRow.skeleton(this.traceId); + //@ts-ignore funcRow.rowId = `${thread.tid}`; funcRow.rowType = TraceRow.ROW_TYPE_FUNC; funcRow.enableCollapseChart(FOLD_HEIGHT, this.trace); //允许折叠泳道图 @@ -1118,13 +1134,16 @@ export class SpProcessChart { funcRow.rowHidden = !processRow.expansion; funcRow.checkType = threadRow.checkType; funcRow.style.width = '100%'; - funcRow.style.height = `${maxHeight}px`; //@ts-ignore - funcRow.name = `${thread.threadName || 'Thread'} ${thread.tid}`; //@ts-ignore + funcRow.style.height = `${maxHeight}px`; + //@ts-ignore + funcRow.name = `${thread.threadName || 'Thread'} ${thread.tid}`; + //@ts-ignore funcRow.namePrefix = `${thread.threadName || 'Thread'}`; funcRow.setAttribute('children', ''); funcRow.supplierFrame = async (): Promise> => { //@ts-ignore - const rs = await funcDataSender(thread.tid || 0, thread.upid || 0, funcRow, this.traceId); //@ts-ignore + const rs = await funcDataSender(thread.tid || 0, thread.upid || 0, funcRow, this.traceId); + //@ts-ignore return this.funDataSenderCallback(rs, funcRow, thread); }; funcRow.favoriteChangeHandler = this.trace.favoriteChangeHandler; @@ -1143,7 +1162,8 @@ export class SpProcessChart { this.trace ); //@ts-ignore if (process.processName === 'render_service') { - let flag = threads.length === index + 1; //@ts-ignore + let flag = threads.length === index + 1; + //@ts-ignore processRow.sortRenderServiceData(funcRow, threadRow, threadRowArr, flag); } else { processRow.addChildTraceRowAfter(funcRow, threadRow); @@ -1195,13 +1215,15 @@ export class SpProcessChart { //@ts-ignore let processMem = this.processMem.filter((mem) => mem.pid === it.pid); processMem.forEach((mem) => { - let row = TraceRow.skeleton(); //@ts-ignore + let row = TraceRow.skeleton(); + //@ts-ignore row.rowId = `${mem.trackId}`; row.rowType = TraceRow.ROW_TYPE_MEM; row.rowParentId = `${it.pid}`; row.rowHidden = !processRow.expansion; row.style.height = '40px'; - row.style.width = '100%'; //@ts-ignore + row.style.width = '100%'; + //@ts-ignore row.name = `${mem.trackName}`; row.setAttribute('children', ''); row.favoriteChangeHandler = this.trace.favoriteChangeHandler; @@ -1219,7 +1241,8 @@ export class SpProcessChart { row.findHoverStruct = (): void => { ProcessMemStruct.hoverProcessMemStruct = row.getHoverStruct(false); }; - row.supplierFrame = (): Promise> => //@ts-ignore + row.supplierFrame = (): Promise> => + //@ts-ignore processMemDataSender(mem.trackId, row).then((resultProcess) => { //@ts-ignore let maxValue = this.filterIdMaxValue.get(mem.trackId) || 0; @@ -1336,7 +1359,8 @@ export class SpProcessChart { // @ts-ignore depthArray[currentDepth] = asyncFunctions[index]; // @ts-ignore - this.toAsyncFuncCache(asyncFunctions[index], `${asyncFunctions[i].funName}-${it.pid}`);//处理缓存的异步trace数据缺失的字段 + //处理缓存的异步trace数据缺失的字段 + this.toAsyncFuncCache(asyncFunctions[index], `${asyncFunctions[i].funName}-${it.pid}`); }); } //@ts-ignore @@ -1433,13 +1457,15 @@ export class SpProcessChart { // @ts-ignore if (val.et < param.startTs) { flag = true; - val.et = itemEndTime;//更新endts + //更新endts + val.et = itemEndTime; // @ts-ignore param.depth = Number(key); break; } } - if (!flag) {//depth增加 + if (!flag) { + //depth增加 maxDepth++; mapDepth.set(`${maxDepth}`, { et: itemEndTime }); // @ts-ignore @@ -1517,51 +1543,68 @@ export class SpProcessChart { processRow.addChildTraceRow(funcRow); } - addAsyncCatFunction(it: { pid: number; processName: string | null }, processRow: TraceRow): void {//@ts-ignore + addAsyncCatFunction(it: { pid: number; processName: string | null }, processRow: TraceRow): void { + //@ts-ignore let asyncFuncCatList = this.processAsyncFuncCatMap[it.pid] || []; - let asyncFuncGroup: unknown = Utils.groupBy(asyncFuncCatList, 'threadName'); //@ts-ignore - Reflect.ownKeys(asyncFuncGroup).map((key: unknown) => { //@ts-ignore + let asyncFuncGroup: unknown = Utils.groupBy(asyncFuncCatList, 'threadName'); + //@ts-ignore + Reflect.ownKeys(asyncFuncGroup).map((key: unknown) => { + //@ts-ignore let asyncFunctions: Array = asyncFuncGroup[key]; if (asyncFunctions.length > 0) { - let isIntersect = (a: unknown, b: unknown): boolean => //@ts-ignore + let isIntersect = (a: unknown, b: unknown): boolean => + //@ts-ignore Math.max(a.startTs + a.dur, b.startTs + b.dur) - Math.min(a.startTs, b.startTs) < a.dur + b.dur; let depthArray: unknown = []; - asyncFunctions.forEach((it, i) => {//@ts-ignore - if (it.dur === -1 || it.dur === null || it.dur === undefined) {//@ts-ignore - it.dur = (TraceRow.range?.endNS || 0) - it.startTs;//@ts-ignore - it.flag = 'Did not end';//@ts-ignore + asyncFunctions.forEach((it, i) => { + //@ts-ignore + if (it.dur === -1 || it.dur === null || it.dur === undefined) { + //@ts-ignore + it.dur = (TraceRow.range?.endNS || 0) - it.startTs; + //@ts-ignore + it.flag = 'Did not end'; + //@ts-ignore it.nofinish = true; } let currentDepth = 0; - let index = i;//@ts-ignore + let index = i; + //@ts-ignore while (depthArray[currentDepth] !== undefined && isIntersect(depthArray[currentDepth], asyncFunctions[index])) { currentDepth++; }//@ts-ignore - asyncFunctions[index].depth = currentDepth;//@ts-ignore - depthArray[currentDepth] = asyncFunctions[index];//@ts-ignore + asyncFunctions[index].depth = currentDepth; + //@ts-ignore + depthArray[currentDepth] = asyncFunctions[index]; + //@ts-ignore this.toAsyncFuncCache(asyncFunctions[index], `${asyncFunctions[0].threadName}`); }); const maxHeight = this.calMaxHeight(asyncFunctions); - let funcRow = TraceRow.skeleton();//@ts-ignore - funcRow.rowId = `${asyncFunctions[0].threadName}`;//@ts-ignore + let funcRow = TraceRow.skeleton(); + //@ts-ignore + funcRow.rowId = `${asyncFunctions[0].threadName}`; + //@ts-ignore funcRow.asyncFuncThreadName = asyncFunctions[0].threadName; funcRow.asyncFuncNamePID = it.pid; funcRow.rowType = TraceRow.ROW_TYPE_FUNC; - funcRow.enableCollapseChart(FOLD_HEIGHT, this.trace); //允许折叠泳道图 + funcRow.enableCollapseChart(FOLD_HEIGHT, this.trace); + //允许折叠泳道图 funcRow.rowParentId = `${it.pid}`; funcRow.rowHidden = !processRow.expansion; funcRow.style.width = '100%'; funcRow.style.height = `${maxHeight}px`; - funcRow.setAttribute('height', `${maxHeight}`);//@ts-ignore + funcRow.setAttribute('height', `${maxHeight}`); + //@ts-ignore funcRow.name = `${asyncFunctions[0].threadName}`; funcRow.setAttribute('children', ''); funcRow.findHoverStruct = (): void => { FuncStruct.hoverFuncStruct = funcRow.getHoverStruct(); - }; //@ts-ignore + }; + //@ts-ignore funcRow.supplier = (): Promise => new Promise((resolve) => resolve(asyncFunctions)); funcRow.favoriteChangeHandler = this.trace.favoriteChangeHandler; funcRow.selectChangeHandler = this.trace.selectChangeHandler; - funcRow.onThreadHandler = rowThreadHandler('func', 'context', { //@ts-ignore + funcRow.onThreadHandler = rowThreadHandler('func', 'context', { + //@ts-ignore type: `func-${asyncFunctions[0].threadName}-${it.pid}`, }, funcRow, this.trace); processRow.addChildTraceRow(funcRow); diff --git a/ide/src/trace/component/trace/sheet/cpu/TabPaneBoxChild.ts b/ide/src/trace/component/trace/sheet/cpu/TabPaneBoxChild.ts index 9d4617ef..c5f3477c 100644 --- a/ide/src/trace/component/trace/sheet/cpu/TabPaneBoxChild.ts +++ b/ide/src/trace/component/trace/sheet/cpu/TabPaneBoxChild.ts @@ -72,19 +72,27 @@ export class TabPaneBoxChild extends BaseElement { this.boxChildTbl!.loading = true; sliceChildBoxSender('state-box', val.leftNs, val.rightNs, val.threadId!, val.processId!, val.cpus, val.state, val.traceId!).then((result: unknown): void => { - this.boxChildTbl!.loading = false; // @ts-ignore - if (result.length !== null && result.length > 0) { // @ts-ignore + this.boxChildTbl!.loading = false; + // @ts-ignore + if (result.length !== null && result.length > 0) { + // @ts-ignore result.map((e: unknown) => { //获取优先级数据 // @ts-ignore let prioObj = Utils.getInstance().getSchedSliceMap().get(`${e.id}-${e.startTime}`); //thread statesTab页 dur截取的问题 与thread states保持一致 - if (val.currentId === 'box-thread-states') { // @ts-ignore - if (e.startTime < val.leftNs && (e.startTime + e.dur) < val.rightNs) { // @ts-ignore - e.dur = (e.startTime + e.dur) - val.leftNs; // @ts-ignore - } else if ((e.startTime + e.dur) > val.rightNs && e.startTime > val.leftNs) { // @ts-ignore - e.dur = val.rightNs - e.startTime; // @ts-ignore - } else if (e.startTime < val.leftNs && (e.startTime + e.dur) > val.rightNs) { // @ts-ignore + if (val.currentId === 'box-thread-states') { + // @ts-ignore + if (e.startTime < val.leftNs && (e.startTime + e.dur) < val.rightNs) { + // @ts-ignore + e.dur = (e.startTime + e.dur) - val.leftNs; + // @ts-ignore + } else if ((e.startTime + e.dur) > val.rightNs && e.startTime > val.leftNs) { + // @ts-ignore + e.dur = val.rightNs - e.startTime; + // @ts-ignore + } else if (e.startTime < val.leftNs && (e.startTime + e.dur) > val.rightNs) { + // @ts-ignore e.dur = val.rightNs - val.leftNs; } } @@ -92,17 +100,27 @@ export class TabPaneBoxChild extends BaseElement { // @ts-ignore e.sTime = Utils.getTimeString(e.startTime); // @ts-ignore - e.absoluteTime = ((window as unknown).recordStartNS + e.startTime) / 1000000000; // @ts-ignore - e.state = Utils.getEndState(e.state)!; // @ts-ignore - e.duration = e.dur / 1000000; // @ts-ignore - e.prior = prioObj ? prioObj.priority : '-'; // @ts-ignore - e.core = e.cpu === undefined || e.cpu === null ? '-' : `CPU${e.cpu}`; // @ts-ignore - let processInfo: string | undefined = Utils.getInstance().getProcessMap().get(e.pid); // @ts-ignore - e.processName = `${processInfo === undefined || processInfo === null ? 'process' : processInfo}(${e.pid})`; // @ts-ignore - let threadInfo: string | undefined = Utils.getInstance().getThreadMap().get(e.tid); // @ts-ignore - e.threadName = `${threadInfo === undefined || threadInfo === null ? 'thread' : threadInfo}(${e.tid})`; // @ts-ignore + e.absoluteTime = ((window as unknown).recordStartNS + e.startTime) / 1000000000; + // @ts-ignore + e.state = Utils.getEndState(e.state)!; + // @ts-ignore + e.duration = e.dur / 1000000; + // @ts-ignore + e.prior = prioObj ? prioObj.priority : '-'; + // @ts-ignore + e.core = e.cpu === undefined || e.cpu === null ? '-' : `CPU${e.cpu}`; + // @ts-ignore + let processInfo: string | undefined = Utils.getInstance().getProcessMap().get(e.pid); + // @ts-ignore + e.processName = `${processInfo === undefined || processInfo === null ? 'process' : processInfo}(${e.pid})`; + // @ts-ignore + let threadInfo: string | undefined = Utils.getInstance().getThreadMap().get(e.tid); + // @ts-ignore + e.threadName = `${threadInfo === undefined || threadInfo === null ? 'thread' : threadInfo}(${e.tid})`; + // @ts-ignore e.note = '-'; - }); // @ts-ignore + }); + // @ts-ignore this.boxChildSource = result; if (this.boxChildTbl) { // @ts-ignore @@ -162,8 +180,10 @@ export class TabPaneBoxChild extends BaseElement { function compare(property, sort, type) { return function (boxChildLeftData: SelectionData, boxChildRightData: SelectionData): number { if (type === 'number') { - return sort === 2 // @ts-ignore - ? parseFloat(boxChildRightData[property]) - parseFloat(boxChildLeftData[property]) // @ts-ignore + return sort === 2 + // @ts-ignore + ? parseFloat(boxChildRightData[property]) - parseFloat(boxChildLeftData[property]) + // @ts-ignore : parseFloat(boxChildLeftData[property]) - parseFloat(boxChildRightData[property]); } else { // @ts-ignore diff --git a/ide/src/trace/database/data-trafic/utils/DataFilter.ts b/ide/src/trace/database/data-trafic/utils/DataFilter.ts index 0aebfedd..10de03b5 100644 --- a/ide/src/trace/database/data-trafic/utils/DataFilter.ts +++ b/ide/src/trace/database/data-trafic/utils/DataFilter.ts @@ -60,7 +60,8 @@ export function filterDataByLayer( let c = it[i][startKey] - it[i - 1][startKey] - it[i - 1][durKey]; if (c < pns && sum < pns) { //@ts-ignore - sum += c + it[i - 1][durKey]; //@ts-ignore + sum += c + it[i - 1][durKey]; + //@ts-ignore it[i].v = false; } else { //@ts-ignore @@ -69,7 +70,8 @@ export function filterDataByLayer( } } } - } //@ts-ignore + } + //@ts-ignore res.push(...it.filter((it) => it.v)); } }); @@ -96,7 +98,8 @@ export function filterDataByGroup( return it; }); let group = groupBy(arr, 'px'); - let res: Set = new Set(); //@ts-ignore + let res: Set = new Set(); + //@ts-ignore Reflect.ownKeys(group).map((key: unknown): void => { //@ts-ignore let arr = group[key] as unknown[]; @@ -141,14 +144,16 @@ function filterDataByGroupWithoutValue( // 获取当前数据的像素值 let px: number; //@ts-ignore - if (isDmaFence && list[i][durKey] === 0) { //如果是dmafence泳道,则不进行处理 + if (isDmaFence && list[i][durKey] === 0) { + //如果是dmafence泳道,则不进行处理 //@ts-ignore px = list[i][startKey] / ((endNS - startNS) / width); } else { //@ts-ignore px = Math.floor(list[i][startKey] / ((endNS - startNS) / width)); } //@ts-ignore - list[i].px = px; //@ts-ignore + list[i].px = px; + //@ts-ignore if (flag === px && arr[arr.length - 1] && list[i][durKey] > arr[arr.length - 1][durKey]) { arr[arr.length - 1] = list[i]; } @@ -176,12 +181,14 @@ export function filterDataByGroupLayer( it.px = Math.floor(it[startKey] / ((endNS - startNS) / width) + it[layerKey] * width); //设置临时变量durTmp 用于参与计算,分组后有dur为-1的数据按最长宽度显示 //@ts-ignore - it.durTmp = //@ts-ignore + it.durTmp = + //@ts-ignore it[durKey] === -1 || it[durKey] === null || it[durKey] === undefined ? endNS - it[startKey] : it[durKey]; return it; }); let group = groupBy(arr, 'px'); - let res: unknown[] = []; //@ts-ignore + let res: unknown[] = []; + //@ts-ignore Reflect.ownKeys(group).map((key: unknown) => { //@ts-ignore let childArray = (group[key] as unknown[]).reduce((p, c) => (p.durTmp > c.durTmp ? p : c)); @@ -209,7 +216,8 @@ function findRange( ): Array { return fullData.filter( ( - it //@ts-ignore + it + //@ts-ignore ) => it[condition.startKey] + it[condition.durKey] >= condition.startNS && it[condition.startKey] <= condition.endNS ); } -- Gitee From 7ce9cec8683baa3195b33e7ddc9d7b049ee7857f Mon Sep 17 00:00:00 2001 From: liufei Date: Mon, 29 Jul 2024 15:14:26 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=91=8A=E8=AD=A65?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: liufei --- ide/src/base-ui/utils/CSVFormater.ts | 4 +- ide/src/trace/SpApplication.ts | 46 +++++++++---------- ide/src/trace/bean/BoxSelection.ts | 2 +- ide/src/trace/component/SpQuerySQL.ts | 18 ++++---- .../component/trace/TimerShaftElement.ts | 7 +-- .../trace/component/trace/base/TraceRow.ts | 2 - .../trace/sheet/TabPaneCurrentSelection.ts | 8 +++- .../file-system/TabPaneIOTierStatistics.ts | 1 - .../component/trace/timer-shaft/SportRuler.ts | 24 +++++----- .../logic-worker/ProcedureLogicWorkerPerf.ts | 8 +++- 10 files changed, 64 insertions(+), 56 deletions(-) diff --git a/ide/src/base-ui/utils/CSVFormater.ts b/ide/src/base-ui/utils/CSVFormater.ts index 3d2092ca..ccdff36e 100644 --- a/ide/src/base-ui/utils/CSVFormater.ts +++ b/ide/src/base-ui/utils/CSVFormater.ts @@ -130,14 +130,16 @@ export class JSONToCSV { } static getDownloadUrl(csvData: unknown): string | undefined { + let result; // @ts-ignore if (window.Blob && window.URL && (window.URL as unknown).createObjectURL) { - return URL.createObjectURL( + result = URL.createObjectURL( new Blob(['\uFEFF' + csvData], { type: 'text/csv', }) ); } + return result; } static treeDepth(depth: number): string { diff --git a/ide/src/trace/SpApplication.ts b/ide/src/trace/SpApplication.ts index 6bf8f51f..188fedae 100644 --- a/ide/src/trace/SpApplication.ts +++ b/ide/src/trace/SpApplication.ts @@ -412,7 +412,6 @@ export class SpApplication extends BaseElement { allFileSize: number ): Promise => { info('reading long trace file ', file.name); - const self = this; return new Promise((resolve, reject) => { let fr = new FileReader(); let message = { fileType: '', startIndex: 0, endIndex: 0, size: 0 }; @@ -422,12 +421,12 @@ export class SpApplication extends BaseElement { let offset = 0; let sliceLen = 0; let index = 1; - fr.onload = function (): void { + fr.onload = (): void => { let data = fr.result as ArrayBuffer; LongTraceDBUtils.getInstance() .addLongTableData(data, fileType, timStamp, pageNumber, index, offset, sliceLen) .then(() => { - self.longTraceFileReadMessagePush(index, isNormalType, pageNumber, offset, sliceLen, fileType, data); + this.longTraceFileReadMessagePush(index, isNormalType, pageNumber, offset, sliceLen, fileType, data); offset += sliceLen; if (offset < file.size) { index++; @@ -435,11 +434,11 @@ export class SpApplication extends BaseElement { continueReading(); }); }; - function continueReading(): void { + const continueReading = (): void => { if (offset >= file.size) { message.endIndex = index; message.size = file.size; - self.longTraceFileReadMessageHandler(pageNumber, message); + this.longTraceFileReadMessageHandler(pageNumber, message); resolve(true); return; } @@ -451,7 +450,7 @@ export class SpApplication extends BaseElement { let slice = file.slice(offset, offset + sliceLen); readSize += slice.size; let percentValue = ((readSize * 100) / allFileSize).toFixed(2); - self.litSearch!.setPercent('Read in file: ', Number(percentValue)); + this.litSearch!.setPercent('Read in file: ', Number(percentValue)); fr.readAsArrayBuffer(slice); } continueReading(); @@ -964,7 +963,6 @@ export class SpApplication extends BaseElement { } private handleSqliteMode(ev: unknown, showFileName: string, fileSize: number, fileName: string): void { - const self = this; let fileSizeStr = (fileSize / 1048576).toFixed(1); postLog(fileName, fileSizeStr); document.title = `${showFileName} (${fileSizeStr}M)`; @@ -972,40 +970,40 @@ export class SpApplication extends BaseElement { threadPool.init('sqlite').then((res) => { let reader = new FileReader(); reader.readAsArrayBuffer(ev as Blob); - reader.onloadend = function (ev): void { + reader.onloadend = (ev): void => { SpApplication.loadingProgress = 0; SpApplication.progressStep = 3; - self.spSystemTrace!.loadDatabaseArrayBuffer( - this.result as ArrayBuffer, + this.spSystemTrace!.loadDatabaseArrayBuffer( + reader.result as ArrayBuffer, '', (command: string, _: number) => { - self.setProgress(command); + this.setProgress(command); }, false, () => { - self.mainMenu!.menus!.splice(2, self.mainMenu!.menus!.length > 2 ? 1 : 0, { + this.mainMenu!.menus!.splice(2, this.mainMenu!.menus!.length > 2 ? 1 : 0, { collapsed: false, title: 'Current Trace', second: false, icon: 'caret-down', describe: 'Actions on the current trace', - children: self.getTraceOptionMenus(showFileName, fileSizeStr, fileName, true, false), + children: this.getTraceOptionMenus(showFileName, fileSizeStr, fileName, true, false), }); - self.mainMenu!.menus!.splice(3, 1, { + this.mainMenu!.menus!.splice(3, 1, { collapsed: false, title: 'Support', second: false, icon: 'caret-down', describe: 'Support', - children: self.getTraceSupportMenus(), + children: this.getTraceSupportMenus(), }); - self.litSearch!.setPercent('', 101); - self.chartFilter!.setAttribute('mode', ''); - self.progressEL!.loading = false; - self.freshMenuDisable(false); - self.spInfoAndStats!.initInfoAndStatsData(); - self.cutTraceFile!.style.display = 'none'; - self.headerDiv!.style.pointerEvents = 'auto'; + this.litSearch!.setPercent('', 101); + this.chartFilter!.setAttribute('mode', ''); + this.progressEL!.loading = false; + this.freshMenuDisable(false); + this.spInfoAndStats!.initInfoAndStatsData(); + this.cutTraceFile!.style.display = 'none'; + this.headerDiv!.style.pointerEvents = 'auto'; } ); }; @@ -2382,7 +2380,7 @@ export class SpApplication extends BaseElement { a.download = fileName; a.click(); this.itemIconLoading(mainMenu, 'Current Trace', 'Download Database', true); - let timer = setInterval(()=> { + let timer = setInterval(() => { this.itemIconLoading(mainMenu, 'Current Trace', 'Download Database', false); clearInterval(timer); }, 4000); @@ -2410,7 +2408,7 @@ export class SpApplication extends BaseElement { a.click(); window.URL.revokeObjectURL(a.href); this.itemIconLoading(mainMenu, 'Current Trace', 'Download File', true); - let timer = setInterval(()=> { + let timer = setInterval(() => { this.itemIconLoading(mainMenu, 'Current Trace', 'Download File', false); clearInterval(timer); }, 4000); diff --git a/ide/src/trace/bean/BoxSelection.ts b/ide/src/trace/bean/BoxSelection.ts index 8ba1149e..d8b22b6d 100644 --- a/ide/src/trace/bean/BoxSelection.ts +++ b/ide/src/trace/bean/BoxSelection.ts @@ -743,8 +743,8 @@ export class SelectionParam { setSelectState(item, frameSelectDataIdArr); // @ts-ignore item.isSelect = true; - return item; } + return item.depth === 0; }); this.jsCpuProfilerData = jsCpuProfilerData; } diff --git a/ide/src/trace/component/SpQuerySQL.ts b/ide/src/trace/component/SpQuerySQL.ts index b888b117..af20e56f 100644 --- a/ide/src/trace/component/SpQuerySQL.ts +++ b/ide/src/trace/component/SpQuerySQL.ts @@ -191,25 +191,25 @@ export class SpQuerySQL extends BaseElement { } private setPageNationTableEl(): void { - let that = this; let timeOutTs: number = 200; let indexNumber = 1; setTimeout(() => { let total = this.statDataArray.length; if (total > maxPageSize) { - that.pagination!.style.display = 'block'; - that.pagination!.style.opacity = '1'; - new PageNation(this.pagination, { + this.pagination!.style.display = 'block'; + this.pagination!.style.opacity = '1'; + const option = { current: 1, total: total, pageSize: pageSize, - change(num: number): void { - that.sliceData = that.statDataArray!.slice((num - indexNumber) * pageSize, num * pageSize); - that.queryTableEl!.recycleDataSource = that.sliceData; + change: (num: number): void => { + this.sliceData = this.statDataArray!.slice((num - indexNumber) * pageSize, num * pageSize); + this.queryTableEl!.recycleDataSource = this.sliceData; }, - }); + }; + new PageNation(this.pagination, option); } else { - that.pagination!.style.opacity = '0'; + this.pagination!.style.opacity = '0'; this.queryTableEl!.recycleDataSource = this.statDataArray; } this.freshTableHeadResizeStyle(); diff --git a/ide/src/trace/component/trace/TimerShaftElement.ts b/ide/src/trace/component/trace/TimerShaftElement.ts index 9317c60c..ec10bb06 100644 --- a/ide/src/trace/component/trace/TimerShaftElement.ts +++ b/ide/src/trace/component/trace/TimerShaftElement.ts @@ -33,15 +33,16 @@ export function randomRgbColor(): string { let r = Math.floor(Math.random() * 255); let g = Math.floor(Math.random() * 255); let b = Math.floor(Math.random() * 255); + let color = ''; if (r * 0.299 + g * 0.587 + b * 0.114 < 192) { let r16 = r.toString(16).length === 1 && r.toString(16) <= 'f' ? 0 + r.toString(16) : r.toString(16); let g16 = g.toString(16).length === 1 && g.toString(16) <= 'f' ? 0 + g.toString(16) : g.toString(16); let b16 = b.toString(16).length === 1 && b.toString(16) <= 'f' ? 0 + b.toString(16) : b.toString(16); - let color = '#' + r16 + g16 + b16; - return color; + color = '#' + r16 + g16 + b16; } else { randomRgbColor(); } + return color; } export function ns2s(ns: number): string { @@ -508,7 +509,7 @@ export class TimerShaftElement extends BaseElement { this._rangeRuler?.keyUp(ev); }; - disconnectedCallback(): void {} + disconnectedCallback(): void { } firstRender = true; diff --git a/ide/src/trace/component/trace/base/TraceRow.ts b/ide/src/trace/component/trace/base/TraceRow.ts index 42060004..db2c3a27 100644 --- a/ide/src/trace/component/trace/base/TraceRow.ts +++ b/ide/src/trace/component/trace/base/TraceRow.ts @@ -599,8 +599,6 @@ export class TraceRow extends HTMLElement { (re) => re.frame && isFrameContainPoint(re.frame, this.hoverX, this.hoverY, strict, offset) ); } - } else { - item = undefined; } return item; } diff --git a/ide/src/trace/component/trace/sheet/TabPaneCurrentSelection.ts b/ide/src/trace/component/trace/sheet/TabPaneCurrentSelection.ts index 73a9ff54..347f96f4 100644 --- a/ide/src/trace/component/trace/sheet/TabPaneCurrentSelection.ts +++ b/ide/src/trace/component/trace/sheet/TabPaneCurrentSelection.ts @@ -365,9 +365,11 @@ export class TabPaneCurrentSelection extends BaseElement { let FunDetailList: Array = new Array(); if (this.funcDetailMap.size === 0) { await caches.match('/funDetail').then((res) => { + let result: Promise | undefined; if (res) { - return res!.text(); + result = res!.text(); } + return result; }).then((res) => { if (res) { let funcDetail = JSON.parse(res); @@ -1898,10 +1900,12 @@ export class TabPaneCurrentSelection extends BaseElement { */ async queryThreadWakeUpFromData(itid: number, startTime: number, dur: number): Promise { let wakeUps = await queryThreadWakeUpFrom(itid, startTime + Utils.getInstance().getRecordStartNS()); + let item; // @ts-ignore if (wakeUps !== undefined && wakeUps.length > 0) { - return wakeUps[0]; + item = wakeUps[0]; } + return item; } /** diff --git a/ide/src/trace/component/trace/sheet/file-system/TabPaneIOTierStatistics.ts b/ide/src/trace/component/trace/sheet/file-system/TabPaneIOTierStatistics.ts index 950a741a..9d107599 100644 --- a/ide/src/trace/component/trace/sheet/file-system/TabPaneIOTierStatistics.ts +++ b/ide/src/trace/component/trace/sheet/file-system/TabPaneIOTierStatistics.ts @@ -339,7 +339,6 @@ export class TabPaneIOTierStatistics extends BaseElement { this.ioTierStatisticsSortType === 2 ? // @ts-ignore ioTierStatItemB.node[key] - ioTierStatItemA.node[key] : 0; - }); // @ts-ignore item.children.forEach((ioTierStatItem: unknown): void => { // @ts-ignore diff --git a/ide/src/trace/component/trace/timer-shaft/SportRuler.ts b/ide/src/trace/component/trace/timer-shaft/SportRuler.ts index 038213e0..188b3abd 100644 --- a/ide/src/trace/component/trace/timer-shaft/SportRuler.ts +++ b/ide/src/trace/component/trace/timer-shaft/SportRuler.ts @@ -90,10 +90,10 @@ export class SportRuler extends Graph { endTime: number | null | undefined; color: string | null; } | null = { - startTime: null, - endTime: null, - color: null, - }; + startTime: null, + endTime: null, + color: null, + }; private timerShaftEL: TimerShaftElement | undefined | null; private timeArray: Array = []; private countArray: Array = []; @@ -332,8 +332,8 @@ export class SportRuler extends Graph { TraceRow.rangeSelectObject!.startX! + (rangeSelectWidth / section) * (i - 1) + (rangeSelectWidth / section - countTextWidth) / 2; - this.context2D.fillStyle = `#f00`; - this.context2D.font = `12px sans-serif`; + this.context2D.fillStyle = `#f00`; + this.context2D.font = `12px sans-serif`; this.context2D.fillText(String(countArr[i - 1]), textY, this.frame.y + 22 + 12); } @@ -377,6 +377,7 @@ export class SportRuler extends Graph { } drawTriangle(time: number, type: string): unknown { + let num; if (time !== null && typeof time !== undefined) { let i = this.flagList.findIndex((it) => it.time === time); if (type === 'triangle') { @@ -404,7 +405,7 @@ export class SportRuler extends Graph { this.flagList[triangle].type = ''; this.draw(); this.flagChangeHandler('1'); - return this.flagList[triangle].time; + num = this.flagList[triangle].time; } } } else if (type === 'inverted') { @@ -413,14 +414,15 @@ export class SportRuler extends Graph { this.draw(); this.flagChangeHandler('2'); } + return num; } flagChangeHandler(from?: string): void { this.notifyHandler && - this.notifyHandler( - !this.hoverFlag.hidden ? this.hoverFlag : null, - this.flagList.find((it) => it.selected) || null - ); + this.notifyHandler( + !this.hoverFlag.hidden ? this.hoverFlag : null, + this.flagList.find((it) => it.selected) || null + ); } removeTriangle(type: string): void { diff --git a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts index 0127df75..e3279c73 100644 --- a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts +++ b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts @@ -976,6 +976,7 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { } } private handleDataByFuncName(funcName: string, funcArgs: unknown[]): unknown { + let result; switch (funcName) { case 'getCallChainsBySampleIds': this.freshPerfCallchains(this.samplesData, funcArgs[0] as boolean); @@ -1024,13 +1025,16 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { this.isPerfBottomUp = true; break; case 'combineAnalysisCallChain': - return this.combineCallChainForAnalysis(); + result = this.combineCallChainForAnalysis(); + break; case 'getBottomUp': - return this.getBottomUp(); + result = this.getBottomUp(); + break; case 'kernelCombination': this.kernelCombination(); break; } + return result; } combineCallChainForAnalysis(obj?: unknown): PerfAnalysisSample[] { -- Gitee