]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
progress: when possible, calculate transfer speeds with microseconds
authorDaniel Stenberg <daniel@haxx.se>
Thu, 6 May 2021 07:06:24 +0000 (09:06 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 7 May 2021 06:29:15 +0000 (08:29 +0200)
... 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

index cc040a873396bef3ded82dce387eddf086136a7e..756b00397e3196886a30ada776b42d910cf41ef7 100644 (file)
@@ -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));