profiler collapse testing
This commit is contained in:
parent
b7c454e7ef
commit
ecd65c1ee4
@ -5760,6 +5760,9 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
f64 len_px;
|
||||
|
||||
i64 elapsed_ns;
|
||||
|
||||
b32 is_collapsed;
|
||||
u64 collapsed_count;
|
||||
};
|
||||
|
||||
Struct(VisTrack)
|
||||
@ -5790,6 +5793,8 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
{
|
||||
V_ZoneRow *zone_row = &zone_track->rows[row_idx];
|
||||
|
||||
|
||||
// Locate first chunk in view
|
||||
V_ZoneChunk *closest_start = zone_row->last_chunk;
|
||||
{
|
||||
for (i32 level = countof(closest_start->prevs) - 1; level >= 0; --level)
|
||||
@ -5801,9 +5806,14 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
i64 collapsed_zones_count = 0;
|
||||
i64 collapsed_start_ns = 0;
|
||||
i64 collapsed_end_ns = 0;
|
||||
f32 zone_collapse_threshold_px = 10;
|
||||
if (closest_start->end_ns >= view_start_ns && closest_start->start_ns <= view_end_ns)
|
||||
{
|
||||
f32 zone_collapse_threshold_px = 5;
|
||||
for (V_ZoneChunk *chunk = closest_start; chunk && chunk->start_ns <= view_end_ns; chunk = chunk->nexts[0])
|
||||
{
|
||||
i64 visual_chunk_start_ns = MaxI64(chunk->start_ns, profiler->view_ns);
|
||||
@ -5812,7 +5822,15 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
|
||||
b32 should_collapse_chunk = visual_chunk_len_px <= zone_collapse_threshold_px;
|
||||
|
||||
if (!should_collapse_chunk)
|
||||
// TODO: Larger chunks w/ binary search to locate start & end zones
|
||||
|
||||
|
||||
// FIXME: Enable this
|
||||
// if (!should_collapse_chunk)
|
||||
|
||||
|
||||
|
||||
|
||||
{
|
||||
b32 reached_end_of_view = 0;
|
||||
for (u64 chunk_zone_idx = 0; chunk_zone_idx < chunk->zones_count && !reached_end_of_view; ++chunk_zone_idx)
|
||||
@ -5822,26 +5840,71 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
i64 zone_start_ns = zone->start_ns;
|
||||
i64 zone_end_ns = MinI64(zone->end_ns, frame->time_ns);
|
||||
i64 zone_elapsed_ns = zone_end_ns - zone_start_ns;
|
||||
|
||||
i64 visual_zone_start_ns = MaxI64(zone_start_ns, profiler->view_ns);
|
||||
i64 visual_zone_end_ns = MinI64(zone_end_ns, profiler->view_ns + view_range_len_ns);
|
||||
f64 visual_zone_start_px = visual_zone_start_ns / profiler->ns_per_px;
|
||||
f64 visual_zone_len_px = (visual_zone_end_ns - visual_zone_start_ns) / profiler->ns_per_px;
|
||||
|
||||
b32 zone_should_collapse = visual_zone_len_px <= zone_collapse_threshold_px;
|
||||
String zone_name = zone->name;
|
||||
u64 zone_id = zone->id;
|
||||
Vec4 zone_color = zone->color;
|
||||
|
||||
b32 should_collapse_zone = visual_zone_len_px <= zone_collapse_threshold_px;
|
||||
// b32 should_collapse_zone = 0;
|
||||
|
||||
if (visual_zone_start_ns > view_end_ns)
|
||||
{
|
||||
reached_end_of_view = 1;
|
||||
}
|
||||
|
||||
if (visual_zone_end_ns >= view_start_ns && visual_zone_start_ns <= view_end_ns && !zone_should_collapse)
|
||||
if (should_collapse_zone)
|
||||
{
|
||||
if (collapsed_zones_count <= 0)
|
||||
{
|
||||
collapsed_start_ns = zone_start_ns;
|
||||
}
|
||||
collapsed_end_ns = zone_end_ns;
|
||||
collapsed_zones_count += 1;
|
||||
}
|
||||
|
||||
// Draw collapsed zones
|
||||
// FIXME: Draw final collapsed zones in chunk
|
||||
if (collapsed_zones_count > 0 && (!should_collapse_zone || reached_end_of_view))
|
||||
{
|
||||
i64 collapsed_zone_start_ns = collapsed_start_ns;
|
||||
i64 collapsed_zone_end_ns = MinI64(collapsed_end_ns, frame->time_ns);
|
||||
i64 collapsed_zone_elapsed_ns = collapsed_zone_end_ns - collapsed_zone_start_ns;
|
||||
f64 collapsed_visual_zone_start_ns = MaxI64(collapsed_zone_start_ns, profiler->view_ns);
|
||||
f64 collapsed_visual_zone_end_ns = MinI64(collapsed_zone_end_ns, profiler->view_ns + view_range_len_ns);
|
||||
f64 collapsed_visual_zone_start_px = collapsed_visual_zone_start_ns / profiler->ns_per_px;
|
||||
f64 collapsed_visual_zone_len_px = (collapsed_visual_zone_end_ns - collapsed_visual_zone_start_ns) / profiler->ns_per_px;
|
||||
{
|
||||
VisZone *vis_zone = PushStruct(frame->arena, VisZone);
|
||||
SllQueuePush(vis_track->first_zone, vis_track->last_zone, vis_zone);
|
||||
// vis_zone->name = StringF(frame->arena, "%F collapsed zones", FmtSint(collapsed_zones_count));
|
||||
vis_zone->name = Lit("Collapsed");
|
||||
vis_zone->id = MixU64s(zone->id, V_CollapsedZoneBasis);
|
||||
vis_zone->color = VEC4(0.55, 0.15, 0.15, 1);
|
||||
vis_zone->start_px = collapsed_visual_zone_start_px;
|
||||
vis_zone->len_px = collapsed_visual_zone_len_px;
|
||||
vis_zone->elapsed_ns = collapsed_zone_elapsed_ns;
|
||||
vis_zone->depth = row_idx;
|
||||
vis_zone->is_collapsed = 1;
|
||||
vis_zone->collapsed_count = collapsed_zones_count;
|
||||
vis_track->rows_count = MaxU32(vis_track->rows_count, vis_zone->depth + 1);
|
||||
}
|
||||
collapsed_zones_count = 0;
|
||||
collapsed_start_ns = 0;
|
||||
collapsed_end_ns = 0;
|
||||
}
|
||||
|
||||
if (!should_collapse_zone && visual_zone_end_ns >= view_start_ns && visual_zone_start_ns <= view_end_ns)
|
||||
{
|
||||
VisZone *vis_zone = PushStruct(frame->arena, VisZone);
|
||||
SllQueuePush(vis_track->first_zone, vis_track->last_zone, vis_zone);
|
||||
vis_zone->name = zone->name;
|
||||
vis_zone->id = zone->id;
|
||||
vis_zone->color = zone->color;
|
||||
vis_zone->name = zone_name;
|
||||
vis_zone->id = zone_id;
|
||||
vis_zone->color = zone_color;
|
||||
vis_zone->start_px = visual_zone_start_px;
|
||||
vis_zone->len_px = visual_zone_len_px;
|
||||
vis_zone->elapsed_ns = zone_elapsed_ns;
|
||||
@ -6012,67 +6075,31 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
hovered_zone = zone;
|
||||
}
|
||||
|
||||
f64 zone_offset_px = zone->start_px - view_start_px;
|
||||
f64 zone_len_px = zone->len_px;
|
||||
Vec2 zone_pos = VEC2(zone_offset_px, 0);
|
||||
UI_Size zone_width = UI_Px(zone_len_px, 1);
|
||||
|
||||
Vec4 zone_color = zone->color;
|
||||
// Vec4 zone_color_bd = Zi;
|
||||
Vec4 zone_color_bd = zone_color;
|
||||
|
||||
// Vec4 zone_color_dim = VEC4(0.15, 0.15, 0.15, 0);
|
||||
// zone_color_bd.r -= zone_color_dim.r;
|
||||
// zone_color_bd.g -= zone_color_dim.g;
|
||||
// zone_color_bd.b -= zone_color_dim.b;
|
||||
|
||||
zone_color_bd = MulVec4(zone_color_bd, 0.65);
|
||||
zone_color_bd.a = 1;
|
||||
|
||||
Vec4 zone_text_color = UI_Top(TextColor);
|
||||
zone_text_color.a *= 0.75;
|
||||
|
||||
|
||||
// zone_color_bd = LerpSrgb(zone_color_bd, theme.col.button_selected, UI_Hot(zone_box));
|
||||
// zone_color_bd = LerpSrgb(zone_color_bd, theme.col.button_active, UI_Hot(zone_box));
|
||||
zone_color_bd = LerpSrgb(zone_color_bd, Color_White, UI_Hot(zone_box));
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
f64 zone_offset_px = zone->start_px - view_start_px;
|
||||
f64 zone_len_px = zone->len_px;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// f64 zone_len_ns = zone->end_ns - zone->start_ns;
|
||||
// f64 zone_len_px = zone_len_ns / profiler->ns_per_px;
|
||||
// f64 zone_offset_px = (zone->end_ns - profiler->view_ns) / profiler->ns_per_px;
|
||||
|
||||
// // f64 zone_len_ns = zone->end_ns - zone->start_ns;
|
||||
// // f64 zone_len_px = zone_len_ns / profiler->ns_per_px;
|
||||
// // f32 zone_offset_px = (zone->start_ns - profiler->view_ns) / profiler->ns_per_px;
|
||||
|
||||
|
||||
Vec2 zone_pos = VEC2(zone_offset_px, 0);
|
||||
UI_Size zone_width = UI_Px(zone_len_px, 1);
|
||||
|
||||
|
||||
|
||||
|
||||
// TODO: Remove this
|
||||
UI_SetNext(Text, StringF(frame->arena, "ZONE %F", FmtUint(zone->id)));
|
||||
|
||||
|
||||
// if (do_break && UI_IsMouseHovered(zone_box))
|
||||
if (do_break && zone->id == 0)
|
||||
String zone_text = zone->name;
|
||||
if (zone->is_collapsed)
|
||||
{
|
||||
// UI_SetNext(DebugBreakFlags, UI_DebugBreakFlag_BuildFeedback | UI_DebugBreakFlag_CheckCursorHover);
|
||||
zone_text = StringF(frame->arena, "%F", FmtUint(zone->collapsed_count));
|
||||
zone_text_color = theme.col.positive;
|
||||
// zone_color = VEC4(0, 0, 0, 0);
|
||||
zone_color = VEC4(1, 0, 1, 1);
|
||||
zone_color_bd = VEC4(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
zone_color_bd = LerpSrgb(zone_color_bd, Color_White, UI_Hot(zone_box));
|
||||
|
||||
UI_SetNext(Width, zone_width);
|
||||
UI_SetNext(Height, UI_Grow(1, 0));
|
||||
@ -6083,28 +6110,38 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
UI_SetNext(ChildAlignment, UI_Region_Center);
|
||||
UI_SetNext(Flags, UI_BoxFlag_Floating | UI_BoxFlag_DontClampFloatingX | UI_BoxFlag_DontClampFloatingY | UI_BoxFlag_CaptureMouse | UI_BoxFlag_Scissor);
|
||||
UI_SetNext(Parent, zone_row_box);
|
||||
// UI_SetNext(Flags, UI_BoxFlag_Floating | UI_BoxFlag_DontClampFloatingX | UI_BoxFlag_DontClampFloatingY);
|
||||
UI_SetDF(OrFlags, UI_Top(OrFlags) | (UI_BoxFlag_DontTruncateText * !!(zone->is_collapsed)))
|
||||
UI_SetDF(Parent, UI_BuildRowEx(zone_box))
|
||||
{
|
||||
// UI_BuildSpacer(UI_Px(zone_text_padding_px, 0.25), Axis_X);
|
||||
// UI_BuildSpacer(UI_Px(zone_text_padding_px, 0), Axis_X);
|
||||
// UI_BuildSpacer(UI_Grow(1, 0), Axis_X);
|
||||
// Collapsed line
|
||||
if (zone->is_collapsed)
|
||||
{
|
||||
UI_SetNext(Flags, UI_BoxFlag_Floating);
|
||||
UI_SetDF(Opacity, 0.25)
|
||||
UI_SetDF(Parent, UI_BuildColumn())
|
||||
{
|
||||
UI_BuildSpacer(UI_Grow(1, 0), Axis_Y);
|
||||
|
||||
// UI_SetNext(Width, UI_Shrink(0, 1));
|
||||
UI_SetNext(Width, UI_Shrink(0, 0));
|
||||
// UI_SetNext(Width, UI_Grow(1, 1));
|
||||
UI_SetNext(ChildAlignment, UI_Region_Center);
|
||||
// UI_SetNext(ChildAlignment, UI_Region_Left);
|
||||
UI_SetNext(FontSize, UI_Top(FontSize) * theme.h5);
|
||||
UI_SetNext(TextColor, zone_text_color);
|
||||
UI_SetNext(Text, zone->name);
|
||||
// UI_SetNext(Flags, UI_BoxFlag_DrawText | UI_BoxFlag_DontTruncateText);
|
||||
UI_SetNext(Flags, UI_BoxFlag_DrawText);
|
||||
UI_BuildRow();
|
||||
UI_SetNext(Width, UI_Grow(1, 0));
|
||||
UI_SetNext(Height, UI_Fnt(0.1, 1));
|
||||
UI_SetNext(Anchor, UI_Region_Center);
|
||||
UI_SetNext(BackgroundColor, theme.col.positive);
|
||||
UI_BuildBox();
|
||||
|
||||
// UI_BuildSpacer(UI_Px(zone_text_padding_px, 1), Axis_X);
|
||||
// UI_BuildSpacer(UI_Px(zone_text_padding_px, 0), Axis_X);
|
||||
// UI_BuildSpacer(UI_Grow(1, 0), Axis_X);
|
||||
UI_BuildSpacer(UI_Grow(1, 0), Axis_Y);
|
||||
}
|
||||
}
|
||||
|
||||
// Zone name
|
||||
{
|
||||
UI_SetNext(Width, UI_Shrink(0, 0));
|
||||
UI_SetNext(ChildAlignment, UI_Region_Center);
|
||||
UI_SetNext(FontSize, UI_Top(FontSize) * theme.h5);
|
||||
UI_SetNext(TextColor, zone_text_color);
|
||||
UI_SetNext(Text, zone_text);
|
||||
UI_SetNext(Flags, UI_BoxFlag_DrawText);
|
||||
UI_BuildRow();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -6183,23 +6220,11 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
tooltip_pos = AddVec2(tooltip_pos, theme.tooltip_offset_px);
|
||||
f32 tooltip_opacity = 0.95;
|
||||
|
||||
|
||||
// UI_Key tooltip_box = UI_KeyF("tooltip");
|
||||
// Vec2 main_cursor_pos = SubVec2(frame->screen_cursor, UI_Anchor(main_box));
|
||||
// tooltip_pos = AddVec2(tooltip_pos, theme.tooltip_offset_px);
|
||||
// Vec2 tooltip_pos = VEC2(main_cursor_pos.x, main_cursor_pos.y);
|
||||
// Vec2 tooltip_pos = VEC2(main_cursor_pos.x, UI_Rect(hovered_zone_box).p0.y - UI_Rect(main_box).p0.y);
|
||||
// f32 tooltip_opacity = 0.75;
|
||||
|
||||
|
||||
|
||||
UI_SetNext(Opacity, tooltip_opacity);
|
||||
UI_SetNext(BackgroundColor, theme.col.window_bg);
|
||||
UI_SetNext(BorderColor, theme.col.window_bd);
|
||||
UI_SetNext(Rounding, UI_Rpx(theme.rounding * 5));
|
||||
UI_SetNext(BorderSize, 1);
|
||||
// UI_SetNext(Width, UI_Fnt(15, 0));
|
||||
// UI_SetNext(Height, UI_Fnt(15, 0));
|
||||
UI_SetNext(Anchor, UI_Region_TopLeft);
|
||||
UI_SetNext(FloatingPos, tooltip_pos);
|
||||
UI_SetNext(Flags, UI_BoxFlag_Floating);
|
||||
@ -6232,11 +6257,19 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
// UI_BuildLabelF("%Fms", FmtFloat(MsFromNs(zone_elapsed_ns), .p = 2));
|
||||
UI_SetDF(Parent, UI_BuildRow())
|
||||
{
|
||||
UI_SetNext(TextColor, theme.col.hint);
|
||||
UI_BuildLabelF("%F: ", FmtString(zone->name));
|
||||
|
||||
UI_BuildLabelF("%F", FmtTimeNs(zone->elapsed_ns, .p = 2));
|
||||
|
||||
UI_BuildLabelF("%F ", FmtTimeNs(zone->elapsed_ns, .p = 2));
|
||||
if (zone->is_collapsed)
|
||||
{
|
||||
UI_SetNext(TextColor, theme.col.hint);
|
||||
UI_BuildLabelF("Collapsed zones");
|
||||
UI_SetNext(TextColor, theme.col.positive);
|
||||
UI_BuildLabelF(" (%F)", FmtUint(zone->collapsed_count));
|
||||
}
|
||||
else
|
||||
{
|
||||
UI_SetNext(TextColor, theme.col.hint);
|
||||
UI_BuildLabelF("%F", FmtString(zone->name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -243,6 +243,7 @@ Struct(V_Palette)
|
||||
#define V_MaxZonesPerChunk 1024
|
||||
#define V_MaxZoneDepth 128
|
||||
#define V_ZoneChunkLevelsCount 32
|
||||
#define V_CollapsedZoneBasis 0x4a06f782d21f18af
|
||||
|
||||
Struct(V_Zone)
|
||||
{
|
||||
|
||||
@ -1878,6 +1878,13 @@ void UI_EndFrame(UI_Frame *frame, i32 vsync)
|
||||
GC_Run elipses_run = UI_ScaleRun(frame->arena, elipses_run_unscaled, box->solved_scale);
|
||||
f32 truncation_offset = max_baseline_length - elipses_run.baseline_length;
|
||||
|
||||
|
||||
|
||||
// FIXME: OOB - final_rects[final_rects_count] = rr;
|
||||
|
||||
|
||||
|
||||
|
||||
// Append non-overflowed rects
|
||||
f32 elipses_offset = 0;
|
||||
final_rects = PushStructsNoZero(scratch.arena, GC_RunRect, raw_run.rects_count);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user