forked from Imagelibrary/rtems
test: Add rtems_test_busy_cpu_usage()
This commit is contained in:
@@ -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
|
* embedded brains GmbH
|
||||||
* Dornierstr. 4
|
* Dornierstr. 4
|
||||||
@@ -289,6 +289,19 @@ void rtems_test_parallel(
|
|||||||
size_t job_count
|
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.
|
* @brief Performs a busy loop with the specified iteration count.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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
|
* embedded brains GmbH
|
||||||
* Dornierstr. 4
|
* Dornierstr. 4
|
||||||
@@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#include <rtems/test.h>
|
#include <rtems/test.h>
|
||||||
#include <rtems.h>
|
#include <rtems.h>
|
||||||
|
#include <rtems/score/threadimpl.h>
|
||||||
|
|
||||||
static uint_fast32_t estimate_busy_loop_maximum( void )
|
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;
|
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 );
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user