@parca/profile 0.16.417 → 0.16.418

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/GraphTooltipArrow/Content.d.ts +2 -1
  3. package/dist/GraphTooltipArrow/Content.d.ts.map +1 -1
  4. package/dist/GraphTooltipArrow/Content.js +4 -3
  5. package/dist/GraphTooltipArrow/DockedGraphTooltip/index.d.ts +2 -1
  6. package/dist/GraphTooltipArrow/DockedGraphTooltip/index.d.ts.map +1 -1
  7. package/dist/GraphTooltipArrow/DockedGraphTooltip/index.js +4 -5
  8. package/dist/GraphTooltipArrow/useGraphTooltip/index.d.ts +2 -3
  9. package/dist/GraphTooltipArrow/useGraphTooltip/index.d.ts.map +1 -1
  10. package/dist/GraphTooltipArrow/useGraphTooltip/index.js +9 -30
  11. package/dist/ProfileIcicleGraph/IcicleGraphArrow/ContextMenu.d.ts +2 -1
  12. package/dist/ProfileIcicleGraph/IcicleGraphArrow/ContextMenu.d.ts.map +1 -1
  13. package/dist/ProfileIcicleGraph/IcicleGraphArrow/ContextMenu.js +2 -1
  14. package/dist/ProfileIcicleGraph/IcicleGraphArrow/IcicleGraphNodes.d.ts.map +1 -1
  15. package/dist/ProfileIcicleGraph/IcicleGraphArrow/IcicleGraphNodes.js +6 -46
  16. package/dist/ProfileIcicleGraph/IcicleGraphArrow/index.d.ts +1 -3
  17. package/dist/ProfileIcicleGraph/IcicleGraphArrow/index.d.ts.map +1 -1
  18. package/dist/ProfileIcicleGraph/IcicleGraphArrow/index.js +2 -5
  19. package/dist/ProfileIcicleGraph/IcicleGraphArrow/useNodeColor.d.ts +1 -3
  20. package/dist/ProfileIcicleGraph/IcicleGraphArrow/useNodeColor.d.ts.map +1 -1
  21. package/dist/ProfileIcicleGraph/IcicleGraphArrow/useNodeColor.js +2 -5
  22. package/dist/ProfileIcicleGraph/index.d.ts.map +1 -1
  23. package/dist/ProfileIcicleGraph/index.js +2 -1
  24. package/package.json +6 -6
  25. package/src/GraphTooltipArrow/Content.tsx +3 -22
  26. package/src/GraphTooltipArrow/DockedGraphTooltip/index.tsx +6 -14
  27. package/src/GraphTooltipArrow/useGraphTooltip/index.ts +10 -42
  28. package/src/ProfileIcicleGraph/IcicleGraphArrow/ContextMenu.tsx +3 -0
  29. package/src/ProfileIcicleGraph/IcicleGraphArrow/IcicleGraphNodes.tsx +9 -54
  30. package/src/ProfileIcicleGraph/IcicleGraphArrow/index.tsx +5 -3
  31. package/src/ProfileIcicleGraph/IcicleGraphArrow/useNodeColor.ts +1 -9
  32. package/src/ProfileIcicleGraph/index.tsx +2 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,10 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [0.16.418](https://github.com/parca-dev/parca/compare/@parca/profile@0.16.417...@parca/profile@0.16.418) (2024-07-29)
7
+
8
+ **Note:** Version bump only for package @parca/profile
9
+
6
10
  ## 0.16.417 (2024-07-29)
7
11
 
8
12
  **Note:** Version bump only for package @parca/profile
@@ -10,7 +10,8 @@ interface GraphTooltipArrowContentProps {
10
10
  row: number | null;
11
11
  level: number;
12
12
  isFixed: boolean;
13
+ compareAbsolute: boolean;
13
14
  }
14
- declare const GraphTooltipArrowContent: ({ table, profileType, unit, total, totalUnfiltered, row, level, isFixed, }: GraphTooltipArrowContentProps) => React.JSX.Element;
15
+ declare const GraphTooltipArrowContent: ({ table, profileType, unit, total, totalUnfiltered, row, level, isFixed, compareAbsolute, }: GraphTooltipArrowContentProps) => React.JSX.Element;
15
16
  export default GraphTooltipArrowContent;
16
17
  //# sourceMappingURL=Content.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Content.d.ts","sourceRoot":"","sources":["../../src/GraphTooltipArrow/Content.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAQ1C,UAAU,6BAA6B;IACrC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,QAAA,MAAM,wBAAwB,+EAS3B,6BAA6B,KAAG,KAAK,CAAC,GAAG,CAAC,OAqG5C,CAAC;AA2EF,eAAe,wBAAwB,CAAC"}
1
+ {"version":3,"file":"Content.d.ts","sourceRoot":"","sources":["../../src/GraphTooltipArrow/Content.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAQ1C,UAAU,6BAA6B;IACrC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAMD,QAAA,MAAM,wBAAwB,gGAU3B,6BAA6B,KAAG,KAAK,CAAC,GAAG,CAAC,OAgF5C,CAAC;AA2EF,eAAe,wBAAwB,CAAC"}
@@ -8,7 +8,7 @@ import { useGraphTooltipMetaInfo } from './useGraphTooltipMetaInfo';
8
8
  const NoData = () => {
9
9
  return _jsx("span", { className: "rounded bg-gray-200 px-2 dark:bg-gray-800", children: "Not available" });
10
10
  };
11
- const GraphTooltipArrowContent = ({ table, profileType, unit, total, totalUnfiltered, row, level, isFixed, }) => {
11
+ const GraphTooltipArrowContent = ({ table, profileType, unit, total, totalUnfiltered, row, level, isFixed, compareAbsolute, }) => {
12
12
  const graphTooltipData = useGraphTooltip({
13
13
  table,
14
14
  profileType,
@@ -17,16 +17,17 @@ const GraphTooltipArrowContent = ({ table, profileType, unit, total, totalUnfilt
17
17
  totalUnfiltered,
18
18
  row,
19
19
  level,
20
+ compareAbsolute,
20
21
  });
21
22
  if (graphTooltipData === null) {
22
23
  return _jsx(_Fragment, {});
23
24
  }
24
- const { name, locationAddress, cumulativeText, cumulativePerSecondText, flatText, flatPerSecondText, diffText, diff, row: rowNumber, } = graphTooltipData;
25
+ const { name, locationAddress, cumulativeText, flatText, diffText, diff, row: rowNumber, } = graphTooltipData;
25
26
  return (_jsx("div", { className: `flex text-sm ${isFixed ? 'w-full' : ''}`, children: _jsx("div", { className: `m-auto w-full ${isFixed ? 'w-full' : ''}`, children: _jsxs("div", { className: "min-h-52 flex w-[500px] flex-col justify-between rounded-lg border border-gray-300 bg-gray-50 p-3 shadow-lg dark:border-gray-500 dark:bg-gray-900", children: [_jsx("div", { className: "flex flex-row", children: _jsxs("div", { className: "mx-2", children: [_jsx("div", { className: "flex h-10 items-start justify-between gap-4 break-all font-semibold", children: row === 0 ? (_jsx("p", { children: "root" })) : (_jsx("p", { children: name !== ''
26
27
  ? name
27
28
  : locationAddress !== 0n
28
29
  ? hexifyAddress(locationAddress)
29
- : 'unknown' })) }), _jsx("table", { className: "my-2 w-full table-fixed pr-0 text-gray-700 dark:text-gray-300", children: _jsxs("tbody", { children: [_jsxs("tr", { children: [_jsx("td", { className: "w-1/4", children: "Cumulative" }), _jsx("td", { className: "w-3/4", children: _jsx("div", { children: cumulativeText }) })] }), (profileType?.delta ?? false) ? (_jsxs("tr", { children: [_jsx("td", { className: "w-1/4" }), _jsx("td", { className: "w-3/4", children: _jsx("div", { children: cumulativePerSecondText }) })] })) : (_jsx(_Fragment, {})), _jsxs("tr", { children: [_jsx("td", { className: "w-1/4 pt-2", children: "Flat" }), _jsx("td", { className: "w-3/4 pt-2", children: _jsx("div", { children: flatText }) })] }), (profileType?.delta ?? false) ? (_jsxs("tr", { children: [_jsx("td", { className: "w-1/4" }), _jsx("td", { className: "w-3/4", children: _jsx("div", { children: flatPerSecondText }) })] })) : (_jsx(_Fragment, {})), diff !== 0n && (_jsxs("tr", { children: [_jsx("td", { className: "w-1/4 pt-2", children: "Diff" }), _jsx("td", { className: "w-3/4 pt-2", children: _jsx("div", { children: diffText }) })] })), _jsx(TooltipMetaInfo, { table: table, row: rowNumber })] }) })] }) }), _jsxs("div", { className: "flex w-full items-center gap-1 text-xs text-gray-500", children: [_jsx(Icon, { icon: "iconoir:mouse-button-right" }), _jsx("div", { children: "Right click to show context menu" })] })] }) }) }));
30
+ : 'unknown' })) }), _jsx("table", { className: "my-2 w-full table-fixed pr-0 text-gray-700 dark:text-gray-300", children: _jsxs("tbody", { children: [_jsxs("tr", { children: [_jsx("td", { className: "w-1/4", children: "Cumulative" }), _jsx("td", { className: "w-3/4", children: _jsx("div", { children: cumulativeText }) })] }), _jsxs("tr", { children: [_jsx("td", { className: "w-1/4 pt-2", children: "Flat" }), _jsx("td", { className: "w-3/4 pt-2", children: _jsx("div", { children: flatText }) })] }), diff !== 0n && (_jsxs("tr", { children: [_jsx("td", { className: "w-1/4 pt-2", children: "Diff" }), _jsx("td", { className: "w-3/4 pt-2", children: _jsx("div", { children: diffText }) })] })), _jsx(TooltipMetaInfo, { table: table, row: rowNumber })] }) })] }) }), _jsxs("div", { className: "flex w-full items-center gap-1 text-xs text-gray-500", children: [_jsx(Icon, { icon: "iconoir:mouse-button-right" }), _jsx("div", { children: "Right click to show context menu" })] })] }) }) }));
30
31
  };
