@@ -468,28 +468,49 @@ void Row_printRate(RichString* str, double rate, bool coloring) {
468
468
}
469
469
470
470
if (!isNonnegative (rate )) {
471
- RichString_appendAscii (str , shadowColor , " N/A " );
472
- } else if (rate < 0.005 ) {
473
- int len = snprintf (buffer , sizeof (buffer ), "%7.2f B/s " , rate );
474
- RichString_appendnAscii (str , shadowColor , buffer , len );
471
+ RichString_appendAscii (str , shadowColor , " N/A " );
475
472
} else if (rate < ONE_K ) {
476
- int len = snprintf (buffer , sizeof (buffer ), "%7.2f B/s " , rate );
477
- RichString_appendnAscii (str , baseColor , buffer , len );
478
- } else if (rate < ONE_M ) {
479
- int len = snprintf (buffer , sizeof (buffer ), "%7.2f K/s " , rate / ONE_K );
480
- RichString_appendnAscii (str , baseColor , buffer , len );
481
- } else if (rate < ONE_G ) {
482
- int len = snprintf (buffer , sizeof (buffer ), "%7.2f M/s " , rate / ONE_M );
483
- RichString_appendnAscii (str , megabytesColor , buffer , len );
484
- } else if (rate < ONE_T ) {
485
- int len = snprintf (buffer , sizeof (buffer ), "%7.2f G/s " , rate / ONE_G );
486
- RichString_appendnAscii (str , largeNumberColor , buffer , len );
487
- } else if (rate < ONE_P ) {
488
- int len = snprintf (buffer , sizeof (buffer ), "%7.2f T/s " , rate / ONE_T );
489
- RichString_appendnAscii (str , largeNumberColor , buffer , len );
473
+ int len = snprintf (buffer , sizeof (buffer ), "%4.0f B/s " , rate );
474
+ RichString_appendnAscii (str , shadowColor , buffer , len );
490
475
} else {
491
- int len = snprintf (buffer , sizeof (buffer ), "%7.2f P/s " , rate / ONE_P );
492
- RichString_appendnAscii (str , largeNumberColor , buffer , len );
476
+ size_t unitPrefixIndex = 0 ;
477
+ while (rate >= ONE_K ) {
478
+ if (unitPrefixIndex > ARRAYSIZE (unitPrefixes )- 1 ) {
479
+ int len = snprintf (buffer , sizeof (buffer ), " INF " );
480
+ RichString_appendnAscii (str , largeNumberColor , buffer , len );
481
+ return ;
482
+ }
483
+ unitPrefixIndex ++ ;
484
+ rate /= ONE_K ;
485
+ }
486
+
487
+ unitPrefixIndex -- ; // unitPrefixes starts from K
488
+
489
+ int precision = 0 ;
490
+ if (rate <= 999.9 ) {
491
+ if (rate <= 99.9 ) {
492
+ if (rate <= 9.99 )
493
+ precision = 3 ;
494
+ else
495
+ precision = 2 ;
496
+ }
497
+ else
498
+ precision = 1 ;
499
+ }
500
+
501
+ if (precision < 3 ) {
502
+ double upper_limit = (precision < 2 ) ? ((precision < 1 ) ? 1000 : 100 ) : 10 ;
503
+ if (rate < upper_limit ) {
504
+ rate = upper_limit ;
505
+ }
506
+ }
507
+
508
+ int len = snprintf (buffer , sizeof (buffer ), "%5.*f" , precision , rate );
509
+ int rateDisplayColor = (unitPrefixIndex < 2 ) ? ((!unitPrefixIndex ) ? baseColor : megabytesColor ) : largeNumberColor ;
510
+ RichString_appendnAscii (str , rateDisplayColor , buffer , len );
511
+ len = snprintf (buffer , sizeof (buffer ), "%c/s " , unitPrefixes [unitPrefixIndex ]);
512
+ RichString_appendnAscii (str , shadowColor , buffer , len );
513
+
493
514
}
494
515
}
495
516
0 commit comments