ultimatepp/uppdev/CoreTopics/Profile.h
cxl 2e4b276e07 Merge continued
git-svn-id: svn://ultimatepp.org/upp/trunk@10263 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2016-10-04 08:34:39 +00:00

64 lines
1.6 KiB
C++

class String;
class TimingInspector {
protected:
static bool active;
const char *name;
int call_count;
dword total_time;
dword min_time;
dword max_time;
int nesting_depth;
int max_nesting;
int all_count;
dword start_time;
StaticMutex mutex;
public:
TimingInspector(const char *name = NULL); // Not String !!!
~TimingInspector();
void Start();
void End();
String Dump();
class Routine {
public:
Routine(TimingInspector& stat) : stat(stat) { stat.Start(); }
~Routine() { stat.End(); }
protected:
TimingInspector& stat;
};
static void Activate(bool b) { active = b; }
};
class HitCountInspector
{
public:
HitCountInspector(const char *name, int hitcount = 0) : name(name), hitcount(hitcount) {}
~HitCountInspector();
void Step() { Mutex::Lock __(mutex); hitcount++; }
void Add(int i) { Mutex::Lock __(mutex); hitcount += i; }
void operator ++ () { Step(); }
void operator += (int i) { Add(i); }
private:
const char *name;
int hitcount;
Mutex mutex;
};
#define RTIMING(x) \
static TimingInspector COMBINE(sTmStat, __LINE__)(x); \
TimingInspector::Routine COMBINE(sTmStatR, __LINE__)(COMBINE(sTmStat, __LINE__));
#define RACTIVATE_TIMING() TimingInspector::Activate(true);
#define RDEACTIVATE_TIMING() TimingInspector::Activate(false);
#define RHITCOUNT(n) \
{ static HitCountInspector hitcount(n); hitcount.Step(); }