From f2c8aa6676ebedc34b2cd5089ce6f13c16db1277 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 12 Jan 2010 12:52:30 +0100 Subject: [PATCH] libbb: introduce and use monotonic_ms function old new delta monotonic_ms - 60 +60 process_stdin 433 443 +10 display_speed 85 90 +5 nmeter_main 672 674 +2 builtin_type 114 116 +2 bb__parsespent 117 119 +2 ifplugd_main 1110 1109 -1 acpid_main 441 440 -1 chat_main 1361 1359 -2 doCommands 2458 2449 -9 arpping 466 450 -16 run_command 268 234 -34 readcmd 1072 1034 -38 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 5/7 up/down: 81/-101) Total: -20 bytes Signed-off-by: Denys Vlasenko --- include/libbb.h | 1 + libbb/time.c | 12 ++++++++++++ miscutils/time.c | 4 ++-- networking/udhcp/arpping.c | 4 ++-- shell/ash.c | 4 ++-- 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/include/libbb.h b/include/libbb.h index e07bb52f6..11596346d 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -249,6 +249,7 @@ extern int *const bb_errno; unsigned long long monotonic_ns(void) FAST_FUNC; unsigned long long monotonic_us(void) FAST_FUNC; +unsigned long long monotonic_ms(void) FAST_FUNC; unsigned monotonic_sec(void) FAST_FUNC; extern void chomp(char *s) FAST_FUNC; diff --git a/libbb/time.c b/libbb/time.c index 82a0fa1fa..45ae6f3a7 100644 --- a/libbb/time.c +++ b/libbb/time.c @@ -175,6 +175,12 @@ unsigned long long FAST_FUNC monotonic_us(void) get_mono(&ts); return ts.tv_sec * 1000000ULL + ts.tv_nsec/1000; } +unsigned long long FAST_FUNC monotonic_ms(void) +{ + struct timespec ts; + get_mono(&ts); + return ts.tv_sec * 1000ULL + ts.tv_nsec/1000000; +} unsigned FAST_FUNC monotonic_sec(void) { struct timespec ts; @@ -196,6 +202,12 @@ unsigned long long FAST_FUNC monotonic_us(void) gettimeofday(&tv, NULL); return tv.tv_sec * 1000000ULL + tv.tv_usec; } +unsigned long long FAST_FUNC monotonic_ms(void) +{ + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec * 1000ULL + tv.tv_usec / 1000; +} unsigned FAST_FUNC monotonic_sec(void) { return time(NULL); diff --git a/miscutils/time.c b/miscutils/time.c index 342173609..5ea0f064b 100644 --- a/miscutils/time.c +++ b/miscutils/time.c @@ -70,7 +70,7 @@ static void resuse_end(pid_t pid, resource_t *resp) return; } } - resp->elapsed_ms = (monotonic_us() / 1000) - resp->elapsed_ms; + resp->elapsed_ms = monotonic_ms() - resp->elapsed_ms; } static void printargv(char *const *argv) @@ -371,7 +371,7 @@ static void run_command(char *const *cmd, resource_t *resp) void (*interrupt_signal)(int); void (*quit_signal)(int); - resp->elapsed_ms = monotonic_us() / 1000; + resp->elapsed_ms = monotonic_ms(); pid = vfork(); /* Run CMD as child process. */ if (pid < 0) bb_perror_msg_and_die("fork"); diff --git a/networking/udhcp/arpping.c b/networking/udhcp/arpping.c index 4af8534bd..548796e2b 100644 --- a/networking/udhcp/arpping.c +++ b/networking/udhcp/arpping.c @@ -88,7 +88,7 @@ int FAST_FUNC arpping(uint32_t test_nip, timeout_ms = 2000; do { int r; - unsigned prevTime = monotonic_us(); + unsigned prevTime = monotonic_ms(); pfd[0].events = POLLIN; r = safe_poll(pfd, 1, timeout_ms); @@ -119,7 +119,7 @@ int FAST_FUNC arpping(uint32_t test_nip, break; } } - timeout_ms -= ((unsigned)monotonic_us() - prevTime) / 1000; + timeout_ms -= (unsigned)monotonic_ms() - prevTime; } while (timeout_ms > 0); ret: diff --git a/shell/ash.c b/shell/ash.c index b47f0e881..e668f41e1 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -12619,7 +12619,7 @@ readcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) backslash = 0; #if ENABLE_ASH_READ_TIMEOUT if (timeout) /* NB: ensuring end_ms is nonzero */ - end_ms = ((unsigned)(monotonic_us() / 1000) + timeout) | 1; + end_ms = ((unsigned)monotonic_ms() + timeout) | 1; #endif STARTSTACKSTR(p); do { @@ -12630,7 +12630,7 @@ readcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) struct pollfd pfd[1]; pfd[0].fd = fd; pfd[0].events = POLLIN; - timeout = end_ms - (unsigned)(monotonic_us() / 1000); + timeout = end_ms - (unsigned)monotonic_ms(); if ((int)timeout <= 0 /* already late? */ || safe_poll(pfd, 1, timeout) != 1 /* no? wait... */ ) { /* timed out! */ -- 2.25.1