From 68027623e2dbecae80183008275e106b4b12e54f Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 6 May 2021 09:06:24 +0200 Subject: [PATCH] progress: when possible, calculate transfer speeds with microseconds ... this improves precision, especially for transfers in the few or even sub millisecond range. Reported-by: J. Bromley Fixes #7017 Closes #7020 --- lib/progress.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/progress.c b/lib/progress.c index cc040a873..756b00397 100644 --- a/lib/progress.c +++ b/lib/progress.c @@ -384,13 +384,19 @@ static bool progress_calc(struct Curl_easy *data, struct curltime now) timespent_ms = (curl_off_t)data->progress.timespent/1000; /* ms */ /* The average download speed this far */ - if(dl < CURL_OFF_T_MAX/1000) + if(dl < CURL_OFF_T_MAX/1000000) + data->progress.dlspeed = + (dl * 1000000 / (data->progress.timespent?data->progress.timespent:1)); + else if(dl < CURL_OFF_T_MAX/1000) data->progress.dlspeed = (dl * 1000 / (timespent_ms>0?timespent_ms:1)); else data->progress.dlspeed = (dl / (timespent>0?timespent:1)); /* The average upload speed this far */ - if(ul < CURL_OFF_T_MAX/1000) + if(ul < CURL_OFF_T_MAX/1000000) + data->progress.ulspeed = + (ul * 1000000 / (data->progress.timespent?data->progress.timespent:1)); + else if(ul < CURL_OFF_T_MAX/1000) data->progress.ulspeed = (ul * 1000 / (timespent_ms>0?timespent_ms:1)); else data->progress.ulspeed = (ul / (timespent>0?timespent:1));