Profiler UI features; more extensions to fancy strings
This commit is contained in:
parent
21d482e05f
commit
10ed4ee4b7
|
@ -691,5 +691,23 @@ get_tool_tip_box(Rect_f32 container, Vec2_f32 p, Vec2_f32 box_dims){
|
||||||
return(Rf32_xy_wh(q, box_dims));
|
return(Rf32_xy_wh(q, box_dims));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function Rect_f32
|
||||||
|
draw_tool_tip(Application_Links *app, Face_ID face, Fancy_Block *block,
|
||||||
|
Vec2_f32 p, Rect_f32 region, f32 x_padding, f32 x_half_padding,
|
||||||
|
FColor back_color){
|
||||||
|
Rect_f32 box = Rf32(p, p);
|
||||||
|
if (block->line_count > 0){
|
||||||
|
Vec2_f32 dims = get_fancy_block_dim(app, face, block);
|
||||||
|
dims += V2f32(x_padding, 2.f);
|
||||||
|
box = get_tool_tip_box(region, p, dims);
|
||||||
|
Rect_f32 prev_clip = draw_set_clip(app, box);
|
||||||
|
draw_rectangle(app, box, 6.f, back_color);
|
||||||
|
draw_fancy_block(app, face, fcolor_zero(), block,
|
||||||
|
box.p0 + V2f32(x_half_padding, 1.f));
|
||||||
|
draw_set_clip(app, prev_clip);
|
||||||
|
}
|
||||||
|
return(box);
|
||||||
|
}
|
||||||
|
|
||||||
// BOTTOM
|
// BOTTOM
|
||||||
|
|
||||||
|
|
|
@ -138,9 +138,9 @@ push_fancy_string(Arena *arena, Fancy_Line *line, FColor color, String_Const_u8
|
||||||
return(push_fancy_string(arena, line, 0, color, 0, 0, value));
|
return(push_fancy_string(arena, line, 0, color, 0, 0, value));
|
||||||
}
|
}
|
||||||
function Fancy_String*
|
function Fancy_String*
|
||||||
push_fancy_string(Arena *arena, Fancy_Line *line, f32 pre_margn, f32 post_margin,
|
push_fancy_string(Arena *arena, Fancy_Line *line, f32 pre_margin, f32 post_margin,
|
||||||
String_Const_u8 value){
|
String_Const_u8 value){
|
||||||
return(push_fancy_string(arena, line, 0, fcolor_zero(), pre_margn, post_margin,
|
return(push_fancy_string(arena, line, 0, fcolor_zero(), pre_margin, post_margin,
|
||||||
value));
|
value));
|
||||||
}
|
}
|
||||||
function Fancy_String*
|
function Fancy_String*
|
||||||
|
@ -188,9 +188,9 @@ push_fancy_stringfv(Arena *arena, Fancy_Line *line, FColor color,
|
||||||
return(push_fancy_stringfv(arena, line, 0, color, 0, 0, format, args));
|
return(push_fancy_stringfv(arena, line, 0, color, 0, 0, format, args));
|
||||||
}
|
}
|
||||||
function Fancy_String*
|
function Fancy_String*
|
||||||
push_fancy_stringfv(Arena *arena, Fancy_Line *line, f32 pre_margn, f32 post_margin,
|
push_fancy_stringfv(Arena *arena, Fancy_Line *line, f32 pre_margin, f32 post_margin,
|
||||||
char *format, va_list args){
|
char *format, va_list args){
|
||||||
return(push_fancy_stringfv(arena, line, 0, fcolor_zero(), pre_margn, post_margin,
|
return(push_fancy_stringfv(arena, line, 0, fcolor_zero(), pre_margin, post_margin,
|
||||||
format, args));
|
format, args));
|
||||||
}
|
}
|
||||||
function Fancy_String*
|
function Fancy_String*
|
||||||
|
@ -253,11 +253,11 @@ push_fancy_stringf(Arena *arena, Fancy_Line *line, FColor color,
|
||||||
StringFEnd();
|
StringFEnd();
|
||||||
}
|
}
|
||||||
function Fancy_String*
|
function Fancy_String*
|
||||||
push_fancy_stringf(Arena *arena, Fancy_Line *line, f32 pre_margn, f32 post_margin,
|
push_fancy_stringf(Arena *arena, Fancy_Line *line, f32 pre_margin, f32 post_margin,
|
||||||
char *format, ...){
|
char *format, ...){
|
||||||
StringFBegin();
|
StringFBegin();
|
||||||
StringFPass(push_fancy_stringfv(arena, line, 0, fcolor_zero(),
|
StringFPass(push_fancy_stringfv(arena, line, 0, fcolor_zero(),
|
||||||
pre_margn, post_margin, format, args));
|
pre_margin, post_margin, format, args));
|
||||||
StringFEnd();
|
StringFEnd();
|
||||||
}
|
}
|
||||||
function Fancy_String*
|
function Fancy_String*
|
||||||
|
@ -270,6 +270,218 @@ push_fancy_stringf(Arena *arena, Fancy_Line *line,
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|
||||||
|
function Fancy_String*
|
||||||
|
push_fancy_string_fixed(Arena *arena, Fancy_Line *line, Face_ID face, FColor fore,
|
||||||
|
f32 pre_margin, f32 post_margin,
|
||||||
|
String_Const_u8 value, i32 max){
|
||||||
|
if (value.size <= max){
|
||||||
|
return(push_fancy_stringf(arena, line, face, fore, pre_margin, post_margin,
|
||||||
|
"%-*.*s", max, string_expand(value)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return(push_fancy_stringf(arena, line, face, fore, pre_margin, post_margin,
|
||||||
|
"%-*.*s...", max - 3, string_expand(value)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Fancy_String*
|
||||||
|
push_fancy_string_fixed(Arena *arena, Fancy_Line *line, Face_ID face, FColor fore,
|
||||||
|
String_Const_u8 value, i32 max){
|
||||||
|
if (value.size <= max){
|
||||||
|
return(push_fancy_stringf(arena, line, face, fore, 0.f, 0.f,
|
||||||
|
"%-*.*s", max, string_expand(value)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return(push_fancy_stringf(arena, line, face, fore, 0.f, 0.f,
|
||||||
|
"%-*.*s...", max - 3, string_expand(value)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Fancy_String*
|
||||||
|
push_fancy_string_fixed(Arena *arena, Fancy_Line *line, Face_ID face,
|
||||||
|
f32 pre_margin, f32 post_margin, String_Const_u8 value,
|
||||||
|
i32 max){
|
||||||
|
if (value.size <= max){
|
||||||
|
return(push_fancy_stringf(arena, line, face, fcolor_zero(),
|
||||||
|
pre_margin, post_margin,
|
||||||
|
"%-*.*s", max, string_expand(value)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return(push_fancy_stringf(arena, line, face, fcolor_zero(),
|
||||||
|
pre_margin, post_margin,
|
||||||
|
"%-*.*s...", max - 3, string_expand(value)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Fancy_String*
|
||||||
|
push_fancy_string_fixed(Arena *arena, Fancy_Line *line, FColor fore,
|
||||||
|
f32 pre_margin, f32 post_margin, String_Const_u8 value,
|
||||||
|
i32 max){
|
||||||
|
if (value.size <= max){
|
||||||
|
return(push_fancy_stringf(arena, line, 0, fore, pre_margin, post_margin,
|
||||||
|
"%-*.*s", max, string_expand(value)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return(push_fancy_stringf(arena, line, 0, fore, pre_margin, post_margin,
|
||||||
|
"%-*.*s...", max - 3, string_expand(value)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Fancy_String*
|
||||||
|
push_fancy_string_fixed(Arena *arena, Fancy_Line *line, Face_ID face,
|
||||||
|
String_Const_u8 value, i32 max){
|
||||||
|
if (value.size <= max){
|
||||||
|
return(push_fancy_stringf(arena, line, face, fcolor_zero(), 0.f, 0.f,
|
||||||
|
"%-*.*s", max, string_expand(value)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return(push_fancy_stringf(arena, line, face, fcolor_zero(), 0.f, 0.f,
|
||||||
|
"%-*.*s...", max - 3, string_expand(value)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Fancy_String*
|
||||||
|
push_fancy_string_fixed(Arena *arena, Fancy_Line *line, FColor fore,
|
||||||
|
String_Const_u8 value, i32 max){
|
||||||
|
if (value.size <= max){
|
||||||
|
return(push_fancy_stringf(arena, line, 0, fore, 0.f, 0.f,
|
||||||
|
"%-*.*s", max, string_expand(value)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return(push_fancy_stringf(arena, line, 0, fore, 0.f, 0.f,
|
||||||
|
"%-*.*s...", max - 3, string_expand(value)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Fancy_String*
|
||||||
|
push_fancy_string_fixed(Arena *arena, Fancy_Line *line,
|
||||||
|
f32 pre_margin, f32 post_margin, String_Const_u8 value,
|
||||||
|
i32 max){
|
||||||
|
if (value.size <= max){
|
||||||
|
return(push_fancy_stringf(arena, line, 0, fcolor_zero(),
|
||||||
|
pre_margin, post_margin,
|
||||||
|
"%-*.*s", max, string_expand(value)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return(push_fancy_stringf(arena, line, 0, fcolor_zero(),
|
||||||
|
pre_margin, post_margin,
|
||||||
|
"%-*.*s...", max - 3, string_expand(value)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Fancy_String*
|
||||||
|
push_fancy_string_fixed(Arena *arena, Fancy_Line *line, String_Const_u8 value,
|
||||||
|
i32 max){
|
||||||
|
if (value.size <= max){
|
||||||
|
return(push_fancy_stringf(arena, line, 0, fcolor_zero(), 0.f, 0.f,
|
||||||
|
"%-*.*s", max, string_expand(value)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return(push_fancy_stringf(arena, line, 0, fcolor_zero(), 0.f, 0.f,
|
||||||
|
"%-*.*s...", max - 3, string_expand(value)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Fancy_String*
|
||||||
|
push_fancy_string_trunc(Arena *arena, Fancy_Line *line, Face_ID face, FColor fore,
|
||||||
|
f32 pre_margin, f32 post_margin,
|
||||||
|
String_Const_u8 value, i32 max){
|
||||||
|
if (value.size <= max){
|
||||||
|
return(push_fancy_stringf(arena, line, face, fore, pre_margin, post_margin,
|
||||||
|
"%.*s", string_expand(value)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return(push_fancy_stringf(arena, line, face, fore, pre_margin, post_margin,
|
||||||
|
"%.*s...", max - 3, value.str));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Fancy_String*
|
||||||
|
push_fancy_string_trunc(Arena *arena, Fancy_Line *line, Face_ID face, FColor fore,
|
||||||
|
String_Const_u8 value, i32 max){
|
||||||
|
if (value.size <= max){
|
||||||
|
return(push_fancy_stringf(arena, line, face, fore, 0.f, 0.f,
|
||||||
|
"%.*s", string_expand(value)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return(push_fancy_stringf(arena, line, face, fore, 0.f, 0.f,
|
||||||
|
"%.*s...", max - 3, value.str));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Fancy_String*
|
||||||
|
push_fancy_string_trunc(Arena *arena, Fancy_Line *line, Face_ID face,
|
||||||
|
f32 pre_margin, f32 post_margin, String_Const_u8 value,
|
||||||
|
i32 max){
|
||||||
|
if (value.size <= max){
|
||||||
|
return(push_fancy_stringf(arena, line, face, fcolor_zero(),
|
||||||
|
pre_margin, post_margin,
|
||||||
|
"%.*s", string_expand(value)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return(push_fancy_stringf(arena, line, face, fcolor_zero(),
|
||||||
|
pre_margin, post_margin,
|
||||||
|
"%.*s...", max - 3, value.str));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Fancy_String*
|
||||||
|
push_fancy_string_trunc(Arena *arena, Fancy_Line *line, FColor fore,
|
||||||
|
f32 pre_margin, f32 post_margin, String_Const_u8 value,
|
||||||
|
i32 max){
|
||||||
|
if (value.size <= max){
|
||||||
|
return(push_fancy_stringf(arena, line, 0, fore, pre_margin, post_margin,
|
||||||
|
"%.*s", string_expand(value)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return(push_fancy_stringf(arena, line, 0, fore, pre_margin, post_margin,
|
||||||
|
"%.*s...", max - 3, value.str));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Fancy_String*
|
||||||
|
push_fancy_string_trunc(Arena *arena, Fancy_Line *line, Face_ID face,
|
||||||
|
String_Const_u8 value, i32 max){
|
||||||
|
if (value.size <= max){
|
||||||
|
return(push_fancy_stringf(arena, line, face, fcolor_zero(), 0.f, 0.f,
|
||||||
|
"%.*s", string_expand(value)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return(push_fancy_stringf(arena, line, face, fcolor_zero(), 0.f, 0.f,
|
||||||
|
"%.*s...", max - 3, value.str));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Fancy_String*
|
||||||
|
push_fancy_string_trunc(Arena *arena, Fancy_Line *line, FColor fore,
|
||||||
|
String_Const_u8 value, i32 max){
|
||||||
|
if (value.size <= max){
|
||||||
|
return(push_fancy_stringf(arena, line, 0, fore, 0.f, 0.f,
|
||||||
|
"%.*s", string_expand(value)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return(push_fancy_stringf(arena, line, 0, fore, 0.f, 0.f,
|
||||||
|
"%.*s...", max - 3, value.str));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Fancy_String*
|
||||||
|
push_fancy_string_trunc(Arena *arena, Fancy_Line *line,
|
||||||
|
f32 pre_margin, f32 post_margin, String_Const_u8 value,
|
||||||
|
i32 max){
|
||||||
|
if (value.size <= max){
|
||||||
|
return(push_fancy_stringf(arena, line, 0, fcolor_zero(),
|
||||||
|
pre_margin, post_margin,
|
||||||
|
"%.*s", string_expand(value)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return(push_fancy_stringf(arena, line, 0, fcolor_zero(),
|
||||||
|
pre_margin, post_margin,
|
||||||
|
"%.*s...", max - 3, value.str));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Fancy_String*
|
||||||
|
push_fancy_string_trunc(Arena *arena, Fancy_Line *line, String_Const_u8 value,
|
||||||
|
i32 max){
|
||||||
|
if (value.size <= max){
|
||||||
|
return(push_fancy_stringf(arena, line, 0, fcolor_zero(), 0.f, 0.f,
|
||||||
|
"%.*s", string_expand(value)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return(push_fancy_stringf(arena, line, 0, fcolor_zero(), 0.f, 0.f,
|
||||||
|
"%.*s...", max - 3, value.str));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
|
||||||
function Fancy_Line*
|
function Fancy_Line*
|
||||||
push_fancy_line(Arena *arena, Fancy_Block *block, Face_ID face, FColor fore,
|
push_fancy_line(Arena *arena, Fancy_Block *block, Face_ID face, FColor fore,
|
||||||
String_Const_u8 text){
|
String_Const_u8 text){
|
||||||
|
|
|
@ -114,6 +114,7 @@ profile_parse_record(Arena *arena, Profile_Inspection *insp,
|
||||||
sll_queue_push(slot->first_hit, slot->last_hit, node_ptr);
|
sll_queue_push(slot->first_hit, slot->last_hit, node_ptr);
|
||||||
slot->hit_count += 1;
|
slot->hit_count += 1;
|
||||||
node_ptr->ptr = node;
|
node_ptr->ptr = node;
|
||||||
|
node->unique_counter = (u64)slot->hit_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (quit_loop){
|
if (quit_loop){
|
||||||
|
@ -244,6 +245,36 @@ profile_node_name(Profile_Node *node){
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function String_Const_u8
|
||||||
|
profile_node_location(Profile_Node *node){
|
||||||
|
String_Const_u8 result = {};
|
||||||
|
if (node->slot != 0){
|
||||||
|
result = node->slot->location;
|
||||||
|
}
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
function void
|
||||||
|
profile_qsort_nodes(Profile_Node **nodes, i32 first, i32 one_past_last){
|
||||||
|
if (first + 1 < one_past_last){
|
||||||
|
i32 pivot_index = one_past_last - 1;
|
||||||
|
Profile_Node *pivot = nodes[pivot_index];
|
||||||
|
u64 pivot_time = range_size(pivot->time);
|
||||||
|
i32 j = first;
|
||||||
|
for (i32 i = first; i < one_past_last; i += 1){
|
||||||
|
Profile_Node *node = nodes[i];
|
||||||
|
u64 node_time = range_size(node->time);
|
||||||
|
if (node_time > pivot_time){
|
||||||
|
Swap(Profile_Node*, nodes[i], nodes[j]);
|
||||||
|
j += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Swap(Profile_Node*, nodes[pivot_index], nodes[j]);
|
||||||
|
profile_qsort_nodes(nodes, first, j);
|
||||||
|
profile_qsort_nodes(nodes, j + 1, one_past_last);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function void
|
function void
|
||||||
profile_draw_node(Application_Links *app, View_ID view, Face_ID face_id,
|
profile_draw_node(Application_Links *app, View_ID view, Face_ID face_id,
|
||||||
Profile_Node *node, Rect_f32 rect,
|
Profile_Node *node, Rect_f32 rect,
|
||||||
|
@ -255,6 +286,7 @@ profile_draw_node(Application_Links *app, View_ID view, Face_ID face_id,
|
||||||
Face_Metrics metrics = get_face_metrics(app, face_id);
|
Face_Metrics metrics = get_face_metrics(app, face_id);
|
||||||
f32 line_height = metrics.line_height;
|
f32 line_height = metrics.line_height;
|
||||||
f32 normal_advance = metrics.normal_advance;
|
f32 normal_advance = metrics.normal_advance;
|
||||||
|
f32 block_height = line_height*2.f;
|
||||||
f32 x_padding = normal_advance*1.5f;
|
f32 x_padding = normal_advance*1.5f;
|
||||||
f32 x_half_padding = x_padding*0.5f;
|
f32 x_half_padding = x_padding*0.5f;
|
||||||
|
|
||||||
|
@ -348,8 +380,23 @@ profile_draw_node(Application_Links *app, View_ID view, Face_ID face_id,
|
||||||
|
|
||||||
if (rect_contains_point(box, m_p)){
|
if (rect_contains_point(box, m_p)){
|
||||||
insp->full_name_hovered = profile_node_name(child);
|
insp->full_name_hovered = profile_node_name(child);
|
||||||
|
insp->unique_counter_hovered = child->unique_counter;
|
||||||
insp->hover_node = child;
|
insp->hover_node = child;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (range_size(child_y) >= line_height){
|
||||||
|
String_Const_u8 child_name = profile_node_name(child);
|
||||||
|
Fancy_Line line = {};
|
||||||
|
push_fancy_string(scratch, &line, fcolor_id(Stag_Pop1),
|
||||||
|
child_name);
|
||||||
|
push_fancy_stringf(scratch, &line, fcolor_id(Stag_Default),
|
||||||
|
0.5f, 0.f, "#%4llu", child->unique_counter);
|
||||||
|
|
||||||
|
Vec2_f32 p = V2f32(x.min + x_half_padding,
|
||||||
|
child_y.min);
|
||||||
|
draw_fancy_line(app, face_id, fcolor_zero(),
|
||||||
|
&line, p);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -358,10 +405,9 @@ profile_draw_node(Application_Links *app, View_ID view, Face_ID face_id,
|
||||||
|
|
||||||
{
|
{
|
||||||
x = rect_range_x(info_box);
|
x = rect_range_x(info_box);
|
||||||
y = rect_range_y(info_box);
|
|
||||||
|
|
||||||
x_pos = x.min + x_half_padding;
|
x_pos = x.min + x_half_padding;
|
||||||
f32 y_pos = y.min;
|
f32 y_pos = info_box.y0;
|
||||||
|
|
||||||
// NOTE(allen): duration
|
// NOTE(allen): duration
|
||||||
{
|
{
|
||||||
|
@ -373,6 +419,51 @@ profile_draw_node(Application_Links *app, View_ID view, Face_ID face_id,
|
||||||
&list, V2f32(x_pos, y_pos + 1.f));
|
&list, V2f32(x_pos, y_pos + 1.f));
|
||||||
y_pos += line_height + 2.f;
|
y_pos += line_height + 2.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i32 child_count = node->child_count;
|
||||||
|
Profile_Node **children_array = push_array(scratch, Profile_Node*, child_count);
|
||||||
|
i32 counter = 0;
|
||||||
|
for (Profile_Node *child = node->first_child;
|
||||||
|
child != 0;
|
||||||
|
child = child->next){
|
||||||
|
children_array[counter] = child;
|
||||||
|
counter += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
profile_qsort_nodes(children_array, 0, child_count);
|
||||||
|
|
||||||
|
Profile_Node **child_ptr = children_array;
|
||||||
|
for (i32 i = 0; i < child_count; i += 1, child_ptr += 1){
|
||||||
|
Profile_Node *child = *child_ptr;
|
||||||
|
y = If32_size(y_pos, block_height);
|
||||||
|
|
||||||
|
f32 ratio = ((f32)range_size(child->time))/((f32)range_size(node->time));
|
||||||
|
|
||||||
|
String_Const_u8 child_name = profile_node_name(child);
|
||||||
|
Fancy_Line line = {};
|
||||||
|
push_fancy_string_trunc(scratch, &line, child_name, 10);
|
||||||
|
push_fancy_stringf(scratch, &line, fcolor_id(Stag_Default), 0.5f, 0.f,
|
||||||
|
"#%4llu", child->unique_counter);
|
||||||
|
push_fancy_stringf(scratch, &line, fcolor_id(Stag_Pop2),
|
||||||
|
0.5f, 0.f, "%6.4f", ratio);
|
||||||
|
|
||||||
|
Vec2_f32 p = V2f32(x.min + x_half_padding,
|
||||||
|
(y.min + y.max - line_height)*0.5f);
|
||||||
|
draw_fancy_line(app, face_id, fcolor_id(Stag_Pop1), &line, p);
|
||||||
|
|
||||||
|
Rect_f32 box = Rf32(x, y);
|
||||||
|
FColor margin = fcolor_id(Stag_Margin);
|
||||||
|
if (rect_contains_point(box, m_p)){
|
||||||
|
insp->full_name_hovered = child_name;
|
||||||
|
insp->unique_counter_hovered = child->unique_counter;
|
||||||
|
insp->location_jump_hovered = profile_node_location(child);
|
||||||
|
insp->hover_node = child;
|
||||||
|
margin = fcolor_id(Stag_Margin_Hover);
|
||||||
|
}
|
||||||
|
draw_rectangle_outline(app, box, 6.f, 3.f, margin);
|
||||||
|
|
||||||
|
y_pos = y.max;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -412,6 +503,7 @@ profile_render(Application_Links *app, Frame_Info frame_info, View_ID view){
|
||||||
|
|
||||||
inspect->tab_id_hovered = ProfileInspectTab_None;
|
inspect->tab_id_hovered = ProfileInspectTab_None;
|
||||||
block_zero_struct(&inspect->full_name_hovered);
|
block_zero_struct(&inspect->full_name_hovered);
|
||||||
|
inspect->unique_counter_hovered = 0;
|
||||||
block_zero_struct(&inspect->location_jump_hovered);
|
block_zero_struct(&inspect->location_jump_hovered);
|
||||||
inspect->hover_thread = 0;
|
inspect->hover_thread = 0;
|
||||||
inspect->hover_slot = 0;
|
inspect->hover_slot = 0;
|
||||||
|
@ -526,20 +618,11 @@ profile_render(Application_Links *app, Frame_Info frame_info, View_ID view){
|
||||||
node = node->next){
|
node = node->next){
|
||||||
Range_f32 y = If32_size(y_pos, block_height);
|
Range_f32 y = If32_size(y_pos, block_height);
|
||||||
|
|
||||||
b32 name_too_long = false;
|
u32 name_width = 45;
|
||||||
i32 name_width = 45;
|
b32 name_too_long = (node->name.size > name_width);
|
||||||
Fancy_Line list = {};
|
Fancy_Line list = {};
|
||||||
if (node->name.size > name_width){
|
push_fancy_string_fixed(scratch, &list, fcolor_id(Stag_Pop1),
|
||||||
push_fancy_stringf(scratch, &list, fcolor_id(Stag_Pop1),
|
node->name, name_width);
|
||||||
"%.*s... ",
|
|
||||||
name_width - 3, node->name.str);
|
|
||||||
name_too_long = true;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
push_fancy_stringf(scratch, &list, fcolor_id(Stag_Pop1),
|
|
||||||
"%-*.*s ",
|
|
||||||
name_width, string_expand(node->name));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (node->corrupted_time){
|
if (node->corrupted_time){
|
||||||
push_fancy_string(scratch, &list, fcolor_id(Stag_Pop2),
|
push_fancy_string(scratch, &list, fcolor_id(Stag_Pop2),
|
||||||
|
@ -634,27 +717,22 @@ profile_render(Application_Links *app, Frame_Info frame_info, View_ID view){
|
||||||
FColor back_color = fcolor_change_alpha(app, f_black, 0.5f);
|
FColor back_color = fcolor_change_alpha(app, f_black, 0.5f);
|
||||||
|
|
||||||
if (inspect->full_name_hovered.size > 0){
|
if (inspect->full_name_hovered.size > 0){
|
||||||
Fancy_Line *line = push_fancy_line(scratch, &block);
|
Fancy_Line *line = push_fancy_line(scratch, &block, text_color);
|
||||||
push_fancy_stringf(scratch, line, text_color, "%.*s",
|
push_fancy_stringf(scratch, line, "%.*s",
|
||||||
string_expand(inspect->full_name_hovered));
|
string_expand(inspect->full_name_hovered));
|
||||||
|
if (inspect->unique_counter_hovered > 0){
|
||||||
|
push_fancy_stringf(scratch, line, text_color, 0.5f, 0.f,
|
||||||
|
"#%4llu", inspect->unique_counter_hovered);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (inspect->location_jump_hovered.size > 0){
|
if (inspect->location_jump_hovered.size > 0){
|
||||||
Fancy_Line *line = push_fancy_line(scratch, &block);
|
Fancy_Line *line = push_fancy_line(scratch, &block, text_color);
|
||||||
push_fancy_stringf(scratch, line, text_color, "[shift] '%.*s'",
|
push_fancy_stringf(scratch, line, "[shift] '%.*s'",
|
||||||
string_expand(inspect->location_jump_hovered));
|
string_expand(inspect->location_jump_hovered));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (block.line_count > 0){
|
draw_tool_tip(app, face_id, &block, m_p, region,
|
||||||
Vec2_f32 dims = get_fancy_block_dim(app, face_id, &block);
|
x_padding, x_half_padding, back_color);
|
||||||
dims += V2f32(x_padding, 2.f);
|
|
||||||
|
|
||||||
Rect_f32 box = get_tool_tip_box(region, m_p, dims);
|
|
||||||
draw_set_clip(app, box);
|
|
||||||
|
|
||||||
draw_rectangle(app, box, 6.f, back_color);
|
|
||||||
draw_fancy_block(app, face_id, fcolor_zero(), &block,
|
|
||||||
V2f32(box.x0 + x_half_padding, box.y0 + 1.f));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@ struct Profile_Node{
|
||||||
struct Profile_Inspection_Thread *thread;
|
struct Profile_Inspection_Thread *thread;
|
||||||
Range_u64 time;
|
Range_u64 time;
|
||||||
Profile_ID id;
|
Profile_ID id;
|
||||||
|
u64 unique_counter;
|
||||||
|
|
||||||
Profile_Node *first_child;
|
Profile_Node *first_child;
|
||||||
Profile_Node *last_child;
|
Profile_Node *last_child;
|
||||||
|
@ -79,6 +80,7 @@ struct Profile_Inspection{
|
||||||
|
|
||||||
Profile_Inspection_Tab tab_id_hovered;
|
Profile_Inspection_Tab tab_id_hovered;
|
||||||
String_Const_u8 full_name_hovered;
|
String_Const_u8 full_name_hovered;
|
||||||
|
u64 unique_counter_hovered;
|
||||||
String_Const_u8 location_jump_hovered;
|
String_Const_u8 location_jump_hovered;
|
||||||
Profile_Inspection_Thread *hover_thread;
|
Profile_Inspection_Thread *hover_thread;
|
||||||
Profile_Slot *hover_slot;
|
Profile_Slot *hover_slot;
|
||||||
|
|
|
@ -441,7 +441,7 @@ static Command_Metadata fcoder_metacmd_table[211] = {
|
||||||
{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 237 },
|
{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 237 },
|
||||||
{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 243 },
|
{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 243 },
|
||||||
{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 249 },
|
{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 249 },
|
||||||
{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "w:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 692 },
|
{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "w:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 770 },
|
||||||
{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 7 },
|
{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 7 },
|
||||||
{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 21 },
|
{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 21 },
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue