Ping progress
diff --git a/src/core/lib/transport/bdp_estimator.c b/src/core/lib/transport/bdp_estimator.c
index d912992..4c2c1d3 100644
--- a/src/core/lib/transport/bdp_estimator.c
+++ b/src/core/lib/transport/bdp_estimator.c
@@ -41,7 +41,7 @@
void grpc_bdp_estimator_init(grpc_bdp_estimator *estimator) {
estimator->num_samples = 0;
estimator->first_sample_idx = 0;
- estimator->sampling = false;
+ estimator->ping_state = GRPC_BDP_PING_UNSCHEDULED;
}
bool grpc_bdp_estimator_get_estimate(grpc_bdp_estimator *estimator,
@@ -68,17 +68,26 @@
bool grpc_bdp_estimator_add_incoming_bytes(grpc_bdp_estimator *estimator,
int64_t num_bytes) {
- if (estimator->sampling) {
- *sampling(estimator) += num_bytes;
- return false;
- } else {
- return true;
+ switch (estimator->ping_state) {
+ case GRPC_BDP_PING_UNSCHEDULED:
+ return true;
+ case GRPC_BDP_PING_SCHEDULED:
+ return false;
+ case GRPC_BDP_PING_STARTED:
+ *sampling(estimator) += num_bytes;
+ return false;
}
+ GPR_UNREACHABLE_CODE(return false);
+}
+
+void grpc_bdp_estimator_schedule_ping(grpc_bdp_estimator *estimator) {
+ GPR_ASSERT(estimator->ping_state == GRPC_BDP_PING_UNSCHEDULED);
+ estimator->ping_state = GRPC_BDP_PING_SCHEDULED;
}
void grpc_bdp_estimator_start_ping(grpc_bdp_estimator *estimator) {
- GPR_ASSERT(!estimator->sampling);
- estimator->sampling = true;
+ GPR_ASSERT(estimator->ping_state == GRPC_BDP_PING_SCHEDULED);
+ estimator->ping_state = GRPC_BDP_PING_STARTED;
if (estimator->num_samples == GRPC_BDP_SAMPLES) {
estimator->first_sample_idx++;
estimator->num_samples--;
@@ -87,7 +96,7 @@
}
void grpc_bdp_estimator_complete_ping(grpc_bdp_estimator *estimator) {
- GPR_ASSERT(estimator->sampling);
+ GPR_ASSERT(estimator->ping_state == GRPC_BDP_PING_STARTED);
estimator->num_samples++;
- estimator->sampling = false;
+ estimator->ping_state = GRPC_BDP_PING_UNSCHEDULED;
}