+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <libc.h>
-#include "cputime.h"
-
-/*
- * This returns the frequency of the TBR in cycles per second.
- */
-static double GetTBRFreq(void) {
- mach_timebase_info_data_t tinfo;
- mach_timebase_info(&tinfo);
-
- double machRatio = (double)tinfo.numer / (double)tinfo.denom;
- return machRatio;
-}
-
-/*
- * Return TBR Frequency, getting it lazily once. May not be thread safe.
- */
-static double TbrFreqLocal = 0.0; // ration for NANOSECONDS
-static double tbrFreq()
-{
- if(TbrFreqLocal == 0.0) {
- TbrFreqLocal = GetTBRFreq();
- printf("machRatio %e\n", TbrFreqLocal);
- }
- return TbrFreqLocal;
-}
-
-// seconds
-double CPUTimeDeltaSec(CPUTime from, CPUTime to)
-{
- CPUTime delta = to - from;
- return (double)delta * (tbrFreq() * (double)1e-9);
-}
-
-// milliseconds
-double CPUTimeDeltaMs(CPUTime from, CPUTime to)
-{
- CPUTime delta = to - from;
- return (double)delta * (tbrFreq() * (double)1e-6);
-}
-
-// microseconds
-double CPUTimeDeltaUs(CPUTime from, CPUTime to)
-{
- CPUTime delta = to - from;
- return (double)delta * (tbrFreq() * (double)1e-3);
-}
-
-/*
- * Calculate the average of an array of doubles. The lowest and highest values
- * are discarded if there are more than two samples. Typically used to get an
- * average of a set of values returned from CPUTimeDelta*().
- */
-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;
-}