4coder/non-source/test_data/lots_of_files/handmade_debug.h

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