mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-16 00:52:23 -07:00
further progress on cleaned up eval watch system; visual fixes/improvements in hover eval
This commit is contained in:
@@ -4526,6 +4526,7 @@ df_filtered_data_members_from_members_cfg_table(Arena *arena, E_MemberArray memb
|
||||
{
|
||||
MemoryCopyStruct(&filtered_members.v[idx], n->member);
|
||||
filtered_members.v[idx].name = push_str8_copy(arena, filtered_members.v[idx].name);
|
||||
filtered_members.v[idx].inheritance_key_chain = e_type_key_list_copy(arena, &filtered_members.v[idx].inheritance_key_chain);
|
||||
}
|
||||
}
|
||||
scratch_end(scratch);
|
||||
@@ -5235,7 +5236,7 @@ df_expr_string_from_viz_row(Arena *arena, DF_EvalVizRow *row)
|
||||
{
|
||||
result = push_str8f(arena, "[%S]", e_string_from_expr(arena, row->expr->last));
|
||||
}break;
|
||||
case E_ExprKind_LeafMember:
|
||||
case E_ExprKind_MemberAccess:
|
||||
{
|
||||
result = push_str8f(arena, ".%S", e_string_from_expr(arena, row->expr->last));
|
||||
}break;
|
||||
|
||||
+47
-25
@@ -6125,7 +6125,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
||||
UI_Focus((hover_eval_is_open && !ui_any_ctx_menu_is_open() && ws->hover_eval_focused && (!query_is_open || !ws->query_view_selected)) ? UI_FocusKind_Null : UI_FocusKind_Off)
|
||||
{
|
||||
//- rjf: eval -> viz artifacts
|
||||
F32 row_height = floor_f32(ui_top_font_size()*2.5f);
|
||||
F32 row_height = floor_f32(ui_top_font_size()*2.8f);
|
||||
DF_CfgTable cfg_table = {0};
|
||||
U64 expr_hash = df_hash_from_string(expr);
|
||||
DF_EvalViewKey eval_view_key = df_eval_view_key_from_stringf("eval_hover_%I64x", expr_hash);
|
||||
@@ -6169,12 +6169,28 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: calculate width
|
||||
F32 width_px = 40.f*ui_top_font_size();
|
||||
F32 expr_column_width_px = 10.f*ui_top_font_size();
|
||||
F32 value_column_width_px = 30.f*ui_top_font_size();
|
||||
if(viz_rows.first != 0)
|
||||
{
|
||||
DF_EvalVizRow *row = viz_rows.first;
|
||||
E_Eval row_eval = e_eval_from_expr(scratch.arena, row->expr);
|
||||
String8 row_expr_string = df_expr_string_from_viz_row(scratch.arena, row);
|
||||
String8 row_display_value = df_value_string_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, default_radix, ui_top_font(), ui_top_font_size(), 500.f, row_eval, row->cfg_table);
|
||||
expr_column_width_px = f_dim_from_tag_size_string(ui_top_font(), ui_top_font_size(), 0, 0, row_expr_string).x + ui_top_font_size()*2.5f;
|
||||
value_column_width_px = f_dim_from_tag_size_string(ui_top_font(), ui_top_font_size(), 0, 0, row_display_value).x + ui_top_font_size()*2.5f;
|
||||
F32 total_dim_px = (expr_column_width_px + value_column_width_px);
|
||||
width_px = Min(80.f*ui_top_font_size(), total_dim_px*1.5f);
|
||||
}
|
||||
|
||||
//- rjf: build hover eval box
|
||||
F32 hover_eval_container_height = ws->hover_eval_num_visible_rows_t;
|
||||
F32 corner_radius = ui_top_font_size()*0.25f;
|
||||
ui_set_next_fixed_x(ws->hover_eval_spawn_pos.x);
|
||||
ui_set_next_fixed_y(ws->hover_eval_spawn_pos.y);
|
||||
ui_set_next_pref_width(ui_em(80.f, 1.f));
|
||||
ui_set_next_pref_width(ui_px(width_px, 1.f));
|
||||
ui_set_next_pref_height(ui_px(hover_eval_container_height, 1.f));
|
||||
ui_set_next_corner_radius_00(0);
|
||||
ui_set_next_corner_radius_01(corner_radius);
|
||||
@@ -6204,8 +6220,6 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
||||
//- rjf: build contents
|
||||
UI_Parent(hover_eval_box) UI_PrefHeight(ui_px(row_height, 1.f))
|
||||
{
|
||||
F32 expr_column_width_px = 0;
|
||||
|
||||
//- rjf: build rows
|
||||
for(DF_EvalVizRow *row = viz_rows.first; row != 0; row = row->next)
|
||||
{
|
||||
@@ -6217,31 +6231,32 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
||||
B32 row_is_editable = df_type_key_is_editable(row_eval.type_key);
|
||||
B32 row_is_expandable = df_type_key_is_expandable(row_eval.type_key);
|
||||
|
||||
//- rjf: calculate width of exp row
|
||||
if(row == viz_rows.first)
|
||||
{
|
||||
expr_column_width_px = f_dim_from_tag_size_string(ui_top_font(), ui_top_font_size(), 0, ui_top_tab_size(), row_display_value).x + ui_top_font_size()*2.5f;
|
||||
expr_column_width_px = Max(expr_column_width_px, ui_top_font_size()*10.f);
|
||||
}
|
||||
|
||||
//- rjf: determine if row's data is fresh
|
||||
//- rjf: determine if row's data is fresh and/or bad
|
||||
B32 row_is_fresh = 0;
|
||||
B32 row_is_bad = 0;
|
||||
switch(row_eval.mode)
|
||||
{
|
||||
default:{}break;
|
||||
case E_Mode_Offset:
|
||||
if(row_eval.space >= E_Space_FIXED_COUNT)
|
||||
{
|
||||
// TODO(rjf): @spaces pick the right process from the eval's space
|
||||
U64 size = e_type_byte_size_from_key(row_eval.type_key);
|
||||
size = Min(size, 64);
|
||||
Rng1U64 vaddr_rng = r1u64(row_eval.value.u64, row_eval.value.u64+size);
|
||||
CTRL_ProcessMemorySlice slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, vaddr_rng, 0);
|
||||
for(U64 idx = 0; idx < (slice.data.size+63)/64; idx += 1)
|
||||
DF_Entity *space_entity = (DF_Entity *)row_eval.space;
|
||||
if(space_entity->kind == DF_EntityKind_Process)
|
||||
{
|
||||
if(slice.byte_changed_flags[idx] != 0)
|
||||
U64 size = e_type_byte_size_from_key(row_eval.type_key);
|
||||
size = Min(size, 64);
|
||||
Rng1U64 vaddr_rng = r1u64(row_eval.value.u64, row_eval.value.u64+size);
|
||||
CTRL_ProcessMemorySlice slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, space_entity->ctrl_machine_id, space_entity->ctrl_handle, vaddr_rng, 0);
|
||||
for(U64 idx = 0; idx < (slice.data.size+63)/64; idx += 1)
|
||||
{
|
||||
row_is_fresh = 1;
|
||||
break;
|
||||
if(slice.byte_changed_flags[idx] != 0)
|
||||
{
|
||||
row_is_fresh = 1;
|
||||
}
|
||||
if(slice.byte_bad_flags[idx] != 0)
|
||||
{
|
||||
row_is_bad = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}break;
|
||||
@@ -6251,11 +6266,18 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
||||
UI_WidthFill UI_Row
|
||||
{
|
||||
ui_spacer(ui_em(0.75f, 1.f));
|
||||
ui_spacer(ui_em(1.5f*row->depth, 1.f));
|
||||
if(row->depth > 0)
|
||||
{
|
||||
for(S32 indent = 0; indent < row->depth; indent += 1)
|
||||
{
|
||||
ui_spacer(ui_em(0.75f, 1.f));
|
||||
UI_Flags(UI_BoxFlag_DrawSideLeft) ui_spacer(ui_em(1.5f, 1.f));
|
||||
}
|
||||
}
|
||||
U64 row_hash = df_hash_from_expand_key(row->key);
|
||||
B32 row_is_expanded = df_expand_key_is_set(&eval_view->expand_tree_table, row->key);
|
||||
if(row_is_expandable)
|
||||
UI_PrefWidth(ui_em(1.5f, 1)) UI_Flags(UI_BoxFlag_DrawSideLeft*(row->depth>0))
|
||||
UI_PrefWidth(ui_em(1.5f, 1))
|
||||
if(ui_pressed(ui_expanderf(row_is_expanded, "###%I64x_%I64x_is_expanded", row->key.parent_hash, row->key.child_num)))
|
||||
{
|
||||
df_expand_set_expansion(eval_view->arena, &eval_view->expand_tree_table, row->parent_key, row->key, !row_is_expanded);
|
||||
@@ -6263,7 +6285,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
||||
if(!row_is_expandable)
|
||||
{
|
||||
UI_PrefWidth(ui_em(1.5f, 1))
|
||||
UI_Flags(UI_BoxFlag_DrawSideLeft*(row->depth>0) | UI_BoxFlag_DrawTextWeak)
|
||||
UI_Flags(UI_BoxFlag_DrawTextWeak)
|
||||
DF_Font(ws, DF_FontSlot_Icons)
|
||||
ui_label(df_g_icon_kind_text_table[DF_IconKind_Dot]);
|
||||
}
|
||||
@@ -8410,7 +8432,7 @@ df_append_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, U32
|
||||
if(!did_content && ptee_has_content && (flags & DF_EvalVizStringFlag_ReadOnlyDisplayRules))
|
||||
{
|
||||
did_content = 1;
|
||||
if(depth<4)
|
||||
if(depth < 4)
|
||||
{
|
||||
E_Expr *deref_expr = e_expr_ref_deref(scratch.arena, eval.expr);
|
||||
E_Eval deref_eval = e_eval_from_expr(scratch.arena, deref_expr);
|
||||
|
||||
@@ -28,11 +28,11 @@ DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(default)
|
||||
direct_type_kind == E_TypeKind_Class)))
|
||||
{
|
||||
// rjf: type -> filtered data members
|
||||
E_MemberArray data_members = e_type_data_members_from_key(scratch.arena, e_type_kind_is_pointer_or_ref(type_kind) ? direct_type_key : type_key);
|
||||
E_MemberArray data_members = e_type_data_members_from_key(arena, e_type_kind_is_pointer_or_ref(type_kind) ? direct_type_key : type_key);
|
||||
E_MemberArray filtered_data_members = df_filtered_data_members_from_members_cfg_table(arena, data_members, cfg_table);
|
||||
|
||||
// rjf: build blocks for all members, split by sub-expansions
|
||||
DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Members, key, df_expand_key_make(df_hash_from_expand_key(key), 0), depth+1);
|
||||
DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Members, key, df_expand_key_make(df_hash_from_expand_key(key), 0), depth);
|
||||
{
|
||||
last_vb->expr = expr;
|
||||
last_vb->cfg_table = cfg_table;
|
||||
@@ -66,7 +66,7 @@ DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(default)
|
||||
}
|
||||
|
||||
// rjf: recurse for child
|
||||
df_append_viz_blocks_for_parent__rec(arena, eval_view, key, child->key, str8_zero(), child_expr, child_cfg_table, depth+1, out);
|
||||
df_append_viz_blocks_for_parent__rec(arena, eval_view, key, child->key, str8_zero(), child_expr, child_cfg_table, depth, out);
|
||||
}
|
||||
df_eval_viz_block_end(out, last_vb);
|
||||
}
|
||||
@@ -80,7 +80,7 @@ DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(default)
|
||||
(e_type_kind_is_pointer_or_ref(type_kind) && direct_type_kind == E_TypeKind_Enum))
|
||||
{
|
||||
E_Type *type = e_type_from_key(arena, e_type_kind_is_pointer_or_ref(type_kind) ? direct_type_key : type_key);
|
||||
DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_EnumMembers, key, df_expand_key_make(df_hash_from_expand_key(key), 0), depth+1);
|
||||
DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_EnumMembers, key, df_expand_key_make(df_hash_from_expand_key(key), 0), depth);
|
||||
{
|
||||
last_vb->expr = expr;
|
||||
last_vb->cfg_table = cfg_table;
|
||||
@@ -102,7 +102,7 @@ DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(default)
|
||||
U64 array_count = array_type->count;
|
||||
|
||||
// rjf: build blocks for all elements, split by sub-expansions
|
||||
DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Elements, key, df_expand_key_make(df_hash_from_expand_key(key), 0), depth+1);
|
||||
DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Elements, key, df_expand_key_make(df_hash_from_expand_key(key), 0), depth);
|
||||
{
|
||||
last_vb->expr = expr;
|
||||
last_vb->cfg_table = cfg_table;
|
||||
@@ -135,7 +135,7 @@ DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(default)
|
||||
}
|
||||
|
||||
// rjf: recurse for child
|
||||
df_append_viz_blocks_for_parent__rec(arena, eval_view, key, child->key, str8_zero(), child_expr, child_cfg_table, depth+1, out);
|
||||
df_append_viz_blocks_for_parent__rec(arena, eval_view, key, child->key, str8_zero(), child_expr, child_cfg_table, depth, out);
|
||||
}
|
||||
df_eval_viz_block_end(out, last_vb);
|
||||
}
|
||||
@@ -162,7 +162,7 @@ DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(default)
|
||||
|
||||
// rjf: recurse for child
|
||||
E_Expr *child_expr = e_expr_ref_deref(arena, expr);
|
||||
df_append_viz_blocks_for_parent__rec(arena, eval_view, key, child_key, str8_zero(), child_expr, child_cfg_table, depth+1, out);
|
||||
df_append_viz_blocks_for_parent__rec(arena, eval_view, key, child_key, str8_zero(), child_expr, child_cfg_table, depth, out);
|
||||
}
|
||||
|
||||
scratch_end(scratch);
|
||||
|
||||
@@ -692,7 +692,7 @@ e_expr_ref_deref(Arena *arena, E_Expr *rhs)
|
||||
E_Expr *root = e_push_expr(arena, E_ExprKind_Deref, 0);
|
||||
E_Expr *rhs_ref = e_expr_ref(arena, rhs);
|
||||
e_expr_push_child(root, rhs_ref);
|
||||
return rhs_ref;
|
||||
return root;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
@@ -743,6 +743,9 @@ e_append_strings_from_expr(Arena *arena, E_Expr *expr, String8List *out)
|
||||
str8_list_pushf(arena, out, "\"%S\"", expr->string);
|
||||
}break;
|
||||
case E_ExprKind_LeafU64:
|
||||
{
|
||||
str8_list_pushf(arena, out, "%I64u", expr->u64);
|
||||
}break;
|
||||
case E_ExprKind_LeafID:
|
||||
{
|
||||
str8_list_pushf(arena, out, "0x%I64x", expr->u64);
|
||||
@@ -760,6 +763,10 @@ e_append_strings_from_expr(Arena *arena, E_Expr *expr, String8List *out)
|
||||
String8 type_string = e_type_string_from_key(arena, expr->type_key);
|
||||
str8_list_push(arena, out, type_string);
|
||||
}break;
|
||||
case E_ExprKind_Ref:
|
||||
{
|
||||
e_append_strings_from_expr(arena, expr->ref, out);
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user