This is Timing.m in view mode; [Download] [Up]
/* The Timing class is from the NextDeveloper Documentation, and is * (C) 1993 by NeXT, Inc. */ /* Timing.m */ #import "Timing.h" #import <stdio.h> #import <streams/streams.h> #import <dpsclient/wraps.h> #import <appkit/graphics.h> @implementation Timing +newWithTag:(int) aTag { self = [super new]; tag = aTag; [self reset]; return self; } -enter:(int)wt { if(wallTime = (wt==WALLTIME)) [self wallEnter]; else [self psEnter]; return self; } -wallEnter { cumTimesEntered++; NXPing(); gettimeofday(&realtime,&tzone); synctime = realtime.tv_sec + realtime.tv_usec/1000000.0; return self; } -tare { struct timezone tzone1; struct timeval realtime1; struct timeval realtime2; NXPing(); gettimeofday(&realtime1,&tzone1); NXPing(); gettimeofday(&realtime2,&tzone1); tare = (-realtime1.tv_sec + realtime2.tv_sec)+ (-realtime1.tv_usec+realtime2.tv_usec)/1000000.0; return self; } -psEnter { cumTimesEntered++; PSusertime(&stime); getrusage(RUSAGE_SELF,&rtime); synctime = (rtime.ru_utime.tv_sec + rtime.ru_stime.tv_sec) + (rtime.ru_utime.tv_usec + rtime.ru_stime.tv_usec)/1000000.0; return self; } -wallLeave { double eTime; NXPing(); gettimeofday(&realtime,&tzone); eTime = (- synctime + realtime.tv_sec + realtime.tv_usec/1000000.0) -tare; cumWallTime += eTime; return self; } -psLeave { int et; double appTime; double psTime; getrusage(RUSAGE_SELF,&rtime); PSusertime(&et); psTime = ((et-stime)/1000.0); cumPSTime += psTime; appTime = ((rtime.ru_utime.tv_sec + rtime.ru_stime.tv_sec) + (rtime.ru_utime.tv_usec + rtime.ru_stime.tv_usec)/1000000.0) -synctime; cumAppTime += appTime; return self; } -leave { if(wallTime) [self wallLeave]; else [self psLeave]; return self; } -reset { cumAppTime = 0.0; cumPSTime = 0.0; cumWallTime = 0.0; cumTimesEntered = 0; return self; } -avgElapsedTime { if(wallTime) avgWallTime = (cumWallTime/(double)cumTimesEntered); else{ avgAppTime = (cumAppTime/(double)cumTimesEntered) ; avgPSTime = (cumPSTime/(double)cumTimesEntered); } return self; } -(double) cumWallTime { if(wallTime ==WALLTIME) return cumWallTime; else return -1.0; } -(double) cumAppTime; { if(wallTime ==PSTIME) return cumAppTime; else return -1.0; } -(double) cumPSTime; { if(wallTime ==PSTIME) return cumPSTime; else return -1.0; } -summary:(NXStream *)c { if(wallTime) { NXPrintf(c,"Timer %d : entered %d trials TotalWall Time %lf\n", tag, cumTimesEntered, cumWallTime); } else { NXPrintf(c,"Timer %d : %d trials App: %lf Server: %lf\nPercent Server: %lf Total: %lf\n\00", tag, cumTimesEntered, cumAppTime, cumPSTime, cumPSTime/(cumAppTime+cumPSTime), cumAppTime+cumPSTime); } NXFlush(c); return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.