/* * Copyright 2011, Michael Lotz . * Copyright 2011, Ingo Weinhold . * * Distributed under the terms of the MIT License. */ #ifndef ALLOCATION_TRACKING_H #define ALLOCATION_TRACKING_H #include #include 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