|  | @@ -44,30 +44,18 @@ void grpc_bdp_estimator_init(grpc_bdp_estimator *estimator) {
 | 
	
		
			
				|  |  |    estimator->sampling = false;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -static int compare_samples(const void *a, const void *b) {
 | 
	
		
			
				|  |  | -  return GPR_ICMP(*(int64_t *)a, *(int64_t *)b);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  bool grpc_bdp_estimator_get_estimate(grpc_bdp_estimator *estimator,
 | 
	
		
			
				|  |  |                                       int64_t *estimate) {
 | 
	
		
			
				|  |  |    if (estimator->num_samples < GRPC_BDP_MIN_SAMPLES_FOR_ESTIMATE) {
 | 
	
		
			
				|  |  |      return false;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  int64_t samples[GRPC_BDP_SAMPLES];
 | 
	
		
			
				|  |  | +  *estimate = -1;
 | 
	
		
			
				|  |  |    for (uint8_t i = 0; i < estimator->num_samples; i++) {
 | 
	
		
			
				|  |  | -    samples[i] =
 | 
	
		
			
				|  |  | +    *estimate = GPR_MAX(
 | 
	
		
			
				|  |  | +        *estimate,
 | 
	
		
			
				|  |  |          estimator
 | 
	
		
			
				|  |  | -            ->samples[(estimator->first_sample_idx + i) % GRPC_BDP_SAMPLES];
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  qsort(samples, estimator->num_samples, sizeof(*samples), compare_samples);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  if (estimator->num_samples & 1) {
 | 
	
		
			
				|  |  | -    *estimate = samples[estimator->num_samples / 2];
 | 
	
		
			
				|  |  | -  } else {
 | 
	
		
			
				|  |  | -    *estimate = (samples[estimator->num_samples / 2] +
 | 
	
		
			
				|  |  | -                 samples[estimator->num_samples / 2 + 1]) /
 | 
	
		
			
				|  |  | -                2;
 | 
	
		
			
				|  |  | +            ->samples[(estimator->first_sample_idx + i) % GRPC_BDP_SAMPLES]);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    return true;
 | 
	
		
			
				|  |  |  }
 |