@@ -292,51 +292,7 @@ private static int WriteMetric(byte[] buffer, int writePosition, Metric metric)
292
292
writePosition = ProtobufSerializer . WriteDoubleWithTag ( buffer , writePosition , ProtobufOtlpMetricFieldNumberConstants . HistogramDataPoint_Max , max ) ;
293
293
}
294
294
295
- // Collect all counts (assuming GetHistogramBuckets() returns in order)
296
- var bucketCounts = new List < ulong > ( ) ;
297
-
298
- foreach ( var x in metricPoint . GetHistogramBuckets ( ) )
299
- {
300
- bucketCounts . Add ( ( ulong ) x . BucketCount ) ;
301
- }
302
-
303
- // Write packed repeated fixed64 bucket_counts
304
- var fieldNumber = ProtobufOtlpMetricFieldNumberConstants . HistogramDataPoint_Bucket_Counts ;
305
- var tag2 = ( fieldNumber << 3 ) | 2 ; // wire type 2 for length-delimited
306
- writePosition = ProtobufSerializer . WriteVarInt32 ( buffer , writePosition , ( uint ) tag2 ) ;
307
-
308
- int length = bucketCounts . Count * 8 ;
309
- writePosition = ProtobufSerializer . WriteVarInt32 ( buffer , writePosition , ( uint ) length ) ;
310
-
311
- foreach ( var bucketCount in bucketCounts )
312
- {
313
- writePosition = ProtobufSerializer . WriteFixed64LittleEndianFormat ( buffer , writePosition , bucketCount ) ;
314
- }
315
-
316
- var explicitBounds = new List < double > ( ) ;
317
-
318
- foreach ( var x in metricPoint . GetHistogramBuckets ( ) )
319
- {
320
- if ( x . ExplicitBound != double . PositiveInfinity )
321
- {
322
- explicitBounds . Add ( x . ExplicitBound ) ;
323
- }
324
- }
325
-
326
- if ( explicitBounds . Count > 0 )
327
- {
328
- var boundsFieldNumber = ProtobufOtlpMetricFieldNumberConstants . HistogramDataPoint_Explicit_Bounds ;
329
- var boundsTag = ( boundsFieldNumber << 3 ) | 2 ; // wire type 2
330
- writePosition = ProtobufSerializer . WriteVarInt32 ( buffer , writePosition , ( uint ) boundsTag ) ;
331
-
332
- int boundsLength = explicitBounds . Count * 8 ;
333
- writePosition = ProtobufSerializer . WriteVarInt32 ( buffer , writePosition , ( uint ) boundsLength ) ;
334
-
335
- foreach ( var bound in explicitBounds )
336
- {
337
- writePosition = ProtobufSerializer . WriteDouble ( buffer , writePosition , bound ) ;
338
- }
339
- }
295
+ writePosition = WriteHistogramBuckets ( buffer , writePosition , metricPoint . GetHistogramBuckets ( ) ) ;
340
296
341
297
writePosition = WriteDoubleExemplars ( buffer , writePosition , ProtobufOtlpMetricFieldNumberConstants . HistogramDataPoint_Exemplars , in metricPoint ) ;
342
298
@@ -548,4 +504,55 @@ private static int WriteExemplar(byte[] buffer, int writePosition, in Exemplar e
548
504
ProtobufSerializer . WriteReservedLength ( buffer , exemplarLengthPosition , writePosition - ( exemplarLengthPosition + ReserveSizeForLength ) ) ;
549
505
return writePosition ;
550
506
}
507
+
508
+ private static int WriteHistogramBuckets ( byte [ ] buffer , int writePosition , HistogramBuckets buckets )
509
+ {
510
+ // Collect all counts (assuming GetHistogramBuckets() returns in order)
511
+ var bucketCounts = new List < ulong > ( ) ;
512
+
513
+ foreach ( var x in buckets )
514
+ {
515
+ bucketCounts . Add ( ( ulong ) x . BucketCount ) ;
516
+ }
517
+
518
+ // Write packed repeated fixed64 bucket_counts
519
+ var fieldNumber = ProtobufOtlpMetricFieldNumberConstants . HistogramDataPoint_Bucket_Counts ;
520
+ var tag2 = ( fieldNumber << 3 ) | 2 ; // wire type 2 for length-delimited
521
+ writePosition = ProtobufSerializer . WriteVarInt32 ( buffer , writePosition , ( uint ) tag2 ) ;
522
+
523
+ int length = bucketCounts . Count * 8 ;
524
+ writePosition = ProtobufSerializer . WriteVarInt32 ( buffer , writePosition , ( uint ) length ) ;
525
+
526
+ foreach ( var bucketCount in bucketCounts )
527
+ {
528
+ writePosition = ProtobufSerializer . WriteFixed64LittleEndianFormat ( buffer , writePosition , bucketCount ) ;
529
+ }
530
+
531
+ var explicitBounds = new List < double > ( ) ;
532
+
533
+ foreach ( var x in buckets )
534
+ {
535
+ if ( x . ExplicitBound != double . PositiveInfinity )
536
+ {
537
+ explicitBounds . Add ( x . ExplicitBound ) ;
538
+ }
539
+ }
540
+
541
+ if ( explicitBounds . Count > 0 )
542
+ {
543
+ var boundsFieldNumber = ProtobufOtlpMetricFieldNumberConstants . HistogramDataPoint_Explicit_Bounds ;
544
+ var boundsTag = ( boundsFieldNumber << 3 ) | 2 ; // wire type 2
545
+ writePosition = ProtobufSerializer . WriteVarInt32 ( buffer , writePosition , ( uint ) boundsTag ) ;
546
+
547
+ int boundsLength = explicitBounds . Count * 8 ;
548
+ writePosition = ProtobufSerializer . WriteVarInt32 ( buffer , writePosition , ( uint ) boundsLength ) ;
549
+
550
+ foreach ( var bound in explicitBounds )
551
+ {
552
+ writePosition = ProtobufSerializer . WriteDouble ( buffer , writePosition , bound ) ;
553
+ }
554
+ }
555
+
556
+ return writePosition ;
557
+ }
551
558
}
0 commit comments