summaryrefslogtreecommitdiffstats
path: root/src/include/debug-profiler.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/debug-profiler.h')
-rw-r--r--src/include/debug-profiler.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/src/include/debug-profiler.h b/src/include/debug-profiler.h
new file mode 100644
index 0000000..7ceb50d
--- /dev/null
+++ b/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