##// END OF EJS Templates
Added srec production and bumped FSW to 3.2.0.17 since .16 has been delivered...
Added srec production and bumped FSW to 3.2.0.17 since .16 has been delivered to LESIA to test snapshots synchronisation fix

File last commit:

r320:6303d998f250 R3_plus
r377:3236b2a1a6a0 3.2.0.17 No PWD scrub with...
Show More
lfr_cpu_usage_report.c
118 lines | 3.5 KiB | text/x-c | CLexer
/ src / lfr_cpu_usage_report.c
paul
1.0.0.7...
r135 /*
* CPU Usage Reporter
*
* COPYRIGHT (c) 1989-2009
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
#include "lfr_cpu_usage_report.h"
unsigned char lfr_rtems_cpu_usage_report( void )
{
uint32_t api_index;
Thread_Control *the_thread;
Objects_Information *information;
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 uint32_t ival;
uint32_t fval;
paul
1.0.0.7...
r135 #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
paul
Many corrections done after Logiscope analysis
r166 Timestamp_Control uptime;
Timestamp_Control total;
Timestamp_Control ran;
paul
1.0.0.7...
r135 #else
uint32_t total_units = 0;
#endif
unsigned char cpu_load;
paul
Bug #801 Don_Initialisation_P2
r320
ival = 0;
paul
1.0.0.7...
r135 cpu_load = 0;
/*
* When not using nanosecond CPU usage resolution, we have to count
* the number of "ticks" we gave credit for to give the user a rough
* guideline as to what each number means proportionally.
*/
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
_TOD_Get_uptime( &uptime );
_Timestamp_Subtract( &CPU_usage_Uptime_at_last_reset, &uptime, &total );
#else
for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) {
paul
Many corrections done after Logiscope analysis
r166 if ( !_Objects_Information_table[ api_index ] ) { }
else
paul
1.0.0.7...
r135 {
paul
Many corrections done after Logiscope analysis
r166 information = _Objects_Information_table[ api_index ][ 1 ];
if ( information != NULL )
{
for ( i=1 ; i <= information->maximum ; i++ ) {
the_thread = (Thread_Control *)information->local_table[ i ];
paul
1.0.0.7...
r135
paul
Bug #703 hk_lfr_le and hk_lfr_me handling corrected
r317 if ( the_thread != NULL ) {
total_units += the_thread->cpu_time_used; }
paul
Many corrections done after Logiscope analysis
r166 }
paul
1.0.0.7...
r135 }
}
}
#endif
for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ )
{
paul
Many corrections done after Logiscope analysis
r166 if ( !_Objects_Information_table[ api_index ] ) { }
else
paul
1.0.0.7...
r135 {
paul
Many corrections done after Logiscope analysis
r166 information = _Objects_Information_table[ api_index ][ 1 ];
if ( information != NULL )
paul
1.0.0.7...
r135 {
paul
Many corrections done after Logiscope analysis
r166 the_thread = (Thread_Control *)information->local_table[ 1 ];
paul
1.0.0.7...
r135
paul
Many corrections done after Logiscope analysis
r166 if ( the_thread == NULL ) { }
else
{
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
/*
* If this is the currently executing thread, account for time
* since the last context switch.
*/
ran = the_thread->cpu_time_used;
if ( _Thread_Executing->Object.id == the_thread->Object.id )
{
Timestamp_Control used;
_Timestamp_Subtract(
&_Thread_Time_of_last_context_switch, &uptime, &used
);
_Timestamp_Add_to( &ran, &used );
}
_Timestamp_Divide( &ran, &total, &ival, &fval );
#else
if (total_units != 0)
{
uint64_t ival_64;
ival_64 = the_thread->cpu_time_used;
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 ival_64 *= CONST_100000;
paul
Many corrections done after Logiscope analysis
r166 ival = ival_64 / total_units;
}
else
{
ival = 0;
}
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 fval = ival % CONST_1000;
ival /= CONST_1000;
paul
Many corrections done after Logiscope analysis
r166 #endif
}
paul
1.0.0.7...
r135 }
}
}
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 cpu_load = (unsigned char) (CONST_100 - ival);
paul
1.0.0.7...
r135
return cpu_load;
}