begin sketching out watch-window-driven scheduler replacement

This commit is contained in:
Ryan Fleury
2024-09-23 17:41:26 -07:00
parent 5690a9e19b
commit 629ddec458
2 changed files with 49 additions and 1 deletions
@@ -478,6 +478,7 @@ ev_view_rule_list_copy(Arena *arena, EV_ViewRuleList *src)
internal E_Expr *
ev_expr_from_expr_view_rules(Arena *arena, E_Expr *expr, EV_ViewRuleList *view_rules)
{
ProfBeginFunction();
for(EV_ViewRuleNode *n = view_rules->first; n != 0; n = n->next)
{
EV_ViewRuleInfo *info = ev_view_rule_info_from_string(n->v.root->string);
@@ -486,6 +487,7 @@ ev_expr_from_expr_view_rules(Arena *arena, E_Expr *expr, EV_ViewRuleList *view_r
expr = info->expr_resolution(arena, expr, n->v.root);
}
}
ProfEnd();
return expr;
}
+47 -1
View File
@@ -2467,7 +2467,32 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
}break;
case RD_EvalSpaceKind_MetaCtrlEntity:
{
CTRL_Entity *entity = rd_ctrl_entity_from_eval_space(row_eval.space);
UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable|UI_BoxFlag_DrawHotEffects|UI_BoxFlag_DrawActiveEffects, "###entity_%p", entity);
UI_Parent(box) UI_Focus(UI_FocusKind_Null)
{
if(entity->kind == CTRL_EntityKind_Thread) UI_PrefWidth(ui_em(3.f, 1.f))
{
rd_icon_buttonf(RD_IconKind_Locked, 0, "###freeze");
}
if(row_is_expandable) UI_PrefWidth(ui_em(2.f, 1.f))
{
if(ui_pressed(ui_expanderf(next_row_expanded, "###expand_%p", entity)))
{
next_row_expanded ^= 1;
}
}
DR_FancyStringList fstrs = rd_title_fstrs_from_ctrl_entity(scratch.arena, entity, rd_rgba_from_theme_color(RD_ThemeColor_TextWeak), ui_top_font_size());
UI_Box *label = ui_build_box_from_key(UI_BoxFlag_DrawText, ui_key_zero());
ui_box_equip_display_fancy_strings(label, &fstrs);
}
UI_Signal sig = ui_signal_from_box(box);
if(ui_pressed(sig))
{
RD_WatchViewPoint cell_pt = {0, row->parent_key, row->key};
ewv->next_cursor = ewv->next_mark = cell_pt;
pressed = 1;
}
}break;
}
}
@@ -5643,6 +5668,26 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(watch_pins)
////////////////////////////////
//~ rjf: scheduler @view_hook_impl
RD_VIEW_RULE_UI_FUNCTION_DEF(scheduler)
{
ProfBeginFunction();
RD_WatchViewState *wv = rd_view_state(RD_WatchViewState);
if(!wv->initialized)
{
rd_watch_view_init(wv);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Expr, 0.30f, .display_string = str8_lit("Expression"));
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Value, 0.70f, .display_string = str8_lit("Value"));
}
rd_watch_view_build(wv,
RD_WatchViewFlag_NoHeader|
RD_WatchViewFlag_RootButtons|
RD_WatchViewFlag_PrettyNameMembers,
str8_lit("threads"),
str8_lit("only:label str id frozen callstack v count"), 0, 10, rect);
ProfEnd();
}
#if 0
RD_VIEW_RULE_UI_FUNCTION_DEF(scheduler)
{
ProfBeginFunction();
@@ -5863,6 +5908,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(scheduler)
scratch_end(scratch);
ProfEnd();
}
#endif
////////////////////////////////
//~ rjf: call_stack @view_hook_impl