Changed TraceEntry::Dump() to take a TraceOutput& and removed

AbstractTraceEntry::AddDump(char*, size_t).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23655 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2008-01-19 22:23:32 +00:00
parent ff5d41e762
commit f7a5d9c583
6 changed files with 57 additions and 68 deletions
+3 -3
View File
@@ -23,6 +23,7 @@ class TraceOutput {
public: public:
TraceOutput(char* buffer, size_t bufferSize); TraceOutput(char* buffer, size_t bufferSize);
void Clear();
void Print(const char* format,...); void Print(const char* format,...);
bool IsFull() const { return fSize >= fCapacity; } bool IsFull() const { return fSize >= fCapacity; }
@@ -37,7 +38,7 @@ class TraceEntry : trace_entry {
TraceEntry(); TraceEntry();
virtual ~TraceEntry(); virtual ~TraceEntry();
virtual void Dump(char* buffer, size_t bufferSize); virtual void Dump(TraceOutput& out);
size_t Size() const { return size; } size_t Size() const { return size; }
uint16 Flags() const { return flags; } uint16 Flags() const { return flags; }
@@ -58,9 +59,8 @@ class AbstractTraceEntry : public TraceEntry {
virtual ~AbstractTraceEntry(); virtual ~AbstractTraceEntry();
virtual void Dump(char* buffer, size_t bufferSize); virtual void Dump(TraceOutput& out);
virtual void AddDump(char* buffer, size_t bufferSize);
virtual void AddDump(TraceOutput& out); virtual void AddDump(TraceOutput& out);
thread_id Thread() const { return fThread; } thread_id Thread() const { return fThread; }
@@ -48,9 +48,9 @@ class Allocate : public AbstractTraceEntry {
Initialized(); Initialized();
} }
virtual void AddDump(char *buffer, size_t size) virtual void AddDump(TraceOutput& out)
{ {
snprintf(buffer, size, "alloc %lu.%u.%u", fRun.AllocationGroup(), out.Print("alloc %lu.%u.%u", fRun.AllocationGroup(),
fRun.Start(), fRun.Length()); fRun.Start(), fRun.Length());
} }
@@ -67,9 +67,9 @@ class Free : public AbstractTraceEntry {
Initialized(); Initialized();
} }
virtual void AddDump(char *buffer, size_t size) virtual void AddDump(TraceOutput& out)
{ {
snprintf(buffer, size, "free %lu.%u.%u", fRun.AllocationGroup(), out.Print("free %lu.%u.%u", fRun.AllocationGroup(),
fRun.Start(), fRun.Length()); fRun.Start(), fRun.Length());
} }
@@ -107,11 +107,10 @@ class Block : public AbstractTraceEntry {
Initialized(); Initialized();
} }
virtual void AddDump(char *buffer, size_t size) virtual void AddDump(TraceOutput& out)
{ {
uint32 length = snprintf(buffer, size, "%s: block %Ld (%p), sum %lu," out.Print("%s: block %Ld (%p), sum %lu, s/l %lu/%lu", fLabel,
" s/l %lu/%lu", fLabel, fBlock, fData, fSum, fStart, fBlock, fData, fSum, fStart, fLength);
fLength);
} }
private: private:
@@ -36,9 +36,9 @@ class Create : public AbstractTraceEntry {
Initialized(); Initialized();
} }
virtual void AddDump(char *buffer, size_t size) virtual void AddDump(TraceOutput& out)
{ {
snprintf(buffer, size, "CREATE %Ld (%p), parent %Ld (%p), \"%s\", " out.Print("CREATE %Ld (%p), parent %Ld (%p), \"%s\", "
"mode %lx, omode %x, type %lx", fID, fInode, fParentID, "mode %lx, omode %x, type %lx", fID, fInode, fParentID,
fParent, fName, fMode, fOpenMode, fType); fParent, fName, fMode, fOpenMode, fType);
} }
@@ -66,10 +66,9 @@ class Remove : public AbstractTraceEntry {
Initialized(); Initialized();
} }
virtual void AddDump(char *buffer, size_t size) virtual void AddDump(TraceOutput& out)
{ {
snprintf(buffer, size, "REMOVE %Ld (%p), \"%s\"", fID, fInode, out.Print("REMOVE %Ld (%p), \"%s\"", fID, fInode, fName);
fName);
} }
private: private:
@@ -89,9 +88,9 @@ class Action : public AbstractTraceEntry {
Initialized(); Initialized();
} }
virtual void AddDump(char *buffer, size_t size) virtual void AddDump(TraceOutput& out)
{ {
snprintf(buffer, size, "%s %Ld (%p)\n", fAction, fID, fInode); out.Print("%s %Ld (%p)\n", fAction, fID, fInode);
} }
private: private:
@@ -112,9 +111,9 @@ class Resize : public AbstractTraceEntry {
Initialized(); Initialized();
} }
virtual void AddDump(char *buffer, size_t size) virtual void AddDump(TraceOutput& out)
{ {
snprintf(buffer, size, "RESIZE %Ld (%p), %Ld -> %Ld", fID, fInode, out.Print("RESIZE %Ld (%p), %Ld -> %Ld", fID, fInode,
fOldSize, fNewSize); fOldSize, fNewSize);
} }
+8 -10
View File
@@ -91,9 +91,9 @@ class Action : public AbstractTraceEntry {
Initialized(); Initialized();
} }
virtual void AddDump(char *buffer, size_t size) virtual void AddDump(TraceOutput& out)
{ {
snprintf(buffer, size, "cache %p, %s transaction %p (id %ld)%s" out.Print("cache %p, %s transaction %p (id %ld)%s"
", %ld/%ld blocks", fCache, fLabel, fTransaction, fID, ", %ld/%ld blocks", fCache, fLabel, fTransaction, fID,
fSub ? " sub" : "", fNumBlocks, fSubNumBlocks); fSub ? " sub" : "", fNumBlocks, fSubNumBlocks);
} }
@@ -123,9 +123,9 @@ class Detach : public AbstractTraceEntry {
Initialized(); Initialized();
} }
virtual void AddDump(char *buffer, size_t size) virtual void AddDump(TraceOutput& out)
{ {
snprintf(buffer, size, "cache %p, detach transaction %p (id %ld)" out.Print("cache %p, detach transaction %p (id %ld)"
"from transaction %p (id %ld)%s", "from transaction %p (id %ld)%s",
fCache, fNewTransaction, fNewID, fTransaction, fID, fCache, fNewTransaction, fNewID, fTransaction, fID,
fSub ? " sub" : ""); fSub ? " sub" : "");
@@ -164,14 +164,12 @@ class Abort : public AbstractTraceEntry {
Initialized(); Initialized();
} }
virtual void AddDump(char *buffer, size_t size) virtual void AddDump(TraceOutput& out)
{ {
int length = snprintf(buffer, size, "cache %p, abort transaction " out.Print("cache %p, abort transaction "
"%p (id %ld), blocks", fCache, fTransaction, fID); "%p (id %ld), blocks", fCache, fTransaction, fID);
for (int32 i = 0; i < fNumBlocks && (size_t)length < size; i++) { for (int32 i = 0; i < fNumBlocks && !out.IsFull(); i++)
length += snprintf(buffer + length, size - length, " %Ld", out.Print(" %Ld", fBlocks[i]);
fBlocks[i]);
}
} }
private: private:
+18 -17
View File
@@ -146,9 +146,18 @@ allocate_entry(size_t size, uint16 flags)
TraceOutput::TraceOutput(char* buffer, size_t bufferSize) TraceOutput::TraceOutput(char* buffer, size_t bufferSize)
: fBuffer(buffer), : fBuffer(buffer),
fCapacity(bufferSize), fCapacity(bufferSize)
fSize(0)
{ {
Clear();
}
void
TraceOutput::Clear()
{
if (fCapacity > 0)
fBuffer[0] = '\0';
fSize = 0;
} }
@@ -179,11 +188,11 @@ TraceEntry::~TraceEntry()
void void
TraceEntry::Dump(char* buffer, size_t bufferSize) TraceEntry::Dump(TraceOutput& out)
{ {
#if ENABLE_TRACING #if ENABLE_TRACING
// to be overridden by subclasses // to be overridden by subclasses
kprintf(buffer, bufferSize, "ENTRY %p", this); out.Print("ENTRY %p", this);
#endif #endif
} }
@@ -218,18 +227,9 @@ AbstractTraceEntry::~AbstractTraceEntry()
void void
AbstractTraceEntry::Dump(char* buffer, size_t bufferSize) AbstractTraceEntry::Dump(TraceOutput& out)
{ {
int length = snprintf(buffer, bufferSize, "[%6ld] %Ld: ", out.Print("[%6ld] %Ld: ", fThread, fTime);
fThread, fTime);
AddDump(buffer + length, bufferSize - length);
}
void
AbstractTraceEntry::AddDump(char* buffer, size_t bufferSize)
{
TraceOutput out(buffer, bufferSize);
AddDump(out); AddDump(out);
} }
@@ -305,8 +305,9 @@ dump_tracing(int argc, char** argv)
if ((current->flags & ENTRY_INITIALIZED) != 0) { if ((current->flags & ENTRY_INITIALIZED) != 0) {
char buffer[256]; char buffer[256];
buffer[0] = '\0'; TraceOutput out(buffer, sizeof(buffer));
((TraceEntry*)current)->Dump(buffer, sizeof(buffer));
((TraceEntry*)current)->Dump(out);
if (pattern != NULL && strstr(buffer, pattern) == NULL) if (pattern != NULL && strstr(buffer, pattern) == NULL)
continue; continue;
+13 -21
View File
@@ -97,10 +97,9 @@ class TeamForked : public AbstractTraceEntry {
Initialized(); Initialized();
} }
virtual void AddDump(char *buffer, size_t size) virtual void AddDump(TraceOutput& out)
{ {
snprintf(buffer, size, "team forked, new thread %ld", out.Print("team forked, new thread %ld", fForkedThread);
fForkedThread);
} }
private: private:
@@ -142,20 +141,13 @@ class ExecTeam : public AbstractTraceEntry {
Initialized(); Initialized();
} }
virtual void AddDump(char *buffer, size_t size) virtual void AddDump(TraceOutput& out)
{ {
snprintf(buffer, size, "team exec, \"%p\", args:", fPath); out.Print("team exec, \"%p\", args:", fPath);
size_t printedChars = strlen(buffer);
buffer += printedChars;
size -= printedChars;
char* args = fArgs; char* args = fArgs;
for (int32 i = 0; size > 0 && i < fArgCount; i++) { for (int32 i = 0; !out.IsFull() && i < fArgCount; i++) {
snprintf(buffer, size, " \"%s\"", args); out.Print(" \"%s\"", args);
printedChars = strlen(buffer);
buffer += printedChars;
size -= printedChars;
args += strlen(args) + 1; args += strlen(args) + 1;
} }
} }
@@ -196,9 +188,9 @@ class SetJobControlState : public AbstractTraceEntry {
Initialized(); Initialized();
} }
virtual void AddDump(char *buffer, size_t size) virtual void AddDump(TraceOutput& out)
{ {
snprintf(buffer, size, "team set job control state, team %ld, " out.Print("team set job control state, team %ld, "
"new state: %s, signal: %d", "new state: %s, signal: %d",
fTeam, job_control_state_name(fNewState), fSignal); fTeam, job_control_state_name(fNewState), fSignal);
} }
@@ -220,9 +212,9 @@ class WaitForChild : public AbstractTraceEntry {
Initialized(); Initialized();
} }
virtual void AddDump(char *buffer, size_t size) virtual void AddDump(TraceOutput& out)
{ {
snprintf(buffer, size, "team wait for child, child: %ld, " out.Print("team wait for child, child: %ld, "
"flags: 0x%lx", fChild, fFlags); "flags: 0x%lx", fChild, fFlags);
} }
@@ -252,15 +244,15 @@ class WaitForChildDone : public AbstractTraceEntry {
Initialized(); Initialized();
} }
virtual void AddDump(char *buffer, size_t size) virtual void AddDump(TraceOutput& out)
{ {
if (fTeam >= 0) { if (fTeam >= 0) {
snprintf(buffer, size, "team wait for child done, team: %ld, " out.Print("team wait for child done, team: %ld, "
"state: %s, status: 0x%lx, reason: 0x%x, signal: %d\n", "state: %s, status: 0x%lx, reason: 0x%x, signal: %d\n",
fTeam, job_control_state_name(fState), fStatus, fReason, fTeam, job_control_state_name(fState), fStatus, fReason,
fSignal); fSignal);
} else { } else {
snprintf(buffer, size, "team wait for child failed, error: " out.Print("team wait for child failed, error: "
"0x%lx, ", fTeam); "0x%lx, ", fTeam);
} }
} }