From 7a673f3b16ff65d8feaf875f2dd78e8bec0be4ea Mon Sep 17 00:00:00 2001 From: LiYuxi Date: Wed, 10 Jul 2024 14:35:58 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix=20=E7=81=AB=E7=84=B0=E5=9B=BE=E5=86=85?= =?UTF-8?q?=E6=A0=B8=E5=87=BD=E6=95=B0=E7=8B=AC=E7=AB=8B=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: LiYuxi --- .../trace/sheet/cpu/TabPaneCpuByThread.ts | 2 + .../trace/sheet/hiperf/TabPerfProfile.ts | 20 +++------ .../logic-worker/ProcedureLogicWorkerPerf.ts | 45 +++++-------------- 3 files changed, 17 insertions(+), 50 deletions(-) diff --git a/ide/src/trace/component/trace/sheet/cpu/TabPaneCpuByThread.ts b/ide/src/trace/component/trace/sheet/cpu/TabPaneCpuByThread.ts index 69aa8ce5e..4f68932bf 100644 --- a/ide/src/trace/component/trace/sheet/cpu/TabPaneCpuByThread.ts +++ b/ide/src/trace/component/trace/sheet/cpu/TabPaneCpuByThread.ts @@ -331,7 +331,9 @@ export class TabPaneCpuByThread extends BaseElement { totalWallDuration += obj.wallDuration; totalOccurrences += obj.occurrences; if (obj.tid !== '[NULL]' && obj.pid !== '[NULL]') { + // @ts-ignore let process = Utils.getInstance().getProcessMap(cpuByThreadValue.traceId).get(obj.pid); + // @ts-ignore let thread = Utils.getInstance().getThreadMap(cpuByThreadValue.traceId).get(obj.tid); obj.thread = thread == null || thread.length === 0 ? '[NULL]' : thread; obj.process = process == null || process.length === 0 ? '[NULL]' : process; diff --git a/ide/src/trace/component/trace/sheet/hiperf/TabPerfProfile.ts b/ide/src/trace/component/trace/sheet/hiperf/TabPerfProfile.ts index 6b2d05e0f..9d14f2098 100644 --- a/ide/src/trace/component/trace/sheet/hiperf/TabPerfProfile.ts +++ b/ide/src/trace/component/trace/sheet/hiperf/TabPerfProfile.ts @@ -663,6 +663,10 @@ export class TabpanePerfProfile extends BaseElement { funcName: 'hideThreadState', funcArgs: [isHideThreadState], }); + perfProfileArgs.push({ + funcName: 'onlyKernel', + funcArgs: [isOnlyKernel], + }) perfProfileArgs.push({ funcName: 'getCallChainsBySampleIds', funcArgs: [isTopDown], @@ -674,13 +678,6 @@ export class TabpanePerfProfile extends BaseElement { funcArgs: [], }); } // @ts-ignore - if (isOnlyKernel) { - // 用于筛选内核函数 - perfProfileArgs.push({ - funcName: 'onlyKernel', - funcArgs: [], - }); - } // @ts-ignore if (filterData.callTreeConstraints.checked) { perfProfileArgs.push({ funcName: 'hideNumMaxAndMin', // @ts-ignore @@ -695,14 +692,7 @@ export class TabpanePerfProfile extends BaseElement { funcName: 'resetAllNode', funcArgs: [], }); - if (isOnlyKernel) { - // 用于二次合并同级同名内核函数 - // 间隔其他筛选类操作 不可以和上面另一个if合并 - perfProfileArgs.push({ - funcName: 'kernelCombination', - funcArgs: [], - }); - } // @ts-ignore + // @ts-ignore this.refreshAllNodeExtend(perfProfileArgs); } diff --git a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts index 39fcf1872..a99a86e5b 100644 --- a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts +++ b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts @@ -58,6 +58,7 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { isPerfBottomUp: boolean = false; isHideThread: boolean = false; isHideThreadState: boolean = false; + isOnlyKernel: boolean = false; private lib: object | undefined; private symbol: object | undefined; private dataCache = DataCache.getInstance(); @@ -256,9 +257,7 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { (item: { funcName: string }): boolean => item.funcName === 'hideThreadState' ); //@ts-ignore - let onlyKernelFilter = params.filter( - (item: { funcName: string }): boolean => item.funcName === 'onlyKernel' - ); + let onlyKernelFilter = [true] if (this.lib) { if ( callChainsFilter.length > 0 || @@ -472,6 +471,13 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { if (!this.isHideThread) { list.unshift(threadCallChain); } + + if (this.isOnlyKernel) { + const flag = "[kernel.kallsyms]" + const newList = list.filter(i => i.fileName === flag || i.path === flag) + list.splice(0) + list.push(...newList) + } } private freshPerfCallchains(perfCountSamples: PerfCountSample[], isTopDown: boolean): void { @@ -787,34 +793,6 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { }); } - kernelCombination(): void { - function mergeChildren(item: PerfCallChainMerageData) { - if (item.children.length <= 0) { - return - } - item.children = item.children.reduce((total: PerfCallChainMerageData[], pfcall: PerfCallChainMerageData): PerfCallChainMerageData[] => { - for (const prev of total) { - if (pfcall.symbol == prev.symbol) { - prev.children.push(...pfcall.children) - prev.total += pfcall.total - prev.count += pfcall.count - prev.totalEvent += pfcall.totalEvent - prev.eventCount += pfcall.eventCount - return total - } - } - total.push(pfcall) - return total - }, [] as PerfCallChainMerageData[]) - for (const child of item.children) { - mergeChildren(child) - } - } - this.allProcess.forEach((item: PerfCallChainMerageData): void => { - mergeChildren(item) - }) - } - findSearchNode(sampleArray: PerfCallChainMerageData[], search: string, parentSearch: boolean): void { search = search.toLocaleLowerCase(); sampleArray.forEach((sample: PerfCallChainMerageData): void => { @@ -914,7 +892,7 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { this.isHideThreadState = funcArgs[0] as boolean; break; case 'onlyKernel': - this.onlyKernel(); + this.isOnlyKernel = funcArgs[0] as boolean; break; case 'hideNumMaxAndMin': this.hideNumMaxAndMin(funcArgs[0] as number, funcArgs[1] as string); @@ -948,9 +926,6 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { return this.combineCallChainForAnalysis(); case 'getBottomUp': return this.getBottomUp(); - case 'kernelCombination': - this.kernelCombination(); - break; } return []; } -- Gitee From e35b6fa0a629870f6f4f001d84ae6e22fe86323f Mon Sep 17 00:00:00 2001 From: LiYuxi Date: Thu, 11 Jul 2024 14:46:41 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix=20=E9=87=8D=E6=96=B0=E6=A1=86=E9=80=89?= =?UTF-8?q?=E5=90=8E=E5=A4=8D=E9=80=89=E6=A1=86=E9=87=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: LiYuxi --- ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts index a99a86e5b..1c6050b61 100644 --- a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts +++ b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts @@ -222,6 +222,7 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { private perfReset(): void { this.isHideThread = false; this.isHideThreadState = false; + this.isOnlyKernel = false; } private setLib(libFilter: unknown): void { this.lib = { -- Gitee