summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-02-23 08:24:59 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-02-23 08:24:59 +0000
commitb9bdac02514b305f7fb25d810054c99fa332f4a0 (patch)
treef0ea3932872bcb476c00fa65a0790c40d7a0bea3
parentc1eb1a369073742ce962dcaba73c73b0cdddcc93 (diff)
downloadopenocd_libswd-b9bdac02514b305f7fb25d810054c99fa332f4a0.tar.gz
openocd_libswd-b9bdac02514b305f7fb25d810054c99fa332f4a0.tar.bz2
openocd_libswd-b9bdac02514b305f7fb25d810054c99fa332f4a0.tar.xz
openocd_libswd-b9bdac02514b305f7fb25d810054c99fa332f4a0.zip
- added time command
- changed syntax of time measurements to seconds, e.g. 1.2324s git-svn-id: svn://svn.berlios.de/openocd/trunk@321 b42882b7-edfa-0310-969c-e2dbd0fdcd60
-rw-r--r--src/helper/command.c29
-rw-r--r--src/helper/time_support.c7
2 files changed, 34 insertions, 2 deletions
diff --git a/src/helper/command.c b/src/helper/command.c
index 87ddf839..4b6de26c 100644
--- a/src/helper/command.c
+++ b/src/helper/command.c
@@ -29,6 +29,7 @@
#include "command.h"
#include "log.h"
+#include "time_support.h"
#include <stdlib.h>
#include <string.h>
@@ -40,6 +41,7 @@
void command_print_help_line(command_context_t* context, struct command_s *command, int indent);
int handle_sleep_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
+int handle_time_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
int build_unique_lengths(command_context_t *context, command_t *commands)
{
@@ -569,6 +571,9 @@ command_context_t* command_init()
register_command(context, NULL, "sleep", handle_sleep_command,
COMMAND_ANY, "sleep for <n> milliseconds");
+ register_command(context, NULL, "time", handle_time_command,
+ COMMAND_ANY, "time <cmd + args> - execute <cmd + args> and print time it took");
+
return context;
}
@@ -587,3 +592,27 @@ int handle_sleep_command(struct command_context_s *cmd_ctx, char *cmd, char **ar
return ERROR_OK;
}
+
+int handle_time_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+{
+ if (argc<1)
+ return ERROR_COMMAND_SYNTAX_ERROR;
+
+ duration_t duration;
+ char *duration_text;
+ int retval;
+
+ duration_start_measure(&duration);
+
+ retval = find_and_run_command(cmd_ctx, cmd_ctx->commands, args, argc, 0);
+
+ duration_stop_measure(&duration, &duration_text);
+
+ float t=duration.duration.tv_sec;
+ t+=((float)duration.duration.tv_usec / 1000000.0);
+ command_print(cmd_ctx, "%s took %fs", args[0], t);
+
+ free(duration_text);
+
+ return retval;
+}
diff --git a/src/helper/time_support.c b/src/helper/time_support.c
index de48fce8..f772d2f4 100644
--- a/src/helper/time_support.c
+++ b/src/helper/time_support.c
@@ -102,8 +102,11 @@ int duration_stop_measure(duration_t *duration, char **text)
if (text)
{
- *text = malloc(16);
- snprintf(*text, 16, "%lis %lius", duration->duration.tv_sec, duration->duration.tv_usec);
+ float t;
+ t=duration->duration.tv_sec;
+ t+=(float)duration->duration.tv_usec/1000000.0;
+ *text = malloc(100);
+ snprintf(*text, 100, "%fs", t);
}
return ERROR_OK;