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 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/m_libcprint.c b/coregrind/m_libcprint.c
index c2aeb09..cc3e2ea 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 @@
/* ---------------------------------------------------------------------
- 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 @@
if (VG_(clo_time_stamp)) {
HChar buf[50];
- VG_(ctime)(buf);
+ VG_(elapsed_wallclock_time)(buf);
count += VG_(printf)( "%s ", buf);
}