RetroZilla/modules/libutil/public/stopwatch.h
2015-10-20 23:03:22 -04:00

108 lines
3.0 KiB
C++

#ifndef __STOPWATCH_H
#define __STOPWATCH_H
#include "nscore.h"
#include "prlog.h"
#include "nsDeque.h"
#ifdef XP_MAC
#define R__MAC
#endif
#ifdef XP_UNIX
#define R__UNIX
#endif
#ifdef MOZ_PERF_METRICS
# define NS_RESET_AND_START_STOPWATCH(_sw) \
_sw.Start(PR_TRUE);
# define NS_START_STOPWATCH(_sw) \
_sw.Start(PR_FALSE);
# define NS_STOP_STOPWATCH(_sw) \
_sw.Stop();
# define NS_SAVE_STOPWATCH_STATE(_sw) \
_sw.SaveState();
# define NS_RESTORE_STOPWATCH_STATE(_sw) \
_sw.RestoreState();
#else
# define NS_RESET_AND_START_STOPWATCH(_sw)
# define NS_START_STOPWATCH(_sw)
# define NS_STOP_STOPWATCH(_sw)
# define NS_SAVE_STOPWATCH_STATE(_sw)
# define NS_RESTORE_STOPWATCH_STATE(_sw)
#endif
#ifdef MOZ_PERF_METRICS
static PRLogModuleInfo* gLogStopwatchModule = PR_NewLogModule("timing");
#if 0
#define RAPTOR_TRACE_STOPWATCHES 0x1
#define RAPTOR_STOPWATCH_TRACE(_args) \
PR_BEGIN_MACRO \
PR_LOG(gLogStopwatchModule, RAPTOR_TRACE_STOPWATCHES, _args); \
PR_END_MACRO
#endif
#define RAPTOR_STOPWATCH_TRACE(_args) \
PR_BEGIN_MACRO \
printf _args ; \
PR_END_MACRO
#else
#define RAPTOR_TRACE_STOPWATCHES
#define RAPTOR_STOPWATCH_TRACE(_args)
#endif
#ifdef DEBUG_STOPWATCH
#define RAPTOR_STOPWATCH_DEBUGTRACE(_args) \
PR_BEGIN_MACRO \
printf _args ; \
PR_END_MACRO
#else
#define RAPTOR_STOPWATCH_DEBUGTRACE(_args)
#endif
class Stopwatch {
private:
enum EState { kUndefined, kStopped, kRunning };
double fStartRealTime; //wall clock start time
double fStopRealTime; //wall clock stop time
double fStartCpuTime; //cpu start time
double fStopCpuTime; //cpu stop time
double fTotalCpuTime; //total cpu time
double fTotalRealTime; //total real time
EState fState; //stopwatch state
nsDeque* mSavedStates; //stack of saved states
PRBool mCreatedStack; //Initially false. Set to true in first SaveState() call.
public:
Stopwatch();
virtual ~Stopwatch();
void Start(PRBool reset = PR_TRUE);
void Stop();
void Continue();
void SaveState(); // record current state of stopwatch
void RestoreState(); // restore last recored state of stopwatch
double RealTime();
double RealTimeInMilliseconds();
void Reset() { ResetCpuTime(); ResetRealTime(); }
void ResetCpuTime(double aTime = 0) { Stop(); fTotalCpuTime = aTime; }
void ResetRealTime(double aTime = 0) { Stop(); fTotalRealTime = aTime; }
double CpuTime();
void Print(void);
static double GetRealTime();
static double GetCPUTime();
};
#endif