root/headers/private/kernel/AllocationTracking.h
/*
 * 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