@parca/profile 0.19.78 → 0.19.80
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 +8 -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 +4 -2
- package/dist/MetricsGraph/UtilizationMetrics/index.js +1 -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 +6 -3
- package/src/MetricsGraph/UtilizationMetrics/index.tsx +1 -1
- package/src/ProfileSelector/MetricsGraphSection.tsx +21 -11
- package/src/ProfileSelector/index.tsx +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
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.80](https://github.com/parca-dev/parca/compare/@parca/profile@0.19.79...@parca/profile@0.19.80) (2025-11-20)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @parca/profile
|
|
9
|
+
|
|
10
|
+
## [0.19.79](https://github.com/parca-dev/parca/compare/@parca/profile@0.19.78...@parca/profile@0.19.79) (2025-11-19)
|
|
11
|
+
|
|
12
|
+
**Note:** Version bump only for package @parca/profile
|
|
13
|
+
|
|
6
14
|
## [0.19.78](https://github.com/parca-dev/parca/compare/@parca/profile@0.19.77...@parca/profile@0.19.78) (2025-11-19)
|
|
7
15
|
|
|
8
16
|
**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) {
|
|
@@ -168,6 +170,6 @@ const AreaChart = ({ transmitData, receiveData, addLabelMatcher, setTimeRange, u
|
|
|
168
170
|
const contextMenuItems = useMemo(() => {
|
|
169
171
|
return createThroughputContextMenuItems(addLabelMatcher, transmitData, receiveData);
|
|
170
172
|
}, [addLabelMatcher, transmitData, receiveData]);
|
|
171
|
-
return (_jsx(AnimatePresence, { children: _jsx(motion.div, { className: "w-full relative", initial:
|
|
173
|
+
return (_jsx(AnimatePresence, { children: _jsx(motion.div, { className: "w-full relative", initial: false, animate: { display: 'block', opacity: 1 }, transition: { duration: 0.5 }, children: utilizationMetricsLoading === true ? (_jsx(MetricsGraphSkeleton, { heightStyle: heightStyle, isDarkMode: isDarkMode, isMini: true })) : (_jsx(RawAreaChart, { transmitData: transmitData, receiveData: receiveData, transformedData: transformedData, addLabelMatcher: addLabelMatcher, setTimeRange: setTimeRange, width: width, height: height, margin: margin, name: name, humanReadableName: humanReadableName, from: from, to: to, selectedSeries: selectedSeries, onSeriesClick: onSeriesClick, contextMenuItems: contextMenuItems })) }, "area-chart-graph-loaded") }));
|
|
172
174
|
};
|
|
173
175
|
export default AreaChart;
|
|
@@ -181,6 +181,6 @@ const UtilizationMetrics = ({ data, setTimeRange, utilizationMetricsLoading, hum
|
|
|
181
181
|
const contextMenuItems = useMemo(() => {
|
|
182
182
|
return addLabelMatcher != null ? createUtilizationContextMenuItems(addLabelMatcher, data) : [];
|
|
183
183
|
}, [addLabelMatcher, data]);
|
|
184
|
-
return (_jsx(AnimatePresence, { children: _jsx(motion.div, { className: "w-full relative", initial:
|
|
184
|
+
return (_jsx(AnimatePresence, { children: _jsx(motion.div, { className: "w-full relative", initial: false, animate: { display: 'block', opacity: 1 }, transition: { duration: 0.5 }, children: utilizationMetricsLoading === true ? (_jsx(MetricsGraphSkeleton, { heightStyle: heightStyle, isDarkMode: isDarkMode, isMini: true })) : (_jsx(RawUtilizationMetrics, { data: transformedData, originalData: data, setTimeRange: setTimeRange, width: width, height: height, margin: margin, humanReadableName: humanReadableName, from: from, to: to, yAxisUnit: yAxisUnit, contextMenuItems: contextMenuItems, onSeriesClick: onSeriesClick })) }, "utilization-metrics-graph-loaded") }));
|
|
185
185
|
};
|
|
186
186
|
export default UtilizationMetrics;
|
|
@@ -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: (_, 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.80",
|
|
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": "1a4ba8b90138ac3de4225e79af63a22104c13272"
|
|
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}
|
|
@@ -369,7 +372,7 @@ const AreaChart = ({
|
|
|
369
372
|
<motion.div
|
|
370
373
|
className="w-full relative"
|
|
371
374
|
key="area-chart-graph-loaded"
|
|
372
|
-
initial={
|
|
375
|
+
initial={false}
|
|
373
376
|
animate={{display: 'block', opacity: 1}}
|
|
374
377
|
transition={{duration: 0.5}}
|
|
375
378
|
>
|
|
@@ -396,7 +396,7 @@ const UtilizationMetrics = ({
|
|
|
396
396
|
<motion.div
|
|
397
397
|
className="w-full relative"
|
|
398
398
|
key="utilization-metrics-graph-loaded"
|
|
399
|
-
initial={
|
|
399
|
+
initial={false}
|
|
400
400
|
animate={{display: 'block', opacity: 1}}
|
|
401
401
|
transition={{duration: 0.5}}
|
|
402
402
|
>
|
|
@@ -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={(_, 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
|
|