From: Julian Seward Date: Tue, 8 Nov 2005 19:01:44 +0000 (+0000) Subject: Reinstate timestamping, sort-of, having trashed VG_(ctime) as part of X-Git-Tag: svn/VALGRIND_3_1_0~190 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=63bfdbc99f270046ee953ff3d3ff1da571d66725;p=thirdparty%2Fvalgrind.git Reinstate timestamping, sort-of, having trashed VG_(ctime) as part of the glibc-removal process. Timestamps are now printed in terms of elapsed wallclock time since startup, shown as days, hours, minutes, seconds and milliseconds. The arithmetic is done with 32-bit unsigned ints, so people doing Valgrind runs that last longer than 49.71 days are going to see some funny results :-) git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5042 --- diff --git a/coregrind/m_libcprint.c b/coregrind/m_libcprint.c index c2aeb090fb..cc3e2ea617 100644 --- a/coregrind/m_libcprint.c +++ b/coregrind/m_libcprint.c @@ -32,9 +32,9 @@ #include "pub_core_debuglog.h" #include "pub_core_libcbase.h" #include "pub_core_libcassert.h" -#include "pub_core_libcfile.h" // For VG_(write)(), VG_(write_socket)() +#include "pub_core_libcfile.h" // VG_(write)(), VG_(write_socket)() #include "pub_core_libcprint.h" -#include "pub_core_libcproc.h" // For VG_(getpid)() +#include "pub_core_libcproc.h" // VG_(getpid)(), VG_(read_millisecond_timer() #include "pub_core_options.h" #include "valgrind.h" // For RUNNING_ON_VALGRIND @@ -252,28 +252,35 @@ void VG_(percentify)(ULong n, ULong m, UInt d, Int n_buf, char buf[]) /* --------------------------------------------------------------------- - ctime() + elapsed_wallclock_time() ------------------------------------------------------------------ */ -/* BUF must be at least 25 characters long. This is unchecked. */ +/* Get the elapsed wallclock time since startup into buf, which must + 16 chars long. This is unchecked. It also relies on the + millisecond timer having been set to zero by an initial read in + m_main during startup. */ -void VG_(ctime) ( /*OUT*/HChar* buf ) +void VG_(elapsed_wallclock_time) ( /*OUT*/HChar* buf ) { -#if 0 - struct timeval tv; - struct tm tm; - buf[0] = 0; - if ( gettimeofday( &tv, NULL ) == 0 - && localtime_r( &tv.tv_sec, &tm ) == &tm ) - { - VG_(sprintf)( buf, - "%04d-%02d-%02d %02d:%02d:%02d.%03d", - tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, - tm.tm_hour, tm.tm_min, tm.tm_sec, tv.tv_usec / 1000 ); - } -#else - VG_(strcpy)(buf, "VG_(ctime) HACK!"); -#endif + UInt t, ms, s, mins, hours, days; + + t = VG_(read_millisecond_timer)(); /* milliseconds */ + + ms = t % 1000; + t /= 1000; /* now in seconds */ + + s = t % 60; + t /= 60; /* now in minutes */ + + mins = t % 60; + t /= 60; /* now in hours */ + + hours = t % 24; + t /= 24; /* now in days */ + + days = t; + + VG_(sprintf)(buf, "%02u:%02u:%02u:%02u.%03u", days, hours, mins, s, ms); } @@ -307,7 +314,7 @@ UInt VG_(vmessage) ( VgMsgKind kind, const HChar* format, va_list vargs ) if (VG_(clo_time_stamp)) { HChar buf[50]; - VG_(ctime)(buf); + VG_(elapsed_wallclock_time)(buf); count += VG_(printf)( "%s ", buf); } diff --git a/coregrind/m_main.c b/coregrind/m_main.c index 4be1644d85..80343f7413 100644 --- a/coregrind/m_main.c +++ b/coregrind/m_main.c @@ -2233,6 +2233,12 @@ Int main(Int argc, HChar **argv, HChar **envp) "setup logging\n"); logging_to_fd = process_cmd_line_options(client_auxv, toolname); + //-------------------------------------------------------------- + // Zeroise the millisecond counter by doing a first read of it. + // p: none + //-------------------------------------------------------------- + (void) VG_(read_millisecond_timer)(); + //-------------------------------------------------------------- // Print the preamble // p: tl_pre_clo_init [for 'VG_(details).name' and friends] @@ -2494,7 +2500,7 @@ Int main(Int argc, HChar **argv, HChar **envp) if (VG_(clo_xml)) { HChar buf[50]; - VG_(ctime)(buf); + VG_(elapsed_wallclock_time)(buf); VG_(message)(Vg_UserMsg, "\n" " RUNNING\n" " \n" @@ -2565,7 +2571,7 @@ void shutdown_actions_NORETURN( ThreadId tid, VG_(show_error_counts_as_XML)(); VG_(message)(Vg_UserMsg, ""); } - VG_(ctime)(buf); + VG_(elapsed_wallclock_time)(buf); VG_(message)(Vg_UserMsg, "\n" " FINISHED\n" " \n" diff --git a/coregrind/pub_core_libcprint.h b/coregrind/pub_core_libcprint.h index 15f99f8c77..64c0180429 100644 --- a/coregrind/pub_core_libcprint.h +++ b/coregrind/pub_core_libcprint.h @@ -42,9 +42,11 @@ descriptor or a socket descriptor. */ extern Bool VG_(logging_to_socket); -/* Get a human-readable representation of the local time into BUF, - which must be at least 25 characters long. This is unchecked. */ -extern void VG_(ctime) ( /*OUT*/HChar* buf ); +/* Get the elapsed wallclock time since startup into buf, which must + 16 chars long. This is unchecked. It also relies on the + millisecond timer having been set to zero by an initial read in + m_main during startup. */ +void VG_(elapsed_wallclock_time) ( /*OUT*/HChar* buf ); #endif // __PUB_CORE_LIBCPRINT_H diff --git a/docs/xml/manual-core.xml b/docs/xml/manual-core.xml index f1a3401958..dba9ba4db8 100644 --- a/docs/xml/manual-core.xml +++ b/docs/xml/manual-core.xml @@ -647,8 +647,10 @@ categories. --time-stamp=no [default] --time-stamp=yes - When enabled, Valgrind will precede each message with the - current time and date. + When enabled, Valgrind will precede each message with + an indication of the elapsed wallclock time since startup, + expressed as days, hours, minutes, seconds and milliseconds. +