]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Reinstate timestamping, sort-of, having trashed VG_(ctime) as part of
authorJulian Seward <jseward@acm.org>
Tue, 8 Nov 2005 19:01:44 +0000 (19:01 +0000)
committerJulian Seward <jseward@acm.org>
Tue, 8 Nov 2005 19:01:44 +0000 (19:01 +0000)
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

coregrind/m_libcprint.c
coregrind/m_main.c
coregrind/pub_core_libcprint.h
docs/xml/manual-core.xml

index c2aeb090fb5e44bff60c5265e69d76f4f643f9c8..cc3e2ea617a9b5f8407ece0faece27ab1f912b24 100644 (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);
    }
 
index 4be1644d8504f7b81228afedccbb90ccfc9168fd..80343f74137e1e3250b48ffa49c5536c3abde878 100644 (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"
index 15f99f8c774317d0ebc2ccad68e9f55afc5ceb5e..64c0180429241d598dfdb97994347f3139f52cd3 100644 (file)
    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
 
index f1a34019589da444c36f4820adbe1e451a1afd61..dba9ba4db834fc0fe74a8962364f4d661a65ad14 100644 (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">