@parca/profile 0.19.78 → 0.19.79
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.
- package/CHANGELOG.md +4 -0
- package/dist/MetricsGraph/UtilizationMetrics/Throughput.d.ts +1 -1
- package/dist/MetricsGraph/UtilizationMetrics/Throughput.d.ts.map +1 -1
- package/dist/MetricsGraph/UtilizationMetrics/Throughput.js +3 -1
- package/dist/ProfileSelector/MetricsGraphSection.d.ts +1 -1
- package/dist/ProfileSelector/MetricsGraphSection.d.ts.map +1 -1
- package/dist/ProfileSelector/MetricsGraphSection.js +16 -4
- package/dist/ProfileSelector/index.d.ts +1 -1
- package/dist/ProfileSelector/index.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/MetricsGraph/UtilizationMetrics/Throughput.tsx +5 -2
- package/src/ProfileSelector/MetricsGraphSection.tsx +21 -11
- package/src/ProfileSelector/index.tsx +1 -1
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.19.79](https://github.com/parca-dev/parca/compare/@parca/profile@0.19.78...@parca/profile@0.19.79) (2025-11-19)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @parca/profile
|
|
9
|
+
|
|
6
10
|
## [0.19.78](https://github.com/parca-dev/parca/compare/@parca/profile@0.19.77...@parca/profile@0.19.78) (2025-11-19)
|
|
7
11
|
|
|
8
12
|
**Note:** Version bump only for package @parca/profile
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Throughput.d.ts","sourceRoot":"","sources":["../../../src/MetricsGraph/UtilizationMetrics/Throughput.tsx"],"names":[],"mappings":"AAkBA,OAAO,EACL,aAAa,EAId,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAC,KAAK,kBAAkB,IAAI,YAAY,EAAC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"Throughput.d.ts","sourceRoot":"","sources":["../../../src/MetricsGraph/UtilizationMetrics/Throughput.tsx"],"names":[],"mappings":"AAkBA,OAAO,EACL,aAAa,EAId,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAC,KAAK,kBAAkB,IAAI,YAAY,EAAC,MAAM,uBAAuB,CAAC;AAiB9E,UAAU,WAAW;IACnB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,WAAW,EAAE,YAAY,EAAE,CAAC;IAC5B,eAAe,EAAE,CACf,MAAM,EAAE;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,GAAG,KAAK,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC,KACvE,IAAI,CAAC;IACV,YAAY,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,CAAC,EAAE,KAAK,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IACrD,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7D;AAUD,KAAK,KAAK,GAAG,WAAW,GAAG;IACzB,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC,CAAC;AAoRF,QAAA,MAAM,SAAS,GAAI,4JAYhB,KAAK,KAAG,GAAG,CAAC,OA8Cd,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -105,6 +105,7 @@ function transformToSeries(data, isReceive = false) {
|
|
|
105
105
|
}, []),
|
|
106
106
|
labelset: metric.map(m => `${m.name}=${m.value}`).join(','),
|
|
107
107
|
isReceive,
|
|
108
|
+
isSelected: s.isSelected,
|
|
108
109
|
});
|
|
109
110
|
}
|
|
110
111
|
return agg;
|
|
@@ -133,6 +134,7 @@ function transformNetworkSeriesToSeries(transmitData, receiveData) {
|
|
|
133
134
|
timestamp,
|
|
134
135
|
value,
|
|
135
136
|
]),
|
|
137
|
+
highlighted: networkSeries.isSelected ?? false,
|
|
136
138
|
};
|
|
137
139
|
});
|
|
138
140
|
}
|
|
@@ -142,7 +144,7 @@ const RawAreaChart = ({ transmitData, receiveData, transformedData, addLabelMatc
|
|
|
142
144
|
const allOriginalData = useMemo(() => [...transmitData, ...receiveData], [transmitData, receiveData]);
|
|
143
145
|
return (_jsx(MetricsGraph, { data: transformedData, from: from, to: to, setTimeRange: setTimeRange, onSampleClick: closestPoint => {
|
|
144
146
|
if (onSeriesClick != null) {
|
|
145
|
-
onSeriesClick(closestPoint.seriesIndex);
|
|
147
|
+
onSeriesClick(humanReadableName, closestPoint.seriesIndex);
|
|
146
148
|
}
|
|
147
149
|
}, yAxisLabel: humanReadableName, yAxisUnit: "bytes_per_second", width: width, height: height, margin: margin, contextMenuItems: contextMenuItems, renderTooltipContent: (seriesIndex, pointIndex) => {
|
|
148
150
|
if (allOriginalData?.[seriesIndex]?.samples?.[pointIndex] != null) {
|
|
@@ -26,7 +26,7 @@ interface MetricsGraphSectionProps {
|
|
|
26
26
|
data: UtilizationMetricsType[];
|
|
27
27
|
}>;
|
|
28
28
|
utilizationMetricsLoading?: boolean;
|
|
29
|
-
onUtilizationSeriesSelect?: (seriesIndex: number) => void;
|
|
29
|
+
onUtilizationSeriesSelect?: (name: string, seriesIndex: number) => void;
|
|
30
30
|
}
|
|
31
31
|
export declare function MetricsGraphSection({ showMetricsGraph, setDisplayHideMetricsGraphButton, heightStyle, querySelection, profileSelection, comparing, sumBy, defaultSumByLoading, queryClient, queryExpressionString, setTimeRangeSelection, selectQuery, setProfileSelection, query, setNewQueryExpression, utilizationMetrics, utilizationMetricsLoading, onUtilizationSeriesSelect, }: MetricsGraphSectionProps): JSX.Element;
|
|
32
32
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricsGraphSection.d.ts","sourceRoot":"","sources":["../../src/ProfileSelector/MetricsGraphSection.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAQ,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACxD,OAAO,EAAC,aAAa,EAAmB,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAC,KAAK,EAAC,MAAM,eAAe,CAAC;AAEpC,OAAO,EAAC,gBAAgB,EAAC,MAAM,IAAI,CAAC;AAKpC,OAAO,EAAC,cAAc,EAAE,KAAK,kBAAkB,IAAI,sBAAsB,EAAC,MAAM,SAAS,CAAC;AAE1F,UAAU,wBAAwB;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gCAAgC,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,EAAE,kBAAkB,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACtD,WAAW,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7C,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChF,KAAK,EAAE,KAAK,CAAC;IACb,qBAAqB,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3E,kBAAkB,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,kBAAkB,CAAC,EAAE,KAAK,CAAC;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,iBAAiB,EAAE,MAAM,CAAC;QAC1B,IAAI,EAAE,sBAAsB,EAAE,CAAC;KAChC,CAAC,CAAC;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,yBAAyB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"MetricsGraphSection.d.ts","sourceRoot":"","sources":["../../src/ProfileSelector/MetricsGraphSection.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAQ,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACxD,OAAO,EAAC,aAAa,EAAmB,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAC,KAAK,EAAC,MAAM,eAAe,CAAC;AAEpC,OAAO,EAAC,gBAAgB,EAAC,MAAM,IAAI,CAAC;AAKpC,OAAO,EAAC,cAAc,EAAE,KAAK,kBAAkB,IAAI,sBAAsB,EAAC,MAAM,SAAS,CAAC;AAE1F,UAAU,wBAAwB;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gCAAgC,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,EAAE,kBAAkB,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACtD,WAAW,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7C,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChF,KAAK,EAAE,KAAK,CAAC;IACb,qBAAqB,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3E,kBAAkB,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,kBAAkB,CAAC,EAAE,KAAK,CAAC;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,iBAAiB,EAAE,MAAM,CAAC;QAC1B,IAAI,EAAE,sBAAsB,EAAE,CAAC;KAChC,CAAC,CAAC;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,yBAAyB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACzE;AAED,wBAAgB,mBAAmB,CAAC,EAClC,gBAAgB,EAChB,gCAAgC,EAChC,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,KAAK,EACL,qBAAqB,EACrB,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,GAC1B,EAAE,wBAAwB,GAAG,GAAG,CAAC,OAAO,CAsNxC"}
|
|
@@ -85,6 +85,10 @@ export function MetricsGraphSection({ showMetricsGraph, setDisplayHideMetricsGra
|
|
|
85
85
|
const UtilizationGraphToShow = ({ utilizationMetrics, }) => {
|
|
86
86
|
const throughputMetrics = utilizationMetrics.filter(metric => metric.name === 'gpu_pcie_throughput_transmit_bytes' ||
|
|
87
87
|
metric.name === 'gpu_pcie_throughput_receive_bytes');
|
|
88
|
+
const transmitData = throughputMetrics.find(metric => metric.name === 'gpu_pcie_throughput_transmit_bytes')
|
|
89
|
+
?.data ?? [];
|
|
90
|
+
const receiveData = throughputMetrics.find(metric => metric.name === 'gpu_pcie_throughput_receive_bytes')?.data ??
|
|
91
|
+
[];
|
|
88
92
|
if (utilizationMetrics.length === 0) {
|
|
89
93
|
return _jsx(_Fragment, {});
|
|
90
94
|
}
|
|
@@ -94,14 +98,22 @@ export function MetricsGraphSection({ showMetricsGraph, setDisplayHideMetricsGra
|
|
|
94
98
|
return (_jsx(UtilizationMetricsGraph, { data: data, setTimeRange: handleTimeRangeChange, utilizationMetricsLoading: utilizationMetricsLoading, humanReadableName: humanReadableName, from: querySelection.from, to: querySelection.to, yAxisUnit: "percentage", addLabelMatcher: addLabelMatcher, onSeriesClick: seriesIndex => {
|
|
95
99
|
// For generic UtilizationMetrics, just pass the series index
|
|
96
100
|
if (onUtilizationSeriesSelect != null) {
|
|
97
|
-
onUtilizationSeriesSelect(seriesIndex);
|
|
101
|
+
onUtilizationSeriesSelect(name, seriesIndex);
|
|
98
102
|
}
|
|
99
103
|
} }, name));
|
|
100
104
|
}
|
|
101
105
|
return null;
|
|
102
|
-
}), throughputMetrics.length > 0 && (_jsx(AreaChart, { transmitData: throughputMetrics.
|
|
103
|
-
|
|
104
|
-
|
|
106
|
+
}), throughputMetrics.length > 0 && (_jsx(AreaChart, { transmitData: transmitData, receiveData: receiveData, addLabelMatcher: addLabelMatcher, setTimeRange: handleTimeRangeChange, name: throughputMetrics[0].name, humanReadableName: throughputMetrics[0].humanReadableName, from: querySelection.from, to: querySelection.to, utilizationMetricsLoading: utilizationMetricsLoading, selectedSeries: undefined, onSeriesClick: (name, seriesIndex) => {
|
|
107
|
+
// For throughput metrics, just pass the series index
|
|
108
|
+
if (onUtilizationSeriesSelect != null) {
|
|
109
|
+
let name = 'gpu_pcie_throughput_transmit_bytes';
|
|
110
|
+
if (seriesIndex > transmitData.length - 1) {
|
|
111
|
+
name = 'gpu_pcie_throughput_receive_bytes';
|
|
112
|
+
seriesIndex -= transmitData.length;
|
|
113
|
+
}
|
|
114
|
+
onUtilizationSeriesSelect(name, seriesIndex);
|
|
115
|
+
}
|
|
116
|
+
} }))] }));
|
|
105
117
|
};
|
|
106
118
|
return (_jsxs("div", { className: cx('relative', { 'py-4': !showMetricsGraph }), children: [setDisplayHideMetricsGraphButton != null ? (_jsxs("button", { onClick: () => setDisplayHideMetricsGraphButton(!showMetricsGraph), className: cx('hidden px-3 py-1 text-sm font-medium text-gray-700 dark:text-gray-200 bg-gray-100 rounded-md hover:bg-gray-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 dark:bg-gray-900 z-[5]', showMetricsGraph && 'absolute right-0 bottom-3 !flex', !showMetricsGraph && 'relative !flex ml-auto'), children: [showMetricsGraph ? 'Hide' : 'Show', " Metrics Graph"] })) : null, showMetricsGraph && (_jsx(_Fragment, { children: _jsx("div", { style: { height: heightStyle }, children: (querySelection.expression !== '' || defaultSumByLoading) &&
|
|
107
119
|
querySelection.from !== undefined &&
|
|
@@ -52,7 +52,7 @@ interface ProfileSelectorProps extends ProfileSelectorFeatures {
|
|
|
52
52
|
}>;
|
|
53
53
|
utilizationMetricsLoading?: boolean;
|
|
54
54
|
utilizationLabels?: UtilizationLabels;
|
|
55
|
-
onUtilizationSeriesSelect?: (seriesIndex: number) => void;
|
|
55
|
+
onUtilizationSeriesSelect?: (name: string, seriesIndex: number) => void;
|
|
56
56
|
onSearchHook?: () => void;
|
|
57
57
|
}
|
|
58
58
|
export interface IProfileTypesResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ProfileSelector/index.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAC,QAAQ,EAAE,cAAc,EAAoD,MAAM,OAAO,CAAC;AAElG,OAAO,EAAC,QAAQ,EAAC,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAsB,oBAAoB,EAAE,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAY5F,OAAO,EAAyB,KAAK,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAW/E,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,uBAAuB;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE;QACR,MAAM,EAAE,KAAK,CAAC;YACZ,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;SACf,CAAC,CAAC;KACJ,CAAC;IACF,OAAO,EAAE,KAAK,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,iBAAiB;IAChC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,2BAA2B,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACjE,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC;AAED,UAAU,oBAAqB,SAAQ,uBAAuB;IAC5D,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,gCAAgC,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,kBAAkB,CAAC,EAAE,KAAK,CAAC;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,iBAAiB,EAAE,MAAM,CAAC;QAC1B,IAAI,EAAE,kBAAkB,EAAE,CAAC;KAC5B,CAAC,CAAC;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,yBAAyB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ProfileSelector/index.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAC,QAAQ,EAAE,cAAc,EAAoD,MAAM,OAAO,CAAC;AAElG,OAAO,EAAC,QAAQ,EAAC,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAsB,oBAAoB,EAAE,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAY5F,OAAO,EAAyB,KAAK,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAW/E,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,uBAAuB;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE;QACR,MAAM,EAAE,KAAK,CAAC;YACZ,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;SACf,CAAC,CAAC;KACJ,CAAC;IACF,OAAO,EAAE,KAAK,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,iBAAiB;IAChC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,2BAA2B,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACjE,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC;AAED,UAAU,oBAAqB,SAAQ,uBAAuB;IAC5D,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,gCAAgC,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,kBAAkB,CAAC,EAAE,KAAK,CAAC;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,iBAAiB,EAAE,MAAM,CAAC;QAC1B,IAAI,EAAE,kBAAkB,EAAE,CAAC;KAC5B,CAAC,CAAC;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,yBAAyB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED,eAAO,MAAM,eAAe,GAC1B,QAAQ,kBAAkB,EAC1B,QAAQ,MAAM,EACd,MAAM,MAAM,KACX,mBAsBF,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,2TAiBtB,oBAAoB,KAAG,GAAG,CAAC,OA8N7B,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@parca/profile",
|
|
3
|
-
"version": "0.19.
|
|
3
|
+
"version": "0.19.79",
|
|
4
4
|
"description": "Profile viewing libraries",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@floating-ui/react": "^0.27.12",
|
|
@@ -79,5 +79,5 @@
|
|
|
79
79
|
"access": "public",
|
|
80
80
|
"registry": "https://registry.npmjs.org/"
|
|
81
81
|
},
|
|
82
|
-
"gitHead": "
|
|
82
|
+
"gitHead": "a16568e3b3edb645958372f4e0e4d76fa4fc5408"
|
|
83
83
|
}
|
|
@@ -38,6 +38,7 @@ interface NetworkSeries {
|
|
|
38
38
|
values: number[][];
|
|
39
39
|
labelset: string;
|
|
40
40
|
isReceive?: boolean;
|
|
41
|
+
isSelected?: boolean;
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
interface CommonProps {
|
|
@@ -52,7 +53,7 @@ interface CommonProps {
|
|
|
52
53
|
from: number;
|
|
53
54
|
to: number;
|
|
54
55
|
selectedSeries?: Array<{key: string; value: string}>;
|
|
55
|
-
onSeriesClick?: (seriesIndex: number) => void;
|
|
56
|
+
onSeriesClick?: (name: string, seriesIndex: number) => void;
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
type RawAreaChartProps = CommonProps & {
|
|
@@ -186,6 +187,7 @@ function transformToSeries(data: MetricSeries[], isReceive = false): NetworkSeri
|
|
|
186
187
|
}, []),
|
|
187
188
|
labelset: metric.map(m => `${m.name}=${m.value}`).join(','),
|
|
188
189
|
isReceive,
|
|
190
|
+
isSelected: s.isSelected,
|
|
189
191
|
});
|
|
190
192
|
}
|
|
191
193
|
return agg;
|
|
@@ -223,6 +225,7 @@ function transformNetworkSeriesToSeries(
|
|
|
223
225
|
timestamp,
|
|
224
226
|
value,
|
|
225
227
|
]),
|
|
228
|
+
highlighted: networkSeries.isSelected ?? false,
|
|
226
229
|
};
|
|
227
230
|
});
|
|
228
231
|
}
|
|
@@ -259,7 +262,7 @@ const RawAreaChart = ({
|
|
|
259
262
|
setTimeRange={setTimeRange}
|
|
260
263
|
onSampleClick={closestPoint => {
|
|
261
264
|
if (onSeriesClick != null) {
|
|
262
|
-
onSeriesClick(closestPoint.seriesIndex);
|
|
265
|
+
onSeriesClick(humanReadableName, closestPoint.seriesIndex);
|
|
263
266
|
}
|
|
264
267
|
}}
|
|
265
268
|
yAxisLabel={humanReadableName}
|
|
@@ -47,7 +47,7 @@ interface MetricsGraphSectionProps {
|
|
|
47
47
|
data: UtilizationMetricsType[];
|
|
48
48
|
}>;
|
|
49
49
|
utilizationMetricsLoading?: boolean;
|
|
50
|
-
onUtilizationSeriesSelect?: (seriesIndex: number) => void;
|
|
50
|
+
onUtilizationSeriesSelect?: (name: string, seriesIndex: number) => void;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
export function MetricsGraphSection({
|
|
@@ -161,6 +161,12 @@ export function MetricsGraphSection({
|
|
|
161
161
|
metric.name === 'gpu_pcie_throughput_transmit_bytes' ||
|
|
162
162
|
metric.name === 'gpu_pcie_throughput_receive_bytes'
|
|
163
163
|
);
|
|
164
|
+
const transmitData =
|
|
165
|
+
throughputMetrics.find(metric => metric.name === 'gpu_pcie_throughput_transmit_bytes')
|
|
166
|
+
?.data ?? [];
|
|
167
|
+
const receiveData =
|
|
168
|
+
throughputMetrics.find(metric => metric.name === 'gpu_pcie_throughput_receive_bytes')?.data ??
|
|
169
|
+
[];
|
|
164
170
|
|
|
165
171
|
if (utilizationMetrics.length === 0) {
|
|
166
172
|
return <></>;
|
|
@@ -187,7 +193,7 @@ export function MetricsGraphSection({
|
|
|
187
193
|
onSeriesClick={seriesIndex => {
|
|
188
194
|
// For generic UtilizationMetrics, just pass the series index
|
|
189
195
|
if (onUtilizationSeriesSelect != null) {
|
|
190
|
-
onUtilizationSeriesSelect(seriesIndex);
|
|
196
|
+
onUtilizationSeriesSelect(name, seriesIndex);
|
|
191
197
|
}
|
|
192
198
|
}}
|
|
193
199
|
/>
|
|
@@ -197,14 +203,8 @@ export function MetricsGraphSection({
|
|
|
197
203
|
})}
|
|
198
204
|
{throughputMetrics.length > 0 && (
|
|
199
205
|
<AreaChart
|
|
200
|
-
transmitData={
|
|
201
|
-
|
|
202
|
-
?.data ?? []
|
|
203
|
-
}
|
|
204
|
-
receiveData={
|
|
205
|
-
throughputMetrics.find(metric => metric.name === 'gpu_pcie_throughput_receive_bytes')
|
|
206
|
-
?.data ?? []
|
|
207
|
-
}
|
|
206
|
+
transmitData={transmitData}
|
|
207
|
+
receiveData={receiveData}
|
|
208
208
|
addLabelMatcher={addLabelMatcher}
|
|
209
209
|
setTimeRange={handleTimeRangeChange}
|
|
210
210
|
name={throughputMetrics[0].name}
|
|
@@ -213,7 +213,17 @@ export function MetricsGraphSection({
|
|
|
213
213
|
to={querySelection.to}
|
|
214
214
|
utilizationMetricsLoading={utilizationMetricsLoading}
|
|
215
215
|
selectedSeries={undefined}
|
|
216
|
-
onSeriesClick={
|
|
216
|
+
onSeriesClick={(name, seriesIndex) => {
|
|
217
|
+
// For throughput metrics, just pass the series index
|
|
218
|
+
if (onUtilizationSeriesSelect != null) {
|
|
219
|
+
let name = 'gpu_pcie_throughput_transmit_bytes';
|
|
220
|
+
if (seriesIndex > transmitData.length - 1) {
|
|
221
|
+
name = 'gpu_pcie_throughput_receive_bytes';
|
|
222
|
+
seriesIndex -= transmitData.length;
|
|
223
|
+
}
|
|
224
|
+
onUtilizationSeriesSelect(name, seriesIndex);
|
|
225
|
+
}
|
|
226
|
+
}}
|
|
217
227
|
/>
|
|
218
228
|
)}
|
|
219
229
|
</div>
|
|
@@ -92,7 +92,7 @@ interface ProfileSelectorProps extends ProfileSelectorFeatures {
|
|
|
92
92
|
}>;
|
|
93
93
|
utilizationMetricsLoading?: boolean;
|
|
94
94
|
utilizationLabels?: UtilizationLabels;
|
|
95
|
-
onUtilizationSeriesSelect?: (seriesIndex: number) => void;
|
|
95
|
+
onUtilizationSeriesSelect?: (name: string, seriesIndex: number) => void;
|
|
96
96
|
onSearchHook?: () => void;
|
|
97
97
|
}
|
|
98
98
|
|