properly parameterize viz block & viz row building paths based on dbgi table target

This commit is contained in:
Ryan Fleury
2024-02-02 10:09:30 -08:00
parent ac895a85eb
commit 8958b414e2
5 changed files with 53 additions and 15 deletions
+41
View File
@@ -110,6 +110,47 @@ dbgi_fuzzy_item_num_from_array_element_idx__linear_search(DBGI_FuzzySearchItemAr
return fuzzy_item_num;
}
internal String8
dbgi_fuzzy_item_string_from_rdbg_target_element_idx(RADDBG_Parsed *rdbg, DBGI_FuzzySearchTarget target, U64 element_idx)
{
String8 result = {0};
switch(target)
{
// NOTE(rjf): no default - warn if we miss a case
case DBGI_FuzzySearchTarget_Procedures:
{
RADDBG_Procedure *proc = raddbg_element_from_idx(rdbg, procedures, element_idx);
U64 name_size = 0;
U8 *name_base = raddbg_string_from_idx(rdbg, proc->name_string_idx, &name_size);
result = str8(name_base, name_size);
}break;
case DBGI_FuzzySearchTarget_GlobalVariables:
{
RADDBG_GlobalVariable *gvar = raddbg_element_from_idx(rdbg, global_variables, element_idx);
U64 name_size = 0;
U8 *name_base = raddbg_string_from_idx(rdbg, gvar->name_string_idx, &name_size);
result = str8(name_base, name_size);
}break;
case DBGI_FuzzySearchTarget_ThreadVariables:
{
RADDBG_ThreadVariable *tvar = raddbg_element_from_idx(rdbg, thread_variables, element_idx);
U64 name_size = 0;
U8 *name_base = raddbg_string_from_idx(rdbg, tvar->name_string_idx, &name_size);
result = str8(name_base, name_size);
}break;
case DBGI_FuzzySearchTarget_UDTs:
{
RADDBG_UDT *udt = raddbg_element_from_idx(rdbg, udts, element_idx);
RADDBG_TypeNode *type_node = raddbg_element_from_idx(rdbg, type_nodes, udt->self_type_idx);
U64 name_size = 0;
U8 *name_base = raddbg_string_from_idx(rdbg, type_node->user_defined.name_string_idx, &name_size);
result = str8(name_base, name_size);
}break;
case DBGI_FuzzySearchTarget_COUNT:{}break;
}
return result;
}
////////////////////////////////
//~ rjf: Forced Override Cache Functions
+1
View File
@@ -379,6 +379,7 @@ internal void dbgi_ensure_tctx_inited(void);
internal U64 dbgi_hash_from_string(String8 string);
internal U64 dbgi_fuzzy_item_num_from_array_element_idx__linear_search(DBGI_FuzzySearchItemArray *array, U64 element_idx);
internal String8 dbgi_fuzzy_item_string_from_rdbg_target_element_idx(RADDBG_Parsed *rdbg, DBGI_FuzzySearchTarget target, U64 element_idx);
////////////////////////////////
//~ rjf: Forced Override Cache Functions
+1
View File
@@ -721,6 +721,7 @@ struct DF_EvalVizBlock
// rjf: info about ranges that this block spans
Rng1U64 visual_idx_range;
Rng1U64 semantic_idx_range;
DBGI_FuzzySearchTarget dbgi_target;
DBGI_FuzzySearchItemArray backing_search_items;
// rjf: visualization config extensions
+2 -6
View File
@@ -7529,12 +7529,8 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop
DF_Entity *module = df_module_from_process_vaddr(process, thread_rip_unwind_vaddr);
for(U64 idx = visible_idx_range.min; idx < visible_idx_range.max; idx += 1)
{
// rjf: unpack type info
RADDBG_UDT *udt = raddbg_element_from_idx(parse_ctx->rdbg, udts, block->backing_search_items.v[idx].idx);
RADDBG_TypeNode *type_node = raddbg_element_from_idx(parse_ctx->rdbg, type_nodes, udt->self_type_idx);
U64 name_size = 0;
U8 *name_base = raddbg_string_from_idx(parse_ctx->rdbg, type_node->user_defined.name_string_idx, &name_size);
String8 name = str8(name_base, name_size);
// rjf: unpack info about this row
String8 name = dbgi_fuzzy_item_string_from_rdbg_target_element_idx(parse_ctx->rdbg, block->dbgi_target, block->backing_search_items.v[idx].idx);
// rjf: get keys for this row
DF_ExpandKey parent_key = block->parent_key;
+8 -9
View File
@@ -641,6 +641,7 @@ df_eval_viz_block_list_from_watch_view_state(Arena *arena, DBGI_Scope *scope, DF
DF_EvalViewKey eval_view_key = df_eval_view_key_from_eval_watch_view(ews);
DF_EvalView *eval_view = df_eval_view_from_key(eval_view_key);
String8 filter = str8(view->query_buffer, view->query_string_size);
DBGI_FuzzySearchTarget dbgi_target = DBGI_FuzzySearchTarget_UDTs;
switch(ews->fill_kind)
{
////////////////////////////
@@ -717,9 +718,10 @@ df_eval_viz_block_list_from_watch_view_state(Arena *arena, DBGI_Scope *scope, DF
////////////////////////////
//- rjf: debug info table fill -> build split debug info table blocks
//
case DF_EvalWatchViewFillKind_Globals:
case DF_EvalWatchViewFillKind_ThreadLocals:
case DF_EvalWatchViewFillKind_Types:
case DF_EvalWatchViewFillKind_Globals: dbgi_target = DBGI_FuzzySearchTarget_GlobalVariables; goto dbgi_table;
case DF_EvalWatchViewFillKind_ThreadLocals: dbgi_target = DBGI_FuzzySearchTarget_ThreadVariables; goto dbgi_table;
case DF_EvalWatchViewFillKind_Types: dbgi_target = DBGI_FuzzySearchTarget_UDTs; goto dbgi_table;
dbgi_table:;
{
//- rjf: unpack context
DF_Entity *thread = df_entity_from_handle(ctrl_ctx->thread);
@@ -740,7 +742,7 @@ df_eval_viz_block_list_from_watch_view_state(Arena *arena, DBGI_Scope *scope, DF
//- rjf: query all filtered items from dbgi searching system
U128 fuzzy_search_key = {(U64)view, df_hash_from_string(str8_struct(&view))};
B32 items_stale = 0;
DBGI_FuzzySearchItemArray items = dbgi_fuzzy_search_items_from_key_exe_query(scope, fuzzy_search_key, exe_path, filter, DBGI_FuzzySearchTarget_UDTs, os_now_microseconds()+100, &items_stale);
DBGI_FuzzySearchItemArray items = dbgi_fuzzy_search_items_from_key_exe_query(scope, fuzzy_search_key, exe_path, filter, dbgi_target, os_now_microseconds()+100, &items_stale);
if(items_stale)
{
df_gfx_request_frame();
@@ -811,6 +813,7 @@ df_eval_viz_block_list_from_watch_view_state(Arena *arena, DBGI_Scope *scope, DF
DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_DebugInfoTable, parent_key, root_key, 0);
{
last_vb->visual_idx_range = last_vb->semantic_idx_range = r1u64(0, items.count);
last_vb->dbgi_target = dbgi_target;
last_vb->backing_search_items = items;
}
for(U64 sub_expand_idx = 0; sub_expand_idx < sub_expand_keys_count; sub_expand_idx += 1)
@@ -819,11 +822,7 @@ df_eval_viz_block_list_from_watch_view_state(Arena *arena, DBGI_Scope *scope, DF
last_vb = df_eval_viz_block_split_and_continue(arena, &blocks, last_vb, sub_expand_item_idxs[sub_expand_idx]);
// rjf: grab name for the expanded row
RADDBG_UDT *udt = raddbg_element_from_idx(parse_ctx->rdbg, udts, sub_expand_keys[sub_expand_idx].child_num);
RADDBG_TypeNode *type_node = raddbg_element_from_idx(parse_ctx->rdbg, type_nodes, udt->self_type_idx);
U64 name_size = 0;
U8 *name_base = raddbg_string_from_idx(parse_ctx->rdbg, type_node->user_defined.name_string_idx, &name_size);
String8 name = str8(name_base, name_size);
String8 name = dbgi_fuzzy_item_string_from_rdbg_target_element_idx(&dbgi->rdbg, dbgi_target, sub_expand_keys[sub_expand_idx].child_num);
// rjf: recurse for sub-expansion
{