mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-05 05:18:40 +00:00
cache font setting calculations per-frame rather than recomputing all the time, fix some expandability calculations in eval visualization w/ multiple composing views
This commit is contained in:
@@ -1264,7 +1264,7 @@ e_type_data_members_from_key(Arena *arena, E_TypeKey key)
|
|||||||
U64 last_member_off = 0;
|
U64 last_member_off = 0;
|
||||||
for(U64 member_idx = 0; member_idx < type->count; member_idx += 1)
|
for(U64 member_idx = 0; member_idx < type->count; member_idx += 1)
|
||||||
{
|
{
|
||||||
if(type->members[member_idx].kind == E_MemberKind_DataField)
|
if(type->members[member_idx].name.size != 0 && type->members[member_idx].kind == E_MemberKind_DataField)
|
||||||
{
|
{
|
||||||
E_MemberNode *n = push_array(scratch.arena, E_MemberNode, 1);
|
E_MemberNode *n = push_array(scratch.arena, E_MemberNode, 1);
|
||||||
MemoryCopyStruct(&n->v, &type->members[member_idx]);
|
MemoryCopyStruct(&n->v, &type->members[member_idx]);
|
||||||
|
|||||||
@@ -79,38 +79,65 @@ ev_hash_from_key(EV_Key key)
|
|||||||
|
|
||||||
//- rjf: type info -> expandability/editablity
|
//- rjf: type info -> expandability/editablity
|
||||||
|
|
||||||
|
internal E_TypeKey
|
||||||
|
ev_expansion_type_from_key(E_TypeKey type_key)
|
||||||
|
{
|
||||||
|
E_TypeKey result = zero_struct;
|
||||||
|
for(E_TypeKey key = type_key;
|
||||||
|
!e_type_key_match(key, e_type_key_zero());
|
||||||
|
key = e_type_key_direct(key))
|
||||||
|
{
|
||||||
|
B32 done = 1;
|
||||||
|
E_TypeKind kind = e_type_kind_from_key(key);
|
||||||
|
|
||||||
|
//- rjf: lenses -> try to see if this lens has special expansion rules. if
|
||||||
|
// so, choose the current eval
|
||||||
|
if(kind == E_TypeKind_Lens)
|
||||||
|
{
|
||||||
|
E_Type *type = e_type_from_key__cached(key);
|
||||||
|
if(type->expand.info != 0 ||
|
||||||
|
ev_expand_rule_from_string(type->name))
|
||||||
|
{
|
||||||
|
done = 1;
|
||||||
|
result = key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//- rjf: if we have meta-expression tags in the type chain, defer
|
||||||
|
// to the next type in the chain.
|
||||||
|
else if(E_TypeKind_FirstMeta <= kind && kind <= E_TypeKind_LastMeta)
|
||||||
|
{
|
||||||
|
done = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- rjf: break if done
|
||||||
|
if(done)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
ev_type_key_and_mode_is_expandable(E_TypeKey type_key, E_Mode mode)
|
ev_type_key_and_mode_is_expandable(E_TypeKey type_key, E_Mode mode)
|
||||||
{
|
{
|
||||||
B32 result = 0;
|
B32 result = 0;
|
||||||
|
if(!e_type_key_match(ev_expansion_type_from_key(type_key), e_type_key_zero()))
|
||||||
{
|
{
|
||||||
if(!result && e_type_kind_from_key(type_key) == E_TypeKind_Lens)
|
result = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
E_TypeKey default_expansion_type_key = e_default_expansion_type_from_key(type_key);
|
||||||
|
E_TypeKind kind = e_type_kind_from_key(default_expansion_type_key);
|
||||||
|
if(kind == E_TypeKind_Enum)
|
||||||
{
|
{
|
||||||
for(E_Type *lens_type = e_type_from_key__cached(type_key);
|
result = (mode == E_Mode_Null);
|
||||||
lens_type->kind == E_TypeKind_Lens;
|
|
||||||
lens_type = e_type_from_key__cached(lens_type->direct_type_key))
|
|
||||||
{
|
|
||||||
if(lens_type->expand.info != 0)
|
|
||||||
{
|
|
||||||
result = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if(!result)
|
else if(kind != E_TypeKind_Null)
|
||||||
{
|
{
|
||||||
E_TypeKey expand_type_key = e_default_expansion_type_from_key(type_key);
|
result = 1;
|
||||||
E_TypeKind expand_type_kind = e_type_kind_from_key(expand_type_key);
|
|
||||||
if(expand_type_kind == E_TypeKind_Struct ||
|
|
||||||
expand_type_kind == E_TypeKind_Union ||
|
|
||||||
expand_type_kind == E_TypeKind_Class ||
|
|
||||||
expand_type_kind == E_TypeKind_Array ||
|
|
||||||
expand_type_kind == E_TypeKind_Set ||
|
|
||||||
e_type_kind_is_pointer_or_ref(expand_type_kind) ||
|
|
||||||
(expand_type_kind == E_TypeKind_Enum && mode == E_Mode_Null))
|
|
||||||
{
|
|
||||||
result = 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@@ -512,7 +539,7 @@ ev_resolved_from_expr(Arena *arena, E_Expr *expr)
|
|||||||
//~ rjf: Block Building
|
//~ rjf: Block Building
|
||||||
|
|
||||||
internal EV_BlockTree
|
internal EV_BlockTree
|
||||||
ev_block_tree_from_eval(Arena *arena, EV_View *view, String8 filter, E_Eval eval)
|
ev_block_tree_from_eval(Arena *arena, EV_View *view, String8 filter, E_Eval root_eval)
|
||||||
{
|
{
|
||||||
ProfBeginFunction();
|
ProfBeginFunction();
|
||||||
EV_BlockTree tree = {&ev_nil_block};
|
EV_BlockTree tree = {&ev_nil_block};
|
||||||
@@ -528,7 +555,7 @@ ev_block_tree_from_eval(Arena *arena, EV_View *view, String8 filter, E_Eval eval
|
|||||||
MemoryCopyStruct(tree.root, &ev_nil_block);
|
MemoryCopyStruct(tree.root, &ev_nil_block);
|
||||||
tree.root->key = root_key;
|
tree.root->key = root_key;
|
||||||
tree.root->string = str8_zero();
|
tree.root->string = str8_zero();
|
||||||
tree.root->eval = eval;
|
tree.root->eval = root_eval;
|
||||||
tree.root->type_expand_rule = &e_type_expand_rule__default;
|
tree.root->type_expand_rule = &e_type_expand_rule__default;
|
||||||
tree.root->viz_expand_rule = &ev_nil_expand_rule;
|
tree.root->viz_expand_rule = &ev_nil_expand_rule;
|
||||||
tree.root->row_count = 1;
|
tree.root->row_count = 1;
|
||||||
@@ -574,21 +601,26 @@ ev_block_tree_from_eval(Arena *arena, EV_View *view, String8 filter, E_Eval eval
|
|||||||
|
|
||||||
// rjf: unpack eval
|
// rjf: unpack eval
|
||||||
E_Mode mode = t->eval.irtree.mode;
|
E_Mode mode = t->eval.irtree.mode;
|
||||||
E_TypeKey type_key = t->eval.irtree.type_key;
|
E_Eval eval = t->eval;
|
||||||
|
E_TypeKey expansion_type_key = ev_expansion_type_from_key(eval.irtree.type_key);
|
||||||
|
if(!e_type_key_match(expansion_type_key, e_type_key_zero()))
|
||||||
|
{
|
||||||
|
eval.irtree.type_key = expansion_type_key;
|
||||||
|
}
|
||||||
|
|
||||||
// rjf: get expansion rules from type
|
// rjf: get expansion rules from type
|
||||||
E_TypeExpandRule *type_expand_rule = e_expand_rule_from_type_key(type_key);
|
E_TypeExpandRule *type_expand_rule = e_expand_rule_from_type_key(eval.irtree.type_key);
|
||||||
EV_ExpandRule *viz_expand_rule = ev_expand_rule_from_type_key(type_key);
|
EV_ExpandRule *viz_expand_rule = ev_expand_rule_from_type_key(eval.irtree.type_key);
|
||||||
|
|
||||||
// rjf: skip if no expansion rule, & type info disallows expansion
|
// rjf: skip if no expansion rule, & type info disallows expansion
|
||||||
if(viz_expand_rule == &ev_nil_expand_rule && !ev_type_key_and_mode_is_expandable(type_key, mode))
|
if(viz_expand_rule == &ev_nil_expand_rule && !ev_type_key_and_mode_is_expandable(eval.irtree.type_key, mode))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// rjf: get top-level lookup/expansion info
|
// rjf: get top-level lookup/expansion info
|
||||||
E_TypeExpandInfo type_expand_info = type_expand_rule->info(arena, t->eval, filter);
|
E_TypeExpandInfo type_expand_info = type_expand_rule->info(arena, eval, filter);
|
||||||
EV_ExpandInfo viz_expand_info = viz_expand_rule->info(arena, view, filter, t->eval.expr);
|
EV_ExpandInfo viz_expand_info = viz_expand_rule->info(arena, view, filter, eval.expr);
|
||||||
|
|
||||||
// rjf: determine expansion info
|
// rjf: determine expansion info
|
||||||
U64 expansion_row_count = type_expand_info.expr_count;
|
U64 expansion_row_count = type_expand_info.expr_count;
|
||||||
@@ -615,7 +647,7 @@ ev_block_tree_from_eval(Arena *arena, EV_View *view, String8 filter, E_Eval eval
|
|||||||
expansion_block->parent = t->parent_block;
|
expansion_block->parent = t->parent_block;
|
||||||
expansion_block->key = key;
|
expansion_block->key = key;
|
||||||
expansion_block->split_relative_idx = t->split_relative_idx;
|
expansion_block->split_relative_idx = t->split_relative_idx;
|
||||||
expansion_block->eval = t->eval;
|
expansion_block->eval = eval;
|
||||||
expansion_block->type_expand_info = type_expand_info;
|
expansion_block->type_expand_info = type_expand_info;
|
||||||
expansion_block->type_expand_rule = type_expand_rule;
|
expansion_block->type_expand_rule = type_expand_rule;
|
||||||
expansion_block->viz_expand_info = viz_expand_info;
|
expansion_block->viz_expand_info = viz_expand_info;
|
||||||
@@ -702,7 +734,7 @@ ev_block_tree_from_eval(Arena *arena, EV_View *view, String8 filter, E_Eval eval
|
|||||||
{
|
{
|
||||||
Rng1U64 child_range = r1u64(split_relative_idx, split_relative_idx+1);
|
Rng1U64 child_range = r1u64(split_relative_idx, split_relative_idx+1);
|
||||||
E_Eval child_eval = {0};
|
E_Eval child_eval = {0};
|
||||||
type_expand_rule->range(arena, type_expand_info.user_data, t->eval, filter, r1u64(split_relative_idx, split_relative_idx+1), &child_eval);
|
type_expand_rule->range(arena, type_expand_info.user_data, eval, filter, r1u64(split_relative_idx, split_relative_idx+1), &child_eval);
|
||||||
EV_Key child_key = child_keys[idx];
|
EV_Key child_key = child_keys[idx];
|
||||||
BlockTreeBuildTask *task = push_array(scratch.arena, BlockTreeBuildTask, 1);
|
BlockTreeBuildTask *task = push_array(scratch.arena, BlockTreeBuildTask, 1);
|
||||||
SLLQueuePush(first_task, last_task, task);
|
SLLQueuePush(first_task, last_task, task);
|
||||||
|
|||||||
@@ -315,6 +315,7 @@ internal U64 ev_hash_from_key(EV_Key key);
|
|||||||
//~ rjf: Type Info Helpers
|
//~ rjf: Type Info Helpers
|
||||||
|
|
||||||
//- rjf: type info -> expandability/editablity
|
//- rjf: type info -> expandability/editablity
|
||||||
|
internal E_TypeKey ev_expansion_type_from_key(E_TypeKey type_key);
|
||||||
internal B32 ev_type_key_and_mode_is_expandable(E_TypeKey type_key, E_Mode mode);
|
internal B32 ev_type_key_and_mode_is_expandable(E_TypeKey type_key, E_Mode mode);
|
||||||
internal B32 ev_type_key_is_editable(E_TypeKey type_key);
|
internal B32 ev_type_key_is_editable(E_TypeKey type_key);
|
||||||
|
|
||||||
@@ -351,7 +352,7 @@ internal E_Expr *ev_resolved_from_expr(Arena *arena, E_Expr *expr);
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Block Building
|
//~ rjf: Block Building
|
||||||
|
|
||||||
internal EV_BlockTree ev_block_tree_from_eval(Arena *arena, EV_View *view, String8 filter, E_Eval eval);
|
internal EV_BlockTree ev_block_tree_from_eval(Arena *arena, EV_View *view, String8 filter, E_Eval root_eval);
|
||||||
internal U64 ev_depth_from_block(EV_Block *block);
|
internal U64 ev_depth_from_block(EV_Block *block);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|||||||
+23
-29
@@ -4570,6 +4570,7 @@ rd_view_ui(Rng2F32 rect)
|
|||||||
|
|
||||||
// rjf: form cell build parameters
|
// rjf: form cell build parameters
|
||||||
RD_CellParams cell_params = {0};
|
RD_CellParams cell_params = {0};
|
||||||
|
ProfScope("form cell build parameters")
|
||||||
{
|
{
|
||||||
// rjf: set up base parameters
|
// rjf: set up base parameters
|
||||||
cell_params.flags = (RD_CellFlag_KeyboardClickable|RD_CellFlag_NoBackground|RD_CellFlag_CodeContents);
|
cell_params.flags = (RD_CellFlag_KeyboardClickable|RD_CellFlag_NoBackground|RD_CellFlag_CodeContents);
|
||||||
@@ -10389,35 +10390,8 @@ rd_theme_color_from_txt_token_kind_lookup_string(TXT_TokenKind kind, String8 str
|
|||||||
internal FNT_Tag
|
internal FNT_Tag
|
||||||
rd_font_from_slot(RD_FontSlot slot)
|
rd_font_from_slot(RD_FontSlot slot)
|
||||||
{
|
{
|
||||||
// rjf: determine key name for this font slot
|
FNT_Tag tag = rd_state->font_slot_table[slot];
|
||||||
String8 key = {0};
|
return tag;
|
||||||
switch(slot)
|
|
||||||
{
|
|
||||||
default:{}break;
|
|
||||||
case RD_FontSlot_Main:{key = str8_lit("main_font");}break;
|
|
||||||
case RD_FontSlot_Code:{key = str8_lit("code_font");}break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// rjf: determine font name
|
|
||||||
String8 font_name = rd_setting_from_name(key);
|
|
||||||
|
|
||||||
// rjf: map name -> tag
|
|
||||||
FNT_Tag result = {0};
|
|
||||||
if(font_name.size != 0)
|
|
||||||
{
|
|
||||||
result = fnt_tag_from_path(font_name);
|
|
||||||
}
|
|
||||||
if(font_name.size == 0 || fnt_tag_match(fnt_tag_zero(), result))
|
|
||||||
{
|
|
||||||
switch(slot)
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
case RD_FontSlot_Main: {result = fnt_tag_from_static_data_string(&rd_default_main_font_bytes);}break;
|
|
||||||
case RD_FontSlot_Code: {result = fnt_tag_from_static_data_string(&rd_default_code_font_bytes);}break;
|
|
||||||
case RD_FontSlot_Icons:{result = fnt_tag_from_static_data_string(&rd_icon_font_bytes);}break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal FNT_RasterFlags
|
internal FNT_RasterFlags
|
||||||
@@ -11609,6 +11583,26 @@ rd_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//////////////////////////////
|
||||||
|
//- rjf: get fonts from config
|
||||||
|
//
|
||||||
|
ProfScope("get fonts from config")
|
||||||
|
{
|
||||||
|
String8 main_font_name = rd_setting_from_name(str8_lit("main_font"));
|
||||||
|
String8 code_font_name = rd_setting_from_name(str8_lit("code_font"));
|
||||||
|
rd_state->font_slot_table[RD_FontSlot_Main] = fnt_tag_from_path(main_font_name);
|
||||||
|
rd_state->font_slot_table[RD_FontSlot_Code] = fnt_tag_from_path(code_font_name);
|
||||||
|
if(fnt_tag_match(rd_state->font_slot_table[RD_FontSlot_Main], fnt_tag_zero()))
|
||||||
|
{
|
||||||
|
rd_state->font_slot_table[RD_FontSlot_Main] = fnt_tag_from_static_data_string(&rd_default_main_font_bytes);
|
||||||
|
}
|
||||||
|
if(fnt_tag_match(rd_state->font_slot_table[RD_FontSlot_Code], fnt_tag_zero()))
|
||||||
|
{
|
||||||
|
rd_state->font_slot_table[RD_FontSlot_Code] = fnt_tag_from_static_data_string(&rd_default_code_font_bytes);
|
||||||
|
}
|
||||||
|
rd_state->font_slot_table[RD_FontSlot_Icons] = fnt_tag_from_static_data_string(&rd_icon_font_bytes);
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: build theme from config
|
//- rjf: build theme from config
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -655,6 +655,9 @@ struct RD_State
|
|||||||
// rjf: key map (constructed from-scratch each frame)
|
// rjf: key map (constructed from-scratch each frame)
|
||||||
RD_KeyMap *key_map;
|
RD_KeyMap *key_map;
|
||||||
|
|
||||||
|
// rjf: slot -> font tag map (constructed from-scratch each frame)
|
||||||
|
FNT_Tag font_slot_table[RD_FontSlot_COUNT];
|
||||||
|
|
||||||
// rjf: theme target (constructed from-scratch each frame)
|
// rjf: theme target (constructed from-scratch each frame)
|
||||||
RD_Theme *theme;
|
RD_Theme *theme;
|
||||||
RD_Theme *theme_target;
|
RD_Theme *theme_target;
|
||||||
|
|||||||
Reference in New Issue
Block a user