sketch out msg processing loop, to replace cmd processing loop, in dbg engine

This commit is contained in:
Ryan Fleury
2024-08-30 17:52:45 -07:00
parent 8770a43678
commit 7004994b25
10 changed files with 1018 additions and 26 deletions
+4 -1
View File
@@ -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
+3 -1
View File
@@ -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 -1
View File
@@ -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];
+2 -1
View File
@@ -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:
+22 -3
View File
@@ -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);
} }
+37 -2
View File
@@ -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
View File
@@ -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();
} }