Move AllocationTrackingInfo into a header. This way it can be re-used outside

of the slab code. It is generic as it only contains the link to a tracing entry
and not any application specific info.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43188 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Michael Lotz 2011-11-04 18:03:34 +00:00
parent 6d41dfd95c
commit 75088a863b
2 changed files with 61 additions and 38 deletions

View File

@ -0,0 +1,60 @@
/*
* Copyright 2011, Michael Lotz <mmlr@mlotz.ch>.
* Copyright 2011, Ingo Weinhold <ingo_weinhold@gmx.de>.
*
* Distributed under the terms of the MIT License.
*/
#ifndef ALLOCATION_TRACKING_H
#define ALLOCATION_TRACKING_H
#include <debug.h>
#include <tracing.h>
namespace BKernel {
class AllocationTrackingInfo {
public:
AbstractTraceEntryWithStackTrace* traceEntry;
bigtime_t traceEntryTimestamp;
public:
void Init(AbstractTraceEntryWithStackTrace* entry)
{
traceEntry = entry;
traceEntryTimestamp = entry != NULL ? entry->Time() : -1;
// Note: this is a race condition, if the tracing buffer wrapped and
// got overwritten once, we would access an invalid trace entry
// here. Obviously this is rather unlikely.
}
void Clear()
{
traceEntry = NULL;
traceEntryTimestamp = 0;
}
bool IsInitialized() const
{
return traceEntryTimestamp != 0;
}
AbstractTraceEntryWithStackTrace* TraceEntry() const
{
return traceEntry;
}
bool IsTraceEntryValid() const
{
return tracing_is_entry_valid(traceEntry, traceEntryTimestamp);
}
};
} // namespace BKernel
using BKernel::AllocationTrackingInfo;
#endif // ALLOCATION_TRACKING_H

View File

@ -8,6 +8,7 @@
#define SLAB_DEBUG_H
#include <AllocationTracking.h>
#include <debug.h>
#include <slab/Slab.h>
#include <tracing.h>
@ -49,44 +50,6 @@ struct object_depot;
#if SLAB_ALLOCATION_TRACKING_AVAILABLE
class AllocationTrackingInfo {
public:
AbstractTraceEntryWithStackTrace* traceEntry;
bigtime_t traceEntryTimestamp;
public:
void Init(AbstractTraceEntryWithStackTrace* entry)
{
traceEntry = entry;
traceEntryTimestamp = entry != NULL ? entry->Time() : -1;
// Note: this is a race condition, if the tracing buffer wrapped and
// got overwritten once, we would access an invalid trace entry
// here. Obviously this is rather unlikely.
}
void Clear()
{
traceEntry = NULL;
traceEntryTimestamp = 0;
}
bool IsInitialized() const
{
return traceEntryTimestamp != 0;
}
AbstractTraceEntryWithStackTrace* TraceEntry() const
{
return traceEntry;
}
bool IsTraceEntryValid() const
{
return tracing_is_entry_valid(traceEntry, traceEntryTimestamp);
}
};
namespace BKernel {
class AllocationTrackingCallback {