00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifdef HAVE_CONFIG_H
00028 #include <config.h>
00029 #endif
00030
00037
00039
00040
00041
00042
00043 #include <cpl.h>
00044
00045 #include "xsh_model_kernel.h"
00046
00047
00048
00049 #ifdef TIMES
00050 #include <sys/tupes.h>
00051 #include <sys/times.h>
00052 #include <sys/param.h>
00053
00054 #ifndef HZ
00055 #define HZ 60.0
00056 #endif
00057
00058 #else
00059
00060 #include <sys/time.h>
00061 #include <sys/resource.h>
00062
00063 #endif
00064
00065 #include "xsh_model_cputime.h"
00066
00067 #ifdef NO_PROTO
00068 void xsh_report_cpu( fp, str )
00069 FILE *fp;
00070 char *str;
00071 #else
00072 void xsh_report_cpu(FILE *fp, char *str)
00073 #endif
00074 {
00075 static int call_no = 0;
00076 double utime, s_time;
00077
00078 get_cpu_time(&utime, &s_time);
00079
00080 if ( str == NULL )
00081 {
00082 if ( call_no++ == 0 )
00083 fprintf(fp,"Preprocessing");
00084 else
00085 fprintf(fp,"Total CPU");
00086 }
00087 else
00088 fprintf(fp,"%s", str);
00089
00090 fprintf(fp," time:\t%2.2fu %2.2fs\t%2.2f (sec)\n", utime, s_time,
00091 utime + s_time);
00092
00093
00094 }
00095
00096 #ifdef NO_PROTO
00097 void get_cpu_time(usertime, systime)
00098 double *usertime;
00099 double *systime;
00100 #else
00101 void get_cpu_time(double *usertime, double *systime)
00102 #endif
00103 {
00104 #ifdef TIMES
00105 struct tms time;
00106
00107 times( &time );
00108
00109 *usertime = (double)time.tms_utime / (double)HZ;
00110 *systime = (double)time.tms_stime / (double)HZ;
00111
00112 #else
00113
00114 struct rusage usage;
00115
00116 getrusage( RUSAGE_SELF, &usage );
00117
00118 *usertime = (double)usage.ru_utime.tv_sec +
00119 (double)usage.ru_utime.tv_usec / 1000000.;
00120 *systime = (double)usage.ru_stime.tv_sec +
00121 (double)usage.ru_stime.tv_usec / 1000000.;
00122
00123 #endif
00124
00125 }
00126