From f59694fcfbbe6e14e4eef71ef0b2069471753cf8 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Wed, 11 Sep 2024 15:40:11 -0700 Subject: [PATCH] float cfg from engine -> frontend; more elimination of dead code in engine --- src/dbg_engine/dbg_engine_core.c | 32 +----- src/dbg_engine/dbg_engine_core.h | 90 +-------------- src/dbg_frontend/dbg_frontend_core.c | 140 ++++++++++++++---------- src/dbg_frontend/dbg_frontend_core.h | 16 +++ src/dbg_frontend/dbg_frontend_views.c | 4 +- src/dbg_frontend/dbg_frontend_widgets.c | 6 +- 6 files changed, 108 insertions(+), 180 deletions(-) diff --git a/src/dbg_engine/dbg_engine_core.c b/src/dbg_engine/dbg_engine_core.c index d7c47a1c..49dfc66a 100644 --- a/src/dbg_engine/dbg_engine_core.c +++ b/src/dbg_engine/dbg_engine_core.c @@ -3396,12 +3396,6 @@ d_eval_string_from_file_path(Arena *arena, String8 string) //- rjf: frame data -internal F32 -d_dt(void) -{ - return d_state->dt; -} - internal U64 d_frame_index(void) { @@ -3414,12 +3408,6 @@ d_frame_arena(void) return d_state->frame_arenas[d_state->frame_index%ArrayCount(d_state->frame_arenas)]; } -internal F64 -d_time_in_seconds(void) -{ - return d_state->time_in_seconds; -} - //- rjf: interaction registers internal D_Regs * @@ -3478,22 +3466,6 @@ d_ctrl_targets_running(void) return d_state->ctrl_is_running; } -//- rjf: config paths - -internal String8 -d_cfg_path_from_src(D_CfgSrc src) -{ - return d_state->cfg_paths[src]; -} - -//- rjf: config state - -internal D_CfgTable * -d_cfg_table(void) -{ - return &d_state->cfg_table; -} - //- rjf: config serialization internal String8 @@ -4156,7 +4128,7 @@ d_init(void) } internal CTRL_EventList -d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_Scope *di_scope, F32 dt) +d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints) { ProfBeginFunction(); Temp scratch = scratch_begin(&arena, 1); @@ -4164,8 +4136,6 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ d_state->frame_index += 1; arena_clear(d_frame_arena()); d_state->frame_eval_memread_endt_us = os_now_microseconds() + 5000; - d_state->dt = dt; - d_state->time_in_seconds += dt; d_state->top_regs = &d_state->base_regs; d_regs_copy_contents(d_frame_arena(), &d_state->top_regs->v, &d_state->top_regs->v); diff --git a/src/dbg_engine/dbg_engine_core.h b/src/dbg_engine/dbg_engine_core.h index e32f2ef6..af763b07 100644 --- a/src/dbg_engine/dbg_engine_core.h +++ b/src/dbg_engine/dbg_engine_core.h @@ -101,45 +101,6 @@ struct D_LineListArray DI_KeyList dbgi_keys; }; -//////////////////////////////// -//~ rjf: Sparse Tree Expansion State Data Structure - -typedef struct D_ExpandKey D_ExpandKey; -struct D_ExpandKey -{ - U64 parent_hash; - U64 child_num; -}; - -typedef struct D_ExpandNode D_ExpandNode; -struct D_ExpandNode -{ - D_ExpandNode *hash_next; - D_ExpandNode *hash_prev; - D_ExpandNode *first; - D_ExpandNode *last; - D_ExpandNode *next; - D_ExpandNode *prev; - D_ExpandNode *parent; - D_ExpandKey key; - B32 expanded; -}; - -typedef struct D_ExpandSlot D_ExpandSlot; -struct D_ExpandSlot -{ - D_ExpandNode *first; - D_ExpandNode *last; -}; - -typedef struct D_ExpandTreeTable D_ExpandTreeTable; -struct D_ExpandTreeTable -{ - D_ExpandSlot *slots; - U64 slots_count; - D_ExpandNode *free_node; -}; - //////////////////////////////// //~ rjf: Entity Kind Flags @@ -190,33 +151,6 @@ typedef enum D_RunKind } D_RunKind; -//////////////////////////////// -//~ rjf: View Rule Hook Types - -typedef struct D_CfgTree D_CfgTree; -typedef struct D_CfgVal D_CfgVal; -typedef struct D_CfgTable D_CfgTable; -typedef struct D_EvalView D_EvalView; -typedef struct D_EvalVizBlockList D_EvalVizBlockList; -#define D_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_SIG(name) E_Expr *name(Arena *arena, E_Expr *expr, MD_Node *params) -#define D_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(name) d_core_view_rule_expr_resolution__##name -#define D_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(name) internal D_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_SIG(D_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(name)) -#define D_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_SIG(name) void name(Arena *arena, \ -D_EvalView *eval_view, \ -D_ExpandKey parent_key, \ -D_ExpandKey key, \ -D_ExpandNode *expand_node, \ -String8 string, \ -E_Expr *expr, \ -D_CfgTable *cfg_table, \ -S32 depth, \ -MD_Node *params, \ -struct D_EvalVizBlockList *out) -#define D_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(name) d_core_view_rule_viz_block_prod__##name -#define D_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(name) internal D_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_SIG(D_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(name)) -typedef D_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_SIG(D_CoreViewRuleExprResolutionHookFunctionType); -typedef D_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_SIG(D_CoreViewRuleVizBlockProdHookFunctionType); - //////////////////////////////// //~ rjf: Generated Code @@ -699,8 +633,6 @@ struct D_State Arena *arena; U64 frame_index; U64 frame_eval_memread_endt_us; - F64 time_in_seconds; - F32 dt; // rjf: frame info Arena *frame_arenas[2]; @@ -755,7 +687,7 @@ struct D_State U64 view_rule_spec_table_size; D_ViewRuleSpec **view_rule_spec_table; - // rjf: control thread user -> ctrl driving state + // rjf: user -> ctrl driving state Arena *ctrl_last_run_arena; D_RunKind ctrl_last_run_kind; U64 ctrl_last_run_frame_idx; @@ -769,17 +701,10 @@ struct D_State Arena *ctrl_msg_arena; CTRL_MsgList ctrl_msgs; - // rjf: control thread ctrl -> user reading state + // rjf: ctrl -> user reading state CTRL_EntityStore *ctrl_entity_store; Arena *ctrl_stop_arena; CTRL_Event ctrl_last_stop_event; - - // rjf: config reading state - Arena *cfg_path_arenas[D_CfgSrc_COUNT]; - String8 cfg_paths[D_CfgSrc_COUNT]; - U64 cfg_cached_timestamp[D_CfgSrc_COUNT]; - Arena *cfg_arena; - D_CfgTable cfg_table; }; //////////////////////////////// @@ -789,7 +714,6 @@ read_only global D_CmdSpec d_nil_cmd_spec = {0}; read_only global D_ViewRuleSpec d_nil_core_view_rule_spec = {0}; read_only global D_CfgTree d_nil_cfg_tree = {&d_nil_cfg_tree, D_CfgSrc_User, &md_nil_node}; read_only global D_CfgVal d_nil_cfg_val = {&d_nil_cfg_val, &d_nil_cfg_val, &d_nil_cfg_tree, &d_nil_cfg_tree}; -read_only global D_CfgTable d_nil_cfg_table = {0, 0, 0, &d_nil_cfg_val, &d_nil_cfg_val}; read_only global D_Entity d_nil_entity = { &d_nil_entity, @@ -1084,10 +1008,8 @@ internal String8 d_eval_string_from_file_path(Arena *arena, String8 string); //~ rjf: Main State Accessors/Mutators //- rjf: frame data -internal F32 d_dt(void); internal U64 d_frame_index(void); internal Arena *d_frame_arena(void); -internal F64 d_time_in_seconds(void); //- rjf: registers internal D_Regs *d_regs(void); @@ -1101,12 +1023,6 @@ internal D_RunKind d_ctrl_last_run_kind(void); internal U64 d_ctrl_last_run_frame_idx(void); internal B32 d_ctrl_targets_running(void); -//- rjf: config paths -internal String8 d_cfg_path_from_src(D_CfgSrc src); - -//- rjf: config state -internal D_CfgTable *d_cfg_table(void); - //- rjf: config serialization internal String8 d_cfg_escaped_from_raw_string(Arena *arena, String8 string); internal String8 d_cfg_raw_from_escaped_string(Arena *arena, String8 string); @@ -1148,6 +1064,6 @@ internal B32 d_next_cmd(D_Cmd **cmd); //~ rjf: Main Layer Top-Level Calls internal void d_init(void); -internal CTRL_EventList d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_Scope *di_scope, F32 dt); +internal CTRL_EventList d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints); #endif // DBG_ENGINE_CORE_H diff --git a/src/dbg_frontend/dbg_frontend_core.c b/src/dbg_frontend/dbg_frontend_core.c index 9e3ce9d3..ea5f97c2 100644 --- a/src/dbg_frontend/dbg_frontend_core.c +++ b/src/dbg_frontend/dbg_frontend_core.c @@ -52,7 +52,7 @@ df_view_is_project_filtered(DF_View *view) String8 view_project = view->project_path; if(view_project.size != 0) { - String8 current_project = d_cfg_path_from_src(D_CfgSrc_Project); + String8 current_project = df_cfg_path_from_src(D_CfgSrc_Project); result = !path_match_normalized(view_project, current_project); } return result; @@ -819,7 +819,7 @@ df_view_equip_spec(DF_View *view, DF_ViewSpec *spec, String8 query, MD_Node *par if(spec->info.flags & DF_ViewSpecFlag_ProjectSpecific) { arena_clear(view->project_path_arena); - view->project_path = push_str8_copy(view->project_path_arena, d_cfg_path_from_src(D_CfgSrc_Project)); + view->project_path = push_str8_copy(view->project_path_arena, df_cfg_path_from_src(D_CfgSrc_Project)); } else { @@ -941,7 +941,7 @@ df_transient_view_node_from_ev_key(DF_View *owner_view, EV_Key key) if(ev_key_match(n->key, key)) { node = n; - n->last_frame_index_touched = d_frame_index(); + n->last_frame_index_touched = df_state->frame_index; break; } } @@ -957,7 +957,7 @@ df_transient_view_node_from_ev_key(DF_View *owner_view, EV_Key key) node->key = key; node->view = df_view_alloc(); node->initial_params_arena = arena_alloc(); - node->first_frame_index_touched = node->last_frame_index_touched = d_frame_index(); + node->first_frame_index_touched = node->last_frame_index_touched = df_state->frame_index; DLLPushBack_NPZ(&df_nil_view, owner_view->first_transient, owner_view->last_transient, node->view, order_next, order_prev); } return node; @@ -1139,7 +1139,7 @@ df_window_frame(DF_Window *ws) B32 hover_eval_is_open = (!confirm_open && ws->hover_eval_string.size != 0 && ws->hover_eval_first_frame_idx+20 < ws->hover_eval_last_frame_idx && - d_frame_index()-ws->hover_eval_last_frame_idx < 20); + df_state->frame_index-ws->hover_eval_last_frame_idx < 20); if(!window_is_focused || confirm_open) { ws->menu_bar_key_held = 0; @@ -1371,7 +1371,7 @@ df_window_frame(DF_Window *ws) } // rjf: begin & push initial stack values - ui_begin_build(ws->os, &ws->ui_events, &icon_info, &widget_palette_info, &animation_info, d_dt(), d_dt()); + ui_begin_build(ws->os, &ws->ui_events, &icon_info, &widget_palette_info, &animation_info, df_state->frame_dt, df_state->frame_dt); ui_push_font(main_font); ui_push_font_size(main_font_size); ui_push_text_padding(main_font_size*0.3f); @@ -1553,7 +1553,7 @@ df_window_frame(DF_Window *ws) } avg_ui_hash_chain_length = chain_length_sum / chain_count; } - ui_labelf("Target Hz: %.2f", 1.f/d_dt()); + ui_labelf("Target Hz: %.2f", 1.f/df_state->frame_dt); ui_labelf("Ctrl Run Index: %I64u", ctrl_run_gen()); ui_labelf("Ctrl Mem Gen Index: %I64u", ctrl_mem_gen()); ui_labelf("Window %p", window); @@ -2366,7 +2366,7 @@ df_window_frame(DF_Window *ws) //- rjf: build auto-complete lister // ProfScope("build autocomplete lister") - if(!ws->autocomp_force_closed && !ui_key_match(ws->autocomp_root_key, ui_key_zero()) && ws->autocomp_last_frame_idx+1 >= d_frame_index()) + if(!ws->autocomp_force_closed && !ui_key_match(ws->autocomp_root_key, ui_key_zero()) && ws->autocomp_last_frame_idx+1 >= df_state->frame_index) { String8 query = str8(ws->autocomp_lister_query_buffer, ws->autocomp_lister_query_size); UI_Box *autocomp_root_box = ui_box_from_key(ws->autocomp_root_key); @@ -2569,7 +2569,7 @@ df_window_frame(DF_Window *ws) { // rjf: animate target # of rows { - F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? (1 - pow_f32(2, (-60.f * d_dt()))) : 1.f; + F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? (1 - pow_f32(2, (-60.f * df_state->frame_dt))) : 1.f; F32 target = Min((F32)item_array.count, 16.f); if(abs_f32(target - ws->autocomp_num_visible_rows_t) > 0.01f) { @@ -2584,7 +2584,7 @@ df_window_frame(DF_Window *ws) // rjf: animate open { - F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * d_dt())) : 1.f; + F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * df_state->frame_dt)) : 1.f; F32 diff = 1.f-ws->autocomp_open_t; ws->autocomp_open_t += diff*rate; if(abs_f32(diff) < 0.05f) @@ -3139,7 +3139,7 @@ df_window_frame(DF_Window *ws) D_EntityList processes = d_query_cached_entity_list_with_kind(D_EntityKind_Process); B32 have_targets = targets.count != 0; B32 can_send_signal = !d_ctrl_targets_running(); - B32 can_play = (have_targets && (can_send_signal || d_ctrl_last_run_frame_idx()+4 > d_frame_index())); + B32 can_play = (have_targets && (can_send_signal || d_ctrl_last_run_frame_idx()+4 > df_state->frame_index)); B32 can_pause = (!can_send_signal); B32 can_stop = (processes.count != 0); B32 can_step = (processes.count != 0 && can_send_signal); @@ -3396,7 +3396,7 @@ df_window_frame(DF_Window *ws) os_window_push_custom_title_bar_client_area(ws->os, user_box->rect); UI_Parent(user_box) UI_PrefWidth(ui_text_dim(10, 0)) UI_TextAlignment(UI_TextAlign_Center) { - String8 user_path = d_cfg_path_from_src(D_CfgSrc_User); + String8 user_path = df_cfg_path_from_src(D_CfgSrc_User); user_path = str8_chop_last_dot(user_path); DF_Font(DF_FontSlot_Icons) UI_TextRasterFlags(df_raster_flags_from_slot(DF_FontSlot_Icons)) @@ -3430,7 +3430,7 @@ df_window_frame(DF_Window *ws) os_window_push_custom_title_bar_client_area(ws->os, prof_box->rect); UI_Parent(prof_box) UI_PrefWidth(ui_text_dim(10, 0)) UI_TextAlignment(UI_TextAlign_Center) { - String8 prof_path = d_cfg_path_from_src(D_CfgSrc_Project); + String8 prof_path = df_cfg_path_from_src(D_CfgSrc_Project); prof_path = str8_chop_last_dot(prof_path); DF_Font(DF_FontSlot_Icons) ui_label(df_g_icon_kind_text_table[DF_IconKind_Briefcase]); @@ -3490,7 +3490,7 @@ df_window_frame(DF_Window *ws) // ProfScope("build bottom bar") { - B32 is_running = d_ctrl_targets_running() && d_ctrl_last_run_frame_idx() < d_frame_index(); + B32 is_running = d_ctrl_targets_running() && d_ctrl_last_run_frame_idx() < df_state->frame_index; CTRL_Event stop_event = d_ctrl_last_stop_event(); UI_Palette *positive_scheme = df_palette_from_code(DF_PaletteCode_PositivePopButton); UI_Palette *running_scheme = df_palette_from_code(DF_PaletteCode_NeutralPopButton); @@ -3535,7 +3535,7 @@ df_window_frame(DF_Window *ws) // rjf: developer frame-time indicator if(DEV_updating_indicator) { - F32 animation_t = pow_f32(sin_f32(d_time_in_seconds()/2.f), 2.f); + F32 animation_t = pow_f32(sin_f32(df_state->time_in_seconds/2.f), 2.f); ui_spacer(ui_em(0.3f, 1.f)); ui_spacer(ui_em(1.5f*animation_t, 1.f)); UI_PrefWidth(ui_text_dim(10, 1)) ui_labelf("*"); @@ -3588,7 +3588,7 @@ df_window_frame(DF_Window *ws) // rjf: error visualization else if(ws->error_t >= 0.01f) { - ws->error_t -= d_dt()/8.f; + ws->error_t -= df_state->frame_dt/8.f; df_request_frame(); String8 error_string = str8(ws->error_buffer, ws->error_string_size); if(error_string.size != 0) @@ -3666,7 +3666,7 @@ df_window_frame(DF_Window *ws) //- rjf: animate query info // { - F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * d_dt())) : 1.f; + F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * df_state->frame_dt)) : 1.f; // rjf: animate query view selection transition { @@ -3878,7 +3878,7 @@ df_window_frame(DF_Window *ws) abs_f32(view->scroll_pos.y.off) > 0.01f)) { build_hover_eval = 0; - ws->hover_eval_first_frame_idx = d_frame_index(); + ws->hover_eval_first_frame_idx = df_state->frame_index; } } } @@ -3891,7 +3891,7 @@ df_window_frame(DF_Window *ws) } // rjf: reset animation, but request frames if we're waiting to open - if(ws->hover_eval_string.size != 0 && !hover_eval_is_open && ws->hover_eval_last_frame_idx < ws->hover_eval_first_frame_idx+20 && d_frame_index()-ws->hover_eval_last_frame_idx < 50) + if(ws->hover_eval_string.size != 0 && !hover_eval_is_open && ws->hover_eval_last_frame_idx < ws->hover_eval_first_frame_idx+20 && df_state->frame_index-ws->hover_eval_last_frame_idx < 50) { df_request_frame(); ws->hover_eval_num_visible_rows_t = 0; @@ -3940,7 +3940,7 @@ df_window_frame(DF_Window *ws) { // rjf: animate height { - F32 fish_rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * d_dt())) : 1.f; + F32 fish_rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * df_state->frame_dt)) : 1.f; F32 hover_eval_container_height_target = row_height * Min(30, viz_blocks.total_visual_row_count); ws->hover_eval_num_visible_rows_t += (hover_eval_container_height_target - ws->hover_eval_num_visible_rows_t) * fish_rate; if(abs_f32(hover_eval_container_height_target - ws->hover_eval_num_visible_rows_t) > 0.5f) @@ -3955,7 +3955,7 @@ df_window_frame(DF_Window *ws) // rjf: animate open { - F32 fish_rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * d_dt())) : 1.f; + F32 fish_rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * df_state->frame_dt)) : 1.f; F32 diff = 1.f - ws->hover_eval_open_t; ws->hover_eval_open_t += diff*fish_rate; if(abs_f32(diff) < 0.01f) @@ -4181,9 +4181,9 @@ df_window_frame(DF_Window *ws) UI_Signal hover_eval_sig = ui_signal_from_box(hover_eval_box); if(ui_mouse_over(hover_eval_sig)) { - ws->hover_eval_last_frame_idx = d_frame_index(); + ws->hover_eval_last_frame_idx = df_state->frame_index; } - else if(ws->hover_eval_last_frame_idx+2 < d_frame_index()) + else if(ws->hover_eval_last_frame_idx+2 < df_state->frame_index) { df_request_frame(); } @@ -4483,7 +4483,7 @@ df_window_frame(DF_Window *ws) //- rjf: animate panels // { - F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-50.f * d_dt())) : 1.f; + F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-50.f * df_state->frame_dt)) : 1.f; Vec2F32 content_rect_dim = dim_2f32(content_rect); for(DF_Panel *panel = ws->root_panel; !df_panel_is_nil(panel); panel = df_panel_rec_df_pre(panel).next) { @@ -5331,8 +5331,8 @@ df_window_frame(DF_Window *ws) Task start_task = {0, &df_nil_panel, ws->query_view_stack_top}; Task *first_task = &start_task; Task *last_task = first_task; - F32 rate = 1 - pow_f32(2, (-10.f * d_dt())); - F32 fast_rate = 1 - pow_f32(2, (-40.f * d_dt())); + F32 rate = 1 - pow_f32(2, (-10.f * df_state->frame_dt)); + F32 fast_rate = 1 - pow_f32(2, (-40.f * df_state->frame_dt)); for(DF_Panel *panel = ws->root_panel; !df_panel_is_nil(panel); panel = df_panel_rec_df_pre(panel).next) @@ -5457,7 +5457,7 @@ df_window_frame(DF_Window *ws) ////////////////////////////// //- rjf: attach autocomp box to root, or hide if it has not been renewed // - if(!ui_box_is_nil(autocomp_box) && ws->autocomp_last_frame_idx+1 >= d_frame_index()+1) + if(!ui_box_is_nil(autocomp_box) && ws->autocomp_last_frame_idx+1 >= df_state->frame_index+1) { UI_Box *autocomp_root_box = ui_box_from_key(ws->autocomp_root_key); if(!ui_box_is_nil(autocomp_root_box)) @@ -5475,7 +5475,7 @@ df_window_frame(DF_Window *ws) } } } - else if(!ui_box_is_nil(autocomp_box) && ws->autocomp_last_frame_idx+1 < d_frame_index()+1) + else if(!ui_box_is_nil(autocomp_box) && ws->autocomp_last_frame_idx+1 < df_state->frame_index+1) { UI_Box *autocomp_root_box = ui_box_from_key(ws->autocomp_root_key); if(!ui_box_is_nil(autocomp_root_box)) @@ -5948,7 +5948,7 @@ df_window_frame(DF_Window *ws) dr_fancy_string_list_push(scratch.arena, &strs, &str3); DR_FancyRunList runs = dr_fancy_run_list_from_fancy_string_list(scratch.arena, 0, 0, &strs); FNT_Run trailer_run = fnt_push_run_from_string(scratch.arena, df_font_from_slot(DF_FontSlot_Main), 16.f, 0, 0, 0, str8_lit("...")); - F32 limit = 500.f + sin_f32(d_time_in_seconds()/10.f)*200.f; + F32 limit = 500.f + sin_f32(df_state->time_in_seconds/10.f)*200.f; dr_truncated_fancy_run_list(p, &runs, limit, trailer_run); dr_rect(r2f32p(p.x+limit, 0, p.x+limit+2.f, 1000), v4f32(1, 0, 0, 1), 0, 0, 0); df_request_frame(); @@ -6360,7 +6360,7 @@ internal void df_set_hover_eval(Vec2F32 pos, String8 file_path, TxtPt pt, U64 vaddr, String8 string) { DF_Window *window = df_window_from_handle(d_regs()->window); - if(window->hover_eval_last_frame_idx+1 < d_frame_index() && + if(window->hover_eval_last_frame_idx+1 < df_state->frame_index && ui_key_match(ui_active_key(UI_MouseButtonKind_Left), ui_key_zero()) && ui_key_match(ui_active_key(UI_MouseButtonKind_Middle), ui_key_zero()) && ui_key_match(ui_active_key(UI_MouseButtonKind_Right), ui_key_zero())) @@ -6368,7 +6368,7 @@ df_set_hover_eval(Vec2F32 pos, String8 file_path, TxtPt pt, U64 vaddr, String8 s B32 is_new_string = !str8_match(window->hover_eval_string, string, 0); if(is_new_string) { - window->hover_eval_first_frame_idx = window->hover_eval_last_frame_idx = d_frame_index(); + window->hover_eval_first_frame_idx = window->hover_eval_last_frame_idx = df_state->frame_index; arena_clear(window->hover_eval_arena); window->hover_eval_string = push_str8_copy(window->hover_eval_arena, string); window->hover_eval_file_path = push_str8_copy(window->hover_eval_arena, file_path); @@ -6377,7 +6377,7 @@ df_set_hover_eval(Vec2F32 pos, String8 file_path, TxtPt pt, U64 vaddr, String8 s window->hover_eval_focused = 0; } window->hover_eval_spawn_pos = pos; - window->hover_eval_last_frame_idx = d_frame_index(); + window->hover_eval_last_frame_idx = df_state->frame_index; } } @@ -6619,7 +6619,7 @@ df_set_autocomp_lister_query(UI_Key root_key, DF_AutoCompListerParams *params, S window->autocomp_num_visible_rows_t = 0; window->autocomp_open_t = 0; } - if(window->autocomp_last_frame_idx+1 < d_frame_index()) + if(window->autocomp_last_frame_idx+1 < df_state->frame_index) { window->autocomp_force_closed = 0; window->autocomp_num_visible_rows_t = 0; @@ -6631,7 +6631,7 @@ df_set_autocomp_lister_query(UI_Key root_key, DF_AutoCompListerParams *params, S window->autocomp_lister_params.strings = str8_list_copy(window->autocomp_lister_params_arena, &window->autocomp_lister_params.strings); window->autocomp_lister_query_size = Min(query.size, sizeof(window->autocomp_lister_query_buffer)); MemoryCopy(window->autocomp_lister_query_buffer, query.str, window->autocomp_lister_query_size); - window->autocomp_last_frame_idx = d_frame_index(); + window->autocomp_last_frame_idx = df_state->frame_index; } //////////////////////////////// @@ -7423,12 +7423,30 @@ df_request_frame(void) //////////////////////////////// //~ rjf: Main State Accessors +//- rjf: per-frame arena + internal Arena * df_frame_arena(void) { return df_state->frame_arenas[df_state->frame_index%ArrayCount(df_state->frame_arenas)]; } +//- rjf: config paths + +internal String8 +df_cfg_path_from_src(D_CfgSrc src) +{ + return df_state->cfg_paths[src]; +} + +//- rjf: config state + +internal D_CfgTable * +df_cfg_table(void) +{ + return &df_state->cfg_table; +} + //////////////////////////////// //~ rjf: Registers @@ -7628,12 +7646,12 @@ df_init(CmdLine *cmdln) String8 cfg_src_paths[D_CfgSrc_COUNT] = {user_cfg_path, project_cfg_path}; for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1)) { - d_state->cfg_path_arenas[src] = arena_alloc(); + df_state->cfg_path_arenas[src] = arena_alloc(); df_cmd(d_cfg_src_load_cmd_kind_table[src], .file_path = path_normalized_from_string(scratch.arena, cfg_src_paths[src])); } // rjf: set up config table arena - d_state->cfg_arena = arena_alloc(); + df_state->cfg_arena = arena_alloc(); scratch_end(scratch); } @@ -7723,6 +7741,13 @@ df_frame(void) DI_Scope *di_scope = di_scope_open(); local_persist S32 depth = 0; + ////////////////////////////// + //- rjf: do per-frame resets + // + arena_clear(df_frame_arena()); + df_state->top_regs = &df_state->base_regs; + df_regs_copy_contents(df_frame_arena(), &df_state->top_regs->v, &df_state->top_regs->v); + ////////////////////////////// //- rjf: get events from the OS // @@ -7773,7 +7798,7 @@ df_frame(void) ////////////////////////////// //- rjf: target Hz -> delta time // - F32 dt = 1.f/target_hz; + df_state->frame_dt = 1.f/target_hz; ////////////////////////////// //- rjf: begin measuring actual per-frame work @@ -8152,7 +8177,7 @@ df_frame(void) //- rjf: autosave if needed // { - df_state->seconds_until_autosave -= dt; + df_state->seconds_until_autosave -= df_state->frame_dt; if(df_state->seconds_until_autosave <= 0.f) { df_cmd(DF_CmdKind_WriteUserData); @@ -8412,8 +8437,8 @@ df_frame(void) { if(load_cfg[src]) { - arena_clear(d_state->cfg_path_arenas[src]); - d_state->cfg_paths[src] = push_str8_copy(d_state->cfg_path_arenas[src], new_path); + arena_clear(df_state->cfg_path_arenas[src]); + df_state->cfg_paths[src] = push_str8_copy(df_state->cfg_path_arenas[src], new_path); } } } @@ -8424,7 +8449,7 @@ df_frame(void) { for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1)) { - String8 path = d_cfg_path_from_src(src); + String8 path = df_cfg_path_from_src(src); cfg_props[src] = os_properties_from_file_path(path); } } @@ -8436,7 +8461,7 @@ df_frame(void) { for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1)) { - String8 path = d_cfg_path_from_src(src); + String8 path = df_cfg_path_from_src(src); OS_Handle file = os_file_open(OS_AccessFlag_ShareRead|OS_AccessFlag_Read, path); FileProperties props = os_properties_from_file(file); String8 data = os_string_from_file_range(scratch.arena, file, r1u64(0, props.size)); @@ -8466,7 +8491,7 @@ df_frame(void) { for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1)) { - cfg_load[src] = (load_cfg[src] && ((cfg_save[src] == 0 && d_state->cfg_cached_timestamp[src] != cfg_timestamps[src]) || cfg_props[src].created == 0)); + cfg_load[src] = (load_cfg[src] && ((cfg_save[src] == 0 && df_state->cfg_cached_timestamp[src] != cfg_timestamps[src]) || cfg_props[src].created == 0)); cfg_load_any = cfg_load_any || cfg_load[src]; } } @@ -8474,11 +8499,11 @@ df_frame(void) //- rjf: load => build new config table if(cfg_load_any) { - arena_clear(d_state->cfg_arena); - MemoryZeroStruct(&d_state->cfg_table); + arena_clear(df_state->cfg_arena); + MemoryZeroStruct(&df_state->cfg_table); for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1)) { - d_cfg_table_push_unparsed_string(d_state->cfg_arena, &d_state->cfg_table, cfg_data[src], src); + d_cfg_table_push_unparsed_string(df_state->cfg_arena, &df_state->cfg_table, cfg_data[src], src); } } @@ -8496,7 +8521,7 @@ df_frame(void) D_CmdKind cmd_kind = d_cfg_src_apply_cmd_kind_table[src]; D_CmdParams params = d_cmd_params_zero(); df_push_cmd(df_cmd_spec_from_kind(cmd_kind), ¶ms); - d_state->cfg_cached_timestamp[src] = cfg_timestamps[src]; + df_state->cfg_cached_timestamp[src] = cfg_timestamps[src]; } } } @@ -8526,7 +8551,7 @@ df_frame(void) case DF_CmdKind_ApplyUserData: case DF_CmdKind_ApplyProjectData: { - D_CfgTable *table = d_cfg_table(); + D_CfgTable *table = df_cfg_table(); OS_HandleArray monitors = os_push_monitors_array(scratch.arena); //- rjf: get config source @@ -8541,7 +8566,7 @@ df_frame(void) } //- rjf: get paths - String8 cfg_path = d_cfg_path_from_src(src); + String8 cfg_path = df_cfg_path_from_src(src); String8 cfg_folder = str8_chop_last_slash(cfg_path); //- rjf: keep track of recent projects @@ -9246,7 +9271,7 @@ df_frame(void) try_u64_from_str8_c_rules(hex_string, &hex_val); Vec4F32 color_rgba = rgba_from_u32((U32)hex_val); df_state->cfg_theme_target.colors[color_code] = color_rgba; - if(d_frame_index() <= 2) + if(df_state->frame_index <= 2) { df_state->cfg_theme.colors[color_code] = color_rgba; } @@ -9404,7 +9429,7 @@ df_frame(void) break; } } - String8 path = d_cfg_path_from_src(src); + String8 path = df_cfg_path_from_src(src); String8List d_strs = d_cfg_strings_from_core(scratch.arena, path, src); String8List df_strs = df_cfg_strings_from_gfx(scratch.arena, path, src); String8 header = push_str8f(scratch.arena, "// raddbg %s file\n\n", d_cfg_src_string_table[src].str); @@ -10492,7 +10517,7 @@ df_frame(void) for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1)) { DF_CmdKind write_cmd = d_cfg_src_write_cmd_kind_table[src]; - df_cmd(write_cmd, .file_path = d_cfg_path_from_src(src)); + df_cmd(write_cmd, .file_path = df_cfg_path_from_src(src)); } }break; @@ -12056,7 +12081,7 @@ df_frame(void) ////////////////////////////// //- rjf: tick debug engine // - d_tick(scratch.arena, &targets, &breakpoints, di_scope, dt); + d_tick(scratch.arena, &targets, &breakpoints); ////////////////////////////// //- rjf: apply new rich hover info @@ -12071,7 +12096,7 @@ df_frame(void) //- rjf: animate confirmation // { - F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-10.f * d_dt())) : 1.f; + F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-10.f * df_state->frame_dt)) : 1.f; B32 confirm_open = df_state->confirm_active; df_state->confirm_t += rate * ((F32)!!confirm_open-df_state->confirm_t); if(abs_f32(df_state->confirm_t - (F32)!!confirm_open) > 0.005f) @@ -12086,7 +12111,7 @@ df_frame(void) { DF_Theme *current = &df_state->cfg_theme; DF_Theme *target = &df_state->cfg_theme_target; - F32 rate = 1 - pow_f32(2, (-50.f * d_dt())); + F32 rate = 1 - pow_f32(2, (-50.f * df_state->frame_dt)); for(DF_ThemeColor color = DF_ThemeColor_Null; color < DF_ThemeColor_COUNT; color = (DF_ThemeColor)(color+1)) @@ -12109,7 +12134,7 @@ df_frame(void) //- rjf: animate alive-transitions for entities // { - F32 rate = 1.f - pow_f32(2.f, -20.f*d_dt()); + F32 rate = 1.f - pow_f32(2.f, -20.f*df_state->frame_dt); for(D_Entity *e = d_entity_root(); !d_entity_is_nil(e); e = d_entity_rec_depth_first_pre(e, d_entity_root()).next) { F32 diff = (1.f - e->alive_t); @@ -12242,9 +12267,10 @@ df_frame(void) df_state->frame_time_us_history[df_state->frame_index%ArrayCount(df_state->frame_time_us_history)] = frame_time_us; ////////////////////////////// - //- rjf: bump frame index + //- rjf: bump frame time counters // df_state->frame_index += 1; + df_state->time_in_seconds += df_state->frame_dt; di_scope_close(di_scope); scratch_end(scratch); diff --git a/src/dbg_frontend/dbg_frontend_core.h b/src/dbg_frontend/dbg_frontend_core.h index 1c1fa79b..a29eab14 100644 --- a/src/dbg_frontend/dbg_frontend_core.h +++ b/src/dbg_frontend/dbg_frontend_core.h @@ -654,8 +654,10 @@ struct DF_State // rjf: top-level state Arena *arena; B32 quit; + F64 time_in_seconds; // rjf: frame state + F32 frame_dt; U64 frame_index; Arena *frame_arenas[2]; @@ -746,6 +748,13 @@ struct DF_State DF_RichHoverInfo rich_hover_info_next; DF_RichHoverInfo rich_hover_info_current; + // rjf: config reading state + Arena *cfg_path_arenas[D_CfgSrc_COUNT]; + String8 cfg_paths[D_CfgSrc_COUNT]; + U64 cfg_cached_timestamp[D_CfgSrc_COUNT]; + Arena *cfg_arena; + D_CfgTable cfg_table; + // rjf: running theme state DF_Theme cfg_theme_target; DF_Theme cfg_theme; @@ -1025,8 +1034,15 @@ internal void df_request_frame(void); //////////////////////////////// //~ rjf: Main State Accessors +//- rjf: per-frame arena internal Arena *df_frame_arena(void); +//- rjf: config paths +internal String8 df_cfg_path_from_src(D_CfgSrc src); + +//- rjf: config state +internal D_CfgTable *df_cfg_table(void); + //////////////////////////////// //~ rjf: Registers diff --git a/src/dbg_frontend/dbg_frontend_views.c b/src/dbg_frontend/dbg_frontend_views.c index da3a9c8a..0f2c6fce 100644 --- a/src/dbg_frontend/dbg_frontend_views.c +++ b/src/dbg_frontend/dbg_frontend_views.c @@ -8306,8 +8306,8 @@ DF_VIEW_UI_FUNCTION_DEF(geo3d) //- rjf: animate camera // { - F32 fast_rate = 1 - pow_f32(2, (-60.f * d_dt())); - F32 slow_rate = 1 - pow_f32(2, (-30.f * d_dt())); + F32 fast_rate = 1 - pow_f32(2, (-60.f * df_state->frame_dt)); + F32 slow_rate = 1 - pow_f32(2, (-30.f * df_state->frame_dt)); state->zoom += (zoom_target - state->zoom) * slow_rate; state->yaw += (yaw_target - state->yaw) * fast_rate; state->pitch += (pitch_target - state->pitch) * fast_rate; diff --git a/src/dbg_frontend/dbg_frontend_widgets.c b/src/dbg_frontend/dbg_frontend_widgets.c index 39f81a8c..1795f59c 100644 --- a/src/dbg_frontend/dbg_frontend_widgets.c +++ b/src/dbg_frontend/dbg_frontend_widgets.c @@ -15,7 +15,7 @@ df_loading_overlay(Rng2F32 rect, F32 loading_t, U64 progress_v, U64 progress_v_t F32 height = ui_top_font_size() * 1.f; F32 min_thickness = ui_top_font_size()/2; F32 trail = ui_top_font_size() * 4; - F32 t = pow_f32(sin_f32((F32)d_time_in_seconds() / 1.8f), 2.f); + F32 t = pow_f32(sin_f32((F32)df_state->time_in_seconds / 1.8f), 2.f); F64 v = 1.f - abs_f32(0.5f - t); // rjf: colors @@ -1073,7 +1073,7 @@ df_code_slice(DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe { color = d_rgba_from_entity(thread); } - if(d_ctrl_targets_running() && d_ctrl_last_run_frame_idx() < d_frame_index()) + if(d_ctrl_targets_running() && d_ctrl_last_run_frame_idx() < df_state->frame_index) { color.w *= 0.5f; } @@ -1232,7 +1232,7 @@ df_code_slice(DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe { color = d_rgba_from_entity(thread); } - if(d_ctrl_targets_running() && d_ctrl_last_run_frame_idx() < d_frame_index()) + if(d_ctrl_targets_running() && d_ctrl_last_run_frame_idx() < df_state->frame_index) { color.w *= 0.5f; }