259 lines
4.8 KiB
C
259 lines
4.8 KiB
C
|
#if !defined(HANDMADE_DEBUG_H)
|
||
|
/* ========================================================================
|
||
|
$File: $
|
||
|
$Date: $
|
||
|
$Revision: $
|
||
|
$Creator: Casey Muratori $
|
||
|
$Notice: (C) Copyright 2015 by Molly Rocket, Inc. All Rights Reserved. $
|
||
|
======================================================================== */
|
||
|
|
||
|
#define DEBUG_MAX_VARIABLE_STACK_DEPTH 64
|
||
|
|
||
|
enum debug_variable_to_text_flag
|
||
|
{
|
||
|
DEBUGVarToText_AddDebugUI = 0x1,
|
||
|
DEBUGVarToText_AddName = 0x2,
|
||
|
DEBUGVarToText_FloatSuffix = 0x4,
|
||
|
DEBUGVarToText_LineFeedEnd = 0x8,
|
||
|
DEBUGVarToText_NullTerminator = 0x10,
|
||
|
DEBUGVarToText_Colon = 0x20,
|
||
|
DEBUGVarToText_PrettyBools = 0x40,
|
||
|
};
|
||
|
|
||
|
struct debug_tree;
|
||
|
|
||
|
struct debug_view_inline_block
|
||
|
{
|
||
|
v2 Dim;
|
||
|
};
|
||
|
|
||
|
struct debug_view_collapsible
|
||
|
{
|
||
|
b32 ExpandedAlways;
|
||
|
b32 ExpandedAltView;
|
||
|
};
|
||
|
|
||
|
enum debug_view_type
|
||
|
{
|
||
|
DebugViewType_Unknown,
|
||
|
|
||
|
DebugViewType_Basic,
|
||
|
DebugViewType_InlineBlock,
|
||
|
DebugViewType_Collapsible,
|
||
|
};
|
||
|
|
||
|
struct debug_view
|
||
|
{
|
||
|
debug_id ID;
|
||
|
debug_view *NextInHash;
|
||
|
|
||
|
debug_view_type Type;
|
||
|
union
|
||
|
{
|
||
|
debug_view_inline_block InlineBlock;
|
||
|
debug_view_collapsible Collapsible;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
struct debug_variable_group;
|
||
|
struct debug_variable_link
|
||
|
{
|
||
|
debug_variable_link *Next;
|
||
|
debug_variable_link *Prev;
|
||
|
debug_variable_group *Children;
|
||
|
debug_event *Event;
|
||
|
};
|
||
|
|
||
|
struct debug_tree
|
||
|
{
|
||
|
v2 UIP;
|
||
|
debug_variable_group *Group;
|
||
|
|
||
|
debug_tree *Next;
|
||
|
debug_tree *Prev;
|
||
|
};
|
||
|
|
||
|
struct debug_variable_group
|
||
|
{
|
||
|
debug_variable_link Sentinel;
|
||
|
};
|
||
|
|
||
|
struct render_group;
|
||
|
struct game_assets;
|
||
|
struct loaded_bitmap;
|
||
|
struct loaded_font;
|
||
|
struct hha_font;
|
||
|
|
||
|
enum debug_text_op
|
||
|
{
|
||
|
DEBUGTextOp_DrawText,
|
||
|
DEBUGTextOp_SizeText,
|
||
|
};
|
||
|
|
||
|
struct debug_counter_snapshot
|
||
|
{
|
||
|
u32 HitCount;
|
||
|
u64 CycleCount;
|
||
|
};
|
||
|
|
||
|
struct debug_counter_state
|
||
|
{
|
||
|
char *FileName;
|
||
|
char *BlockName;
|
||
|
|
||
|
u32 LineNumber;
|
||
|
};
|
||
|
|
||
|
struct debug_frame_region
|
||
|
{
|
||
|
// TODO(casey): Do we want to copy these out in their entirety?
|
||
|
debug_event *Event;
|
||
|
u64 CycleCount;
|
||
|
u16 LaneIndex;
|
||
|
u16 ColorIndex;
|
||
|
r32 MinT;
|
||
|
r32 MaxT;
|
||
|
};
|
||
|
|
||
|
#define MAX_REGIONS_PER_FRAME 2*4096
|
||
|
struct debug_frame
|
||
|
{
|
||
|
// IMPORTANT(casey): This actually gets freed as a set in FreeFrame!
|
||
|
|
||
|
union
|
||
|
{
|
||
|
debug_frame *Next;
|
||
|
debug_frame *NextFree;
|
||
|
};
|
||
|
|
||
|
u64 BeginClock;
|
||
|
u64 EndClock;
|
||
|
r32 WallSecondsElapsed;
|
||
|
|
||
|
r32 FrameBarScale;
|
||
|
|
||
|
debug_variable_group *RootGroup;
|
||
|
|
||
|
u32 RegionCount;
|
||
|
debug_frame_region *Regions;
|
||
|
};
|
||
|
|
||
|
struct open_debug_block
|
||
|
{
|
||
|
union
|
||
|
{
|
||
|
open_debug_block *Parent;
|
||
|
open_debug_block *NextFree;
|
||
|
};
|
||
|
|
||
|
u32 StartingFrameIndex;
|
||
|
debug_event *OpeningEvent;
|
||
|
|
||
|
// NOTE(casey): Only for data blocks? Probably!
|
||
|
debug_variable_group *Group;
|
||
|
};
|
||
|
|
||
|
struct debug_thread
|
||
|
{
|
||
|
union
|
||
|
{
|
||
|
debug_thread *Next;
|
||
|
debug_thread *NextFree;
|
||
|
};
|
||
|
|
||
|
u32 ID;
|
||
|
u32 LaneIndex;
|
||
|
open_debug_block *FirstOpenCodeBlock;
|
||
|
open_debug_block *FirstOpenDataBlock;
|
||
|
};
|
||
|
|
||
|
enum debug_interaction_type
|
||
|
{
|
||
|
DebugInteraction_None,
|
||
|
|
||
|
DebugInteraction_NOP,
|
||
|
|
||
|
DebugInteraction_AutoModifyVariable,
|
||
|
|
||
|
DebugInteraction_ToggleValue,
|
||
|
DebugInteraction_DragValue,
|
||
|
DebugInteraction_TearValue,
|
||
|
|
||
|
DebugInteraction_Resize,
|
||
|
DebugInteraction_Move,
|
||
|
|
||
|
DebugInteraction_Select,
|
||
|
};
|
||
|
|
||
|
struct debug_interaction
|
||
|
{
|
||
|
debug_id ID;
|
||
|
debug_interaction_type Type;
|
||
|
union
|
||
|
{
|
||
|
void *Generic;
|
||
|
debug_event *Event;
|
||
|
debug_tree *Tree;
|
||
|
v2 *P;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
struct debug_state
|
||
|
{
|
||
|
b32 Initialized;
|
||
|
|
||
|
platform_work_queue *HighPriorityQueue;
|
||
|
|
||
|
memory_arena DebugArena;
|
||
|
|
||
|
render_group *RenderGroup;
|
||
|
loaded_font *DebugFont;
|
||
|
hha_font *DebugFontInfo;
|
||
|
|
||
|
b32 Compiling;
|
||
|
debug_executing_process Compiler;
|
||
|
|
||
|
v2 MenuP;
|
||
|
b32 MenuActive;
|
||
|
|
||
|
u32 SelectedIDCount;
|
||
|
debug_id SelectedID[64];
|
||
|
|
||
|
debug_variable_group *ValuesGroup;
|
||
|
|
||
|
debug_variable_group *RootGroup;
|
||
|
debug_view *ViewHash[4096];
|
||
|
debug_tree TreeSentinel;
|
||
|
|
||
|
v2 LastMouseP;
|
||
|
debug_interaction Interaction;
|
||
|
debug_interaction HotInteraction;
|
||
|
debug_interaction NextHotInteraction;
|
||
|
b32 Paused;
|
||
|
|
||
|
r32 LeftEdge;
|
||
|
r32 RightEdge;
|
||
|
r32 AtY;
|
||
|
r32 FontScale;
|
||
|
font_id FontID;
|
||
|
r32 GlobalWidth;
|
||
|
r32 GlobalHeight;
|
||
|
|
||
|
char *ScopeToRecord;
|
||
|
|
||
|
u32 FrameCount;
|
||
|
debug_frame *OldestFrame;
|
||
|
debug_frame *MostRecentFrame;
|
||
|
debug_frame *FirstFreeFrame;
|
||
|
|
||
|
debug_frame *CollationFrame;
|
||
|
|
||
|
u32 FrameBarLaneCount;
|
||
|
debug_thread *FirstThread;
|
||
|
debug_thread *FirstFreeThread;
|
||
|
open_debug_block *FirstFreeBlock;
|
||
|
};
|
||
|
|
||
|
#define HANDMADE_DEBUG_H
|
||
|
#endif
|