diff options
-rw-r--r-- | lib/progress.c | 14 | ||||
-rw-r--r-- | lib/timeval.c | 11 | ||||
-rw-r--r-- | lib/timeval.h | 9 |
3 files changed, 27 insertions, 7 deletions
diff --git a/lib/progress.c b/lib/progress.c index 8c7ef3558..55bc3ceec 100644 --- a/lib/progress.c +++ b/lib/progress.c @@ -148,26 +148,26 @@ void Curl_pgrsTime(struct SessionHandle *data, timerid timer) case TIMER_NAMELOOKUP: data->progress.t_nslookup = - (double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0; + Curl_tvdiff_secs(Curl_tvnow(), data->progress.t_startsingle); break; case TIMER_CONNECT: data->progress.t_connect = - (double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0; + Curl_tvdiff_secs(Curl_tvnow(), data->progress.t_startsingle); break; case TIMER_PRETRANSFER: data->progress.t_pretransfer = - (double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0; + Curl_tvdiff_secs(Curl_tvnow(), data->progress.t_startsingle); break; case TIMER_STARTTRANSFER: data->progress.t_starttransfer = - (double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0; + Curl_tvdiff_secs(Curl_tvnow(), data->progress.t_startsingle); break; case TIMER_POSTRANSFER: /* this is the normal end-of-transfer thing */ break; case TIMER_REDIRECT: data->progress.t_redirect = - (double)Curl_tvdiff(Curl_tvnow(), data->progress.start)/1000.0; + Curl_tvdiff_secs(Curl_tvnow(), data->progress.start); break; } } @@ -249,8 +249,8 @@ int Curl_pgrsUpdate(struct connectdata *conn) now = Curl_tvnow(); /* what time is it */ /* The time spent so far (from the start) */ - data->progress.timespent = Curl_tvdiff(now, data->progress.start)/1000.0; - timespent = (long)data->progress.timespent; + data->progress.timespent = Curl_tvdiff_secs(now, data->progress.start); + timespent = (long)data->progress.timespent*1000.0; /* The average download speed this far */ data->progress.dlspeed = diff --git a/lib/timeval.c b/lib/timeval.c index 20ac6ea96..11f3d7a06 100644 --- a/lib/timeval.c +++ b/lib/timeval.c @@ -98,6 +98,17 @@ long curlx_tvdiff(struct timeval newer, struct timeval older) (newer.tv_usec-older.tv_usec)/1000; } +/* + * Same as curlx_tvdiff but with full usec resolution. + * + * Returns: the time difference in seconds with subsecond resolution. + */ +double curlx_tvdiff_secs(struct timeval newer, struct timeval older) +{ + return (double)(newer.tv_sec-older.tv_sec)+ + (double)(newer.tv_usec-older.tv_usec)/1000000.0; +} + /* return the number of seconds in the given input timeval struct */ long Curl_tvlong(struct timeval t1) { diff --git a/lib/timeval.h b/lib/timeval.h index 39da52a6f..856f5f4f6 100644 --- a/lib/timeval.h +++ b/lib/timeval.h @@ -54,11 +54,20 @@ struct timeval curlx_tvnow(void); * Returns: the time difference in number of milliseconds. */ long curlx_tvdiff(struct timeval t1, struct timeval t2); + +/* + * Same as curlx_tvdiff but with full usec resolution. + * + * Returns: the time difference in seconds with subsecond resolution. + */ +double curlx_tvdiff_secs(struct timeval t1, struct timeval t2); + long Curl_tvlong(struct timeval t1); /* These two defines below exist to provide the older API for library internals only. */ #define Curl_tvnow() curlx_tvnow() #define Curl_tvdiff(x,y) curlx_tvdiff(x,y) +#define Curl_tvdiff_secs(x,y) curlx_tvdiff_secs(x,y) #endif |