diff --git a/src/eval_visualization/eval_visualization_core.c b/src/eval_visualization/eval_visualization_core.c index 2909afe3..4c1936c2 100644 --- a/src/eval_visualization/eval_visualization_core.c +++ b/src/eval_visualization/eval_visualization_core.c @@ -714,7 +714,7 @@ ev_block_tree_from_expr(Arena *arena, EV_View *view, String8 filter, String8 str // rjf: get task key EV_Key key = ev_key_make(ev_hash_from_key(t->parent_block->key), t->child_id); - // rjf: obtain expansion node + // rjf: obtain expansion node & expansion state EV_ExpandNode *expand_node = ev_expand_node_from_key(view, key); B32 is_expanded = (expand_node != 0 && expand_node->expanded); @@ -762,7 +762,6 @@ ev_block_tree_from_expr(Arena *arena, EV_View *view, String8 filter, String8 str } // rjf: iterate children expansions, recurse - // TODO(rjf): need to iterate these in index order, rather than "child_id" (which needs to be renamed to "child_id") order if(expand_node != 0 && expand_info.row_count != 0 && expand_view_rule_info->expr_expand_range_info) { // rjf: count children @@ -839,7 +838,6 @@ ev_block_tree_from_expr(Arena *arena, EV_View *view, String8 filter, String8 str scratch_end(scratch); } E_Expr *child_expr__resolved = ev_resolved_from_expr(arena, child_expr, child_view_rules); - // TODO(rjf): need to mix in child's view rules Task *task = push_array(scratch.arena, Task, 1); SLLQueuePush(first_task, last_task, task); task->parent_block = expansion_block; diff --git a/src/eval_visualization/eval_visualization_core.h b/src/eval_visualization/eval_visualization_core.h index b54b8849..5cf2fc8f 100644 --- a/src/eval_visualization/eval_visualization_core.h +++ b/src/eval_visualization/eval_visualization_core.h @@ -149,8 +149,8 @@ typedef EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_SIG(EV_ViewRuleExprExpandN typedef U32 EV_ViewRuleInfoFlags; // NOTE(rjf): see @view_rule_info enum { - EV_ViewRuleInfoFlag_Inherited = (1<<0), - EV_ViewRuleInfoFlag_Expandable = (1<<1), + EV_ViewRuleInfoFlag_Inherited = (1<<0), + EV_ViewRuleInfoFlag_Expandable = (1<<1), }; typedef struct EV_ViewRuleInfo EV_ViewRuleInfo; diff --git a/src/raddbg/generated/raddbg.meta.c b/src/raddbg/generated/raddbg.meta.c index 66fbe5f8..bd2b19cb 100644 --- a/src/raddbg/generated/raddbg.meta.c +++ b/src/raddbg/generated/raddbg.meta.c @@ -691,8 +691,8 @@ str8_lit_comp("machines"), str8_lit_comp("processes"), str8_lit_comp("threads"), str8_lit_comp("modules"), -str8_lit_comp("machine"), -str8_lit_comp("process"), +str8_lit_comp("scheduler_machine"), +str8_lit_comp("scheduler_process"), str8_lit_comp("locals"), str8_lit_comp("registers"), str8_lit_comp("globals"), @@ -757,8 +757,8 @@ EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(machines), EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(processes), EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(threads), EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(modules), -EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(machine), -EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(process), +EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(scheduler_machine), +EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(scheduler_process), EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(locals), EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(registers), EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(globals), @@ -779,8 +779,8 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(machines), EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(processes), EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(threads), EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(modules), -EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(machine), -EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(process), +EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(scheduler_machine), +EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(scheduler_process), EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(locals), EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(registers), EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(globals), @@ -801,8 +801,8 @@ EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(machines), EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(processes), EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(threads), EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(modules), -EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(machine), -EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(process), +EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(scheduler_machine), +EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(scheduler_process), EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(identity), EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(identity), EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(globals), @@ -823,8 +823,8 @@ EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(machines), EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(processes), EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(threads), EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(modules), -EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(machine), -EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(process), +EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(scheduler_machine), +EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(scheduler_process), EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(identity), EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(identity), EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(globals), diff --git a/src/raddbg/generated/raddbg.meta.h b/src/raddbg/generated/raddbg.meta.h index f07fcac8..8e0df9e3 100644 --- a/src/raddbg/generated/raddbg.meta.h +++ b/src/raddbg/generated/raddbg.meta.h @@ -661,8 +661,8 @@ EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(machines); EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(processes); EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(threads); EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(modules); -EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(machine); -EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(process); +EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(scheduler_machine); +EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(scheduler_process); EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(locals); EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(registers); EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(globals); @@ -679,8 +679,8 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(machines); EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(processes); EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(threads); EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(modules); -EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(machine); -EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(process); +EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(scheduler_machine); +EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(scheduler_process); EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(locals); EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(registers); EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(globals); @@ -697,8 +697,8 @@ EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(machines); EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(processes); EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(threads); EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(modules); -EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(machine); -EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(process); +EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(scheduler_machine); +EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(scheduler_process); EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(globals); EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(thread_locals); EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(types); @@ -713,8 +713,8 @@ EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(machines); EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(processes); EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(threads); EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(modules); -EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(machine); -EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(process); +EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(scheduler_machine); +EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(scheduler_process); EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(globals); EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(thread_locals); EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(types); diff --git a/src/raddbg/raddbg.mdesk b/src/raddbg/raddbg.mdesk index 4f33e6a1..bba85fe9 100644 --- a/src/raddbg/raddbg.mdesk +++ b/src/raddbg/raddbg.mdesk @@ -829,30 +829,30 @@ RD_IconTable: RD_CollectionTable: { //- rjf: frontend entity groups - {watches Watch Null x} - {targets Target Null x} - {breakpoints Breakpoint Null x} - {watch_pins WatchPin Null x} - {file_path_maps FilePathMap Null x} - {auto_view_rules AutoViewRule Null x} + {watches Watch Null x} + {targets Target Null x} + {breakpoints Breakpoint Null x} + {watch_pins WatchPin Null x} + {file_path_maps FilePathMap Null x} + {auto_view_rules AutoViewRule Null x} //- rjf: control entity groups - {machines Nil Machine x} - {processes Nil Process x} - {threads Nil Thread x} - {modules Nil Module x} + {machines Nil Machine x} + {processes Nil Process x} + {threads Nil Thread x} + {modules Nil Module x} - //- rjf: control entity hierarchies - {machine Nil Null x} - {process Nil Null x} + //- rjf: scheduling control entity hierarchies + {scheduler_machine Nil Null x} + {scheduler_process Nil Null x} //- rjf: debug info / architecture watch tables - {locals Nil Null -} - {registers Nil Null -} - {globals Nil Null x} - {thread_locals Nil Null x} - {types Nil Null x} - {procedures Nil Null x} + {locals Nil Null -} + {registers Nil Null -} + {globals Nil Null x} + {thread_locals Nil Null x} + {types Nil Null x} + {procedures Nil Null x} } @gen diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 450cd906..7cd60dad 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -8615,8 +8615,8 @@ EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(auto_view_rules){ return rd_ev //- rjf: control entity groups -EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(machines) { return rd_ev_view_rule_expr_expand_info__meta_ctrl_entities(arena, view, filter, expr, params, CTRL_EntityKind_Machine); } -EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(machines) { return rd_ev_view_rule_expr_expand_range_info__meta_ctrl_entities(arena, view, filter, expr, params, idx_range, user_data, CTRL_EntityKind_Machine); } +EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(machines) { return rd_ev_view_rule_expr_expand_info__meta_ctrl_entities(arena, view, str8_zero(), expr, params, CTRL_EntityKind_Machine); } +EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(machines) { return rd_ev_view_rule_expr_expand_range_info__meta_ctrl_entities(arena, view, str8_zero(), expr, params, idx_range, user_data, CTRL_EntityKind_Machine); } EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(machines) { return rd_ev_view_rule_expr_id_from_num__meta_ctrl_entities(num, user_data, CTRL_EntityKind_Machine); } EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(machines) { return rd_ev_view_rule_expr_num_from_id__meta_ctrl_entities(id, user_data, CTRL_EntityKind_Machine); } EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(processes) { return rd_ev_view_rule_expr_expand_info__meta_ctrl_entities(arena, view, filter, expr, params, CTRL_EntityKind_Process); } @@ -8634,7 +8634,7 @@ EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(modules) { return rd_ev_vie //- rjf: control entity hierarchies -EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(machine) +EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(scheduler_machine) { EV_ExpandInfo info = {0}; Temp scratch = scratch_begin(&arena, 1); @@ -8659,7 +8659,7 @@ EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(machine) return info; } -EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(machine) +EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(scheduler_machine) { EV_ExpandRangeInfo info = {0}; { @@ -8688,17 +8688,17 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(machine) return info; } -EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(machine) +EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(scheduler_machine) { return num; } -EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(machine) +EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(scheduler_machine) { return id; } -EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(process) +EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(scheduler_process) { EV_ExpandInfo info = {0}; Temp scratch = scratch_begin(&arena, 1); @@ -8711,7 +8711,39 @@ EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(process) { if(child->kind == CTRL_EntityKind_Thread) { - ctrl_entity_list_push(scratch.arena, &threads, child); + B32 is_in_filter = 1; + if(filter.size != 0) + { + is_in_filter = 0; + FuzzyMatchRangeList matches = fuzzy_match_find(scratch.arena, filter, child->string); + if(matches.count == matches.needle_part_count) + { + is_in_filter = 1; + } + else + { + DI_Scope *di_scope = di_scope_open(); + CTRL_Unwind unwind = d_query_cached_unwind_from_thread(child); + CTRL_CallStack call_stack = ctrl_call_stack_from_unwind(scratch.arena, di_scope, process, &unwind); + for(U64 idx = 0; idx < call_stack.concrete_frame_count && idx < 5; idx += 1) + { + CTRL_CallStackFrame *f = &call_stack.frames[idx]; + String8 name = {0}; + name.str = rdi_string_from_idx(f->rdi, f->procedure->name_string_idx, &name.size); + FuzzyMatchRangeList matches = fuzzy_match_find(scratch.arena, filter, name); + if(matches.count == matches.needle_part_count) + { + is_in_filter = 1; + break; + } + } + di_scope_close(di_scope); + } + } + if(is_in_filter) + { + ctrl_entity_list_push(scratch.arena, &threads, child); + } } } CTRL_EntityArray *threads_array = push_array(arena, CTRL_EntityArray, 1); @@ -8723,7 +8755,7 @@ EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(process) return info; } -EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(process) +EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(scheduler_process) { EV_ExpandRangeInfo info = {0}; { @@ -8752,12 +8784,12 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(process) return info; } -EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(process) +EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(scheduler_process) { return num; } -EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(process) +EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(scheduler_process) { return id; } @@ -8902,8 +8934,22 @@ rd_ev_view_rule_expr_expand_info__meta_entities(Arena *arena, EV_View *view, Str break; } } - FuzzyMatchRangeList matches = fuzzy_match_find(scratch.arena, filter, entity_expr_string); - if(is_collection || matches.count == matches.needle_part_count) + B32 is_in_filter = 1; + if(!is_collection && filter.size != 0) + { + RD_Entity *loc = rd_entity_child_from_kind(entity, RD_EntityKind_Location); + RD_Entity *exe = rd_entity_child_from_kind(entity, RD_EntityKind_Executable); + RD_Entity *args = rd_entity_child_from_kind(entity, RD_EntityKind_Arguments); + FuzzyMatchRangeList expr_matches = fuzzy_match_find(scratch.arena, filter, entity_expr_string); + FuzzyMatchRangeList loc_matches = fuzzy_match_find(scratch.arena, filter, loc->string); + FuzzyMatchRangeList exe_matches = fuzzy_match_find(scratch.arena, filter, exe->string); + FuzzyMatchRangeList args_matches = fuzzy_match_find(scratch.arena, filter, args->string); + is_in_filter = (expr_matches.count == expr_matches.needle_part_count || + loc_matches.count == loc_matches.needle_part_count || + exe_matches.count == exe_matches.needle_part_count || + args_matches.count == args_matches.needle_part_count); + } + if(is_collection || is_in_filter) { rd_entity_list_push(scratch.arena, &entities_filtered, entity); } @@ -9006,8 +9052,17 @@ rd_ev_view_rule_expr_expand_info__meta_ctrl_entities(Arena *arena, EV_View *view for(CTRL_EntityNode *n = entities.first; n != 0; n = n->next) { CTRL_Entity *entity = n->v; - FuzzyMatchRangeList matches = fuzzy_match_find(scratch.arena, filter, entity->string); - if(matches.count == matches.needle_part_count) + B32 is_in_filter = 1; + if(filter.size != 0) + { + is_in_filter = 0; + FuzzyMatchRangeList matches = fuzzy_match_find(scratch.arena, filter, entity->string); + if(matches.count == matches.needle_part_count) + { + is_in_filter = 1; + } + } + if(is_in_filter) { ctrl_entity_list_push(scratch.arena, &entities_filtered, entity); } @@ -11977,8 +12032,8 @@ rd_frame(void) EV_AutoViewRuleTable *auto_view_rule_table = push_array(scratch.arena, EV_AutoViewRuleTable, 1); { ev_auto_view_rule_table_push_new(scratch.arena, auto_view_rule_table, e_type_key_cons_base(type(CTRL_MetaEvalFrameArray)), str8_lit("slice"), 1); - ev_auto_view_rule_table_push_new(scratch.arena, auto_view_rule_table, e_type_key_cons_base(type(CTRL_MachineMetaEval)), str8_lit("machine"), 1); - ev_auto_view_rule_table_push_new(scratch.arena, auto_view_rule_table, e_type_key_cons_base(type(CTRL_ProcessMetaEval)), str8_lit("process"), 1); + ev_auto_view_rule_table_push_new(scratch.arena, auto_view_rule_table, e_type_key_cons_base(type(CTRL_MachineMetaEval)), str8_lit("scheduler_machine"), 1); + ev_auto_view_rule_table_push_new(scratch.arena, auto_view_rule_table, e_type_key_cons_base(type(CTRL_ProcessMetaEval)), str8_lit("scheduler_process"), 1); for EachElement(idx, rd_collection_name_table) { ev_auto_view_rule_table_push_new(scratch.arena, auto_view_rule_table, collection_type_keys[idx], rd_collection_name_table[idx], 1); diff --git a/src/raddbg/raddbg_main.c b/src/raddbg/raddbg_main.c index 94a53e3b..cdb4cf2c 100644 --- a/src/raddbg/raddbg_main.c +++ b/src/raddbg/raddbg_main.c @@ -6,9 +6,6 @@ // // [ ] remainder of @msgs pass: // [ ] entity listers - kill-specific-process, etc. -// [ ] new universal ctx menu, hover, tooltips systems -// [ ] `switch` replacement (recent files history) -// [ ] resolving name as file or #include // [ ] new `restart processes` path // [ ] remainder of @msgs // @@ -521,6 +518,9 @@ // given types, just query if no other view rule is present, & autofill // when editing) // [x] decay arrays to pointers in pointer/value comparison +// [x] new universal ctx menu, hover, tooltips systems +// [x] `switch` replacement (recent files history) +// [x] resolving name as file or #include //////////////////////////////// //~ rjf: Build Options diff --git a/src/raddbg/raddbg_views.c b/src/raddbg/raddbg_views.c index 08175594..9ab3b9f1 100644 --- a/src/raddbg/raddbg_views.c +++ b/src/raddbg/raddbg_views.c @@ -1540,7 +1540,6 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo (selection_tbl.min.y != 0 || selection_tbl.min.y != 0)) { Vec2S64 selection_dim = dim_2s64(selection_tbl); - ewv->text_editing = 1; arena_clear(ewv->text_edit_arena); ewv->text_edit_state_slots_count = u64_up_to_pow2(selection_dim.y+1); ewv->text_edit_state_slots_count = Max(ewv->text_edit_state_slots_count, 64); @@ -1550,23 +1549,29 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo EV_Row *row = rows.first; for(S64 y = selection_tbl.min.y; y <= selection_tbl.max.y; y += 1, row = row->next) { - for(S64 x = selection_tbl.min.x; x <= selection_tbl.max.x; x += 1) + RD_WatchViewRowInfo row_info = rd_watch_view_row_info_from_row(row); + RD_WatchViewRowKind row_kind = rd_watch_view_row_kind_from_flags_row_info(flags, row, &row_info); + if(row_kind == RD_WatchViewRowKind_Normal) { - RD_WatchViewColumn *col = rd_watch_view_column_from_x(ewv, x); - String8 string = rd_string_from_eval_viz_row_column(scratch.arena, eval_view, row, col, string_flags, default_radix, ui_top_font(), ui_top_font_size(), row_string_max_size_px); - string.size = Min(string.size, sizeof(ewv->dummy_text_edit_state.input_buffer)); - RD_WatchViewPoint pt = {x, row->block->key, row->key}; - U64 hash = ev_hash_from_key(pt.key); - U64 slot_idx = hash%ewv->text_edit_state_slots_count; - RD_WatchViewTextEditState *edit_state = push_array(ewv->text_edit_arena, RD_WatchViewTextEditState, 1); - SLLStackPush_N(ewv->text_edit_state_slots[slot_idx], edit_state, pt_hash_next); - edit_state->pt = pt; - edit_state->cursor = txt_pt(1, string.size+1); - edit_state->mark = txt_pt(1, 1); - edit_state->input_size = string.size; - MemoryCopy(edit_state->input_buffer, string.str, string.size); - edit_state->initial_size = string.size; - MemoryCopy(edit_state->initial_buffer, string.str, string.size); + ewv->text_editing = 1; + for(S64 x = selection_tbl.min.x; x <= selection_tbl.max.x; x += 1) + { + RD_WatchViewColumn *col = rd_watch_view_column_from_x(ewv, x); + String8 string = rd_string_from_eval_viz_row_column(scratch.arena, eval_view, row, col, string_flags, default_radix, ui_top_font(), ui_top_font_size(), row_string_max_size_px); + string.size = Min(string.size, sizeof(ewv->dummy_text_edit_state.input_buffer)); + RD_WatchViewPoint pt = {x, row->block->key, row->key}; + U64 hash = ev_hash_from_key(pt.key); + U64 slot_idx = hash%ewv->text_edit_state_slots_count; + RD_WatchViewTextEditState *edit_state = push_array(ewv->text_edit_arena, RD_WatchViewTextEditState, 1); + SLLStackPush_N(ewv->text_edit_state_slots[slot_idx], edit_state, pt_hash_next); + edit_state->pt = pt; + edit_state->cursor = txt_pt(1, string.size+1); + edit_state->mark = txt_pt(1, 1); + edit_state->input_size = string.size; + MemoryCopy(edit_state->input_buffer, string.str, string.size); + edit_state->initial_size = string.size; + MemoryCopy(edit_state->initial_buffer, string.str, string.size); + } } } } @@ -2601,6 +2606,8 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo { fstrs = rd_title_fstrs_from_ctrl_entity(scratch.arena, ctrl_entity, ui_top_palette()->text_weak, ui_top_font_size(), 1); } + String8 fstrs_string = dr_string_from_fancy_string_list(scratch.arena, &fstrs); + FuzzyMatchRangeList fstrs_matches = fuzzy_match_find(scratch.arena, filter, fstrs_string); UI_Key hover_t_key = ui_key_from_stringf(ui_key_zero(), "entity_hover_t_%p_%p", entity, ctrl_entity); F32 hover_t = ui_anim(hover_t_key, (F32)!!is_hovering, .rate = entity_hover_t_rate); if(!rd_entity_is_nil(entity)) @@ -2651,6 +2658,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo } UI_Box *title_box = ui_build_box_from_key(UI_BoxFlag_DrawText|UI_BoxFlag_DisableTruncatedHover, ui_key_zero()); ui_box_equip_display_fancy_strings(title_box, &fstrs); + ui_box_equip_fuzzy_match_ranges(title_box, &fstrs_matches); UI_Signal sig = ui_signal_from_box(entity_box); if(ui_hovering(sig)) {