summaryrefslogtreecommitdiffstats
path: root/src/usr/trace/tracebuffer.H
blob: 4ac416eac39bcf51cf06fd66706d3ced13b085c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#ifndef __TRACE_TRACEBUFFER_H
#define __TRACE_TRACEBUFFER_H

#include <stdint.h>
#include <stdlib.h>
#include <new>
#include <limits.h>
#include <sys/task.h>

struct traceEntry
{
    uint64_t component;
    tid_t tid;
    uint16_t length;
    uint32_t hash;
    uint64_t timestamp;
    uint32_t line;
    uint64_t values[0];
};


class TracePage
{
    public:
        TracePage() : next(NULL), size(0) {};

        TracePage* setNext(TracePage*);
        TracePage* getNext() { return next; };
        traceEntry* claimEntry(size_t size);

    private:
        TracePage* volatile next;
        uint64_t size;
};

class TraceBuffer
{
    public:
        TraceBuffer()
            {
                first = last = new (malloc(PAGE_SIZE)) TracePage();
            }

        traceEntry* claimEntry(size_t size);

    private:
        TracePage* first;
        TracePage* volatile last;
};

#endif
OpenPOWER on IntegriCloud