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
This commit is contained in:
Julian Seward 2005-11-08 19:01:44 +00:00
parent db732ea188
commit 63bfdbc99f
4 changed files with 45 additions and 28 deletions

View File

@ -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);
}

View File

@ -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, "<status>\n"
" <state>RUNNING</state>\n"
" <time>%t</time>\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, "<status>\n"
" <state>FINISHED</state>\n"
" <time>%t</time>\n"

View File

@ -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

View File

@ -647,8 +647,10 @@ categories.</para>
<listitem id="time_stamp">
<para><computeroutput>--time-stamp=no</computeroutput> [default]</para>
<para><computeroutput>--time-stamp=yes</computeroutput></para>
<para>When enabled, Valgrind will precede each message with the
current time and date.</para>
<para>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.
</para>
</listitem>
<listitem id="log2fd">