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
00028 #ifndef lint
00029 static const char RCStimer_nt[] = "@(#)$Header: /cvsroot/brlcad/brlcad/src/librt/timer-nt.c,v 14.9 2006/09/16 02:04:26 lbutler Exp $ (BRL)";
00030 #endif
00031
00032 #include "common.h"
00033
00034 #include <stdio.h>
00035 #include <string.h>
00036 #include <time.h>
00037
00038 #include "machine.h"
00039 #include "vmath.h"
00040 #include "raytrace.h"
00041
00042
00043 static clock_t start;
00044 time_t time0;
00045
00046
00047
00048
00049 void
00050 rt_prep_timer(void)
00051 {
00052 start = clock();
00053 time( &time0 );
00054 }
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 double
00066 rt_get_timer(struct bu_vls *vp, double *elapsed)
00067 {
00068 long now;
00069 double user_cpu_secs;
00070 double sys_cpu_secs;
00071 double elapsed_secs;
00072 double percent;
00073 clock_t finish;
00074
00075
00076 (void)time(&now);
00077 elapsed_secs = difftime(now,time0);
00078
00079 finish = clock();
00080 sys_cpu_secs = (double)(finish - start);
00081 sys_cpu_secs /= CLOCKS_PER_SEC;
00082
00083 user_cpu_secs = sys_cpu_secs;
00084
00085 if( user_cpu_secs < 0.00001 ) user_cpu_secs = 0.00001;
00086 if( elapsed_secs < 0.00001 ) elapsed_secs = user_cpu_secs;
00087
00088 if( elapsed ) *elapsed = elapsed_secs;
00089
00090 if( vp ) {
00091 percent = user_cpu_secs/elapsed_secs*100.0;
00092 BU_CK_VLS(vp);
00093 bu_vls_printf( vp,
00094 "%g user + %g sys in %g elapsed secs (%g%%)",
00095 user_cpu_secs, sys_cpu_secs, elapsed_secs, percent );
00096 }
00097 return( user_cpu_secs );
00098 }
00099
00100 double
00101 rt_read_timer(char *str, int len)
00102 {
00103 struct bu_vls vls;
00104 double cpu;
00105 int todo;
00106
00107 if( !str ) return rt_get_timer( (struct bu_vls *)0, (double *)0 );
00108
00109 bu_vls_init( &vls );
00110 cpu = rt_get_timer( &vls, (double *)0 );
00111 todo = bu_vls_strlen( &vls );
00112 if( todo > len ) todo = len-1;
00113 strncpy( str, bu_vls_addr(&vls), todo );
00114 str[todo] = '\0';
00115 return cpu;
00116 }
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127