- added time command
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Sat, 23 Feb 2008 08:24:59 +0000 (08:24 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Sat, 23 Feb 2008 08:24:59 +0000 (08:24 +0000)
- 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

src/helper/command.c
src/helper/time_support.c

index 87ddf83..4b6de26 100644 (file)
@@ -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;
+}
index de48fce..f772d2f 100644 (file)
@@ -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;