summaryrefslogtreecommitdiff
path: root/src/include/debug.h
blob: 6321679df397d5be9e0d2f672006610e3b801564 (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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#if DEBUG

static int32 *debugnull = NULL;
#define Assert(Expression) if(!(Expression)) {*debugnull = 21;}

enum valtype {
    d_float,
    d_uint,
    d_int
};

union debugval {
    real32 f;
    uint32 u;
    int32 i;
};

// things that get cleared every frame with the UI
struct debug_temp
{
    valtype DebugPropertyType[16];
    debugval Val[16];
    char *String[16];
    uint32 WatchedProperties;
};

struct project_debug
{
    debug_temp Temp;
    bool32 ToggleWindow = 1;
    bool32 ReloadUI = true;
    bool32 NoThreading = 0;
    bool32 DisableAlpha = 0;
    uint64 PixelCountTransparent;
    uint64 PixelCountRendered;
    uint64 PixelCountChecked;
    // NOTE(fox): Pixel count isn't thread safe; don't use with multithreading!
    uint64 LayerCycleCount[64];
    uint32 UndoState = 0;
    uint64 ScratchSize[6];
    uint32 ScratchState = 0;
};

static project_debug Debug;

static void
DebugWatchVar(char *Name, void *Address, valtype Type) {
    uint32 i = Debug.Temp.WatchedProperties;
    Debug.Temp.String[i] = Name;
    if (Type == d_float)
        Debug.Temp.Val[i].f = *(real32 *)Address;
    if (Type == d_uint)
        Debug.Temp.Val[i].u = *(uint32 *)Address;
    if (Type == d_int)
        Debug.Temp.Val[i].i = *(int32 *)Address;
    Debug.Temp.DebugPropertyType[i] = Type;
    Debug.Temp.WatchedProperties++;
}

#else

#define Assert(Expression)

enum valtype {
};

union debugval {
};

struct debug_temp
{
};

struct project_debug
{
};

static void
DebugWatchVar(char *Name, void *Address, valtype Type) {
}

static void
DebugPrintMemoryUsage(memory Memory) {
}
#endif

#ifdef PERF

struct perf_stats
{
    uint64 PixelCountTransparent;
    uint64 PixelCountRendered;
    uint64 PixelCountChecked;
};

static uint64 Test;

#endif