diff options
Diffstat (limited to 'tderadio3/src/include/debug-profiler.h')
-rw-r--r-- | tderadio3/src/include/debug-profiler.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/tderadio3/src/include/debug-profiler.h b/tderadio3/src/include/debug-profiler.h new file mode 100644 index 0000000..7ceb50d --- /dev/null +++ b/tderadio3/src/include/debug-profiler.h @@ -0,0 +1,112 @@ +/*************************************************************************** + debug-profiler.h - description + ------------------- + begin : Sat May 28 2005 + copyright : (C) 2005 by Martin Witte + email : witte@kawo1.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef KRADIO_DEBUG_PROFILER_H +#define KRADIO_DEBUG_PROFILER_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <tqstring.h> +#include <tqmap.h> + +#if (defined __i386__) || (defined __x86_64__) +static __inline__ unsigned long long int rdtsc() +{ + unsigned int a, d; + asm volatile("rdtsc" : "=a" (a), "=d" (d)); + return ((unsigned long long)a) | (((unsigned long long)d) << 32); +} +#else +static __inline__ unsigned long long int rdtsc() +{ + return 0UL; +} +#endif + +class Profiler +{ +public: + Profiler(); + virtual ~Profiler(); + + void startProfile(const TQString &descr); + void stopProfile (const TQString &descr); + + void printData(); + +protected: + + virtual long long getCounter() const = 0; + + void stopInternalCounter(); + void startInternalCounter(); + + long long m_internalCounter; + long long m_tmpStartVal; + + struct profile_data + { + profile_data(long long start = 0) : + startCounter(start), accumulatedCounter(0), callCounter(0), + minCounter(0x7FFFFFFFFFFFFFFFll), maxCounter(0) {} + long long startCounter; + long long accumulatedCounter; + long long callCounter; + long long minCounter; + long long maxCounter; + }; + + TQMap<TQString, profile_data> m_ProfileData; +}; + + +class TimeProfiler : public Profiler +{ +protected: + long long getCounter() const { return rdtsc(); } +}; + + +class MemProfiler : public Profiler +{ +protected: + long long getCounter() const; +}; + + +extern TimeProfiler global_time_profiler; +extern MemProfiler global_mem_profiler; + + + +class BlockProfiler +{ +public: + BlockProfiler(const TQString &descr); + ~BlockProfiler(); + + void stop(); + +protected: + TQString m_Description; +}; + + + +#endif |