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:
@@ -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
@@ -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:
|
||||||
|
|||||||
@@ -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
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user