diff --git a/ide/src/trace/component/trace/sheet/cpu/TabPaneCpuByThread.ts b/ide/src/trace/component/trace/sheet/cpu/TabPaneCpuByThread.ts index 69aa8ce5e10fe25f67d5299f23543098c33d100f..4f68932bfc657cc948225bedd1623740dd99712d 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 6b2d05e0f5026e4191f78a6b1d1b2012c510b694..9d14f2098948187a194369eedb7930cca88ad192 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 39fcf1872081d53b1d30397bae1fc44ff2b6cc6d..1c6050b61d9e1f7576116fd61858a582497e9033 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(); @@ -221,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 = { @@ -256,9 +258,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 +472,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 +794,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 +893,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 +927,6 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { return this.combineCallChainForAnalysis(); case 'getBottomUp': return this.getBottomUp(); - case 'kernelCombination': - this.kernelCombination(); - break; } return []; }