mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-08 23:08:08 +00:00
sketch out msg processing loop, to replace cmd processing loop, in dbg engine
This commit is contained in:
@@ -95,6 +95,7 @@ D_EntityKindTable:
|
|||||||
D_RegTable:
|
D_RegTable:
|
||||||
{
|
{
|
||||||
// rjf: entity slots
|
// rjf: entity slots
|
||||||
|
{D_Handle machine Machine }
|
||||||
{D_Handle module Module }
|
{D_Handle module Module }
|
||||||
{D_Handle process Process }
|
{D_Handle process Process }
|
||||||
{D_Handle thread Thread }
|
{D_Handle thread Thread }
|
||||||
@@ -122,6 +123,7 @@ D_RegTable:
|
|||||||
{Rng1U64 voff_range VoffRange }
|
{Rng1U64 voff_range VoffRange }
|
||||||
|
|
||||||
// rjf: general parameters
|
// rjf: general parameters
|
||||||
|
{U32 pid PID }
|
||||||
{B32 force_confirm ForceConfirm }
|
{B32 force_confirm ForceConfirm }
|
||||||
{B32 prefer_disasm PreferDisasm }
|
{B32 prefer_disasm PreferDisasm }
|
||||||
{Dir2 dir2 Dir2 }
|
{Dir2 dir2 Dir2 }
|
||||||
@@ -258,7 +260,8 @@ D_MsgKindTable:
|
|||||||
|
|
||||||
@enum D_MsgKind:
|
@enum D_MsgKind:
|
||||||
{
|
{
|
||||||
@expand(D_MsgKindTable a) `$(a.name)`
|
@expand(D_MsgKindTable a) `$(a.name)`,
|
||||||
|
COUNT
|
||||||
}
|
}
|
||||||
|
|
||||||
@data(String8) d_msg_kind_name_lower_table:
|
@data(String8) d_msg_kind_name_lower_table:
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1565,7 +1565,7 @@ internal void d_msg_(D_MsgKind kind, D_Regs *regs);
|
|||||||
#define d_msg(kind, ...) d_msg_((kind),\
|
#define d_msg(kind, ...) d_msg_((kind),\
|
||||||
&(D_Regs)\
|
&(D_Regs)\
|
||||||
{\
|
{\
|
||||||
d_regs_lit_init_top\
|
d_regs_lit_init_top \
|
||||||
__VA_ARGS__\
|
__VA_ARGS__\
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,9 @@
|
|||||||
//- GENERATED CODE
|
//- GENERATED CODE
|
||||||
|
|
||||||
C_LINKAGE_BEGIN
|
C_LINKAGE_BEGIN
|
||||||
Rng1U64 d_reg_slot_range_table[26] =
|
Rng1U64 d_reg_slot_range_table[28] =
|
||||||
{
|
{
|
||||||
|
{OffsetOf(D_Regs, machine), OffsetOf(D_Regs, machine) + sizeof(D_Handle)},
|
||||||
{OffsetOf(D_Regs, module), OffsetOf(D_Regs, module) + sizeof(D_Handle)},
|
{OffsetOf(D_Regs, module), OffsetOf(D_Regs, module) + sizeof(D_Handle)},
|
||||||
{OffsetOf(D_Regs, process), OffsetOf(D_Regs, process) + sizeof(D_Handle)},
|
{OffsetOf(D_Regs, process), OffsetOf(D_Regs, process) + sizeof(D_Handle)},
|
||||||
{OffsetOf(D_Regs, thread), OffsetOf(D_Regs, thread) + sizeof(D_Handle)},
|
{OffsetOf(D_Regs, thread), OffsetOf(D_Regs, thread) + sizeof(D_Handle)},
|
||||||
@@ -27,6 +28,7 @@ Rng1U64 d_reg_slot_range_table[26] =
|
|||||||
{OffsetOf(D_Regs, dbgi_key), OffsetOf(D_Regs, dbgi_key) + sizeof(DI_Key)},
|
{OffsetOf(D_Regs, dbgi_key), OffsetOf(D_Regs, dbgi_key) + sizeof(DI_Key)},
|
||||||
{OffsetOf(D_Regs, vaddr_range), OffsetOf(D_Regs, vaddr_range) + sizeof(Rng1U64)},
|
{OffsetOf(D_Regs, vaddr_range), OffsetOf(D_Regs, vaddr_range) + sizeof(Rng1U64)},
|
||||||
{OffsetOf(D_Regs, voff_range), OffsetOf(D_Regs, voff_range) + sizeof(Rng1U64)},
|
{OffsetOf(D_Regs, voff_range), OffsetOf(D_Regs, voff_range) + sizeof(Rng1U64)},
|
||||||
|
{OffsetOf(D_Regs, pid), OffsetOf(D_Regs, pid) + sizeof(U32)},
|
||||||
{OffsetOf(D_Regs, force_confirm), OffsetOf(D_Regs, force_confirm) + sizeof(B32)},
|
{OffsetOf(D_Regs, force_confirm), OffsetOf(D_Regs, force_confirm) + sizeof(B32)},
|
||||||
{OffsetOf(D_Regs, prefer_disasm), OffsetOf(D_Regs, prefer_disasm) + sizeof(B32)},
|
{OffsetOf(D_Regs, prefer_disasm), OffsetOf(D_Regs, prefer_disasm) + sizeof(B32)},
|
||||||
{OffsetOf(D_Regs, dir2), OffsetOf(D_Regs, dir2) + sizeof(Dir2)},
|
{OffsetOf(D_Regs, dir2), OffsetOf(D_Regs, dir2) + sizeof(Dir2)},
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
typedef enum D_RegSlot
|
typedef enum D_RegSlot
|
||||||
{
|
{
|
||||||
|
D_RegSlot_Machine,
|
||||||
D_RegSlot_Module,
|
D_RegSlot_Module,
|
||||||
D_RegSlot_Process,
|
D_RegSlot_Process,
|
||||||
D_RegSlot_Thread,
|
D_RegSlot_Thread,
|
||||||
@@ -29,6 +30,7 @@ D_RegSlot_Lines,
|
|||||||
D_RegSlot_DbgiKey,
|
D_RegSlot_DbgiKey,
|
||||||
D_RegSlot_VaddrRange,
|
D_RegSlot_VaddrRange,
|
||||||
D_RegSlot_VoffRange,
|
D_RegSlot_VoffRange,
|
||||||
|
D_RegSlot_PID,
|
||||||
D_RegSlot_ForceConfirm,
|
D_RegSlot_ForceConfirm,
|
||||||
D_RegSlot_PreferDisasm,
|
D_RegSlot_PreferDisasm,
|
||||||
D_RegSlot_Dir2,
|
D_RegSlot_Dir2,
|
||||||
@@ -109,6 +111,7 @@ D_MsgKind_SelectTarget,
|
|||||||
D_MsgKind_RetryEndedProcess,
|
D_MsgKind_RetryEndedProcess,
|
||||||
D_MsgKind_RegisterAsJITDebugger,
|
D_MsgKind_RegisterAsJITDebugger,
|
||||||
D_MsgKind_LogMarker,
|
D_MsgKind_LogMarker,
|
||||||
|
D_MsgKind_COUNT,
|
||||||
} D_MsgKind;
|
} D_MsgKind;
|
||||||
|
|
||||||
typedef enum D_CfgSrc
|
typedef enum D_CfgSrc
|
||||||
@@ -440,6 +443,7 @@ D_CmdParamSlot_COUNT,
|
|||||||
typedef struct D_Regs D_Regs;
|
typedef struct D_Regs D_Regs;
|
||||||
struct D_Regs
|
struct D_Regs
|
||||||
{
|
{
|
||||||
|
D_Handle machine;
|
||||||
D_Handle module;
|
D_Handle module;
|
||||||
D_Handle process;
|
D_Handle process;
|
||||||
D_Handle thread;
|
D_Handle thread;
|
||||||
@@ -461,6 +465,7 @@ D_LineList lines;
|
|||||||
DI_Key dbgi_key;
|
DI_Key dbgi_key;
|
||||||
Rng1U64 vaddr_range;
|
Rng1U64 vaddr_range;
|
||||||
Rng1U64 voff_range;
|
Rng1U64 voff_range;
|
||||||
|
U32 pid;
|
||||||
B32 force_confirm;
|
B32 force_confirm;
|
||||||
B32 prefer_disasm;
|
B32 prefer_disasm;
|
||||||
Dir2 dir2;
|
Dir2 dir2;
|
||||||
@@ -497,6 +502,7 @@ U64 inline_depth;
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define d_regs_lit_init_top \
|
#define d_regs_lit_init_top \
|
||||||
|
.machine = d_regs()->machine,\
|
||||||
.module = d_regs()->module,\
|
.module = d_regs()->module,\
|
||||||
.process = d_regs()->process,\
|
.process = d_regs()->process,\
|
||||||
.thread = d_regs()->thread,\
|
.thread = d_regs()->thread,\
|
||||||
@@ -518,6 +524,7 @@ U64 inline_depth;
|
|||||||
.dbgi_key = d_regs()->dbgi_key,\
|
.dbgi_key = d_regs()->dbgi_key,\
|
||||||
.vaddr_range = d_regs()->vaddr_range,\
|
.vaddr_range = d_regs()->vaddr_range,\
|
||||||
.voff_range = d_regs()->voff_range,\
|
.voff_range = d_regs()->voff_range,\
|
||||||
|
.pid = d_regs()->pid,\
|
||||||
.force_confirm = d_regs()->force_confirm,\
|
.force_confirm = d_regs()->force_confirm,\
|
||||||
.prefer_disasm = d_regs()->prefer_disasm,\
|
.prefer_disasm = d_regs()->prefer_disasm,\
|
||||||
.dir2 = d_regs()->dir2,\
|
.dir2 = d_regs()->dir2,\
|
||||||
@@ -563,7 +570,7 @@ struct {B32 *value_ptr; String8 name;} DEV_toggle_table[] =
|
|||||||
{&DEV_updating_indicator, str8_lit_comp("updating_indicator")},
|
{&DEV_updating_indicator, str8_lit_comp("updating_indicator")},
|
||||||
};
|
};
|
||||||
C_LINKAGE_BEGIN
|
C_LINKAGE_BEGIN
|
||||||
extern Rng1U64 d_reg_slot_range_table[26];
|
extern Rng1U64 d_reg_slot_range_table[28];
|
||||||
extern String8 d_msg_kind_name_lower_table[71];
|
extern String8 d_msg_kind_name_lower_table[71];
|
||||||
extern Rng1U64 d_cmd_param_slot_range_table[23];
|
extern Rng1U64 d_cmd_param_slot_range_table[23];
|
||||||
extern String8 d_entity_kind_display_string_table[31];
|
extern String8 d_entity_kind_display_string_table[31];
|
||||||
|
|||||||
@@ -112,7 +112,8 @@ DF_MsgKindTable:
|
|||||||
|
|
||||||
@enum DF_MsgKind:
|
@enum DF_MsgKind:
|
||||||
{
|
{
|
||||||
@expand(DF_MsgKindTable a) `$(a.name)`
|
@expand(DF_MsgKindTable a) `$(a.name)`,
|
||||||
|
COUNT
|
||||||
}
|
}
|
||||||
|
|
||||||
@data(String8) df_msg_kind_name_lower_table:
|
@data(String8) df_msg_kind_name_lower_table:
|
||||||
|
|||||||
@@ -7809,6 +7809,19 @@ df_request_frame(void)
|
|||||||
df_state->num_frames_requested = 4;
|
df_state->num_frames_requested = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
//~ rjf: Message Functions
|
||||||
|
|
||||||
|
internal void
|
||||||
|
df_msg_(DF_MsgKind kind, D_Regs *regs)
|
||||||
|
{
|
||||||
|
DF_MsgNode *n = push_array(df_state->msgs_arena, DF_MsgNode, 1);
|
||||||
|
SLLQueuePush(df_state->msgs.first, df_state->msgs.last, n);
|
||||||
|
df_state->msgs.count += 1;
|
||||||
|
n->v.kind = kind;
|
||||||
|
n->v.regs = d_regs_copy(df_state->msgs_arena, regs);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Main Layer Top-Level Calls
|
//~ rjf: Main Layer Top-Level Calls
|
||||||
|
|
||||||
@@ -10601,9 +10614,12 @@ df_end_frame(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
df_frame(Arena *arena, D_CmdList *cmds)
|
df_frame(D_CmdList *cmds, F32 dt)
|
||||||
{
|
{
|
||||||
df_begin_frame(arena, cmds);
|
Temp scratch = scratch_begin(0, 0);
|
||||||
|
DI_Scope *di_scope = di_scope_open();
|
||||||
|
d_tick(scratch.arena, di_scope, cmds, dt);
|
||||||
|
df_begin_frame(scratch.arena, cmds);
|
||||||
{
|
{
|
||||||
B32 queue_drag_drop = 0;
|
B32 queue_drag_drop = 0;
|
||||||
if(queue_drag_drop)
|
if(queue_drag_drop)
|
||||||
@@ -10620,7 +10636,7 @@ df_frame(Arena *arena, D_CmdList *cmds)
|
|||||||
}
|
}
|
||||||
d_push_regs();
|
d_push_regs();
|
||||||
d_regs()->window = df_handle_from_window(w);
|
d_regs()->window = df_handle_from_window(w);
|
||||||
df_window_update_and_render(arena, w, cmds);
|
df_window_update_and_render(scratch.arena, w, cmds);
|
||||||
D_Regs *window_regs = d_pop_regs();
|
D_Regs *window_regs = d_pop_regs();
|
||||||
if(df_window_from_handle(last_focused_window) == w)
|
if(df_window_from_handle(last_focused_window) == w)
|
||||||
{
|
{
|
||||||
@@ -10644,4 +10660,7 @@ df_frame(Arena *arena, D_CmdList *cmds)
|
|||||||
}
|
}
|
||||||
r_end_frame();
|
r_end_frame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
di_scope_close(di_scope);
|
||||||
|
scratch_end(scratch);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -365,6 +365,31 @@ struct DF_ViewRuleSpec
|
|||||||
|
|
||||||
#include "generated/dbg_frontend.meta.h"
|
#include "generated/dbg_frontend.meta.h"
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
//~ rjf: Message Types
|
||||||
|
|
||||||
|
typedef struct DF_Msg DF_Msg;
|
||||||
|
struct DF_Msg
|
||||||
|
{
|
||||||
|
DF_MsgKind kind;
|
||||||
|
D_Regs *regs;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct DF_MsgNode DF_MsgNode;
|
||||||
|
struct DF_MsgNode
|
||||||
|
{
|
||||||
|
DF_MsgNode *next;
|
||||||
|
DF_Msg v;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct DF_MsgList DF_MsgList;
|
||||||
|
struct DF_MsgList
|
||||||
|
{
|
||||||
|
DF_MsgNode *first;
|
||||||
|
DF_MsgNode *last;
|
||||||
|
U64 count;
|
||||||
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Theme Types
|
//~ rjf: Theme Types
|
||||||
|
|
||||||
@@ -583,6 +608,10 @@ struct DF_State
|
|||||||
// rjf: arenas
|
// rjf: arenas
|
||||||
Arena *arena;
|
Arena *arena;
|
||||||
|
|
||||||
|
// rjf: messages
|
||||||
|
Arena *msgs_arena;
|
||||||
|
DF_MsgList msgs;
|
||||||
|
|
||||||
// rjf: frame request state
|
// rjf: frame request state
|
||||||
U64 num_frames_requested;
|
U64 num_frames_requested;
|
||||||
|
|
||||||
@@ -922,7 +951,13 @@ internal void df_request_frame(void);
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Message Functions
|
//~ rjf: Message Functions
|
||||||
|
|
||||||
|
internal void df_msg_(DF_MsgKind kind, D_Regs *regs);
|
||||||
|
#define df_msg(kind, ...) df_msg_((kind),\
|
||||||
|
&(D_Regs)\
|
||||||
|
{\
|
||||||
|
d_regs_lit_init_top\
|
||||||
|
__VA_ARGS__\
|
||||||
|
})
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Main Layer Top-Level Calls
|
//~ rjf: Main Layer Top-Level Calls
|
||||||
@@ -930,6 +965,6 @@ internal void df_request_frame(void);
|
|||||||
internal void df_init(OS_WindowRepaintFunctionType *window_repaint_entry_point, D_StateDeltaHistory *hist);
|
internal void df_init(OS_WindowRepaintFunctionType *window_repaint_entry_point, D_StateDeltaHistory *hist);
|
||||||
internal void df_begin_frame(Arena *arena, D_CmdList *cmds);
|
internal void df_begin_frame(Arena *arena, D_CmdList *cmds);
|
||||||
internal void df_end_frame(void);
|
internal void df_end_frame(void);
|
||||||
internal void df_frame(Arena *arena, D_CmdList *cmds);
|
internal void df_frame(D_CmdList *cmds, F32 dt);
|
||||||
|
|
||||||
#endif // DBG_FRONTEND_CORE_H
|
#endif // DBG_FRONTEND_CORE_H
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ DF_MsgKind_FindThread,
|
|||||||
DF_MsgKind_FindSelectedThread,
|
DF_MsgKind_FindSelectedThread,
|
||||||
DF_MsgKind_GoToName,
|
DF_MsgKind_GoToName,
|
||||||
DF_MsgKind_FindCodeLocation,
|
DF_MsgKind_FindCodeLocation,
|
||||||
|
DF_MsgKind_COUNT,
|
||||||
} DF_MsgKind;
|
} DF_MsgKind;
|
||||||
|
|
||||||
typedef enum DF_IconKind
|
typedef enum DF_IconKind
|
||||||
|
|||||||
+12
-15
@@ -9,7 +9,6 @@ update_and_render(OS_Handle repaint_window_handle, void *user_data)
|
|||||||
{
|
{
|
||||||
ProfBeginFunction();
|
ProfBeginFunction();
|
||||||
Temp scratch = scratch_begin(0, 0);
|
Temp scratch = scratch_begin(0, 0);
|
||||||
DI_Scope *di_scope = di_scope_open();
|
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: begin logging
|
//- rjf: begin logging
|
||||||
@@ -27,7 +26,7 @@ update_and_render(OS_Handle repaint_window_handle, void *user_data)
|
|||||||
log_scope_begin();
|
log_scope_begin();
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: mark user-facing tick
|
//- rjf: mark user-facing thread tick
|
||||||
//
|
//
|
||||||
ProfTick(0);
|
ProfTick(0);
|
||||||
txt_user_clock_tick();
|
txt_user_clock_tick();
|
||||||
@@ -35,6 +34,15 @@ update_and_render(OS_Handle repaint_window_handle, void *user_data)
|
|||||||
geo_user_clock_tick();
|
geo_user_clock_tick();
|
||||||
tex_user_clock_tick();
|
tex_user_clock_tick();
|
||||||
|
|
||||||
|
//////////////////////////////
|
||||||
|
//- rjf: get events from the OS
|
||||||
|
//
|
||||||
|
OS_EventList events = {0};
|
||||||
|
if(os_handle_match(repaint_window_handle, os_handle_zero()))
|
||||||
|
{
|
||||||
|
events = os_get_events(scratch.arena, df_state->num_frames_requested == 0);
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: pick target hz
|
//- rjf: pick target hz
|
||||||
//
|
//
|
||||||
@@ -78,15 +86,6 @@ update_and_render(OS_Handle repaint_window_handle, void *user_data)
|
|||||||
//
|
//
|
||||||
F32 dt = 1.f/target_hz;
|
F32 dt = 1.f/target_hz;
|
||||||
|
|
||||||
//////////////////////////////
|
|
||||||
//- rjf: get events from the OS
|
|
||||||
//
|
|
||||||
OS_EventList events = {0};
|
|
||||||
if(os_handle_match(repaint_window_handle, os_handle_zero()))
|
|
||||||
{
|
|
||||||
events = os_get_events(scratch.arena, df_state->num_frames_requested == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: begin measuring actual per-frame work
|
//- rjf: begin measuring actual per-frame work
|
||||||
//
|
//
|
||||||
@@ -264,10 +263,9 @@ update_and_render(OS_Handle repaint_window_handle, void *user_data)
|
|||||||
D_CmdList cmds = d_gather_root_cmds(scratch.arena);
|
D_CmdList cmds = d_gather_root_cmds(scratch.arena);
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: tick debug engine; do frontend frame
|
//- rjf: do frontend frame
|
||||||
//
|
//
|
||||||
d_tick(scratch.arena, di_scope, &cmds, dt);
|
df_frame(&cmds, dt);
|
||||||
df_frame(scratch.arena, &cmds);
|
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: show windows after first frame
|
//- rjf: show windows after first frame
|
||||||
@@ -309,7 +307,6 @@ update_and_render(OS_Handle repaint_window_handle, void *user_data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
di_scope_close(di_scope);
|
|
||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
ProfEnd();
|
ProfEnd();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user