aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/doc/ChangeLog4
-rw-r--r--gdb/doc/gdb.texinfo15
-rw-r--r--gdb/utils.c21
4 files changed, 36 insertions, 12 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e3e7826..f527f20 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,11 @@
+2011-11-04 Doug Evans <dje@google.com>
+
+ * utils.c: #include "timeval-utils.h".
+ (cmd_stats): Rename start_time to start_cpu_time.
+ New member start_wall_time.
+ (report_command_stats): Report wall time.
+ (make_command_stats_cleanup): Record start wall time.
+
2011-11-04 Tom Tromey <tromey@redhat.com>
* cp-namespace.c (cp_lookup_symbol_imports): Reindent.
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index 9beca6f..2a23823 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,3 +1,7 @@
+2011-11-04 Doug Evans <dje@google.com>
+
+ * gdb.texinfo (Maintenance Commands): Update docs of "maint time".
+
2011-11-03 Tom Tromey <tromey@redhat.com>
* gdb.texinfo (Stopping): Add menu entry.
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 93450c6..520360f 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -32991,13 +32991,16 @@ switch (@pxref{Mode Options}).
@kindex maint time
@cindex time of command execution
@item maint time
-Control whether to display the execution time for each command. If
-set to a nonzero value, @value{GDBN} will display how much time it
+Control whether to display the execution time of @value{GDBN} for each command.
+If set to a nonzero value, @value{GDBN} will display how much time it
took to execute each command, following the command's own output.
-The time is not printed for the commands that run the target, since
-there's no mechanism currently to compute how much time was spend
-by @value{GDBN} and how much time was spend by the program been debugged.
-it's not possibly currently
+Both CPU time and wallclock time are printed.
+Printing both is useful when trying to determine whether the cost is
+CPU or, e.g., disk/network, latency.
+Note that the CPU time printed is for @value{GDBN} only, it does not include
+the execution time of the inferior because there's no mechanism currently
+to compute how much time was spent by @value{GDBN} and how much time was
+spent by the program been debugged.
This can also be requested by invoking @value{GDBN} with the
@option{--statistics} command-line switch (@pxref{Mode Options}).
diff --git a/gdb/utils.c b/gdb/utils.c
index 5c03e71..008baac 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -45,6 +45,7 @@
#endif
#include <signal.h>
+#include "timeval-utils.h"
#include "gdbcmd.h"
#include "serial.h"
#include "bfd.h"
@@ -691,7 +692,8 @@ static int display_space;
struct cmd_stats
{
int msg_type;
- long start_time;
+ long start_cpu_time;
+ struct timeval start_wall_time;
long start_space;
};
@@ -723,12 +725,18 @@ report_command_stats (void *arg)
if (display_time)
{
- long cmd_time = get_run_time () - start_stats->start_time;
+ long cmd_time = get_run_time () - start_stats->start_cpu_time;
+ struct timeval now_wall_time, delta_wall_time;
+
+ gettimeofday (&now_wall_time, NULL);
+ timeval_sub (&delta_wall_time,
+ &now_wall_time, &start_stats->start_wall_time);
printf_unfiltered (msg_type == 0
- ? _("Startup time: %ld.%06ld\n")
- : _("Command execution time: %ld.%06ld\n"),
- cmd_time / 1000000, cmd_time % 1000000);
+ ? _("Startup time: %ld.%06ld (cpu), %ld.%06ld (wall)\n")
+ : _("Command execution time: %ld.%06ld (cpu), %ld.%06ld (wall)\n"),
+ cmd_time / 1000000, cmd_time % 1000000,
+ delta_wall_time.tv_sec, delta_wall_time.tv_usec);
}
if (display_space)
@@ -764,7 +772,8 @@ make_command_stats_cleanup (int msg_type)
#endif
new_stat->msg_type = msg_type;
- new_stat->start_time = get_run_time ();
+ new_stat->start_cpu_time = get_run_time ();
+ gettimeofday (&new_stat->start_wall_time, NULL);
return make_cleanup_dtor (report_command_stats, new_stat, xfree);
}