31
32
  const TooltipMetaInfo = ({ table, row }) => {
32
33
  const { labelPairs, functionFilename, file, locationAddress, mappingFile, mappingBuildID, inlined, } = useGraphTooltipMetaInfo({ table, row });
@@ -8,7 +8,8 @@ interface Props {
8
8
  level: number;
9
9
  profileType?: ProfileType;
10
10
  unit?: string;
11
+ compareAbsolute: boolean;
11
12
  }
12
- export declare const DockedGraphTooltip: ({ table, total, totalUnfiltered, row, level, profileType, unit, }: Props) => JSX.Element;
13
+ export declare const DockedGraphTooltip: ({ table, total, totalUnfiltered, row, level, profileType, unit, compareAbsolute, }: Props) => JSX.Element;
13
14
  export {};
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/GraphTooltipArrow/DockedGraphTooltip/index.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AAKnC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAO1C,UAAU,KAAK;IACb,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAuBD,eAAO,MAAM,kBAAkB,sEAQ5B,KAAK,KAAG,GAAG,CAAC,OAkHd,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/GraphTooltipArrow/DockedGraphTooltip/index.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AAKnC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAO1C,UAAU,KAAK;IACb,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;CAC1B;AAuBD,eAAO,MAAM,kBAAkB,uFAS5B,KAAK,KAAG,GAAG,CAAC,OAwGd,CAAC"}
@@ -25,7 +25,7 @@ const InfoSection = ({ title, value, minWidth = '', }) => {
25
25
  const NoData = () => {
26
26
  return _jsx("span", { className: "rounded bg-gray-200 px-2 dark:bg-gray-800", children: "Not available" });
27
27
  };
28
- export const DockedGraphTooltip = ({ table, total, totalUnfiltered, row, level, profileType, unit, }) => {
28
+ export const DockedGraphTooltip = ({ table, total, totalUnfiltered, row, level, profileType, unit, compareAbsolute, }) => {
29
29
  let { width } = useWindowSize();
30
30
  const { profileExplorer } = useParcaContext();
31
31
  const { PaddingX } = profileExplorer ?? { PaddingX: 0 };
@@ -38,21 +38,20 @@ export const DockedGraphTooltip = ({ table, total, totalUnfiltered, row, level,
38
38
  totalUnfiltered,
39
39
  row,
40
40
  level,
41
+ compareAbsolute,
41
42
  });
42
43
  const { labelPairs, functionFilename, file, locationAddress, mappingFile, mappingBuildID, inlined, } = useGraphTooltipMetaInfo({ table, row: row ?? 0 });
43
44
  if (graphTooltipData === null) {
44
45
  return _jsx(_Fragment, {});
45
46
  }
46
- const { name, cumulativeText, cumulativePerSecondText, flatText, flatPerSecondText, diffText, diff, } = graphTooltipData;
47
+ const { name, cumulativeText, flatText, diffText, diff } = graphTooltipData;
47
48
  const labels = labelPairs.map((l) => (_jsx("span", { className: "mr-3 inline-block rounded-lg bg-gray-200 px-2 py-1 text-xs font-bold text-gray-700 dark:bg-gray-700 dark:text-gray-400", children: `${l[0]}="${l[1]}"` }, l[0])));
48
49
  const isMappingBuildIDAvailable = mappingBuildID !== null && mappingBuildID !== '';
49
50
  const inlinedText = inlined === null ? 'merged' : inlined ? 'yes' : 'no';
50
51
  const addressText = locationAddress !== 0n ? hexifyAddress(locationAddress) : _jsx(NoData, {});
51
- const cumulativeTextBoth = `${cumulativeText}\n${cumulativePerSecondText}`;
52
- const flatTextBoth = `${flatText}\n${flatPerSecondText}`;
53
52
  return (_jsxs("div", { className: "fixed bottom-0 z-20 overflow-hidden rounded-t-lg border-l border-r border-t border-gray-400 bg-white bg-opacity-90 px-8 py-3 dark:border-gray-600 dark:bg-black dark:bg-opacity-80", style: { width }, children: [_jsxs("div", { className: "flex flex-col gap-4", children: [_jsx("div", { className: "flex justify-between gap-4", children: row === 0 ? (_jsx("p", { children: "root" })) : (_jsx("p", { children: name !== ''
54
53
  ? name
55
54
  : locationAddress !== 0n
56
55
  ? hexifyAddress(locationAddress)
57
- : 'unknown' })) }), _jsxs("div", { className: "flex justify-between gap-3", children: [_jsx(InfoSection, { title: "Cumulative", value: cumulativeTextBoth, minWidth: "w-44" }), _jsx(InfoSection, { title: "Flat", value: flatTextBoth, minWidth: "w-44" }), diff !== 0n ? _jsx(InfoSection, { title: "Diff", value: diffText, minWidth: "w-44" }) : null, _jsx(InfoSection, { title: "File", value: functionFilename !== '' ? truncateStringReverse(file, 45) : _jsx(NoData, {}), minWidth: 'w-[460px]' }), _jsx(InfoSection, { title: "Address", value: addressText, minWidth: "w-44" }), _jsx(InfoSection, { title: "Inlined", value: inlinedText, minWidth: "w-44" }), _jsx(InfoSection, { title: "Binary", value: (mappingFile != null ? getLastItem(mappingFile) : null) ?? _jsx(NoData, {}), minWidth: "w-44" }), _jsx(InfoSection, { title: "Build ID", value: isMappingBuildIDAvailable ? (_jsx("div", { children: truncateString(mappingBuildID, 28) })) : (_jsx(NoData, {})) })] }), _jsx("div", { children: _jsx("div", { className: "flex h-5 gap-1", children: labels }) })] }), _jsxs("div", { className: "flex w-full items-center gap-1 text-xs text-gray-500", children: [_jsx(Icon, { icon: "iconoir:mouse-button-right" }), _jsx("div", { children: "Right click to show context menu" })] })] }));
56
+ : 'unknown' })) }), _jsxs("div", { className: "flex justify-between gap-3", children: [_jsx(InfoSection, { title: "Cumulative", value: cumulativeText, minWidth: "w-44" }), _jsx(InfoSection, { title: "Flat", value: flatText, minWidth: "w-44" }), diff !== 0n ? _jsx(InfoSection, { title: "Diff", value: diffText, minWidth: "w-44" }) : null, _jsx(InfoSection, { title: "File", value: functionFilename !== '' ? truncateStringReverse(file, 45) : _jsx(NoData, {}), minWidth: 'w-[460px]' }), _jsx(InfoSection, { title: "Address", value: addressText, minWidth: "w-44" }), _jsx(InfoSection, { title: "Inlined", value: inlinedText, minWidth: "w-44" }), _jsx(InfoSection, { title: "Binary", value: (mappingFile != null ? getLastItem(mappingFile) : null) ?? _jsx(NoData, {}), minWidth: "w-44" }), _jsx(InfoSection, { title: "Build ID", value: isMappingBuildIDAvailable ? (_jsx("div", { children: truncateString(mappingBuildID, 28) })) : (_jsx(NoData, {})) })] }), _jsx("div", { children: _jsx("div", { className: "flex h-5 gap-1", children: labels }) })] }), _jsxs("div", { className: "flex w-full items-center gap-1 text-xs text-gray-500", children: [_jsx(Icon, { icon: "iconoir:mouse-button-right" }), _jsx("div", { children: "Right click to show context menu" })] })] }));
58
57
  };
@@ -6,6 +6,7 @@ interface Props {
6
6
  unit?: string;
7
7
  total: bigint;
8
8
  totalUnfiltered: bigint;
9
+ compareAbsolute: boolean;
9
10
  row: number | null;
10
11
  level: number;
11
12
  }
