|  | #pragma once
#include "SqTime.h"
/**
 * Unfinished time class. Meant to be inserted into other code (like VCV Rack).
 * Averages states over time.
 * Will printf states every now and then.
 * Many ways to improve this - printing from a different thread is one.
 */
class TimeStatsCollector
{
public:
    TimeStatsCollector()
    {
    }
    /**
     * Instrumented code calls this to start a timing sample.
     */
    void start()
    {
		startTime = SqTime::seconds();
    }
    /**
     * Instrumented code calls this to step timing
     * @param numLoops is the number of "events" since start was called.
     */
    void stop(int numLoops)
    {
		const double stop = SqTime::seconds();
		const double delta = stop - startTime;
		numDataPoints += numLoops;
		totalTimeFrame += delta;
		if (delta < minTime) {
			minTime = delta;
		} else if (delta > maxTime) {
			maxTime = delta;
		}
		
		if (numDataPoints > 1000) {
			const double avgTime = totalTimeFrame / numDataPoints;
			const double srTime = (1.0 / 44100.0);
			const double ratio = avgTime / srTime;
            totalTimeGlobal += avgTime;
            numFramesInTotal++;
            double runningAvg = totalTimeGlobal / (numFramesInTotal * srTime);
            printf("\nsrTime=%f avtTime=%f\n", srTime, avgTime);
            printf("this block: %f%% min=%f max=%f globalmax=%f running avg=%f\n", 
                ratio * 100, minTime, maxTime, globalMax, runningAvg * 100);
            if (globalMax < maxTime) {
                globalMax = maxTime;
            }
			numDataPoints=0;
			totalTimeFrame = 0;
			minTime = 1000000000;
			maxTime = -100000000000;
		}
    }
private:
    int numDataPoints = 0;     // number of samples in current frame.
    double totalTimeFrame = 0; // Time spent in the test code this frame.
    double startTime;          // Start time if current sample
    double minTime = 1000000000;   // shorted time observed in current frame
    double maxTime = -100000000000;// longest time observed in current frame.
    double globalMax = -100000000000;
    double totalTimeGlobal = 0;
    int numFramesInTotal = 0;
};
 |