Add a new phase called 'delay' with which the initial starting time of a task can be delayed. Parameter is expressed in usec.
Usage is:
"phases": { "p0": { "delay": 1500000 }, ... other phases ... }
Signed-off-by: Juri Lelli juri.lelli@arm.com --- src/rt-app.c | 9 +++++++++ src/rt-app_parse_config.c | 6 +++++- src/rt-app_types.h | 1 + src/rt-app_utils.c | 5 +++++ 4 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/src/rt-app.c b/src/rt-app.c index 77d682acf3db..76a5c11b365c 100644 --- a/src/rt-app.c +++ b/src/rt-app.c @@ -297,6 +297,15 @@ static int run_event(event_data_t *event, int dry_run, *duration += timespec_to_usec(&t_end); } break; + case rtapp_delay: + { + struct timespec delay = usec_to_timespec(event->duration); + log_debug("delay %d ", event->duration); + + *t_first = timespec_add(t_first, &delay); + clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, t_first, NULL); + } + break; case rtapp_timer: { struct timespec t_period, t_now, t_wu, t_slack; diff --git a/src/rt-app_parse_config.c b/src/rt-app_parse_config.c index c59b56290bbf..f8d0f52f3ab9 100644 --- a/src/rt-app_parse_config.c +++ b/src/rt-app_parse_config.c @@ -339,7 +339,8 @@ parse_thread_event_data(char *name, struct json_object *obj, int i;
if (!strncmp(name, "run", strlen("run")) || - !strncmp(name, "sleep", strlen("sleep"))) { + !strncmp(name, "sleep", strlen("sleep")) || + !strncmp(name, "delay", strlen("delay"))) {
if (!json_object_is_type(obj, json_type_int)) goto unknown_event; @@ -350,6 +351,8 @@ parse_thread_event_data(char *name, struct json_object *obj, data->type = rtapp_sleep; else if (!strncmp(name, "runtime", strlen("runtime"))) data->type = rtapp_runtime; + else if (!strncmp(name, "delay", strlen("delay"))) + data->type = rtapp_delay; else data->type = rtapp_run;
@@ -562,6 +565,7 @@ static char *events[] = { "sleep", "runtime", "run", + "delay", "timer", "suspend", "resume", diff --git a/src/rt-app_types.h b/src/rt-app_types.h index 0570e7b5ad3e..cb7c9242f82e 100644 --- a/src/rt-app_types.h +++ b/src/rt-app_types.h @@ -58,6 +58,7 @@ typedef enum resource_t rtapp_signal, rtapp_broadcast, rtapp_sleep, + rtapp_delay, rtapp_run, rtapp_sig_and_wait, rtapp_lock, diff --git a/src/rt-app_utils.c b/src/rt-app_utils.c index 45cf26a964e2..eeb8e7b04e91 100644 --- a/src/rt-app_utils.c +++ b/src/rt-app_utils.c @@ -215,6 +215,8 @@ string_to_resource(const char *name, resource_t *resource) *resource = rtapp_sig_and_wait; else if (strcmp(name, "sleep") == 0) *resource = rtapp_sleep; + else if (strcmp(name, "delay") == 0) + *resource = rtapp_delay; else if (strcmp(name, "run") == 0) *resource = rtapp_run; else if (strcmp(name, "timer") == 0) @@ -246,6 +248,9 @@ resource_to_string(resource_t resource, char *resource_name) case rtapp_sleep: strcpy(resource_name, "sleep"); break; + case rtapp_delay: + strcpy(resource_name, "delay"); + break; case rtapp_run: strcpy(resource_name, "run"); break;