diff options
author | Vincent Sanders <vince@kyllikki.org> | 2015-05-29 16:18:18 +0100 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2015-05-29 16:18:18 +0100 |
commit | faf9b9d9196285d42bb106426b77e84baf3bfd6e (patch) | |
tree | 85048a826648a815b5fdf6bbd900f84004ea0783 /utils/log.c | |
parent | 4324bf535f4e65561bd48d78032edd4455f1579a (diff) | |
download | netsurf-faf9b9d9196285d42bb106426b77e84baf3bfd6e.tar.gz netsurf-faf9b9d9196285d42bb106426b77e84baf3bfd6e.tar.bz2 |
Improve logging interface to reduce overhead
This reduces logging overhead by only calling the log output function
once instead of three times.
Additionally the nslog_gettime interface no longer needs to be
exported and the static function is directly inlined further reducing
function call overhead.
Finally the appending of a newline uses fputc instead of a full printf
call which is considerably more simple and further reduces overhead
time.
Diffstat (limited to 'utils/log.c')
-rw-r--r-- | utils/log.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/utils/log.c b/utils/log.c index 1969102d4..9837aa76b 100644 --- a/utils/log.c +++ b/utils/log.c @@ -95,7 +95,7 @@ nserror nslog_init(nslog_ensure_t *ensure, int *pargc, char **argv) /* Subtract the `struct timeval' values X and Y, storing the result in RESULT. - Return 1 if the difference is negative, otherwise 0. + Return 1 if the difference is negative, otherwise 0. */ static int @@ -122,37 +122,45 @@ timeval_subtract(struct timeval *result, struct timeval *x, struct timeval *y) return x->tv_sec < y->tv_sec; } -const char *nslog_gettime(void) +/** + * Obtain a formatted string suitable for prepending to a log message + * + * \return formatted string of the time since first log call + */ +static const char *nslog_gettime(void) { static struct timeval start_tv; static char buff[32]; struct timeval tv; - struct timeval now_tv; + struct timeval now_tv; if (!timerisset(&start_tv)) { - gettimeofday(&start_tv, NULL); + gettimeofday(&start_tv, NULL); } - gettimeofday(&now_tv, NULL); + gettimeofday(&now_tv, NULL); timeval_subtract(&tv, &now_tv, &start_tv); - snprintf(buff, sizeof(buff),"(%ld.%06ld)", + snprintf(buff, sizeof(buff),"(%ld.%06ld)", (long)tv.tv_sec, (long)tv.tv_usec); - return buff; + return buff; } -void nslog_log(const char *format, ...) +void nslog_log(const char *file, const char *func, int ln, const char *format, ...) { va_list ap; + fprintf(logf, "%s %s:%i %s: ", nslog_gettime(), file, ln, func); + va_start(ap, format); - vfprintf(stderr, format, ap); + vfprintf(logf, format, ap); va_end(ap); + + fputc('\n', logf); } #endif - |