more work on full scheduler view

This commit is contained in:
Ryan Fleury
2024-10-11 17:23:41 -07:00
parent 7724c7f7d3
commit 9aefc68177
2 changed files with 50 additions and 27 deletions
+8 -7
View File
@@ -1998,8 +1998,9 @@ rd_title_fstrs_from_ctrl_entity(Arena *arena, CTRL_Entity *entity, Vec4F32 secon
switch(entity->kind)
{
default:{}break;
case CTRL_EntityKind_Thread: {icon_kind = RD_IconKind_Thread; name_is_code = 1;}break;
case CTRL_EntityKind_Machine: {icon_kind = RD_IconKind_Machine;}break;
case CTRL_EntityKind_Process: {icon_kind = RD_IconKind_Threads;}break;
case CTRL_EntityKind_Thread: {icon_kind = RD_IconKind_Thread; name_is_code = 1;}break;
case CTRL_EntityKind_Module: {icon_kind = RD_IconKind_Module;}break;
}
@@ -8580,9 +8581,9 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(machine)
expr->space = rd_eval_space_from_ctrl_entity(process, RD_EvalSpaceKind_MetaCtrlEntity);
expr->mode = E_Mode_Offset;
expr->type_key = e_type_key_cons_base(type(CTRL_ProcessMetaEval));;
info.row_strings[idx] = process->string;
info.row_exprs[idx] = expr;
info.row_members[idx] = &e_member_nil;
info.row_strings[row_expr_idx] = process->string;
info.row_exprs[row_expr_idx] = expr;
info.row_members[row_expr_idx] = &e_member_nil;
}
}
}
@@ -8644,9 +8645,9 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(process)
expr->space = rd_eval_space_from_ctrl_entity(thread, RD_EvalSpaceKind_MetaCtrlEntity);
expr->mode = E_Mode_Offset;
expr->type_key = e_type_key_cons_base(type(CTRL_ThreadMetaEval));;
info.row_strings[idx] = thread->string;
info.row_exprs[idx] = expr;
info.row_members[idx] = &e_member_nil;
info.row_strings[row_expr_idx] = thread->string;
info.row_exprs[row_expr_idx] = expr;
info.row_members[row_expr_idx] = &e_member_nil;
}
}
}
+42 -20
View File
@@ -851,6 +851,9 @@ rd_watch_view_row_info_from_row(EV_Row *row)
E_IRTreeAndType irtree = e_irtree_and_type_from_expr(scratch.arena, block->expr);
E_Type *type = e_type_from_key(scratch.arena, irtree.type_key);
// rjf: evaluate row
E_Eval row_eval = e_eval_from_expr(scratch.arena, row->expr);
// rjf: determine collection entity kind, if any
RD_EntityKind collection_entity_kind = RD_EntityKind_Nil;
CTRL_EntityKind collection_ctrl_entity_kind = CTRL_EntityKind_Null;
@@ -864,14 +867,14 @@ rd_watch_view_row_info_from_row(EV_Row *row)
}
}
// rjf: extract collection entity, if any
// rjf: extract frontend entity, if any
RD_Entity *entity = &d_nil_entity;
if(collection_entity_kind != RD_EntityKind_Nil)
{
entity = rd_entity_from_id(key.child_id);
}
// rjf: extract collection
// rjf: extract control entity, if any
CTRL_Entity *ctrl_entity = &ctrl_entity_nil;
if(collection_ctrl_entity_kind != CTRL_EntityKind_Null && block->expand_view_rule_info_user_data != 0)
{
@@ -882,6 +885,10 @@ rd_watch_view_row_info_from_row(EV_Row *row)
ctrl_entity = accel->entities.v[block_relative_num-1];
}
}
else if(row_eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity)
{
ctrl_entity = rd_ctrl_entity_from_eval_space(row_eval.space);
}
// rjf: extract callstack thread, if any
CTRL_Entity *thread = &ctrl_entity_nil;
@@ -959,6 +966,9 @@ rd_watch_view_row_kind_from_flags_row_info(RD_WatchViewFlags flags, EV_Row *row,
ui_view_rule_params_root = &md_nil_node;
}
RD_WatchViewRowKind row_kind = RD_WatchViewRowKind_Normal;
E_Eval row_eval = e_eval_from_expr(scratch.arena, row->expr);
E_TypeKey row_type_key = row_eval.type_key;
E_TypeKind row_type_kind = e_type_kind_from_key(row_type_key);
if(ev_key_match(row->block->key, ev_key_root()))
{
row_kind = RD_WatchViewRowKind_Header;
@@ -967,11 +977,10 @@ rd_watch_view_row_kind_from_flags_row_info(RD_WatchViewFlags flags, EV_Row *row,
{
row_kind = RD_WatchViewRowKind_Canvas;
}
else if(flags & RD_WatchViewFlag_PrettyEntityRows && info->collection_entity_kind != RD_EntityKind_Nil)
{
row_kind = RD_WatchViewRowKind_PrettyEntityControls;
}
else if(flags & RD_WatchViewFlag_PrettyEntityRows && info->collection_ctrl_entity_kind != CTRL_EntityKind_Null)
else if(flags & RD_WatchViewFlag_PrettyEntityRows &&
((row_eval.value.u64 == 0 && row_type_kind == E_TypeKind_Struct) ||
info->collection_entity_kind != RD_EntityKind_Nil ||
info->collection_ctrl_entity_kind != CTRL_EntityKind_Null))
{
row_kind = RD_WatchViewRowKind_PrettyEntityControls;
}
@@ -1000,6 +1009,11 @@ rd_expr_from_watch_view_row_column(Arena *arena, EV_View *ev_view, EV_Row *row,
scratch_end(scratch);
}break;
}
if(col->view_rule_size != 0)
{
EV_ViewRuleList *view_rules = ev_view_rule_list_from_string(arena, str8(col->view_rule_buffer, col->view_rule_size));
expr = ev_resolved_from_expr(arena, expr, view_rules);
}
return expr;
}
@@ -1007,14 +1021,7 @@ internal String8
rd_string_from_eval_viz_row_column(Arena *arena, EV_View *ev, EV_Row *row, RD_WatchViewColumn *col, EV_StringFlags string_flags, U32 default_radix, FNT_Tag font, F32 font_size, F32 max_size_px)
{
String8 result = {0};
EV_ViewRuleList *view_rules = row->view_rules;
if(col->view_rule_size != 0)
{
view_rules = ev_view_rule_list_copy(arena, row->view_rules);
ev_view_rule_list_push_string(arena, view_rules, str8(col->view_rule_buffer, col->view_rule_size));
}
E_Expr *row_col_expr = rd_expr_from_watch_view_row_column(arena, ev, row, col);
row_col_expr = ev_resolved_from_expr(arena, row_col_expr, view_rules);
switch(col->kind)
{
default:{}break;
@@ -1025,6 +1032,12 @@ rd_string_from_eval_viz_row_column(Arena *arena, EV_View *ev, EV_Row *row, RD_Wa
case RD_WatchViewColumnKind_Value:
case RD_WatchViewColumnKind_Member:
{
EV_ViewRuleList *view_rules = row->view_rules;
if(col->view_rule_size != 0)
{
view_rules = ev_view_rule_list_copy(arena, row->view_rules);
ev_view_rule_list_push_string(arena, view_rules, str8(col->view_rule_buffer, col->view_rule_size));
}
E_Eval eval = e_eval_from_expr(arena, row_col_expr);
result = rd_value_string_from_eval(arena, string_flags, default_radix, font, font_size, max_size_px, eval, row->member, view_rules);
}break;
@@ -1253,8 +1266,10 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
{RD_EntityKind_Breakpoint, CTRL_EntityKind_Null, RD_CmdKind_EnableEntity },
{RD_EntityKind_Breakpoint, CTRL_EntityKind_Null, RD_CmdKind_RemoveEntity },
{RD_EntityKind_FilePathMap,CTRL_EntityKind_Null, RD_CmdKind_RemoveEntity },
{RD_EntityKind_Nil, CTRL_EntityKind_Thread, RD_CmdKind_FreezeThread },
{RD_EntityKind_Nil, CTRL_EntityKind_Thread, RD_CmdKind_SelectThread },
{RD_EntityKind_Nil, CTRL_EntityKind_Machine, RD_CmdKind_FreezeEntity },
{RD_EntityKind_Nil, CTRL_EntityKind_Process, RD_CmdKind_FreezeEntity },
{RD_EntityKind_Nil, CTRL_EntityKind_Thread, RD_CmdKind_SelectThread },
{RD_EntityKind_Nil, CTRL_EntityKind_Thread, RD_CmdKind_FreezeEntity },
};
RD_WatchViewRowCtrl *row_ctrls = row_ctrls_;
U64 row_ctrls_count = ArrayCount(row_ctrls_);
@@ -2498,6 +2513,13 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
palette = ui_build_palette(rd_palette_from_code(RD_PaletteCode_NeutralPopButton));
}
//- rjf: build indentation
for(U64 idx = 0; idx < row_depth; idx += 1)
{
ui_set_next_flags(UI_BoxFlag_DrawSideLeft);
ui_spacer(ui_em(1.f, 1.f));
}
//- rjf: build add-new buttons
if(rd_entity_is_nil(entity) && collection_entity_kind == RD_EntityKind_Target)
UI_Palette(palette)
@@ -2658,7 +2680,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
{
icon_kind = (ctrl_handle_match(ctrl_entity->handle, rd_base_regs()->thread) ? RD_IconKind_RadioFilled : RD_IconKind_RadioHollow);
}
if(ctrl->kind == RD_CmdKind_FreezeThread)
if(ctrl->kind == RD_CmdKind_FreezeEntity)
{
icon_kind = is_frozen ? RD_IconKind_Locked : RD_IconKind_Unlocked;
palette = rd_palette_from_code(is_frozen ? RD_PaletteCode_NegativePopButton : RD_PaletteCode_PositivePopButton);
@@ -2682,9 +2704,9 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
{
rd_cmd(RD_CmdKind_SelectThread, .thread = ctrl_entity->handle);
}
else if(ctrl->kind == RD_CmdKind_FreezeThread)
else if(ctrl->kind == RD_CmdKind_FreezeEntity)
{
rd_cmd(is_frozen ? RD_CmdKind_ThawThread : RD_CmdKind_FreezeThread,
rd_cmd(is_frozen ? RD_CmdKind_ThawEntity : RD_CmdKind_FreezeEntity,
.ctrl_entity = ctrl_entity->handle);
}
else
@@ -5490,7 +5512,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(scheduler)
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Value, 0.75f, .dequote_string = 1);
}
rd_watch_view_build(wv, RD_WatchViewFlag_NoHeader|RD_WatchViewFlag_PrettyNameMembers|RD_WatchViewFlag_PrettyEntityRows|RD_WatchViewFlag_DisableCacheLines,
str8_lit("threads"), str8_lit("only: label str id callstack v count vaddr inline_depth"), 0, 10, rect);
str8_lit("machines"), str8_lit("only: label str id callstack v count vaddr inline_depth"), 0, 10, rect);
ProfEnd();
}