eliminate d_entity-based module mapping code; all of this is done via ctrl systems now

This commit is contained in:
Ryan Fleury
2024-09-13 10:39:32 -07:00
parent f9c541ea7b
commit c8a892ad8f
6 changed files with 48 additions and 132 deletions
+4 -76
View File
@@ -1977,78 +1977,6 @@ d_trap_net_from_thread__step_into_line(Arena *arena, CTRL_Entity *thread)
////////////////////////////////
//~ rjf: Modules & Debug Info Mappings
//- rjf: module <=> debug info keys
internal DI_Key
d_dbgi_key_from_module(D_Entity *module)
{
D_Entity *debug_info_path = d_entity_child_from_kind(module, D_EntityKind_DebugInfoPath);
DI_Key key = {debug_info_path->string, debug_info_path->timestamp};
return key;
}
internal D_EntityList
d_modules_from_dbgi_key(Arena *arena, DI_Key *dbgi_key)
{
D_EntityList list = {0};
D_EntityList all_modules = d_query_cached_entity_list_with_kind(D_EntityKind_Module);
for(D_EntityNode *n = all_modules.first; n != 0; n = n->next)
{
D_Entity *module = n->entity;
DI_Key module_dbgi_key = d_dbgi_key_from_module(module);
if(di_key_match(&module_dbgi_key, dbgi_key))
{
d_entity_list_push(arena, &list, module);
}
}
return list;
}
//- rjf: voff <=> vaddr
internal U64
d_base_vaddr_from_module(D_Entity *module)
{
U64 module_base_vaddr = module->vaddr;
return module_base_vaddr;
}
internal U64
d_voff_from_vaddr(D_Entity *module, U64 vaddr)
{
U64 module_base_vaddr = d_base_vaddr_from_module(module);
U64 voff = vaddr - module_base_vaddr;
return voff;
}
internal U64
d_vaddr_from_voff(D_Entity *module, U64 voff)
{
U64 module_base_vaddr = d_base_vaddr_from_module(module);
U64 vaddr = voff + module_base_vaddr;
return vaddr;
}
internal Rng1U64
d_voff_range_from_vaddr_range(D_Entity *module, Rng1U64 vaddr_rng)
{
U64 rng_size = dim_1u64(vaddr_rng);
Rng1U64 voff_rng = {0};
voff_rng.min = d_voff_from_vaddr(module, vaddr_rng.min);
voff_rng.max = voff_rng.min + rng_size;
return voff_rng;
}
internal Rng1U64
d_vaddr_range_from_voff_range(D_Entity *module, Rng1U64 voff_rng)
{
U64 rng_size = dim_1u64(voff_rng);
Rng1U64 vaddr_rng = {0};
vaddr_rng.min = d_vaddr_from_voff(module, voff_rng.min);
vaddr_rng.max = vaddr_rng.min + rng_size;
return vaddr_rng;
}
////////////////////////////////
//~ rjf: Debug Info Lookups
@@ -3478,11 +3406,11 @@ internal DI_KeyList
d_push_active_dbgi_key_list(Arena *arena)
{
DI_KeyList dbgis = {0};
D_EntityList modules = d_query_cached_entity_list_with_kind(D_EntityKind_Module);
for(D_EntityNode *n = modules.first; n != 0; n = n->next)
CTRL_EntityList modules = ctrl_entity_list_from_kind(d_state->ctrl_entity_store, CTRL_EntityKind_Module);
for(CTRL_EntityNode *n = modules.first; n != 0; n = n->next)
{
D_Entity *module = n->entity;
DI_Key key = d_dbgi_key_from_module(module);
CTRL_Entity *module = n->v;
DI_Key key = ctrl_dbgi_key_from_module(module);
di_key_list_push(arena, &dbgis, &key);
}
return dbgis;
-14
View File
@@ -949,20 +949,6 @@ internal CTRL_TrapList d_trap_net_from_thread__step_over_inst(Arena *arena, CTRL
internal CTRL_TrapList d_trap_net_from_thread__step_over_line(Arena *arena, CTRL_Entity *thread);
internal CTRL_TrapList d_trap_net_from_thread__step_into_line(Arena *arena, CTRL_Entity *thread);
////////////////////////////////
//~ rjf: Modules & Debug Info Mappings
//- rjf: module <=> debug info keys
internal DI_Key d_dbgi_key_from_module(D_Entity *module);
internal D_EntityList d_modules_from_dbgi_key(Arena *arena, DI_Key *dbgi_key);
//- rjf: voff <=> vaddr
internal U64 d_base_vaddr_from_module(D_Entity *module);
internal U64 d_voff_from_vaddr(D_Entity *module, U64 vaddr);
internal U64 d_vaddr_from_voff(D_Entity *module, U64 voff);
internal Rng1U64 d_voff_range_from_vaddr_range(D_Entity *module, Rng1U64 vaddr_rng);
internal Rng1U64 d_vaddr_range_from_voff_range(D_Entity *module, Rng1U64 voff_rng);
////////////////////////////////
//~ rjf: Debug Info Lookups
+14 -19
View File
@@ -553,18 +553,15 @@ df_queue_drag_drop(void)
}
internal void
df_set_rich_hover_info(DF_RichHoverInfo *info)
df_set_hover_regs(void)
{
arena_clear(df_state->rich_hover_info_next_arena);
MemoryCopyStruct(&df_state->rich_hover_info_next, info);
df_state->rich_hover_info_next.dbgi_key = di_key_copy(df_state->rich_hover_info_next_arena, &info->dbgi_key);
df_state->next_hover_regs = df_regs_copy(df_frame_arena(), df_regs());
}
internal DF_RichHoverInfo
df_get_rich_hover_info(void)
internal DF_Regs *
df_get_hover_regs(void)
{
DF_RichHoverInfo info = df_state->rich_hover_info_current;
return info;
return df_state->hover_regs;
}
////////////////////////////////
@@ -7636,8 +7633,6 @@ df_init(CmdLine *cmdln)
df_state->eval_viz_view_cache_slots = push_array(arena, DF_EvalVizViewCacheSlot, df_state->eval_viz_view_cache_slots_count);
df_state->cfg_main_font_path_arena = arena_alloc();
df_state->cfg_code_font_path_arena = arena_alloc();
df_state->rich_hover_info_next_arena = arena_alloc();
df_state->rich_hover_info_current_arena = arena_alloc();
df_state->bind_change_arena = arena_alloc();
df_state->top_regs = &df_state->base_regs;
df_clear_bindings();
@@ -7785,6 +7780,15 @@ df_frame(void)
arena_clear(df_frame_arena());
df_state->top_regs = &df_state->base_regs;
df_regs_copy_contents(df_frame_arena(), &df_state->top_regs->v, &df_state->top_regs->v);
if(df_state->next_hover_regs != 0)
{
df_state->hover_regs = df_regs_copy(df_frame_arena(), df_state->next_hover_regs);
df_state->next_hover_regs = 0;
}
else
{
df_state->hover_regs = push_array(df_frame_arena(), DF_Regs, 1);
}
//////////////////////////////
//- rjf: get events from the OS
@@ -12272,15 +12276,6 @@ df_frame(void)
}
}
//////////////////////////////
//- rjf: apply new rich hover info
//
arena_clear(df_state->rich_hover_info_current_arena);
MemoryCopyStruct(&df_state->rich_hover_info_current, &df_state->rich_hover_info_next);
df_state->rich_hover_info_current.dbgi_key = di_key_copy(df_state->rich_hover_info_current_arena, &df_state->rich_hover_info_current.dbgi_key);
arena_clear(df_state->rich_hover_info_next_arena);
MemoryZeroStruct(&df_state->rich_hover_info_next);
//////////////////////////////
//- rjf: animate confirmation
//
+6 -6
View File
@@ -308,6 +308,7 @@ struct DF_DragDropPayload
////////////////////////////////
//~ rjf: Rich Hover Types
#if 0 // TODO(rjf): @msgs
typedef struct DF_RichHoverInfo DF_RichHoverInfo;
struct DF_RichHoverInfo
{
@@ -317,6 +318,7 @@ struct DF_RichHoverInfo
Rng1U64 voff_range;
DI_Key dbgi_key;
};
#endif
////////////////////////////////
//~ rjf: View Rule Spec Types
@@ -761,10 +763,8 @@ struct DF_State
DF_DragDropState drag_drop_state;
// rjf: rich hover info
Arena *rich_hover_info_next_arena;
Arena *rich_hover_info_current_arena;
DF_RichHoverInfo rich_hover_info_next;
DF_RichHoverInfo rich_hover_info_current;
DF_Regs *hover_regs;
DF_Regs *next_hover_regs;
// rjf: config reading state
Arena *cfg_path_arenas[D_CfgSrc_COUNT];
@@ -922,8 +922,8 @@ internal B32 df_drag_drop(DF_DragDropPayload *out_payload);
internal void df_drag_kill(void);
internal void df_queue_drag_drop(void);
internal void df_set_rich_hover_info(DF_RichHoverInfo *info);
internal DF_RichHoverInfo df_get_rich_hover_info(void);
internal void df_set_hover_regs(void);
internal DF_Regs *df_get_hover_regs(void);
////////////////////////////////
//~ rjf: View Spec State Functions
+8
View File
@@ -5759,6 +5759,7 @@ DF_VIEW_UI_FUNCTION_DEF(call_stack)
////////////////////////////////
//~ rjf: modules @view_hook_impl
#if 0 // TODO(rjf): @msgs
typedef struct DF_ModulesViewState DF_ModulesViewState;
struct DF_ModulesViewState
{
@@ -5776,9 +5777,11 @@ struct DF_ModulesViewState
F32 range_col_pct;
F32 dbg_col_pct;
};
#endif
DF_VIEW_SETUP_FUNCTION_DEF(modules)
{
#if 0 // TODO(rjf): @msgs
DF_ModulesViewState *mv = df_view_user_state(view, DF_ModulesViewState);
if(mv->initialized == 0)
{
@@ -5788,10 +5791,12 @@ DF_VIEW_SETUP_FUNCTION_DEF(modules)
mv->range_col_pct = 0.30f;
mv->dbg_col_pct = 0.50f;
}
#endif
}
DF_VIEW_CMD_FUNCTION_DEF(modules)
{
#if 0 // TODO(rjf): @msgs
DF_ModulesViewState *mv = df_view_user_state(view, DF_ModulesViewState);
for(DF_Cmd *cmd = 0; df_next_cmd(&cmd);)
{
@@ -5822,10 +5827,12 @@ DF_VIEW_CMD_FUNCTION_DEF(modules)
}break;
}
}
#endif
}
DF_VIEW_UI_FUNCTION_DEF(modules)
{
#if 0 // TODO(rjf): @msgs
ProfBeginFunction();
Temp scratch = scratch_begin(0, 0);
DI_Scope *scope = di_scope_open();
@@ -6090,6 +6097,7 @@ DF_VIEW_UI_FUNCTION_DEF(modules)
di_scope_close(scope);
scratch_end(scratch);
ProfEnd();
#endif
}
////////////////////////////////
+16 -17
View File
@@ -1963,23 +1963,22 @@ df_code_slice(DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
//////////////////////////////
//- rjf: mouse -> set global frontend hovered line info
//
#if 0 // TODO(rjf): @msgs
if(ui_hovering(text_container_sig) && contains_1s64(params->line_num_range, mouse_pt.line) && (ui_mouse().x - text_container_box->rect.x0 < params->line_num_width_px + line_num_padding_px))
{
U64 line_slice_idx = mouse_pt.line-params->line_num_range.min;
D_LineList *lines = &params->line_infos[line_slice_idx];
if(lines->first != 0 && (df_regs()->file_path.size == 0 || lines->first->v.pt.line == mouse_pt.line))
{
DF_RichHoverInfo info = {0};
info.process = d_handle_from_entity(selected_thread_process);
info.vaddr_range = d_vaddr_range_from_voff_range(selected_thread_module, lines->first->v.voff_range);
info.module = d_handle_from_entity(selected_thread_module);
info.dbgi_key = lines->first->v.dbgi_key;
info.voff_range = lines->first->v.voff_range;
df_set_rich_hover_info(&info);
DF_RegsScope(.process = selected_thread_process->handle,
.vaddr_range = ctrl_vaddr_range_from_voff_range(selected_thread_module, lines->first->v.voff_range),
.module = selected_thread_module->handle,
.dbgi_key = lines->first->v.dbgi_key,
.voff_range = lines->first->v.voff_range)
{
df_set_hover_regs();
}
}
}
#endif
//////////////////////////////
//- rjf: hover eval
@@ -2069,12 +2068,12 @@ df_code_slice(DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
//
UI_Parent(text_container_box) ProfScope("build line text") UI_Focus(UI_FocusKind_Off)
{
DF_RichHoverInfo rich_hover = df_get_rich_hover_info();
Rng1U64 rich_hover_voff_range = rich_hover.voff_range;
if(rich_hover_voff_range.min == 0 && rich_hover_voff_range.max == 0)
DF_Regs *hover_regs = df_get_hover_regs();
Rng1U64 hover_voff_range = hover_regs->voff_range;
if(hover_voff_range.min == 0 && hover_voff_range.max == 0)
{
D_Entity *module = d_entity_from_handle(rich_hover.module);
rich_hover_voff_range = d_voff_range_from_vaddr_range(module, rich_hover.vaddr_range);
CTRL_Entity *module = ctrl_entity_from_handle(d_state->ctrl_entity_store, hover_regs->module);
hover_voff_range = ctrl_voff_range_from_vaddr_range(module, hover_regs->vaddr_range);
}
ui_set_next_pref_height(ui_px(params->line_height_px*(dim_1s64(params->line_num_range)+1), 1.f));
UI_WidthFill
@@ -2359,9 +2358,9 @@ df_code_slice(DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
for(D_LineNode *n = lines->first; n != 0; n = n->next)
{
if((n->v.pt.line == line_num || df_regs()->file_path.size == 0) &&
((di_key_match(&n->v.dbgi_key, &rich_hover.dbgi_key) &&
n->v.voff_range.min <= rich_hover_voff_range.min && rich_hover_voff_range.min < n->v.voff_range.max) ||
(params->line_vaddrs[line_idx] == rich_hover.vaddr_range.min && rich_hover.vaddr_range.min != 0)))
((di_key_match(&n->v.dbgi_key, &hover_regs->dbgi_key) &&
n->v.voff_range.min <= hover_voff_range.min && hover_voff_range.min < n->v.voff_range.max) ||
(params->line_vaddrs[line_idx] == hover_regs->vaddr_range.min && hover_regs->vaddr_range.min != 0)))
{
matches = 1;
line_info_line_num = n->v.pt.line;