aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/progress.c14
-rw-r--r--lib/timeval.c11
-rw-r--r--lib/timeval.h9
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