@@ -13,13 +14,11 @@ interface GraphTooltipData {
13
14
  name: string;
14
15
  locationAddress: bigint;
15
16
  cumulativeText: string;
16
- cumulativePerSecondText: string;
17
17
  flatText: string;
18
- flatPerSecondText: string;
19
18
  diffText: string;
20
19
  diff: bigint;
21
20
  row: number;
22
21
  }
23
- export declare const useGraphTooltip: ({ table, profileType, unit, total, totalUnfiltered, row, level, }: Props) => GraphTooltipData | null;
22
+ export declare const useGraphTooltip: ({ table, profileType, unit, compareAbsolute, total, totalUnfiltered, row, level, }: Props) => GraphTooltipData | null;
24
23
  export {};
25
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/GraphTooltipArrow/useGraphTooltip/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAkB1C,UAAU,KAAK;IACb,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,uBAAuB,EAAE,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,eAAe,sEAQzB,KAAK,KAAG,gBAAgB,GAAG,IAkE7B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/GraphTooltipArrow/useGraphTooltip/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAW1C,UAAU,KAAK;IACb,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,eAAe,uFASzB,KAAK,KAAG,gBAAgB,GAAG,IAyC7B,CAAC"}
@@ -11,9 +11,9 @@
11
11
  // See the License for the specific language governing permissions and
12
12
  // limitations under the License.
13
13
  import { divide, valueFormatter } from '@parca/utilities';
