@@ -128,6 +128,8 @@ export function TraceBreakdownRenderer({
128128 sliceEnd = { breakdown . end }
129129 sliceDurationReal = { breakdown . duration }
130130 sliceSecondaryName = { breakdown . sdkName }
131+ sliceNumberStart = { breakdown . sliceStart }
132+ sliceNumberWidth = { breakdown . sliceWidth }
131133 trace = { trace }
132134 theme = { theme }
133135 offset = { index }
@@ -146,16 +148,22 @@ export function TraceBreakdownRenderer({
146148 ) ;
147149}
148150
149- const BREAKDOWN_BAR_SIZE = 200 ;
150- const BREAKDOWN_QUANTIZE_STEP = 1 ;
151- const BREAKDOWN_NUM_SLICES = BREAKDOWN_BAR_SIZE / BREAKDOWN_QUANTIZE_STEP ; // 200
151+ const BREAKDOWN_SIZE_PX = 200 ;
152+ export const BREAKDOWN_SLICES = 40 ;
152153
154+ /**
155+ * This renders slices in two different ways;
156+ * - Slices in the breakdown for the trace. These have slice numbers returned for quantization from the backend.
157+ * - Slices derived from span timings. Spans aren't quantized into slices.
158+ */
153159export function SpanBreakdownSliceRenderer ( {
154160 trace,
155161 theme,
156162 sliceName,
157163 sliceStart,
158164 sliceEnd,
165+ sliceNumberStart,
166+ sliceNumberWidth,
159167 sliceDurationReal,
160168 sliceSecondaryName,
161169 onMouseEnter,
@@ -170,26 +178,34 @@ export function SpanBreakdownSliceRenderer({
170178 trace : TraceResult < Field > ;
171179 offset ?: number ;
172180 sliceDurationReal ?: number ;
181+ sliceNumberStart ?: number ;
182+ sliceNumberWidth ?: number ;
173183} ) {
174- const traceSliceSize = ( trace . end - trace . start ) / BREAKDOWN_NUM_SLICES ;
175- const traceDuration = BREAKDOWN_NUM_SLICES * traceSliceSize ;
184+ const traceDuration = trace . end - trace . start ;
176185
177186 const sliceDuration = sliceEnd - sliceStart ;
178187
179- if ( sliceDuration <= 0 ) {
188+ if ( sliceNumberWidth === 0 && sliceNumberWidth === undefined && sliceDuration <= 0 ) {
189+ // No slice width or no duration width if it's a regular span.
180190 return null ;
181191 }
182192
193+ const pixelsPerSlice = BREAKDOWN_SIZE_PX / BREAKDOWN_SLICES ;
194+ const relativeSliceStart = sliceStart - trace . start ;
195+
183196 const stylingSliceName = getStylingSliceName ( sliceName , sliceSecondaryName ) ;
184197 const sliceColor = stylingSliceName ? pickBarColor ( stylingSliceName ) : theme . gray100 ;
185198
186199 const sliceWidth =
187- BREAKDOWN_QUANTIZE_STEP *
188- Math . ceil ( BREAKDOWN_NUM_SLICES * ( sliceDuration / traceDuration ) ) ;
189- const relativeSliceStart = sliceStart - trace . start ;
200+ sliceNumberWidth !== undefined
201+ ? pixelsPerSlice * sliceNumberWidth
202+ : pixelsPerSlice * Math . ceil ( BREAKDOWN_SLICES * ( sliceDuration / traceDuration ) ) ;
190203 const sliceOffset =
191- BREAKDOWN_QUANTIZE_STEP *
192- Math . floor ( ( BREAKDOWN_NUM_SLICES * relativeSliceStart ) / traceDuration ) ;
204+ sliceNumberStart !== undefined
205+ ? pixelsPerSlice * sliceNumberStart
206+ : pixelsPerSlice *
207+ Math . floor ( ( BREAKDOWN_SLICES * relativeSliceStart ) / traceDuration ) ;
208+
193209 return (
194210 < BreakdownSlice
195211 sliceName = { sliceName }
0 commit comments