summaryrefslogtreecommitdiffstats
path: root/c/src/libmisc/cpuuse/cpuuse.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1997-04-09 20:18:54 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1997-04-09 20:18:54 +0000
commitfc7bc517db4a6b6b5cf0e0e4c829ee01b0cb32a5 (patch)
treead4b85b59d644208f4cf74bc7f04a3d8a7bfc795 /c/src/libmisc/cpuuse/cpuuse.c
parentadded rtmonuse and cpuuse directories (diff)
downloadrtems-fc7bc517db4a6b6b5cf0e0e4c829ee01b0cb32a5.tar.bz2
new files.
Diffstat (limited to 'c/src/libmisc/cpuuse/cpuuse.c')
-rw-r--r--c/src/libmisc/cpuuse/cpuuse.c142
1 files changed, 142 insertions, 0 deletions
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 <rtems.h>
+
+extern rtems_configuration_table BSP_Configuration;
+
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#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;
+ }
+ }
+ }
+
+}
+