From b9bdac02514b305f7fb25d810054c99fa332f4a0 Mon Sep 17 00:00:00 2001 From: oharboe Date: Sat, 23 Feb 2008 08:24:59 +0000 Subject: - 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 --- src/helper/command.c | 29 +++++++++++++++++++++++++++++ src/helper/time_support.c | 7 +++++-- 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 #include @@ -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 milliseconds"); + register_command(context, NULL, "time", handle_time_command, + COMMAND_ANY, "time - execute 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; -- cgit v1.2.3