From 7c88381a59771a3e0be35800af3496da1171e9a4 Mon Sep 17 00:00:00 2001 From: Rob Kendrick Date: Tue, 30 Jan 2007 15:32:31 +0000 Subject: Make time taken that is displayed in status bar use gettimeofday()-based time rather than clock()-based time svn path=/trunk/netsurf/; revision=3157 --- content/content.c | 10 +++++----- content/content.h | 3 +-- utils/utils.c | 17 +++++++++++++++++ utils/utils.h | 1 + 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/content/content.c b/content/content.c index f87084bce..d99d02b09 100644 --- a/content/content.c +++ b/content/content.c @@ -376,7 +376,7 @@ struct content * content_create(const char *url) c->refresh = 0; c->bitmap = 0; c->fresh = false; - c->time = clock(); + c->time = wallclock(); c->size = 0; c->title = 0; c->active = 0; @@ -614,7 +614,7 @@ void content_update_status(struct content *c) { char token[20]; const char *status; - clock_t time; + unsigned int time; snprintf(token, sizeof token, "HTTP%li", c->http_code); status = messages_get(token); @@ -624,13 +624,13 @@ void content_update_status(struct content *c) if (c->status == CONTENT_STATUS_TYPE_UNKNOWN || c->status == CONTENT_STATUS_LOADING || c->status == CONTENT_STATUS_READY) - time = clock() - c->time; + time = wallclock() - c->time; else time = c->time; snprintf(c->status_message, sizeof (c->status_message), "%s (%.1fs) %s", status, - (float) time / CLOCKS_PER_SEC, c->sub_status); + (float) time / 100, c->sub_status); /* LOG(("%s", c->status_message)); */ } @@ -752,7 +752,7 @@ void content_set_done(struct content *c) union content_msg_data msg_data; c->status = CONTENT_STATUS_DONE; - c->time = clock() - c->time; + c->time = wallclock() - c->time; content_update_status(c); content_broadcast(c, CONTENT_MSG_DONE, msg_data); } diff --git a/content/content.h b/content/content.h index 268ba31a1..43f9243d3 100644 --- a/content/content.h +++ b/content/content.h @@ -16,7 +16,6 @@ #define _NETSURF_DESKTOP_CONTENT_H_ #include -#include #include "netsurf/utils/config.h" #include "netsurf/content/content_type.h" #include "netsurf/css/css.h" @@ -179,7 +178,7 @@ struct content { * shared between users. */ bool fresh; struct cache_data *cache_data; /**< Cache control data */ - clock_t time; /**< Creation time, if TYPE_UNKNOWN, + unsigned int time; /**< Creation time, if TYPE_UNKNOWN, LOADING or READY, otherwise total time. */ diff --git a/utils/utils.c b/utils/utils.c index 05f0059ec..b0707b7f2 100644 --- a/utils/utils.c +++ b/utils/utils.c @@ -236,6 +236,23 @@ char *strcasestr(const char *haystack, const char *needle) return NULL; } +/** + * Returns a number of centiseconds, that increases in real time, for the + * purposes of measuring how long something takes in wall-clock terms. It uses + * gettimeofday() for this. Should the call to gettimeofday() fail, it returns + * zero. + * + * \return number of centiseconds that increases monotonically + */ +unsigned int wallclock(void) +{ + struct timeval tv; + + if (gettimeofday(&tv, NULL) == -1) + return 0; + + return ((tv.tv_sec * 100) + (tv.tv_usec / 10000)); +} #ifdef __FreeBSD__ diff --git a/utils/utils.h b/utils/utils.h index cfc7d8edc..67173d242 100644 --- a/utils/utils.h +++ b/utils/utils.h @@ -56,6 +56,7 @@ void unicode_transliterate(unsigned int c, char **r); char *human_friendly_bytesize(unsigned long bytesize); const char *rfc1123_date(time_t t); char *strcasestr(const char *haystack, const char *needle); +unsigned int wallclock(void); #ifdef __FreeBSD__ /* FreeBSD lacks strndup */ char *strndup(const char *s, size_t n); -- cgit v1.2.3