test: Add rtems_test_busy_cpu_usage()

This commit is contained in:
Sebastian Huber
2018-02-02 07:43:39 +01:00
parent 63fab5aaf9
commit 1e483a62ea
2 changed files with 32 additions and 2 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved.
* Copyright (c) 2014, 2018 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
@@ -289,6 +289,19 @@ void rtems_test_parallel(
size_t job_count
);
/**
* @brief Performs a busy loop for the specified seconds and nanoseconds based
* on the CPU usage of the executing thread.
*
* This function continuously reads the CPU usage of the executing thread.
* This operation may lead to a scheduler instance lock contention in SMP
* configurations.
*
* @param[in] seconds The busy seconds.
* @param[in] nanoseconds The busy nanoseconds.
*/
void rtems_test_busy_cpu_usage(time_t seconds, long nanoseconds);
/**
* @brief Performs a busy loop with the specified iteration count.
*

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved.
* Copyright (c) 2014, 2018 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
@@ -19,6 +19,7 @@
#include <rtems/test.h>
#include <rtems.h>
#include <rtems/score/threadimpl.h>
static uint_fast32_t estimate_busy_loop_maximum( void )
{
@@ -105,3 +106,19 @@ uint_fast32_t rtems_test_get_one_tick_busy_count( void )
return m;
}
void rtems_test_busy_cpu_usage( time_t seconds, long nanoseconds )
{
Thread_Control *executing;
Timestamp_Control busy;
Timestamp_Control start;
Timestamp_Control now;
executing = _Thread_Get_executing();
_Thread_Get_CPU_time_used( executing, &start );
_Timestamp_Set( &busy, seconds, nanoseconds );
do {
_Thread_Get_CPU_time_used( executing, &now );
} while ( now - start < busy );
}