mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-05 13:28:40 +00:00
first half pass at new dbgi fuzzy searching functionality; distributes search amongst sub-tasks
This commit is contained in:
+33
-116
@@ -5012,37 +5012,19 @@ rd_window_frame(RD_Window *ws)
|
||||
//- rjf: gather globals
|
||||
if(ws->autocomp_lister_params.flags & RD_AutoCompListerFlag_Globals && query_word.size != 0)
|
||||
{
|
||||
U128 dis_key = {d_hash_from_string(str8_lit("autocomp_globals_dis_key"))};
|
||||
DIS_Params dis_params =
|
||||
U128 search_key = {d_hash_from_string(str8_lit("autocomp_globals_search_key")), d_hash_from_string(str8_lit("autocomp_globals_search_key"))};
|
||||
DI_SearchParams search_params =
|
||||
{
|
||||
RDI_SectionKind_GlobalVariables,
|
||||
dbgi_keys,
|
||||
};
|
||||
B32 is_stale = 0;
|
||||
DIS_ItemArray items = dis_items_from_key_params_query(dis_scope, dis_key, &dis_params, query_word, 0, &is_stale);
|
||||
DI_SearchItemArray items = di_search_items_from_key_params_query(di_scope, search_key, &search_params, query_word, 0, &is_stale);
|
||||
for(U64 idx = 0; idx < 20 && idx < items.count; idx += 1)
|
||||
{
|
||||
// rjf: determine dbgi/rdi to which this item belongs
|
||||
DI_Key dbgi_key = {0};
|
||||
RDI_Parsed *rdi = &di_rdi_parsed_nil;
|
||||
U64 base_idx = 0;
|
||||
{
|
||||
for(U64 rdi_idx = 0; rdi_idx < rdis_count; rdi_idx += 1)
|
||||
{
|
||||
U64 table_count = 0;
|
||||
rdi_section_raw_table_from_kind(rdis[rdi_idx], dis_params.target, &table_count);
|
||||
if(base_idx <= items.v[idx].idx && items.v[idx].idx < base_idx + table_count)
|
||||
{
|
||||
dbgi_key = dbgi_keys.v[rdi_idx];
|
||||
rdi = rdis[rdi_idx];
|
||||
break;
|
||||
}
|
||||
base_idx += table_count;
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: unpack info
|
||||
String8 name = dis_item_string_from_rdi_target_element_idx(rdi, dis_params.target, items.v[idx].idx-base_idx);
|
||||
RDI_Parsed *rdi = rdis[items.v[idx].dbgi_idx];
|
||||
String8 name = dis_item_string_from_rdi_target_element_idx(rdi, search_params.target, items.v[idx].idx);
|
||||
|
||||
// rjf: push item
|
||||
RD_AutoCompListerItem item = {0};
|
||||
@@ -5059,37 +5041,19 @@ rd_window_frame(RD_Window *ws)
|
||||
//- rjf: gather thread locals
|
||||
if(ws->autocomp_lister_params.flags & RD_AutoCompListerFlag_ThreadLocals && query_word.size != 0)
|
||||
{
|
||||
U128 dis_key = {d_hash_from_string(str8_lit("autocomp_tvars_dis_key"))};
|
||||
DIS_Params dis_params =
|
||||
U128 search_key = {d_hash_from_string(str8_lit("autocomp_tvars_dis_key")), d_hash_from_string(str8_lit("autocomp_tvars_dis_key"))};
|
||||
DI_SearchParams search_params =
|
||||
{
|
||||
RDI_SectionKind_ThreadVariables,
|
||||
dbgi_keys,
|
||||
};
|
||||
B32 is_stale = 0;
|
||||
DIS_ItemArray items = dis_items_from_key_params_query(dis_scope, dis_key, &dis_params, query_word, 0, &is_stale);
|
||||
DI_SearchItemArray items = di_search_items_from_key_params_query(di_scope, search_key, &search_params, query_word, 0, &is_stale);
|
||||
for(U64 idx = 0; idx < 20 && idx < items.count; idx += 1)
|
||||
{
|
||||
// rjf: determine dbgi/rdi to which this item belongs
|
||||
DI_Key dbgi_key = {0};
|
||||
RDI_Parsed *rdi = &di_rdi_parsed_nil;
|
||||
U64 base_idx = 0;
|
||||
{
|
||||
for(U64 rdi_idx = 0; rdi_idx < rdis_count; rdi_idx += 1)
|
||||
{
|
||||
U64 table_count = 0;
|
||||
rdi_section_raw_table_from_kind(rdis[rdi_idx], dis_params.target, &table_count);
|
||||
if(base_idx <= items.v[idx].idx && items.v[idx].idx < base_idx + table_count)
|
||||
{
|
||||
dbgi_key = dbgi_keys.v[rdi_idx];
|
||||
rdi = rdis[rdi_idx];
|
||||
break;
|
||||
}
|
||||
base_idx += table_count;
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: unpack info
|
||||
String8 name = dis_item_string_from_rdi_target_element_idx(rdi, dis_params.target, items.v[idx].idx-base_idx);
|
||||
RDI_Parsed *rdi = rdis[items.v[idx].dbgi_idx];
|
||||
String8 name = dis_item_string_from_rdi_target_element_idx(rdi, search_params.target, items.v[idx].idx);
|
||||
|
||||
// rjf: push item
|
||||
RD_AutoCompListerItem item = {0};
|
||||
@@ -5106,37 +5070,19 @@ rd_window_frame(RD_Window *ws)
|
||||
//- rjf: gather procedures
|
||||
if(ws->autocomp_lister_params.flags & RD_AutoCompListerFlag_Procedures && query_word.size != 0)
|
||||
{
|
||||
U128 dis_key = {d_hash_from_string(str8_lit("autocomp_procedures_dis_key"))};
|
||||
DIS_Params dis_params =
|
||||
U128 search_key = {d_hash_from_string(str8_lit("autocomp_procedures_search_key")), d_hash_from_string(str8_lit("autocomp_procedures_search_key"))};
|
||||
DI_SearchParams search_params =
|
||||
{
|
||||
RDI_SectionKind_Procedures,
|
||||
dbgi_keys,
|
||||
};
|
||||
B32 is_stale = 0;
|
||||
DIS_ItemArray items = dis_items_from_key_params_query(dis_scope, dis_key, &dis_params, query_word, 0, &is_stale);
|
||||
DI_SearchItemArray items = di_search_items_from_key_params_query(di_scope, search_key, &search_params, query_word, 0, &is_stale);
|
||||
for(U64 idx = 0; idx < 20 && idx < items.count; idx += 1)
|
||||
{
|
||||
// rjf: determine dbgi/rdi to which this item belongs
|
||||
DI_Key dbgi_key = {0};
|
||||
RDI_Parsed *rdi = &di_rdi_parsed_nil;
|
||||
U64 base_idx = 0;
|
||||
{
|
||||
for(U64 rdi_idx = 0; rdi_idx < rdis_count; rdi_idx += 1)
|
||||
{
|
||||
U64 table_count = 0;
|
||||
rdi_section_raw_table_from_kind(rdis[rdi_idx], dis_params.target, &table_count);
|
||||
if(base_idx <= items.v[idx].idx && items.v[idx].idx < base_idx + table_count)
|
||||
{
|
||||
dbgi_key = dbgi_keys.v[rdi_idx];
|
||||
rdi = rdis[rdi_idx];
|
||||
break;
|
||||
}
|
||||
base_idx += table_count;
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: unpack info
|
||||
String8 name = dis_item_string_from_rdi_target_element_idx(rdi, dis_params.target, items.v[idx].idx-base_idx);
|
||||
RDI_Parsed *rdi = rdis[items.v[idx].dbgi_idx];
|
||||
String8 name = dis_item_string_from_rdi_target_element_idx(rdi, search_params.target, items.v[idx].idx);
|
||||
|
||||
// rjf: push item
|
||||
RD_AutoCompListerItem item = {0};
|
||||
@@ -5153,37 +5099,19 @@ rd_window_frame(RD_Window *ws)
|
||||
//- rjf: gather types
|
||||
if(ws->autocomp_lister_params.flags & RD_AutoCompListerFlag_Types && query_word.size != 0)
|
||||
{
|
||||
U128 dis_key = {d_hash_from_string(str8_lit("autocomp_types_dis_key"))};
|
||||
DIS_Params dis_params =
|
||||
U128 search_key = {d_hash_from_string(str8_lit("autocomp_types_search_key")), d_hash_from_string(str8_lit("autocomp_types_search_key"))};
|
||||
DI_SearchParams search_params =
|
||||
{
|
||||
RDI_SectionKind_UDTs,
|
||||
dbgi_keys,
|
||||
};
|
||||
B32 is_stale = 0;
|
||||
DIS_ItemArray items = dis_items_from_key_params_query(dis_scope, dis_key, &dis_params, query_word, 0, &is_stale);
|
||||
DI_SearchItemArray items = di_search_items_from_key_params_query(di_scope, search_key, &search_params, query_word, 0, &is_stale);
|
||||
for(U64 idx = 0; idx < 20 && idx < items.count; idx += 1)
|
||||
{
|
||||
// rjf: determine dbgi/rdi to which this item belongs
|
||||
DI_Key dbgi_key = {0};
|
||||
RDI_Parsed *rdi = &di_rdi_parsed_nil;
|
||||
U64 base_idx = 0;
|
||||
{
|
||||
for(U64 rdi_idx = 0; rdi_idx < rdis_count; rdi_idx += 1)
|
||||
{
|
||||
U64 table_count = 0;
|
||||
rdi_section_raw_table_from_kind(rdis[rdi_idx], dis_params.target, &table_count);
|
||||
if(base_idx <= items.v[idx].idx && items.v[idx].idx < base_idx + table_count)
|
||||
{
|
||||
dbgi_key = dbgi_keys.v[rdi_idx];
|
||||
rdi = rdis[rdi_idx];
|
||||
break;
|
||||
}
|
||||
base_idx += table_count;
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: unpack info
|
||||
String8 name = dis_item_string_from_rdi_target_element_idx(rdi, dis_params.target, items.v[idx].idx-base_idx);
|
||||
RDI_Parsed *rdi = rdis[items.v[idx].dbgi_idx];
|
||||
String8 name = dis_item_string_from_rdi_target_element_idx(rdi, search_params.target, items.v[idx].idx);
|
||||
|
||||
// rjf: push item
|
||||
RD_AutoCompListerItem item = {0};
|
||||
@@ -9323,7 +9251,9 @@ rd_ev_view_rule_expr_num_from_id__meta_ctrl_entities(U64 id, void *user_data, CT
|
||||
typedef struct RD_DebugInfoTableExpandAccel RD_DebugInfoTableExpandAccel;
|
||||
struct RD_DebugInfoTableExpandAccel
|
||||
{
|
||||
DIS_ItemArray items;
|
||||
U64 rdis_count;
|
||||
RDI_Parsed **rdis;
|
||||
DI_SearchItemArray items;
|
||||
};
|
||||
|
||||
internal EV_ExpandInfo
|
||||
@@ -9339,7 +9269,7 @@ rd_ev_view_rule_expr_expand_info__debug_info_tables(Arena *arena, EV_View *view,
|
||||
DI_KeyList dbgi_keys_list = d_push_active_dbgi_key_list(scratch.arena);
|
||||
DI_KeyArray dbgi_keys = di_key_array_from_list(scratch.arena, &dbgi_keys_list);
|
||||
U64 rdis_count = dbgi_keys.count;
|
||||
RDI_Parsed **rdis = push_array(scratch.arena, RDI_Parsed *, rdis_count);
|
||||
RDI_Parsed **rdis = push_array(arena, RDI_Parsed *, rdis_count);
|
||||
for(U64 idx = 0; idx < rdis_count; idx += 1)
|
||||
{
|
||||
rdis[idx] = di_rdi_from_key(rd_state->frame_di_scope, &dbgi_keys.v[idx], endt_us);
|
||||
@@ -9348,8 +9278,10 @@ rd_ev_view_rule_expr_expand_info__debug_info_tables(Arena *arena, EV_View *view,
|
||||
//- rjf: query all filtered items from dbgi searching system
|
||||
U128 fuzzy_search_key = {(U64)view, (U64)section};
|
||||
B32 items_stale = 0;
|
||||
DIS_Params params = {section, dbgi_keys};
|
||||
accel->items = dis_items_from_key_params_query(rd_state->frame_dis_scope, fuzzy_search_key, ¶ms, filter, endt_us, &items_stale);
|
||||
DI_SearchParams params = {section, dbgi_keys};
|
||||
accel->rdis_count = rdis_count;
|
||||
accel->rdis = rdis;
|
||||
accel->items = di_search_items_from_key_params_query(rd_state->frame_di_scope, fuzzy_search_key, ¶ms, filter, endt_us, &items_stale);
|
||||
if(items_stale)
|
||||
{
|
||||
rd_request_frame();
|
||||
@@ -9376,29 +9308,14 @@ rd_ev_view_rule_expr_expand_range_info__debug_info_tables(Arena *arena, EV_View
|
||||
for EachIndex(row_expr_idx, result.row_exprs_count)
|
||||
{
|
||||
// rjf: unpack row info
|
||||
DIS_Item *item = &accel->items.v[idx_range.min + row_expr_idx];
|
||||
|
||||
// rjf: determine module to which this item belongs
|
||||
E_Module *module = e_parse_ctx->primary_module;
|
||||
U64 base_idx = 0;
|
||||
{
|
||||
for(U64 module_idx = 0; module_idx < e_parse_ctx->modules_count; module_idx += 1)
|
||||
{
|
||||
U64 all_items_count = 0;
|
||||
rdi_section_raw_table_from_kind(e_parse_ctx->modules[module_idx].rdi, section, &all_items_count);
|
||||
if(base_idx <= item->idx && item->idx < base_idx + all_items_count)
|
||||
{
|
||||
module = &e_parse_ctx->modules[module_idx];
|
||||
break;
|
||||
}
|
||||
base_idx += all_items_count;
|
||||
}
|
||||
}
|
||||
DI_SearchItem *item = &accel->items.v[idx_range.min + row_expr_idx];
|
||||
RDI_Parsed *rdi = accel->rdis[item->dbgi_idx];
|
||||
E_Module *module = &e_parse_ctx->modules[item->dbgi_idx];
|
||||
|
||||
// rjf: build expr
|
||||
E_Expr *item_expr = &e_expr_nil;
|
||||
{
|
||||
U64 element_idx = item->idx - base_idx;
|
||||
U64 element_idx = item->idx;
|
||||
switch(section)
|
||||
{
|
||||
default:{}break;
|
||||
@@ -9488,7 +9405,7 @@ internal U64
|
||||
rd_ev_view_rule_expr_num_from_id__debug_info_tables(U64 id, void *user_data, RDI_SectionKind section)
|
||||
{
|
||||
RD_DebugInfoTableExpandAccel *accel = (RD_DebugInfoTableExpandAccel *)user_data;
|
||||
U64 num = dis_item_num_from_array_element_idx__linear_search(&accel->items, id-1);
|
||||
U64 num = di_search_item_num_from_array_element_idx__linear_search(&accel->items, id-1);
|
||||
return num;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user