From fc7bc517db4a6b6b5cf0e0e4c829ee01b0cb32a5 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 9 Apr 1997 20:18:54 +0000 Subject: new files. --- c/src/libmisc/cpuuse/cpuuse.c | 142 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 c/src/libmisc/cpuuse/cpuuse.c (limited to 'c/src/libmisc/cpuuse/cpuuse.c') diff --git a/c/src/libmisc/cpuuse/cpuuse.c b/c/src/libmisc/cpuuse/cpuuse.c new file mode 100644 index 0000000000..d62fab506f --- /dev/null +++ b/c/src/libmisc/cpuuse/cpuuse.c @@ -0,0 +1,142 @@ +/* + * CPU Usage Reporter + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994, 1996. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * check.c,v 1.13 1996/04/22 16:51:52 joel Exp + * + */ + +#include + +extern rtems_configuration_table BSP_Configuration; + +#include +#include +#include +#include + +#include "cpuuse.h" + +unsigned32 CPU_usage_Ticks_at_last_reset; + +/*PAGE + * + * CPU_usage_Dump + */ + +void CPU_usage_Dump( void ) +{ + unsigned32 i; + unsigned32 class_index; + Thread_Control *the_thread; + Objects_Information *information; + unsigned32 u32_name; + char name[5]; + unsigned32 total_units = 0; + + for ( class_index = OBJECTS_CLASSES_FIRST ; + class_index <= OBJECTS_CLASSES_LAST ; + class_index++ ) { + information = _Objects_Information_table[ class_index ]; + if ( information && information->is_thread ) { + for ( i=1 ; i <= information->maximum ; i++ ) { + the_thread = (Thread_Control *)information->local_table[ i ]; + + if ( the_thread ) + total_units += the_thread->ticks_executed; + } + } + } + + printf("CPU Usage by thread\n"); +#if defined(unix) || ( CPU_HARDWARE_FP == TRUE ) + printf( " ID NAME TICKS PERCENT\n" ); +#else + printf( " ID NAME TICKS\n" ); +#endif + + for ( class_index = OBJECTS_CLASSES_FIRST ; + class_index <= OBJECTS_CLASSES_LAST ; + class_index++ ) { + information = _Objects_Information_table[ class_index ]; + if ( information && information->is_thread ) { + for ( i=1 ; i <= information->maximum ; i++ ) { + the_thread = (Thread_Control *)information->local_table[ i ]; + + if ( !the_thread ) + continue; + + u32_name = *(unsigned32 *)the_thread->Object.name; + + name[ 0 ] = (u32_name >> 24) & 0xff; + name[ 1 ] = (u32_name >> 16) & 0xff; + name[ 2 ] = (u32_name >> 8) & 0xff; + name[ 3 ] = (u32_name >> 0) & 0xff; + name[ 4 ] = '\0'; + +#if defined(unix) || ( CPU_HARDWARE_FP == TRUE ) + printf( "0x%08x %4s %8d %5.3f\n", + the_thread->Object.id, + name, + the_thread->ticks_executed, + (total_units) ? + (double)the_thread->ticks_executed / (double)total_units : + (double)total_units + ); +#else + printf( "0x%08x %4s %8d\n", + the_thread->Object.id, + name, + the_thread->ticks_executed + ); +#endif + } + } + } + + printf( + "\nTicks since last reset = %d\n", + _Watchdog_Ticks_since_boot - CPU_usage_Ticks_at_last_reset + ); + printf( "\nTotal Units = %d\n", total_units ); +} + +/*PAGE + * + * CPU_usage_Reset + */ + +void CPU_usage_Reset( void ) +{ + unsigned32 i; + unsigned32 class_index; + Thread_Control *the_thread; + Objects_Information *information; + + CPU_usage_Ticks_at_last_reset = _Watchdog_Ticks_since_boot; + + for ( class_index = OBJECTS_CLASSES_FIRST ; + class_index <= OBJECTS_CLASSES_LAST ; + class_index++ ) { + information = _Objects_Information_table[ class_index ]; + if ( information && information->is_thread ) { + for ( i=1 ; i <= information->maximum ; i++ ) { + the_thread = (Thread_Control *)information->local_table[ i ]; + + if ( !the_thread ) + continue; + + the_thread->ticks_executed = 0; + } + } + } + +} + -- cgit v1.2.3