[haiku-commits] r43045 - in haiku/trunk: headers/private/kernel src/system/kernel/debug

  • From: mmlr@xxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 31 Oct 2011 22:37:39 +0100 (CET)

Author: mmlr
Date: 2011-10-31 22:37:39 +0100 (Mon, 31 Oct 2011)
New Revision: 43045
Changeset: https://dev.haiku-os.org/changeset/43045

Modified:
   haiku/trunk/headers/private/kernel/tracing.h
   haiku/trunk/src/system/kernel/debug/tracing.cpp
Log:
bonefish+mmlr:
* Add an AbstractTraceEntryWithStackTrace that includes stack trace handling.
* Add a selector macro/template combo to conveniently select the right base
  class depending on whether stack traces are enabled or not.
* Minor style cleanups.


Modified: haiku/trunk/headers/private/kernel/tracing.h
===================================================================
--- haiku/trunk/headers/private/kernel/tracing.h        2011-10-31 21:31:58 UTC 
(rev 43044)
+++ haiku/trunk/headers/private/kernel/tracing.h        2011-10-31 21:37:39 UTC 
(rev 43045)
@@ -92,25 +92,72 @@
 
 
 class AbstractTraceEntry : public TraceEntry {
-       public:
-               AbstractTraceEntry();
-               virtual ~AbstractTraceEntry();
+public:
+       AbstractTraceEntry()
+       {
+               _Init();
+       }
 
-               virtual void Dump(TraceOutput& out);
+       // dummy, ignores all arguments
+       AbstractTraceEntry(size_t, size_t, bool)
+       {
+               _Init();
+       }
 
-               virtual void AddDump(TraceOutput& out);
+       virtual ~AbstractTraceEntry();
 
-               thread_id ThreadID() const      { return fThread; }
-               thread_id TeamID() const        { return fTeam; }
-               bigtime_t Time() const          { return fTime; }
+       virtual void Dump(TraceOutput& out);
 
-       protected:
-               thread_id       fThread;
-               team_id         fTeam;
-               bigtime_t       fTime;
+       virtual void AddDump(TraceOutput& out);
+
+       thread_id ThreadID() const      { return fThread; }
+       thread_id TeamID() const        { return fTeam; }
+       bigtime_t Time() const          { return fTime; }
+
+protected:
+       typedef AbstractTraceEntry TraceEntryBase;
+
+private:
+       void _Init();
+
+protected:
+       thread_id       fThread;
+       team_id         fTeam;
+       bigtime_t       fTime;
 };
 
 
+class AbstractTraceEntryWithStackTrace : public AbstractTraceEntry {
+public:
+       AbstractTraceEntryWithStackTrace(size_t stackTraceDepth,
+               size_t skipFrames, bool kernelOnly);
+
+       virtual void DumpStackTrace(TraceOutput& out);
+
+protected:
+       typedef AbstractTraceEntryWithStackTrace TraceEntryBase;
+
+private:
+       tracing_stack_trace* fStackTrace;
+};
+
+
+template<bool stackTraceDepth>
+struct AbstractTraceEntrySelector {
+       typedef AbstractTraceEntryWithStackTrace Type;
+};
+
+
+template<>
+struct AbstractTraceEntrySelector<0> {
+       typedef AbstractTraceEntry Type;
+};
+
+
+#define TRACE_ENTRY_SELECTOR(stackTraceDepth) \
+       AbstractTraceEntrySelector<stackTraceDepth>::Type
+
+
 class LazyTraceOutput : public TraceOutput {
 public:
        LazyTraceOutput(char* buffer, size_t bufferSize, uint32 flags)

Modified: haiku/trunk/src/system/kernel/debug/tracing.cpp
===================================================================
--- haiku/trunk/src/system/kernel/debug/tracing.cpp     2011-10-31 21:31:58 UTC 
(rev 43044)
+++ haiku/trunk/src/system/kernel/debug/tracing.cpp     2011-10-31 21:37:39 UTC 
(rev 43045)
@@ -737,17 +737,6 @@
 //     #pragma mark -
 
 
-AbstractTraceEntry::AbstractTraceEntry()
-{
-       Thread* thread = thread_get_current_thread();
-       if (thread != NULL) {
-               fThread = thread->id;
-               if (thread->team)
-                       fTeam = thread->team->id;
-       }
-       fTime = system_time();
-}
-
 AbstractTraceEntry::~AbstractTraceEntry()
 {
 }
@@ -777,6 +766,38 @@
 }
 
 
+void
+AbstractTraceEntry::_Init()
+{
+       Thread* thread = thread_get_current_thread();
+       if (thread != NULL) {
+               fThread = thread->id;
+               if (thread->team)
+                       fTeam = thread->team->id;
+       }
+       fTime = system_time();
+}
+
+
+//     #pragma mark - AbstractTraceEntryWithStackTrace
+
+
+
+AbstractTraceEntryWithStackTrace::AbstractTraceEntryWithStackTrace(
+       size_t stackTraceDepth, size_t skipFrames, bool kernelOnly)
+{
+       fStackTrace = capture_tracing_stack_trace(stackTraceDepth, skipFrames + 
1,
+               kernelOnly);
+}
+
+
+void
+AbstractTraceEntryWithStackTrace::DumpStackTrace(TraceOutput& out)
+{
+       out.PrintStackTrace(fStackTrace);
+}
+
+
 //     #pragma mark -
 
 


Other related posts:

  • » [haiku-commits] r43045 - in haiku/trunk: headers/private/kernel src/system/kernel/debug - mmlr