#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <libc.h>
#include "cputime.h"
static double GetTBRFreq(void) {
mach_timebase_info_data_t tinfo;
mach_timebase_info(&tinfo);
double machRatio = (double)tinfo.numer / (double)tinfo.denom;
return machRatio;
}
static double TbrFreqLocal = 0.0; static double tbrFreq()
{
if(TbrFreqLocal == 0.0) {
TbrFreqLocal = GetTBRFreq();
printf("machRatio %e\n", TbrFreqLocal);
}
return TbrFreqLocal;
}
double CPUTimeDeltaSec(CPUTime from, CPUTime to)
{
CPUTime delta = to - from;
return (double)delta * (tbrFreq() * (double)1e-9);
}
double CPUTimeDeltaMs(CPUTime from, CPUTime to)
{
CPUTime delta = to - from;
return (double)delta * (tbrFreq() * (double)1e-6);
}
double CPUTimeDeltaUs(CPUTime from, CPUTime to)
{
CPUTime delta = to - from;
return (double)delta * (tbrFreq() * (double)1e-3);
}
double CPUTimeAvg(
const double *array,
unsigned arraySize)
{
double sum = 0;
double lowest = array[0];
double highest = array[0];
for(unsigned dex=0; dex<arraySize; dex++) {
double curr = array[dex];
sum += curr;
if(curr < lowest) {
lowest = curr;
}
if(curr > highest) {
highest = curr;
}
}
if(arraySize > 2) {
sum -= lowest;
sum -= highest;
arraySize -= 2;
}
return sum / (double)arraySize;
}