Mercurial > hg > svcore
diff base/Profiler.h @ 183:146eb9e35baa
* Improve output from Profiler class and make it incur less (no) overhead in
release builds with NO_TIMING defined
* Fix a lock contention issue in spectrogram
* Marginal optimisations elsewhere
author | Chris Cannam |
---|---|
date | Tue, 10 Oct 2006 14:51:17 +0000 |
parents | 4b2ea82fd0ed |
children | 91fdc752e540 |
line wrap: on
line diff
--- a/base/Profiler.h Mon Oct 09 10:49:46 2006 +0000 +++ b/base/Profiler.h Tue Oct 10 14:51:17 2006 +0000 @@ -30,6 +30,15 @@ #include "RealTime.h" +//#define NO_TIMING 1 + +#define WANT_TIMING 1 + +#ifdef NDEBUG +#ifndef WANT_TIMING +#define NO_TIMING 1 +#endif +#endif /** * Profiling classes @@ -47,7 +56,7 @@ ~Profiles(); void accumulate(const char* id, clock_t time, RealTime rt); - void dump(); + void dump() const; protected: Profiles(); @@ -56,19 +65,38 @@ typedef std::pair<int, TimePair> ProfilePair; typedef std::map<const char *, ProfilePair> ProfileMap; typedef std::map<const char *, TimePair> LastCallMap; + typedef std::map<const char *, TimePair> WorstCallMap; ProfileMap m_profiles; LastCallMap m_lastCalls; + WorstCallMap m_worstCalls; static Profiles* m_instance; }; +#ifndef NO_TIMING + +/** + * Profile point instance class. Construct one of these on the stack + * at the start of a function, in order to record the time consumed + * within that function. The profiler object should be effectively + * optimised out if NO_TIMING is defined, so any overhead in a release + * build should be negligible so long as you remember to define that. + */ class Profiler { public: - Profiler(const char*, bool showOnDestruct = false); + /** + * Create a profile point instance that records time consumed + * against the given profiling point name. If showOnDestruct is + * true, the time consumed will be printed to stderr when the + * object is destroyed; otherwise, only the accumulated, mean and + * worst-case times will be shown when the program exits or + * Profiles::dump() is called. + */ + Profiler(const char *name, bool showOnDestruct = false); ~Profiler(); - void update(); + void update() const; protected: const char* m_c; @@ -76,6 +104,18 @@ RealTime m_startTime; bool m_showOnDestruct; }; - + +#else + +class Profiler +{ +public: + Profiler(const char *, bool) { } + ~Profiler() { } + + void update() { } +}; #endif + +#endif