14
- import { FIELD_CUMULATIVE, FIELD_CUMULATIVE_PER_SECOND, FIELD_DIFF, FIELD_DIFF_PER_SECOND, FIELD_FLAT, FIELD_FLAT_PER_SECOND, FIELD_LOCATION_ADDRESS, } from '../../ProfileIcicleGraph/IcicleGraphArrow';
15
- import { getTextForCumulative, getTextForCumulativePerSecond, nodeLabel, } from '../../ProfileIcicleGraph/IcicleGraphArrow/utils';
16
- export const useGraphTooltip = ({ table, profileType, unit, total, totalUnfiltered, row, level, }) => {
14
+ import { FIELD_CUMULATIVE, FIELD_DIFF, FIELD_FLAT, FIELD_LOCATION_ADDRESS, } from '../../ProfileIcicleGraph/IcicleGraphArrow';
15
+ import { getTextForCumulative, nodeLabel } from '../../ProfileIcicleGraph/IcicleGraphArrow/utils';
16
+ export const useGraphTooltip = ({ table, profileType, unit, compareAbsolute, total, totalUnfiltered, row, level, }) => {
17
17
  if (row === null || profileType === undefined) {
18
18
  return null;
19
19
  }
@@ -22,46 +22,25 @@ export const useGraphTooltip = ({ table, profileType, unit, total, totalUnfilter
22
22
  const cumulative = table.getChild(FIELD_CUMULATIVE)?.get(row) !== null
23
23
  ? BigInt(table.getChild(FIELD_CUMULATIVE)?.get(row))
24
24
  : 0n;
25
- const cumulativePerSecond = table.getChild(FIELD_CUMULATIVE_PER_SECOND)?.get(row) !== null
26
- ? table.getChild(FIELD_CUMULATIVE_PER_SECOND)?.get(row)
27
- : 0;
28
25
  const flat = table.getChild(FIELD_FLAT)?.get(row) !== null
29
26
  ? BigInt(table.getChild(FIELD_FLAT)?.get(row))
30
27
  : 0n;
31
- const flatPerSecond = table.getChild(FIELD_FLAT_PER_SECOND)?.get(row) !== null
32
- ? table.getChild(FIELD_FLAT_PER_SECOND)?.get(row)
33
- : 0;
34
28
  const diff = table.getChild(FIELD_DIFF)?.get(row) !== null
35
29
  ? BigInt(table.getChild(FIELD_DIFF)?.get(row))
36
30
  : 0n;
37
- const diffPerSecond = table.getChild(FIELD_DIFF_PER_SECOND)?.get(row) !== null
38
- ? table.getChild(FIELD_DIFF_PER_SECOND)?.get(row)
39
- : 0;
40
31
  let diffText = '';
41
- if (profileType?.delta ?? false) {
42
- const prevValue = cumulativePerSecond - diffPerSecond;
43
- const diffRatio = diffPerSecond !== 0 ? diffPerSecond / prevValue : 0;
44
- const diffSign = diffPerSecond > 0 ? '+' : '';
45
- const diffValueText = diffSign + valueFormatter(diffPerSecond, 'CPU Cores', 5);
46
- const diffPercentageText = diffSign + (diffRatio * 100).toFixed(2) + '%';
47
- diffText = `${diffValueText} (${diffPercentageText})`;
48
- }
49
- else {
50
- const prevValue = cumulative - diff;
51
- const diffRatio = diff !== 0n ? divide(diff, prevValue) : 0;
52
- const diffSign = diff > 0 ? '+' : '';
53
- const diffValueText = diffSign + valueFormatter(diff, unit, 1);
54
- const diffPercentageText = diffSign + (diffRatio * 100).toFixed(2) + '%';
55
- diffText = `${diffValueText} (${diffPercentageText})`;
56
- }
32
+ const prevValue = cumulative - diff;
33
+ const diffRatio = diff !== 0n ? divide(diff, prevValue) : 0;
34
+ const diffSign = diff > 0 ? '+' : '';
35
+ const diffValueText = diffSign + valueFormatter(diff, unit, 1);
36
+ const diffPercentageText = diffSign + (diffRatio * 100).toFixed(2) + '%';
37
+ diffText = compareAbsolute ? `${diffValueText} (${diffPercentageText})` : diffPercentageText;
57
38
  const name = nodeLabel(table, row, level, false);
58
39
  return {
59
40
  name,
60
41
  locationAddress,
61
42
  cumulativeText: getTextForCumulative(cumulative, totalUnfiltered, total, unit ?? ''),
62
- cumulativePerSecondText: getTextForCumulativePerSecond(cumulativePerSecond, unit ?? 'CPU Cores'),
63
43
  flatText: getTextForCumulative(flat, totalUnfiltered, total, unit ?? ''),
64
- flatPerSecondText: getTextForCumulativePerSecond(flatPerSecond, unit ?? 'CPU Cores'),
65
44
  diffText,
66
45
  diff,
67
46
  row,
@@ -9,12 +9,13 @@ interface ContextMenuProps {
9
9
  totalUnfiltered: bigint;
10
10
  row: number;
11
11
  level: number;
12
+ compareAbsolute: boolean;
12
13
  trackVisibility: (isVisible: boolean) => void;
13
14
  curPath: string[];
14
15
  setCurPath: (path: string[]) => void;
15
16
  hideMenu: () => void;
16
17
  hideBinary: (binaryToRemove: string) => void;
17
18
  }
18
- declare const ContextMenu: ({ menuId, table, total, totalUnfiltered, row, level, trackVisibility, curPath, setCurPath, hideMenu, profileType, unit, hideBinary, }: ContextMenuProps) => JSX.Element;
19
+ declare const ContextMenu: ({ menuId, table, total, totalUnfiltered, row, level, compareAbsolute, trackVisibility, curPath, setCurPath, hideMenu, profileType, unit, hideBinary, }: ContextMenuProps) => JSX.Element;
19
20
  export default ContextMenu;
20
21
  //# sourceMappingURL=ContextMenu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../src/ProfileIcicleGraph/IcicleGraphArrow/ContextMenu.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AAMnC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAO1C,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,QAAA,MAAM,WAAW,0IAcd,gBAAgB,KAAG,GAAG,CAAC,OA4JzB,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../src/ProfileIcicleGraph/IcicleGraphArrow/ContextMenu.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AAMnC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAO1C,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,QAAA,MAAM,WAAW,2JAed,gBAAgB,KAAG,GAAG,CAAC,OA6JzB,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -20,7 +20,7 @@ import { getLastItem } from '@parca/utilities';
20
20
  import { useGraphTooltip } from '../../GraphTooltipArrow/useGraphTooltip';
21
21
  import { useGraphTooltipMetaInfo } from '../../GraphTooltipArrow/useGraphTooltipMetaInfo';
22
22
  import { hexifyAddress, truncateString } from '../../utils';
23
- const ContextMenu = ({ menuId, table, total, totalUnfiltered, row, level, trackVisibility, curPath, setCurPath, hideMenu, profileType, unit, hideBinary, }) => {
23
+ const ContextMenu = ({ menuId, table, total, totalUnfiltered, row, level, compareAbsolute, trackVisibility, curPath, setCurPath, hideMenu, profileType, unit, hideBinary, }) => {
24
24
  const { isDarkMode } = useParcaContext();
25
25
  const { enableSourcesView } = useParcaContext();
26
26
  const [isGraphTooltipDocked, setIsDocked] = useUserPreference(USER_PREFERENCES.GRAPH_METAINFO_DOCKED.key);
@@ -32,6 +32,7 @@ const ContextMenu = ({ menuId, table, total, totalUnfiltered, row, level, trackV
32
32
  totalUnfiltered,
33
33
  row,
34
34
  level,
35
+ compareAbsolute,
35
36
  });
36
37
  const { functionFilename, functionSystemName, file, openFile, isSourceAvailable, locationAddress, mappingFile, mappingBuildID, inlined, } = useGraphTooltipMetaInfo({ table, row });
37
38
  if (contextMenuData === null) {
@@ -1 +1 @@
1
- {"version":3,"file":"IcicleGraphNodes.d.ts","sourceRoot":"","sources":["../../../src/ProfileIcicleGraph/IcicleGraphArrow/IcicleGraphNodes.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IcicleGraphNodes.d.ts","sourceRoot":"","sources":["../../../src/ProfileIcicleGraph/IcicleGraphArrow/IcicleGraphNodes.tsx"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ import cx from 'classnames';
16
16
  import { selectBinaries, useAppSelector } from '@parca/store';
17
17
  import { isSearchMatch, scaleLinear } from '@parca/utilities';
18
18
  import 'react-contexify/dist/ReactContexify.css';
19
- import { FIELD_CHILDREN, FIELD_CUMULATIVE, FIELD_CUMULATIVE_PER_SECOND, FIELD_DIFF, FIELD_DIFF_PER_SECOND, FIELD_FUNCTION_NAME, FIELD_MAPPING_FILE, } from './index';
19
+ import { FIELD_CHILDREN, FIELD_CUMULATIVE, FIELD_DIFF, FIELD_FUNCTION_NAME, FIELD_MAPPING_FILE, } from './index';
20
20
  import useNodeColor from './useNodeColor';
21
21
  import { arrowToString, nodeLabel } from './utils';
22
22
  export const RowHeight = 26;
@@ -53,16 +53,12 @@ export const IcicleNode = React.memo(function IcicleNodeNoMemo({ table, row, map
53
53
  const mappingColumn = table.getChild(FIELD_MAPPING_FILE);
54
54
  const functionNameColumn = table.getChild(FIELD_FUNCTION_NAME);
55
55
  const cumulativeColumn = table.getChild(FIELD_CUMULATIVE);
56
- const cumulativePerSecondColumn = table.getChild(FIELD_CUMULATIVE_PER_SECOND);
57
56
  const diffColumn = table.getChild(FIELD_DIFF);
58
- const diffPerSecondColumn = table.getChild(FIELD_DIFF_PER_SECOND);
59
57
  // get the actual values from the columns
60
58
  const mappingFile = arrowToString(mappingColumn?.get(row));
61
59
  const functionName = arrowToString(functionNameColumn?.get(row));
62
60
  const cumulative = cumulativeColumn?.get(row) !== null ? BigInt(cumulativeColumn?.get(row)) : 0n;
63
- const cumulativePerSecond = cumulativePerSecondColumn?.get(row) != null ? cumulativePerSecondColumn.get(row) : 0;
64
61
  const diff = diffColumn?.get(row) !== null ? BigInt(diffColumn?.get(row)) : null;
65
- const diffPerSecond = diffPerSecondColumn?.get(row) != null ? diffPerSecondColumn.get(row) : null;
66
62
  const childRows = Array.from(table.getChild(FIELD_CHILDREN)?.get(row) ?? []);
67
63
  const highlightedNodes = useMemo(() => {
68
64
  if (!highlightSimilarStacksPreference) {
@@ -97,14 +93,6 @@ export const IcicleNode = React.memo(function IcicleNodeNoMemo({ table, row, map
97
93
  });
98
94
  break;
99
95
  case FIELD_CUMULATIVE:
100
- if (profileType?.delta ?? false) {
101
- childRows.sort((a, b) => {
102
- const aCumulativePerSecond = cumulativePerSecondColumn?.get(a);
103
- const bCumulativePerSecond = cumulativePerSecondColumn?.get(b);
104
- return bCumulativePerSecond - aCumulativePerSecond;
105
- });
106
- break;
107
- }
108
96
  childRows.sort((a, b) => {
109
97
  const aCumulative = cumulativeColumn?.get(a);
110
98
  const bCumulative = cumulativeColumn?.get(b);
@@ -113,44 +101,18 @@ export const IcicleNode = React.memo(function IcicleNodeNoMemo({ table, row, map
113
101
  break;
114
102
  case FIELD_DIFF:
115
103
  childRows.sort((a, b) => {
116
- if (profileType?.delta ?? false) {
117
- let aRatio = null;
118
- let bRatio = null;
119
- const aDiff = diffPerSecondColumn?.get(a);
120
- if (aDiff !== null) {
121
- const cumulative = cumulativePerSecondColumn?.get(a);
122
- const prev = cumulative - aDiff;
123
- aRatio = aDiff / prev;
124
- }
125
- const bDiff = diffPerSecondColumn?.get(b);
126
- if (bDiff !== null) {
127
- const cumulative = cumulativePerSecondColumn?.get(b);
128
- const prev = cumulative - bDiff;
129
- bRatio = bDiff / prev;
130
- }
131
- if (aRatio !== null && bRatio !== null) {
132
- return bRatio - aRatio;
133
- }
134
- if (aRatio === null && bRatio !== null) {
135
- return -1;
136
- }
137
- if (aRatio !== null && bRatio === null) {
138
- return 1;
139
- }
140
- // both are null
141
- return 0;
142
- }
143
104
  let aRatio = null;
144
- const aDiff = diffColumn?.get(a);
105
+ const aDiff = diffColumn?.get(a) !== null ? BigInt(diffColumn?.get(a)) : null;
145
106
  if (aDiff !== null) {
146
- const cumulative = cumulativeColumn?.get(a) ?? 0n;
107
+ const cumulative = cumulativeColumn?.get(a) !== null ? BigInt(cumulativeColumn?.get(a)) : 0n;
108
+ console.log(typeof cumulative, typeof aDiff);
147
109
  const prev = cumulative - aDiff;
148
110
  aRatio = Number(aDiff) / Number(prev);
149
111
  }
150
112
  let bRatio = null;
151
- const bDiff = diffColumn?.get(b);
113
+ const bDiff = diffColumn?.get(b) !== null ? BigInt(diffColumn?.get(b)) : null;
152
114
  if (bDiff !== null) {
153
- const cumulative = cumulativeColumn?.get(b) ?? 0n;
115
+ const cumulative = cumulativeColumn?.get(b) !== null ? BigInt(cumulativeColumn?.get(b)) : 0n;
154
116
  const prev = cumulative - bDiff;
155
117
  bRatio = Number(bDiff) / Number(prev);
156
118
  }
@@ -173,9 +135,7 @@ export const IcicleNode = React.memo(function IcicleNodeNoMemo({ table, row, map
173
135
  isDarkMode: darkMode,
174
136
  compareMode,
175
137
  cumulative,
176
- cumulativePerSecond,
177
138
  diff,
178
- diffPerSecond,
179
139
  mappingColors,
180
140
  mappingFile,
181
141
  });
@@ -16,11 +16,8 @@ export declare const FIELD_FUNCTION_START_LINE = "function_startline";
16
16
  export declare const FIELD_CHILDREN = "children";
17
17
  export declare const FIELD_LABELS = "labels";
18
18
  export declare const FIELD_CUMULATIVE = "cumulative";
19
- export declare const FIELD_CUMULATIVE_PER_SECOND = "cumulative_per_second";
20
19
  export declare const FIELD_FLAT = "flat";
21
- export declare const FIELD_FLAT_PER_SECOND = "flat_per_second";
22
20
  export declare const FIELD_DIFF = "diff";
23
- export declare const FIELD_DIFF_PER_SECOND = "diff_per_second";
24
21
  interface IcicleGraphArrowProps {
25
22
  arrow: FlamegraphArrow;
26
23
  total: bigint;
@@ -33,6 +30,7 @@ interface IcicleGraphArrowProps {
33
30
  flamegraphLoading: boolean;
34
31
  isHalfScreen: boolean;
35
32
  mappingsListFromMetadata: string[];
33
+ compareAbsolute: boolean;
36
34
  }
37
35
  export declare const getMappingColors: (mappingsList: string[], isDarkMode: boolean, currentColorProfile: ColorConfig) => mappingColors;
38
36
  export declare const IcicleGraphArrow: React.NamedExoticComponent<IcicleGraphArrowProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ProfileIcicleGraph/IcicleGraphArrow/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAgE,MAAM,OAAO,CAAC;AAKrF,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAG9C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAQ1C,OAAO,EAA2B,KAAK,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAO5E,OAAO,EAAwB,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAGxE,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AACzD,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AACzD,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AACnD,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AACnD,eAAO,MAAM,0BAA0B,yBAAyB,CAAC;AACjE,eAAO,MAAM,wBAAwB,uBAAuB,CAAC;AAC7D,eAAO,MAAM,yBAAyB,uBAAuB,CAAC;AAC9D,eAAO,MAAM,cAAc,aAAa,CAAC;AACzC,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,2BAA2B,0BAA0B,CAAC;AACnE,eAAO,MAAM,UAAU,SAAS,CAAC;AACjC,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AACvD,eAAO,MAAM,UAAU,SAAS,CAAC;AACjC,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AAEvD,UAAU,qBAAqB;IAC7B,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,wBAAwB,EAAE,MAAM,EAAE,CAAC;CACpC;AAED,eAAO,MAAM,gBAAgB,iBACb,MAAM,EAAE,cACV,OAAO,uBACE,WAAW,KAC/B,aAQF,CAAC;AAIF,eAAO,MAAM,gBAAgB,mDA4P3B,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ProfileIcicleGraph/IcicleGraphArrow/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAgE,MAAM,OAAO,CAAC;AAKrF,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAG9C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAQ1C,OAAO,EAA2B,KAAK,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAO5E,OAAO,EAAwB,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAGxE,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AACzD,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AACzD,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AACnD,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AACnD,eAAO,MAAM,0BAA0B,yBAAyB,CAAC;AACjE,eAAO,MAAM,wBAAwB,uBAAuB,CAAC;AAC7D,eAAO,MAAM,yBAAyB,uBAAuB,CAAC;AAC9D,eAAO,MAAM,cAAc,aAAa,CAAC;AACzC,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,UAAU,SAAS,CAAC;AACjC,eAAO,MAAM,UAAU,SAAS,CAAC;AAEjC,UAAU,qBAAqB;IAC7B,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,gBAAgB,iBACb,MAAM,EAAE,cACV,OAAO,uBACE,WAAW,KAC/B,aAQF,CAAC;AAIF,eAAO,MAAM,gBAAgB,mDAgQ3B,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -38,11 +38,8 @@ export const FIELD_FUNCTION_START_LINE = 'function_startline';
38
38
  export const FIELD_CHILDREN = 'children';
39
39
  export const FIELD_LABELS = 'labels';
40
40
  export const FIELD_CUMULATIVE = 'cumulative';
41
- export const FIELD_CUMULATIVE_PER_SECOND = 'cumulative_per_second';
42
41
  export const FIELD_FLAT = 'flat';
43
- export const FIELD_FLAT_PER_SECOND = 'flat_per_second';
44
42
  export const FIELD_DIFF = 'diff';
45
- export const FIELD_DIFF_PER_SECOND = 'diff_per_second';
46
43
  export const getMappingColors = (mappingsList, isDarkMode, currentColorProfile) => {
47
44
  const mappingFeatures = mappingsList.map(mapping => extractFeature(mapping));
48
45
  const colors = {};
@@ -52,7 +49,7 @@ export const getMappingColors = (mappingsList, isDarkMode, currentColorProfile)
52
49
  return colors;
53
50
  };
54
51
  const noop = () => { };
55
- export const IcicleGraphArrow = memo(function IcicleGraphArrow({ arrow, total, filtered, width, setCurPath, curPath, profileType, sortBy, flamegraphLoading, mappingsListFromMetadata, }) {
52
+ export const IcicleGraphArrow = memo(function IcicleGraphArrow({ arrow, total, filtered, width, setCurPath, curPath, profileType, sortBy, flamegraphLoading, mappingsListFromMetadata, compareAbsolute, }) {
56
53
  const [isContextMenuOpen, setIsContextMenuOpen] = useState(false);
57
54
  const dispatch = useAppDispatch();
58
55
  const [highlightSimilarStacksPreference] = useUserPreference(USER_PREFERENCES.HIGHLIGHT_SIMILAR_STACKS.key);
@@ -177,6 +174,6 @@ export const IcicleGraphArrow = memo(function IcicleGraphArrow({ arrow, total, f
177
174
  highlightSimilarStacksSetLevel,
178
175
  highlightSimilarStacksSetName,
179
176
  ]);
180
- return (_jsx(_Fragment, { children: _jsxs("div", { onMouseLeave: () => dispatch(setHoveringNode(undefined)), children: [_jsx(ContextMenu, { menuId: MENU_ID, table: table, row: hoveringRow ?? 0, level: hoveringLevel ?? 0, total: total, totalUnfiltered: total + filtered, profileType: profileType, trackVisibility: trackVisibility, curPath: curPath, setCurPath: setCurPath, hideMenu: hideAll, hideBinary: hideBinary, unit: arrow.unit }), dockedMetainfo ? (_jsx(DockedGraphTooltip, { table: table, row: hoveringRow, level: hoveringLevel ?? 0, total: total, totalUnfiltered: total + filtered, profileType: profileType, unit: arrow.unit })) : (!isContextMenuOpen && (_jsx(GraphTooltipArrow, { contextElement: svg.current, isContextMenuOpen: isContextMenuOpen, children: _jsx(GraphTooltipArrowContent, { table: table, row: hoveringRow, level: hoveringLevel ?? 0, isFixed: false, total: total, totalUnfiltered: total + filtered, profileType: profileType, unit: arrow.unit }) }))), root] }) }));
177
+ return (_jsx(_Fragment, { children: _jsxs("div", { onMouseLeave: () => dispatch(setHoveringNode(undefined)), children: [_jsx(ContextMenu, { menuId: MENU_ID, table: table, row: hoveringRow ?? 0, level: hoveringLevel ?? 0, total: total, totalUnfiltered: total + filtered, profileType: profileType, compareAbsolute: compareAbsolute, trackVisibility: trackVisibility, curPath: curPath, setCurPath: setCurPath, hideMenu: hideAll, hideBinary: hideBinary, unit: arrow.unit }), dockedMetainfo ? (_jsx(DockedGraphTooltip, { table: table, row: hoveringRow, level: hoveringLevel ?? 0, total: total, totalUnfiltered: total + filtered, profileType: profileType, unit: arrow.unit, compareAbsolute: compareAbsolute })) : (!isContextMenuOpen && (_jsx(GraphTooltipArrow, { contextElement: svg.current, isContextMenuOpen: isContextMenuOpen, children: _jsx(GraphTooltipArrowContent, { table: table, row: hoveringRow, level: hoveringLevel ?? 0, isFixed: false, total: total, totalUnfiltered: total + filtered, profileType: profileType, unit: arrow.unit, compareAbsolute: compareAbsolute }) }))), root] }) }));
181
178
  });
182
179
  export default IcicleGraphArrow;
@@ -5,12 +5,10 @@ interface Props {
5
5
  isDarkMode: boolean;
6
6
  compareMode: boolean;
7
7
  cumulative: bigint;
8
- cumulativePerSecond: number | null;
9
8
  diff: bigint | null;
10
- diffPerSecond: number | null;
11
9
  mappingColors: mappingColors;
12
10
  mappingFile: string | null;
13
11
  }
14
- declare const useNodeColor: ({ isDarkMode, compareMode, cumulative, cumulativePerSecond, diff, diffPerSecond, mappingColors, mappingFile, }: Props) => string;
12
+ declare const useNodeColor: ({ isDarkMode, compareMode, cumulative, diff, mappingColors, mappingFile, }: Props) => string;
15
13
  export default useNodeColor;
16
14
  //# sourceMappingURL=useNodeColor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useNodeColor.d.ts","sourceRoot":"","sources":["../../../src/ProfileIcicleGraph/IcicleGraphArrow/useNodeColor.ts"],"names":[],"mappings":"AAgBA,UAAU,aAAa;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,UAAU,KAAK;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,QAAA,MAAM,YAAY,mHASf,KAAK,KAAG,MAUV,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"useNodeColor.d.ts","sourceRoot":"","sources":["../../../src/ProfileIcicleGraph/IcicleGraphArrow/useNodeColor.ts"],"names":[],"mappings":"AAgBA,UAAU,aAAa;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,UAAU,KAAK;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,QAAA,MAAM,YAAY,+EAOf,KAAK,KAAG,MAMV,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -11,12 +11,9 @@
11
11
  // See the License for the specific language governing permissions and
12
12
  // limitations under the License.
13
13
  import { EVERYTHING_ELSE } from '@parca/store';
14
- import { diffColor, diffColorPerSecond, getLastItem } from '@parca/utilities';
15
- const useNodeColor = ({ isDarkMode, compareMode, cumulative, cumulativePerSecond, diff, diffPerSecond, mappingColors, mappingFile, }) => {
14
+ import { diffColor, getLastItem } from '@parca/utilities';
15
+ const useNodeColor = ({ isDarkMode, compareMode, cumulative, diff, mappingColors, mappingFile, }) => {
16
16
  if (compareMode) {
17
- if (cumulativePerSecond !== null && diffPerSecond !== null) {
18
- return diffColorPerSecond(diffPerSecond, cumulativePerSecond, isDarkMode);
19
- }
20
17
  return diffColor(diff ?? 0n, cumulative, isDarkMode);
21
18
  }
22
19
  return mappingColors[getLastItem(mappingFile ?? '') ?? EVERYTHING_ELSE];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ProfileIcicleGraph/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAKvE,OAAO,EAAC,UAAU,EAAE,eAAe,EAAC,MAAM,eAAe,CAAC;AAS1D,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAc1C,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;AAEpE,UAAU,uBAAuB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACvB,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC;IACxD,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAyHD,QAAA,MAAM,kBAAkB,6IAcrB,uBAAuB,KAAG,GAAG,CAAC,OAgPhC,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ProfileIcicleGraph/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAKvE,OAAO,EAAC,UAAU,EAAE,eAAe,EAAC,MAAM,eAAe,CAAC;AAS1D,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAc1C,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;AAEpE,UAAU,uBAAuB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACvB,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC;IACxD,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAyHD,QAAA,MAAM,kBAAkB,6IAcrB,uBAAuB,KAAG,GAAG,CAAC,OAkPhC,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -130,7 +130,7 @@ const ProfileIcicleGraph = function ProfileIcicleGraphNonMemo({ graph, arrow, to
130
130
  if (graph !== undefined)
131
131
  return (_jsx(IcicleGraph, { width: width, graph: graph, total: total, filtered: filtered, curPath: curPath, setCurPath: setNewCurPath, profileType: profileType }));
132
132
  if (arrow !== undefined)
133
- return (_jsx(IcicleGraphArrow, { width: width, arrow: arrow, total: total, filtered: filtered, curPath: curPath, setCurPath: setNewCurPath, profileType: profileType, sortBy: storeSortBy, flamegraphLoading: isLoading, isHalfScreen: isHalfScreen, mappingsListFromMetadata: mappingsList }));
133
+ return (_jsx(IcicleGraphArrow, { width: width, arrow: arrow, total: total, filtered: filtered, curPath: curPath, setCurPath: setNewCurPath, profileType: profileType, sortBy: storeSortBy, flamegraphLoading: isLoading, isHalfScreen: isHalfScreen, mappingsListFromMetadata: mappingsList, compareAbsolute: isCompareAbsolute }));
134
134
  }, [
135
135
  isLoading,
136
136
  graph,
@@ -146,6 +146,7 @@ const ProfileIcicleGraph = function ProfileIcicleGraphNonMemo({ graph, arrow, to
146
146
  isHalfScreen,
147
147
  isDarkMode,
148
148
  mappingsList,
149
+ isCompareAbsolute,
149
150
  ]);
150
151
  if (error != null) {
151
152
  onError?.(error);
package/package.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "@parca/profile",
3
- "version": "0.16.417",
3
+ "version": "0.16.418",
4
4
  "description": "Profile viewing libraries",
5
5
  "dependencies": {
6
6
  "@headlessui/react": "^1.7.19",
7
7
  "@iconify/react": "^4.0.0",
8
8
  "@parca/client": "0.16.123",
9
- "@parca/components": "0.16.294",
9
+ "@parca/components": "0.16.295",
10
10
  "@parca/dynamicsize": "0.16.65",
11
- "@parca/hooks": "0.0.68",
11
+ "@parca/hooks": "0.0.69",
12
12
  "@parca/icons": "0.16.70",
13
13
  "@parca/parser": "0.16.77",
14
- "@parca/store": "0.16.157",
15
- "@parca/utilities": "0.0.84",
14
+ "@parca/store": "0.16.158",
15
+ "@parca/utilities": "0.0.85",
16
16
  "@popperjs/core": "^2.11.8",
17
17
  "@protobuf-ts/runtime-rpc": "^2.5.0",
18
18
  "@tanstack/react-query": "^4.0.5",
@@ -73,5 +73,5 @@
73
73
  "access": "public",
74
74
  "registry": "https://registry.npmjs.org/"
75
75
  },
76
- "gitHead": "42342c1a093040c94a83beb1161beedcaa2f8580"
76
+ "gitHead": "cdd20a679a256fa717088741fb9065eaec99c2d3"
77
77
  }
@@ -33,6 +33,7 @@ interface GraphTooltipArrowContentProps {
33
33
  row: number | null;
34
34
  level: number;
35
35
  isFixed: boolean;
36
+ compareAbsolute: boolean;
36
37
  }
37
38
 
38
39
  const NoData = (): React.JSX.Element => {
@@ -48,6 +49,7 @@ const GraphTooltipArrowContent = ({
48
49
  row,
49
50
  level,
50
51
  isFixed,
52
+ compareAbsolute,
51
53
  }: GraphTooltipArrowContentProps): React.JSX.Element => {
52
54
  const graphTooltipData = useGraphTooltip({
53
55
  table,
@@ -57,6 +59,7 @@ const GraphTooltipArrowContent = ({
57
59
  totalUnfiltered,
58
60
  row,
59
61
  level,
62
+ compareAbsolute,
60
63
  });
61
64
 
62
65
  if (graphTooltipData === null) {
@@ -67,9 +70,7 @@ const GraphTooltipArrowContent = ({
67
70
  name,
68
71
  locationAddress,
69
72
  cumulativeText,
70
- cumulativePerSecondText,
71
73
  flatText,
72
- flatPerSecondText,
73
74
  diffText,
74
75
  diff,
75
76
  row: rowNumber,
@@ -102,32 +103,12 @@ const GraphTooltipArrowContent = ({
102
103
  <div>{cumulativeText}</div>
103
104
  </td>
104
105
  </tr>
105
- {profileType?.delta ?? false ? (
106
- <tr>
107
- <td className="w-1/4"></td>
108
- <td className="w-3/4">
109
- <div>{cumulativePerSecondText}</div>
110
- </td>
111
- </tr>
112
- ) : (
113
- <></>
114
- )}
115
106
  <tr>
116
107
  <td className="w-1/4 pt-2">Flat</td>
117
108
  <td className="w-3/4 pt-2">
118
109
  <div>{flatText}</div>
119
110
  </td>
120
111
  </tr>
121
- {profileType?.delta ?? false ? (
122
- <tr>
123
- <td className="w-1/4"></td>
124
- <td className="w-3/4">
125
- <div>{flatPerSecondText}</div>
126
- </td>
127
- </tr>
128
- ) : (
129
- <></>
130
- )}
131
112
  {diff !== 0n && (
132
113
  <tr>
133
114
  <td className="w-1/4 pt-2">Diff</td>
@@ -32,6 +32,7 @@ interface Props {
32
32
  level: number;
33
33
  profileType?: ProfileType;
34
34
  unit?: string;
35
+ compareAbsolute: boolean;
35
36
  }
36
37
 
37
38
  const InfoSection = ({
@@ -63,6 +64,7 @@ export const DockedGraphTooltip = ({
63
64
  level,
64
65
  profileType,
65
66
  unit,
67
+ compareAbsolute,
66
68
  }: Props): JSX.Element => {
67
69
  let {width} = useWindowSize();
68
70
  const {profileExplorer} = useParcaContext();
@@ -77,6 +79,7 @@ export const DockedGraphTooltip = ({
77
79
  totalUnfiltered,
78
80
  row,
79
81
  level,
82
+ compareAbsolute,
80
83
  });
81
84
 
82
85
  const {
@@ -93,15 +96,7 @@ export const DockedGraphTooltip = ({
93
96
  return <></>;
94
97
  }
95
98
 
96
- const {
97
- name,
98
- cumulativeText,
99
- cumulativePerSecondText,
100
- flatText,
101
- flatPerSecondText,
102
- diffText,
103
- diff,
104
- } = graphTooltipData;
99
+ const {name, cumulativeText, flatText, diffText, diff} = graphTooltipData;
105
100
 
106
101
  const labels = labelPairs.map(
107
102
  (l): React.JSX.Element => (
@@ -118,9 +113,6 @@ export const DockedGraphTooltip = ({
118
113
  const inlinedText = inlined === null ? 'merged' : inlined ? 'yes' : 'no';
119
114
  const addressText = locationAddress !== 0n ? hexifyAddress(locationAddress) : <NoData />;
120
115
 
121
- const cumulativeTextBoth = `${cumulativeText}\n${cumulativePerSecondText}`;
122
- const flatTextBoth = `${flatText}\n${flatPerSecondText}`;
123
-
124
116
  return (
125
117
  <div
126
118
  className="fixed bottom-0 z-20 overflow-hidden rounded-t-lg border-l border-r border-t border-gray-400 bg-white bg-opacity-90 px-8 py-3 dark:border-gray-600 dark:bg-black dark:bg-opacity-80"
@@ -141,8 +133,8 @@ export const DockedGraphTooltip = ({
141
133
  )}
142
134
  </div>
143
135
  <div className="flex justify-between gap-3">
144
- <InfoSection title="Cumulative" value={cumulativeTextBoth} minWidth="w-44" />
145
- <InfoSection title="Flat" value={flatTextBoth} minWidth="w-44" />
136
+ <InfoSection title="Cumulative" value={cumulativeText} minWidth="w-44" />
137
+ <InfoSection title="Flat" value={flatText} minWidth="w-44" />
146
138
  {diff !== 0n ? <InfoSection title="Diff" value={diffText} minWidth="w-44" /> : null}
147
139
  <InfoSection
148
140
  title="File"
@@ -18,18 +18,11 @@ import {divide, valueFormatter} from '@parca/utilities';
18
18
 
19
19
  import {
20
20
  FIELD_CUMULATIVE,
21
- FIELD_CUMULATIVE_PER_SECOND,
22
21
  FIELD_DIFF,
23
- FIELD_DIFF_PER_SECOND,
24
22
  FIELD_FLAT,
25
- FIELD_FLAT_PER_SECOND,
26
23
  FIELD_LOCATION_ADDRESS,
27
24
  } from '../../ProfileIcicleGraph/IcicleGraphArrow';
28
- import {
29
- getTextForCumulative,
30
- getTextForCumulativePerSecond,
31
- nodeLabel,
32
- } from '../../ProfileIcicleGraph/IcicleGraphArrow/utils';
25
+ import {getTextForCumulative, nodeLabel} from '../../ProfileIcicleGraph/IcicleGraphArrow/utils';
33
26
 
34
27
  interface Props {
35
28
  table: Table<any>;
@@ -37,6 +30,7 @@ interface Props {
37
30
  unit?: string;
38
31
  total: bigint;
39
32
  totalUnfiltered: bigint;
33
+ compareAbsolute: boolean;
40
34
  row: number | null;
41
35
  level: number;
42
36
  }
@@ -45,9 +39,7 @@ interface GraphTooltipData {
45
39
  name: string;
46
40
  locationAddress: bigint;
47
41
  cumulativeText: string;
48
- cumulativePerSecondText: string;
49
42
  flatText: string;
50
- flatPerSecondText: string;
51
43
  diffText: string;
52
44
  diff: bigint;
53
45
  row: number;
@@ -57,6 +49,7 @@ export const useGraphTooltip = ({
57
49
  table,
58
50
  profileType,
59
51
  unit,
52
+ compareAbsolute,
60
53
  total,
61
54
  totalUnfiltered,
62
55
  row,
@@ -73,43 +66,23 @@ export const useGraphTooltip = ({
73
66
  table.getChild(FIELD_CUMULATIVE)?.get(row) !== null
74
67
  ? BigInt(table.getChild(FIELD_CUMULATIVE)?.get(row))
75
68
  : 0n;
76
- const cumulativePerSecond: number =
77
- table.getChild(FIELD_CUMULATIVE_PER_SECOND)?.get(row) !== null
78
- ? table.getChild(FIELD_CUMULATIVE_PER_SECOND)?.get(row)
79
- : 0;
80
69
  const flat: bigint =
81
70
  table.getChild(FIELD_FLAT)?.get(row) !== null
82
71
  ? BigInt(table.getChild(FIELD_FLAT)?.get(row))
83
72
  : 0n;
84
- const flatPerSecond: number =
85
- table.getChild(FIELD_FLAT_PER_SECOND)?.get(row) !== null
86
- ? table.getChild(FIELD_FLAT_PER_SECOND)?.get(row)
87
- : 0;
88
73
  const diff: bigint =
89
74
  table.getChild(FIELD_DIFF)?.get(row) !== null
90
75
  ? BigInt(table.getChild(FIELD_DIFF)?.get(row))
91
76
  : 0n;
92
- const diffPerSecond: number =
93
- table.getChild(FIELD_DIFF_PER_SECOND)?.get(row) !== null
94
- ? table.getChild(FIELD_DIFF_PER_SECOND)?.get(row)
95
- : 0;
96
77
 
97
78
  let diffText = '';
98
- if (profileType?.delta ?? false) {
99
- const prevValue = cumulativePerSecond - diffPerSecond;
100
- const diffRatio = diffPerSecond !== 0 ? diffPerSecond / prevValue : 0;
101
- const diffSign = diffPerSecond > 0 ? '+' : '';
102
- const diffValueText = diffSign + valueFormatter(diffPerSecond, 'CPU Cores', 5);
103
- const diffPercentageText = diffSign + (diffRatio * 100).toFixed(2) + '%';
104
- diffText = `${diffValueText} (${diffPercentageText})`;
105
- } else {
106
- const prevValue = cumulative - diff;
107
- const diffRatio = diff !== 0n ? divide(diff, prevValue) : 0;
108
- const diffSign = diff > 0 ? '+' : '';
109
- const diffValueText = diffSign + valueFormatter(diff, unit, 1);
110
- const diffPercentageText = diffSign + (diffRatio * 100).toFixed(2) + '%';
111
- diffText = `${diffValueText} (${diffPercentageText})`;
112
- }
79
+ const prevValue = cumulative - diff;
80
+ const diffRatio = diff !== 0n ? divide(diff, prevValue) : 0;
81
+ const diffSign = diff > 0 ? '+' : '';
82
+ const diffValueText = diffSign + valueFormatter(diff, unit, 1);
83
+ const diffPercentageText = diffSign + (diffRatio * 100).toFixed(2) + '%';
84
+
85
+ diffText = compareAbsolute ? `${diffValueText} (${diffPercentageText})` : diffPercentageText;
113
86
 
114
87
  const name = nodeLabel(table, row, level, false);
115
88
 
@@ -117,12 +90,7 @@ export const useGraphTooltip = ({
117
90
  name,
118
91
  locationAddress,
119
92
  cumulativeText: getTextForCumulative(cumulative, totalUnfiltered, total, unit ?? ''),
120
- cumulativePerSecondText: getTextForCumulativePerSecond(
121
- cumulativePerSecond,
122
- unit ?? 'CPU Cores'
123
- ),
124
93
  flatText: getTextForCumulative(flat, totalUnfiltered, total, unit ?? ''),
125
- flatPerSecondText: getTextForCumulativePerSecond(flatPerSecond, unit ?? 'CPU Cores'),
126
94
  diffText,
127
95
  diff,
128
96
  row,
@@ -34,6 +34,7 @@ interface ContextMenuProps {
34
34
  totalUnfiltered: bigint;
35
35
  row: number;
36
36
  level: number;
37
+ compareAbsolute: boolean;
37
38
  trackVisibility: (isVisible: boolean) => void;
38
39
  curPath: string[];
39
40
  setCurPath: (path: string[]) => void;
@@ -48,6 +49,7 @@ const ContextMenu = ({
48
49
  totalUnfiltered,
49
50
  row,
50
51
  level,
52
+ compareAbsolute,
51
53
  trackVisibility,
52
54
  curPath,
53
55
  setCurPath,
@@ -69,6 +71,7 @@ const ContextMenu = ({
69
71
  totalUnfiltered,
70
72
  row,
71
73
  level,
74
+ compareAbsolute,
72
75
  });
73
76
 
74
77
  const {
@@ -26,9 +26,7 @@ import {ProfileType} from '@parca/parser';
26
26
  import {
27
27
  FIELD_CHILDREN,
28
28
  FIELD_CUMULATIVE,
29
- FIELD_CUMULATIVE_PER_SECOND,
30
29
  FIELD_DIFF,
31
- FIELD_DIFF_PER_SECOND,
32
30
  FIELD_FUNCTION_NAME,
33
31
  FIELD_MAPPING_FILE,
34
32
  } from './index';
@@ -224,18 +222,12 @@ export const IcicleNode = React.memo(function IcicleNodeNoMemo({
224
222
  const mappingColumn = table.getChild(FIELD_MAPPING_FILE);
225
223
  const functionNameColumn = table.getChild(FIELD_FUNCTION_NAME);
226
224
  const cumulativeColumn = table.getChild(FIELD_CUMULATIVE);
227
- const cumulativePerSecondColumn = table.getChild(FIELD_CUMULATIVE_PER_SECOND);
228
225
  const diffColumn = table.getChild(FIELD_DIFF);
229
- const diffPerSecondColumn = table.getChild(FIELD_DIFF_PER_SECOND);
230
226
  // get the actual values from the columns
231
227
  const mappingFile: string | null = arrowToString(mappingColumn?.get(row));
232
228
  const functionName: string | null = arrowToString(functionNameColumn?.get(row));
233
229
  const cumulative = cumulativeColumn?.get(row) !== null ? BigInt(cumulativeColumn?.get(row)) : 0n;
234
- const cumulativePerSecond: number | null =
235
- cumulativePerSecondColumn?.get(row) != null ? cumulativePerSecondColumn.get(row) : 0;
236
230
  const diff: bigint | null = diffColumn?.get(row) !== null ? BigInt(diffColumn?.get(row)) : null;
237
- const diffPerSecond: number | null =
238
- diffPerSecondColumn?.get(row) != null ? diffPerSecondColumn.get(row) : null;
239
231
  const childRows: number[] = Array.from(table.getChild(FIELD_CHILDREN)?.get(row) ?? []);
240
232
 
241
233
  const highlightedNodes = useMemo(() => {
@@ -274,15 +266,6 @@ export const IcicleNode = React.memo(function IcicleNodeNoMemo({
274
266
  });
275
267
  break;
276
268
  case FIELD_CUMULATIVE:
277
- if (profileType?.delta ?? false) {
278
- childRows.sort((a, b) => {
279
- const aCumulativePerSecond = cumulativePerSecondColumn?.get(a);
280
- const bCumulativePerSecond = cumulativePerSecondColumn?.get(b);
281
- return bCumulativePerSecond - aCumulativePerSecond;
282
- });
283
- break;
284
- }
285
-
286
269
  childRows.sort((a, b) => {
287
270
  const aCumulative: bigint = cumulativeColumn?.get(a);
288
271
  const bCumulative: bigint = cumulativeColumn?.get(b);
@@ -291,48 +274,22 @@ export const IcicleNode = React.memo(function IcicleNodeNoMemo({
291
274
  break;
292
275
  case FIELD_DIFF:
293
276
  childRows.sort((a, b) => {
294
- if (profileType?.delta ?? false) {
295
- let aRatio: number | null = null;
296
- let bRatio: number | null = null;
297
-
298
- const aDiff: number | null = diffPerSecondColumn?.get(a);
299
- if (aDiff !== null) {
300
- const cumulative: number = cumulativePerSecondColumn?.get(a);
301
- const prev = cumulative - aDiff;
302
- aRatio = aDiff / prev;
303
- }
304
-
305
- const bDiff: number | null = diffPerSecondColumn?.get(b);
306
- if (bDiff !== null) {
307
- const cumulative: number = cumulativePerSecondColumn?.get(b);
308
- const prev = cumulative - bDiff;
309
- bRatio = bDiff / prev;
310
- }
311
-
312
- if (aRatio !== null && bRatio !== null) {
313
- return bRatio - aRatio;
314
- }
315
- if (aRatio === null && bRatio !== null) {
316
- return -1;
317
- }
318
- if (aRatio !== null && bRatio === null) {
319
- return 1;
320
- }
321
- // both are null
322
- return 0;
323
- }
324
-
325
277
  let aRatio: number | null = null;
326
- const aDiff: bigint | null = diffColumn?.get(a);
278
+ const aDiff: bigint | null =
279
+ diffColumn?.get(a) !== null ? BigInt(diffColumn?.get(a)) : null;
327
280
  if (aDiff !== null) {
328
- const cumulative: bigint = cumulativeColumn?.get(a) ?? 0n;
281
+ const cumulative: bigint =
282
+ cumulativeColumn?.get(a) !== null ? BigInt(cumulativeColumn?.get(a)) : 0n;
283
+ console.log(typeof cumulative, typeof aDiff);
329
284
  const prev: bigint = cumulative - aDiff;
330
285
  aRatio = Number(aDiff) / Number(prev);
331
286
  }
332
287
  let bRatio: number | null = null;
333
- const bDiff: bigint | null = diffColumn?.get(b);
288
+ const bDiff: bigint | null =
289
+ diffColumn?.get(b) !== null ? BigInt(diffColumn?.get(b)) : null;
334
290
  if (bDiff !== null) {
335
- const cumulative: bigint = cumulativeColumn?.get(b) ?? 0n;
291
+ const cumulative: bigint =
292
+ cumulativeColumn?.get(b) !== null ? BigInt(cumulativeColumn?.get(b)) : 0n;
336
293
  const prev: bigint = cumulative - bDiff;
337
294
  bRatio = Number(bDiff) / Number(prev);
338
295
  }
@@ -357,9 +314,7 @@ export const IcicleNode = React.memo(function IcicleNodeNoMemo({
357
314
  isDarkMode: darkMode,
358
315
  compareMode,
359
316
  cumulative,
360
- cumulativePerSecond,
361
317
  diff,
362
- diffPerSecond,
363
318
  mappingColors,
364
319
  mappingFile,
365
320
  });
@@ -50,11 +50,8 @@ export const FIELD_FUNCTION_START_LINE = 'function_startline';
50
50
  export const FIELD_CHILDREN = 'children';
51
51
  export const FIELD_LABELS = 'labels';
52
52
  export const FIELD_CUMULATIVE = 'cumulative';
53
- export const FIELD_CUMULATIVE_PER_SECOND = 'cumulative_per_second';
54
53
  export const FIELD_FLAT = 'flat';
55
- export const FIELD_FLAT_PER_SECOND = 'flat_per_second';
56
54
  export const FIELD_DIFF = 'diff';
57
- export const FIELD_DIFF_PER_SECOND = 'diff_per_second';
58
55
 
59
56
  interface IcicleGraphArrowProps {
60
57
  arrow: FlamegraphArrow;
@@ -68,6 +65,7 @@ interface IcicleGraphArrowProps {
68
65
  flamegraphLoading: boolean;
69
66
  isHalfScreen: boolean;
70
67
  mappingsListFromMetadata: string[];
68
+ compareAbsolute: boolean;
71
69
  }
72
70
 
73
71
  export const getMappingColors = (
@@ -97,6 +95,7 @@ export const IcicleGraphArrow = memo(function IcicleGraphArrow({
97
95
  sortBy,
98
96
  flamegraphLoading,
99
97
  mappingsListFromMetadata,
98
+ compareAbsolute,
100
99
  }: IcicleGraphArrowProps): React.JSX.Element {
101
100
  const [isContextMenuOpen, setIsContextMenuOpen] = useState<boolean>(false);
102
101
  const dispatch = useAppDispatch();
@@ -301,6 +300,7 @@ export const IcicleGraphArrow = memo(function IcicleGraphArrow({
301
300
  total={total}
302
301
  totalUnfiltered={total + filtered}
303
302
  profileType={profileType}
303
+ compareAbsolute={compareAbsolute}
304
304
  trackVisibility={trackVisibility}
305
305
  curPath={curPath}
306
306
  setCurPath={setCurPath}
@@ -317,6 +317,7 @@ export const IcicleGraphArrow = memo(function IcicleGraphArrow({
317
317
  totalUnfiltered={total + filtered}
318
318
  profileType={profileType}
319
319
  unit={arrow.unit}
320
+ compareAbsolute={compareAbsolute}
320
321
  />
321
322
  ) : (
322
323
  !isContextMenuOpen && (
@@ -330,6 +331,7 @@ export const IcicleGraphArrow = memo(function IcicleGraphArrow({
330
331
  totalUnfiltered={total + filtered}
331
332
  profileType={profileType}
332
333
  unit={arrow.unit}
334
+ compareAbsolute={compareAbsolute}
333
335
  />
334
336
  </GraphTooltipArrow>
335
337
  )
@@ -12,7 +12,7 @@
12
12
  // limitations under the License.
13
13
 
14
14
  import {EVERYTHING_ELSE} from '@parca/store';
15
- import {diffColor, diffColorPerSecond, getLastItem} from '@parca/utilities';
15
+ import {diffColor, getLastItem} from '@parca/utilities';
16
16
 
17
17
  interface mappingColors {
18
18
  [key: string]: string;
@@ -22,9 +22,7 @@ interface Props {
22
22
  isDarkMode: boolean;
23
23
  compareMode: boolean;
24
24
  cumulative: bigint;
25
- cumulativePerSecond: number | null;
26
25
  diff: bigint | null;
27
- diffPerSecond: number | null;
28
26
  mappingColors: mappingColors;
29
27
  mappingFile: string | null;
30
28
  }
@@ -33,17 +31,11 @@ const useNodeColor = ({
33
31
  isDarkMode,
34
32
  compareMode,
35
33
  cumulative,
36
- cumulativePerSecond,
37
34
  diff,
38
- diffPerSecond,
39
35
  mappingColors,
40
36
  mappingFile,
41
37
  }: Props): string => {
42
38
  if (compareMode) {
43
- if (cumulativePerSecond !== null && diffPerSecond !== null) {
44
- return diffColorPerSecond(diffPerSecond, cumulativePerSecond, isDarkMode);
45
- }
46
-
47
39
  return diffColor(diff ?? 0n, cumulative, isDarkMode);
48
40
  }
49
41
 
@@ -368,6 +368,7 @@ const ProfileIcicleGraph = function ProfileIcicleGraphNonMemo({
368
368
  flamegraphLoading={isLoading}
369
369
  isHalfScreen={isHalfScreen}
370
370
  mappingsListFromMetadata={mappingsList}
371
+ compareAbsolute={isCompareAbsolute}
371
372
  />
372
373
  );
373
374
  }, [
@@ -385,6 +386,7 @@ const ProfileIcicleGraph = function ProfileIcicleGraphNonMemo({
385
386
  isHalfScreen,
386
387
  isDarkMode,
387
388
  mappingsList,
389
+ isCompareAbsolute,
388
390
  ]);
389
391
 
390
392
  if (error != null) {