mirror of
https://github.com/python/cpython.git
synced 2026-05-05 10:01:07 +00:00
gh-142927: Fix inverted flamegraph width (#148568)
Fix inverted flamegraph width The inverted view used thread presence as a proxy for self time. This missed self samples on C-level wrapper frames like _run_code, where the node's thread always appears in its children too. Those samples were silently dropped, causing the chart to render narrower than full width. Now uses the explicit self field on each node instead of the thread heuristic.
This commit is contained in:
parent
2b6a13710f
commit
993e204ad4
1 changed files with 5 additions and 10 deletions
|
|
@ -1063,11 +1063,7 @@ function populateStats(data) {
|
|||
funcname = funcname || 'unknown';
|
||||
|
||||
if (filename !== 'unknown' && funcname !== 'unknown' && node.value > 0) {
|
||||
let childrenValue = 0;
|
||||
if (node.children) {
|
||||
childrenValue = node.children.reduce((sum, child) => sum + child.value, 0);
|
||||
}
|
||||
const directSamples = Math.max(0, node.value - childrenValue);
|
||||
const directSamples = node.self || 0;
|
||||
|
||||
const funcKey = `${filename}:${node.lineno || '?'}:${funcname}`;
|
||||
|
||||
|
|
@ -1345,14 +1341,13 @@ function processLeaf(invertedRoot, path, leafNode, isDifferential) {
|
|||
}
|
||||
|
||||
function traverseInvert(path, currentNode, invertedRoot, isDifferential) {
|
||||
const children = currentNode.children || [];
|
||||
const childThreads = new Set(children.flatMap(c => c.threads || []));
|
||||
const selfThreads = (currentNode.threads || []).filter(t => !childThreads.has(t));
|
||||
const selfValue = currentNode.self || 0;
|
||||
|
||||
if (selfThreads.length > 0) {
|
||||
processLeaf(invertedRoot, path, { ...currentNode, threads: selfThreads }, isDifferential);
|
||||
if (selfValue > 0) {
|
||||
processLeaf(invertedRoot, path, { ...currentNode, value: selfValue }, isDifferential);
|
||||
}
|
||||
|
||||
const children = currentNode.children || [];
|
||||
children.forEach(child => traverseInvert(path.concat([child]), child, invertedRoot, isDifferential));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue