ftp.nice.ch/pub/next/tools/performance/NWBench.NIHS.bs.tar.gz#/NWBench.NIHS.bs/Source/Timer.m

This is Timer.m in view mode; [Download] [Up]

#import "Timer.h"

@implementation Timer

-tare
{
	struct timezone tzone1;
	struct timeval realtime1;
	struct timeval realtime2;


	if(!noPS) NXPing();
	gettimeofday(&realtime1,&tzone1);
	if(!noPS) NXPing();
	gettimeofday(&realtime2,&tzone1);
	tare = (-realtime1.tv_sec + realtime2.tv_sec) +
	  (-realtime1.tv_usec+ realtime2.tv_usec)/1.0E6;
	cumWallTime=0;
	return self;
}

-wallEnter
{
    if(!noPS) NXPing();
    gettimeofday(&realtime,&tzone);
    synctime = realtime.tv_sec +realtime.tv_usec/1.0E6;
    return self;
}

-wallLeave
{
    double eTime;

    if(!noPS) NXPing();
    gettimeofday(&realtime,&tzone);
    eTime = (-synctime + realtime.tv_sec 
                + realtime.tv_usec /1.0E6) - tare;
    cumWallTime += eTime;
    return self;
}

-psEnter
{
    if(!noPS) PSusertime(&stime);
    getrusage(RUSAGE_SELF,&rtime);
    pssynctime = (rtime.ru_utime.tv_sec + 
        rtime.ru_stime.tv_sec) +
        (rtime.ru_utime.tv_usec + 
        rtime.ru_stime.tv_usec)
        /1.0E6;
    return self;
}

-psLeave
{
    int et;
    double appTime;
    double psTime;
    getrusage(RUSAGE_SELF,&rtime);
    appTime  = ((rtime.ru_utime.tv_sec + 
        rtime.ru_stime.tv_sec) +
        (rtime.ru_utime.tv_usec + 
        rtime.ru_stime.tv_usec)
        /1.0E6) -pssynctime;
    cumAppTime += appTime;
    if(!noPS) PSusertime(&et);
    psTime = ((et-stime)/1000.0);
    cumPSTime += psTime;
    return self;
}



- startTimer
{
	running = 1;
	[self tare];
	[self wallEnter];
	if(!noPS) [self psEnter];
	return self;
}

- stopTimer
{
	if(running){
		[self wallLeave];
		[self psLeave];
		running = 0;
	}
	return self;
}

- (double) wallTime
{
	return	cumWallTime;
}

- (double) appTime
{
	return	cumAppTime;
}

- (double) psTime
{
	return 	cumPSTime;
}

- (const char *)timeString
{
	static char buf[256];

	sprintf(buf,"TIMES: \t%5.1f  (wall) \t%5.1f  (sys) \t%5.1f (win)",
		[self wallTime],[self appTime],[self psTime]);
	return buf;
}

- setNoPS:(BOOL)flag
{
	noPS = flag;
	return self;
}

@end

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.