* Removed AbstractTraceEntry::sPrintTeamID and added a flags field to
TraceOutput for output options instead. * Added "traced" option --difftime. Instead of the absolute system time it prints the difference time to the previously printed entry. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23864 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -20,9 +20,18 @@ struct trace_entry {
|
|||||||
|
|
||||||
#include <new>
|
#include <new>
|
||||||
|
|
||||||
|
|
||||||
|
// trace output flags
|
||||||
|
#define TRACE_OUTPUT_TEAM_ID 0x01
|
||||||
|
// print the team ID
|
||||||
|
#define TRACE_OUTPUT_DIFF_TIME 0x02
|
||||||
|
// print the difference time to the previously printed entry instead of the
|
||||||
|
// absolute time
|
||||||
|
|
||||||
|
|
||||||
class TraceOutput {
|
class TraceOutput {
|
||||||
public:
|
public:
|
||||||
TraceOutput(char* buffer, size_t bufferSize);
|
TraceOutput(char* buffer, size_t bufferSize, uint32 flags);
|
||||||
|
|
||||||
void Clear();
|
void Clear();
|
||||||
void Print(const char* format,...);
|
void Print(const char* format,...);
|
||||||
@@ -32,10 +41,17 @@ class TraceOutput {
|
|||||||
size_t Capacity() const { return fCapacity; }
|
size_t Capacity() const { return fCapacity; }
|
||||||
size_t Size() const { return fSize; }
|
size_t Size() const { return fSize; }
|
||||||
|
|
||||||
|
uint32 Flags() const { return fFlags; }
|
||||||
|
|
||||||
|
void SetLastEntryTime(bigtime_t time);
|
||||||
|
bigtime_t LastEntryTime() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
char* fBuffer;
|
char* fBuffer;
|
||||||
size_t fCapacity;
|
size_t fCapacity;
|
||||||
size_t fSize;
|
size_t fSize;
|
||||||
|
uint32 fFlags;
|
||||||
|
bigtime_t fLastEntryTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TraceEntry : public trace_entry {
|
class TraceEntry : public trace_entry {
|
||||||
@@ -66,9 +82,6 @@ class AbstractTraceEntry : public TraceEntry {
|
|||||||
thread_id Team() const { return fTeam; }
|
thread_id Team() const { return fTeam; }
|
||||||
bigtime_t Time() const { return fTime; }
|
bigtime_t Time() const { return fTime; }
|
||||||
|
|
||||||
public:
|
|
||||||
static bool sPrintTeamID;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
thread_id fThread;
|
thread_id fThread;
|
||||||
team_id fTeam;
|
team_id fTeam;
|
||||||
|
|||||||
@@ -207,9 +207,10 @@ allocate_entry(size_t size, uint16 flags)
|
|||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
TraceOutput::TraceOutput(char* buffer, size_t bufferSize)
|
TraceOutput::TraceOutput(char* buffer, size_t bufferSize, uint32 flags)
|
||||||
: fBuffer(buffer),
|
: fBuffer(buffer),
|
||||||
fCapacity(bufferSize)
|
fCapacity(bufferSize),
|
||||||
|
fFlags(flags)
|
||||||
{
|
{
|
||||||
Clear();
|
Clear();
|
||||||
}
|
}
|
||||||
@@ -237,6 +238,20 @@ TraceOutput::Print(const char* format,...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TraceOutput::SetLastEntryTime(bigtime_t time)
|
||||||
|
{
|
||||||
|
fLastEntryTime = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bigtime_t
|
||||||
|
TraceOutput::LastEntryTime() const
|
||||||
|
{
|
||||||
|
return fLastEntryTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
@@ -300,11 +315,18 @@ AbstractTraceEntry::~AbstractTraceEntry()
|
|||||||
void
|
void
|
||||||
AbstractTraceEntry::Dump(TraceOutput& out)
|
AbstractTraceEntry::Dump(TraceOutput& out)
|
||||||
{
|
{
|
||||||
if (sPrintTeamID)
|
bigtime_t time = (out.Flags() & TRACE_OUTPUT_DIFF_TIME)
|
||||||
out.Print("[%6ld:%6ld] %Ld: ", fThread, fTeam, fTime);
|
? fTime - out.LastEntryTime()
|
||||||
|
: fTime;
|
||||||
|
|
||||||
|
if (out.Flags() & TRACE_OUTPUT_TEAM_ID)
|
||||||
|
out.Print("[%6ld:%6ld] %10Ld: ", fThread, fTeam, time);
|
||||||
else
|
else
|
||||||
out.Print("[%6ld] %Ld: ", fThread, fTime);
|
out.Print("[%6ld] %10Ld: ", fThread, time);
|
||||||
|
|
||||||
AddDump(out);
|
AddDump(out);
|
||||||
|
|
||||||
|
out.SetLastEntryTime(fTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -314,9 +336,6 @@ AbstractTraceEntry::AddDump(TraceOutput& out)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool AbstractTraceEntry::sPrintTeamID = false;
|
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
@@ -348,8 +367,8 @@ class UserTraceEntry : public AbstractTraceEntry {
|
|||||||
|
|
||||||
class LazyTraceOutput : public TraceOutput {
|
class LazyTraceOutput : public TraceOutput {
|
||||||
public:
|
public:
|
||||||
LazyTraceOutput(char* buffer, size_t bufferSize)
|
LazyTraceOutput(char* buffer, size_t bufferSize, uint32 flags)
|
||||||
: TraceOutput(buffer, bufferSize)
|
: TraceOutput(buffer, bufferSize, flags)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -703,6 +722,7 @@ dump_tracing(int argc, char** argv)
|
|||||||
static int32 _previousDirection = 1;
|
static int32 _previousDirection = 1;
|
||||||
static uint32 _previousWritten = 0;
|
static uint32 _previousWritten = 0;
|
||||||
static uint32 _previousEntries = 0;
|
static uint32 _previousEntries = 0;
|
||||||
|
static uint32 _previousOutputFlags = 0;
|
||||||
static TraceEntryIterator iterator;
|
static TraceEntryIterator iterator;
|
||||||
|
|
||||||
|
|
||||||
@@ -714,12 +734,16 @@ dump_tracing(int argc, char** argv)
|
|||||||
|
|
||||||
bool hasFilter = false;
|
bool hasFilter = false;
|
||||||
|
|
||||||
AbstractTraceEntry::sPrintTeamID = false;
|
uint32 outputFlags = 0;
|
||||||
if (argi < argc) {
|
while (argi < argc) {
|
||||||
if (strcmp(argv[argi], "--printteam") == 0) {
|
if (strcmp(argv[argi], "--printteam") == 0) {
|
||||||
AbstractTraceEntry::sPrintTeamID = true;
|
outputFlags |= TRACE_OUTPUT_TEAM_ID;
|
||||||
argi++;
|
argi++;
|
||||||
}
|
} else if (strcmp(argv[argi], "--difftime") == 0) {
|
||||||
|
outputFlags |= TRACE_OUTPUT_DIFF_TIME;
|
||||||
|
argi++;
|
||||||
|
} else
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argi < argc) {
|
if (argi < argc) {
|
||||||
@@ -783,6 +807,7 @@ dump_tracing(int argc, char** argv)
|
|||||||
count = _previousCount;
|
count = _previousCount;
|
||||||
maxToCheck = _previousMaxToCheck;
|
maxToCheck = _previousMaxToCheck;
|
||||||
hasFilter = _previousHasFilter;
|
hasFilter = _previousHasFilter;
|
||||||
|
outputFlags = _previousOutputFlags;
|
||||||
|
|
||||||
if (direction < 0)
|
if (direction < 0)
|
||||||
start = _previousFirstChecked - 1;
|
start = _previousFirstChecked - 1;
|
||||||
@@ -830,7 +855,7 @@ dump_tracing(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
LazyTraceOutput out(buffer, sizeof(buffer));
|
LazyTraceOutput out(buffer, sizeof(buffer), outputFlags);
|
||||||
|
|
||||||
bool markedMatching = false;
|
bool markedMatching = false;
|
||||||
int32 firstToDump = firstToCheck;
|
int32 firstToDump = firstToCheck;
|
||||||
@@ -875,6 +900,8 @@ dump_tracing(int argc, char** argv)
|
|||||||
iterator.Previous();
|
iterator.Previous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out.SetLastEntryTime(0);
|
||||||
|
|
||||||
// set the iterator to the entry before the first one to dump
|
// set the iterator to the entry before the first one to dump
|
||||||
iterator.MoveTo(firstToDump - 1);
|
iterator.MoveTo(firstToDump - 1);
|
||||||
|
|
||||||
@@ -920,6 +947,7 @@ dump_tracing(int argc, char** argv)
|
|||||||
_previousDirection = direction;
|
_previousDirection = direction;
|
||||||
_previousWritten = sWritten;
|
_previousWritten = sWritten;
|
||||||
_previousEntries = sEntries;
|
_previousEntries = sEntries;
|
||||||
|
_previousOutputFlags = outputFlags;
|
||||||
|
|
||||||
return cont != 0 ? B_KDEBUG_CONT : 0;
|
return cont != 0 ? B_KDEBUG_CONT : 0;
|
||||||
}
|
}
|
||||||
@@ -1012,7 +1040,7 @@ tracing_init(void)
|
|||||||
|
|
||||||
add_debugger_command_etc("traced", &dump_tracing,
|
add_debugger_command_etc("traced", &dump_tracing,
|
||||||
"Dump recorded trace entries",
|
"Dump recorded trace entries",
|
||||||
"[ \"--printteam\" ] (\"forward\" | \"backward\") "
|
"[ \"--printteam\" ] [ \"--difftime\" ] (\"forward\" | \"backward\") "
|
||||||
"| ([ <start> [ <count> [ <range> ] ] ] "
|
"| ([ <start> [ <count> [ <range> ] ] ] "
|
||||||
"[ #<pattern> | (\"filter\" <filter>) ])\n"
|
"[ #<pattern> | (\"filter\" <filter>) ])\n"
|
||||||
"Prints recorded trace entries. If \"backward\" or \"forward\" is\n"
|
"Prints recorded trace entries. If \"backward\" or \"forward\" is\n"
|
||||||
@@ -1022,7 +1050,8 @@ tracing_init(void)
|
|||||||
"afterwards entering an empty line in the debugger will reinvoke it.\n"
|
"afterwards entering an empty line in the debugger will reinvoke it.\n"
|
||||||
"If no arguments are given, the command continues in the direction\n"
|
"If no arguments are given, the command continues in the direction\n"
|
||||||
"of the last invocation.\n"
|
"of the last invocation.\n"
|
||||||
"\"--printteam\" enables printing the items' team ID.\n"
|
"\"--printteam\" enables printing the entries' team IDs.\n"
|
||||||
|
"\"--difftime\" print difference times for all but the first entry.\n"
|
||||||
" <start> - The base index of the entries to print. Depending on\n"
|
" <start> - The base index of the entries to print. Depending on\n"
|
||||||
" whether the iteration direction is forward or\n"
|
" whether the iteration direction is forward or\n"
|
||||||
" backward this will be the first or last entry printed\n"
|
" backward this will be the first or last entry printed\n"
|
||||||
|
|||||||
Reference in New Issue
Block a user