ftp.nice.ch/pub/next/tools/screen/backspace/Roaches.1.1.s.tar.gz#/Roaches/Timing.m

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.