diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-06-29 06:25:53 +0400 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-06-29 06:25:53 +0400 |
commit | ce13b7600277478055de0b7c38b483a76145efd2 (patch) | |
tree | b952e4328f8e182099fb3d72afc5c8978a56ebff /libbb/time.c | |
parent | 540ab7097c2932e8ef9e3bbb6abf5604c05acdde (diff) |
libbb: shrink monotonic_XXX functions, introduce monotonic_ns
(unused for now)
function old new delta
get_mono - 31 +31
sv_main 1228 1234 +6
expand 1693 1697 +4
get_address 178 181 +3
utoa_to_buf 108 110 +2
builtin_exit 46 48 +2
qrealloc 36 33 -3
qgravechar 109 106 -3
ash_main 1383 1380 -3
grep_file 850 846 -4
popstring 140 134 -6
monotonic_us 85 60 -25
monotonic_sec 41 16 -25
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 5/7 up/down: 48/-69) Total: -21 bytes
Diffstat (limited to 'libbb/time.c')
-rw-r--r-- | libbb/time.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/libbb/time.c b/libbb/time.c index 7d3ac9183..850ac1542 100644 --- a/libbb/time.c +++ b/libbb/time.c @@ -10,8 +10,8 @@ #include "libbb.h" #if ENABLE_MONOTONIC_SYSCALL -#include <sys/syscall.h> +#include <sys/syscall.h> /* Old glibc (< 2.3.4) does not provide this constant. We use syscall * directly so this definition is safe. */ #ifndef CLOCK_MONOTONIC @@ -20,30 +20,47 @@ /* libc has incredibly messy way of doing this, * typically requiring -lrt. We just skip all this mess */ +static void get_mono(struct timespec *ts) +{ + if (syscall(__NR_clock_gettime, CLOCK_MONOTONIC, ts)) + bb_error_msg_and_die("clock_gettime(MONOTONIC) failed"); +} +unsigned long long FAST_FUNC monotonic_ns(void) +{ + struct timespec ts; + get_mono(&ts); + return ts.tv_sec * 1000000000ULL + ts.tv_nsec; +} unsigned long long FAST_FUNC monotonic_us(void) { struct timespec ts; - if (syscall(__NR_clock_gettime, CLOCK_MONOTONIC, &ts)) - bb_error_msg_and_die("clock_gettime(MONOTONIC) failed"); + get_mono(&ts); return ts.tv_sec * 1000000ULL + ts.tv_nsec/1000; } unsigned FAST_FUNC monotonic_sec(void) { struct timespec ts; - if (syscall(__NR_clock_gettime, CLOCK_MONOTONIC, &ts)) - bb_error_msg_and_die("clock_gettime(MONOTONIC) failed"); + get_mono(&ts); return ts.tv_sec; } + #else + +unsigned long long FAST_FUNC monotonic_ns(void) +{ + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec * 1000000000ULL + tv.tv_usec * 1000; +} unsigned long long FAST_FUNC monotonic_us(void) { struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec * 1000000ULL + tv.tv_usec; } - unsigned FAST_FUNC monotonic_sec(void) { return time(NULL); } + #endif |