diff --git a/src/pp/pp_vis/pp_vis_core.c b/src/pp/pp_vis/pp_vis_core.c index 3be03858..ba570e98 100644 --- a/src/pp/pp_vis/pp_vis_core.c +++ b/src/pp/pp_vis/pp_vis_core.c @@ -5495,6 +5495,22 @@ void V_TickForever(WaveLaneCtx *lane) } + + + + + + + + + + + + + + + + @@ -5517,13 +5533,8 @@ void V_TickForever(WaveLaneCtx *lane) UI_Key profiler_graph_box = UI_KeyF("graph"); UI_SetDF(OmitFlags, UI_BoxFlag_CaptureMouse * !!(frame->is_looking)) - if (TweakBool("Show profiler", 1)) + if (profiler->is_showing) { - profiler->is_showing = 1; - - - - // FIXME: Remove this @@ -5600,23 +5611,49 @@ void V_TickForever(WaveLaneCtx *lane) // FIXME: Remove this - f32 prof_zoom_rate = 1.5; + f32 prof_zoom_rate = 1.65; f64 prof_lerp_rate = SaturateF64(frame->dt * 25); + { + f64 zooms = UI_Presses(main_box, Button_WheelDown) - UI_Presses(main_box, Button_WheelUp); + f64 zoom_factor = PowF64(prof_zoom_rate, zooms); + profiler->target_ns_per_px *= zoom_factor; + profiler->target_view_ns = profiler->cursor_ns - (profiler->cursor_ns - profiler->target_view_ns) * zoom_factor; + if (zooms != 0) + { + profiler->last_zoom_delta = profiler->target_ns_per_px - profiler->ns_per_px; + profiler->last_view_delta = profiler->target_view_ns - profiler->view_ns; + } + f64 overshoot_rate = 2 * frame->dt; + profiler->ns_per_px = LerpF64(profiler->ns_per_px, profiler->target_ns_per_px + profiler->last_zoom_delta * overshoot_rate, prof_lerp_rate); + profiler->view_ns = LerpF64(profiler->view_ns, profiler->target_view_ns + profiler->last_view_delta * overshoot_rate, prof_lerp_rate); + + if (profiler->last_zoom_delta < 0) + { + profiler->ns_per_px = MaxF64(profiler->ns_per_px, profiler->target_ns_per_px); + } + else if (profiler->last_zoom_delta > 0) + { + profiler->ns_per_px = MinF64(profiler->ns_per_px, profiler->target_ns_per_px); + } + + if (profiler->last_view_delta < 0) + { + profiler->view_ns = MaxF64(profiler->view_ns, profiler->target_view_ns); + } + else if (profiler->last_view_delta > 0) + { + profiler->view_ns = MinF64(profiler->view_ns, profiler->target_view_ns); + } + } + + - f64 zoom_factor = PowF64(prof_zoom_rate, UI_Presses(main_box, Button_WheelDown) - UI_Presses(main_box, Button_WheelUp)); - profiler->target_ns_per_px *= zoom_factor; - profiler->target_ns_per_px = ClampF64(profiler->target_ns_per_px, min_profiler_ns_per_px, max_profiler_ns_per_px); - // profiler->view_ns = profiler->cursor_ns - (profiler->cursor_ns - profiler->view_ns) * zoom_factor; - // TODO: Don't apply offset when zoom movement was clamped - profiler->target_view_ns = profiler->cursor_ns - (profiler->cursor_ns - profiler->target_view_ns) * zoom_factor; - profiler->ns_per_px = LerpF64(profiler->ns_per_px, profiler->target_ns_per_px, prof_lerp_rate); - profiler->view_ns = LerpF64(profiler->view_ns, profiler->target_view_ns, prof_lerp_rate); @@ -5736,7 +5773,6 @@ void V_TickForever(WaveLaneCtx *lane) i64 start_ns; i64 end_ns; - b32 is_collapsed; u64 collapsed_count; }; @@ -5784,8 +5820,8 @@ void V_TickForever(WaveLaneCtx *lane) SllQueuePush(first_bfs_zone, last_bfs_zone, root_bfs); } - VisZone *collapsed_vis_zone = 0; - V_Zone *collapsed_zone_parent = 0; + VisZone *prev_vis_zone = 0; + V_Zone *prev_zone_parent = 0; for (BfsZone *bfs_zone = first_bfs_zone; bfs_zone; bfs_zone = first_bfs_zone) { SllQueuePop(first_bfs_zone, last_bfs_zone); @@ -5796,8 +5832,30 @@ void V_TickForever(WaveLaneCtx *lane) 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_end_px = MaxF64(visual_zone_end_ns / profiler->ns_per_px, visual_zone_start_px + min_zone_width_px); + if (prev_vis_zone && prev_zone_parent == zone->parent) + // if (prev_vis_zone) + { + // visual_zone_start_px = MaxF64(visual_zone_start_px, prev_vis_zone->end_px + 1); + + // f64 px = prev_vis_zone->end_px; + // prev_vis_zone->end_px = CeilF64(px); + // visual_zone_start_px = MaxF64(visual_zone_start_px, CeilF64(prev_vis_zone->end_px)); + + f64 px = prev_vis_zone->end_px; + prev_vis_zone->end_px = FloorF64(px); + visual_zone_start_px = CeilF64(px); + } + + // f64 visual_zone_end_px = MaxF64(visual_zone_end_ns / profiler->ns_per_px, visual_zone_start_px + min_zone_width_px); + f64 visual_zone_end_px = visual_zone_end_ns / profiler->ns_per_px; + // f64 visual_zone_end_px = visual_zone_end_ns / profiler->ns_per_px - 1; + + + // visual_zone_start_px = FloorF64(visual_zone_start_px); + // visual_zone_end_px = CeilF64(visual_zone_end_px); + b32 is_root_zone = zone == zone_track->root_zone; b32 should_collapse_zone = (zone_elapsed_ns / profiler->ns_per_px) <= zone_collapse_threshold_px && !is_root_zone; @@ -5854,12 +5912,13 @@ void V_TickForever(WaveLaneCtx *lane) VisZone *vis_zone = 0; if ( should_collapse_zone && - collapsed_vis_zone && - collapsed_zone_parent == zone->parent && - ((zone_start_ns - collapsed_vis_zone->end_ns) / profiler->ns_per_px) < zone_collapse_threshold_px + prev_vis_zone && + prev_vis_zone->collapsed_count > 0 && + prev_zone_parent == zone->parent && + ((zone_start_ns - prev_vis_zone->end_ns) / profiler->ns_per_px) < zone_collapse_threshold_px ) { - vis_zone = collapsed_vis_zone; + vis_zone = prev_vis_zone; } else { @@ -5879,11 +5938,11 @@ void V_TickForever(WaveLaneCtx *lane) if (should_collapse_zone) { - vis_zone->is_collapsed = 1; vis_zone->collapsed_count += zone->total_descendents_count + 1; - collapsed_vis_zone = vis_zone; - collapsed_zone_parent = zone->parent; } + + prev_vis_zone = vis_zone; + prev_zone_parent = zone->parent; } } } @@ -6061,10 +6120,10 @@ void V_TickForever(WaveLaneCtx *lane) { zone_text = StringF(frame->arena, "%F", FmtUint(zone->collapsed_count)); zone_text_color = collapsed_text_color; - zone_color = VEC4(0, 0, 0, 0); + // zone_color = VEC4(0, 0, 0, 0); // zone_color = VEC4(1, 0, 1, 1); // zone_color = VEC4(0.15, 0.15, 0.15, 0.5); - // zone_color = VEC4(0.20, 0.20, 0.20, 0.5); + zone_color = VEC4(0.20, 0.20, 0.20, 0.5); zone_color_bd = VEC4(0, 0, 0, 0); } @@ -6109,7 +6168,7 @@ void V_TickForever(WaveLaneCtx *lane) } // Zone name - if (zone_len_px > zone_collapse_threshold_px) + if (zone_len_px > zone_collapse_threshold_px * 3) { if (is_collapsed) { @@ -6375,12 +6434,6 @@ void V_TickForever(WaveLaneCtx *lane) - - - - - - @@ -7215,6 +7268,11 @@ void V_TickForever(WaveLaneCtx *lane) frame->show_console = !frame->show_console; } break; + case V_CmdKind_toggle_profiler: + { + frame->profiler.is_showing = !frame->profiler.is_showing; + } break; + case V_CmdKind_toggle_timeline: { frame->timeline.show = !frame->timeline.show; @@ -7342,6 +7400,10 @@ void V_TickForever(WaveLaneCtx *lane) } } + + + + ////////////////////////////// //- Begin gpu frame diff --git a/src/pp/pp_vis/pp_vis_core.h b/src/pp/pp_vis/pp_vis_core.h index c2591a25..c4e20021 100644 --- a/src/pp/pp_vis/pp_vis_core.h +++ b/src/pp/pp_vis/pp_vis_core.h @@ -11,7 +11,8 @@ X(save_level, Save level, V_CmdDescFlag_None, V_HOTKEY( Button_S, .ctrl = 1 ), ) \ X(toggle_ui_debug, Toggle UI Debug, V_CmdDescFlag_None, V_HOTKEY( Button_F5 ), ) \ X(toggle_console, Toggle Developer Console, V_CmdDescFlag_None, V_HOTKEY( Button_GraveAccent ), ) \ - X(toggle_timeline, Toggle Debug Timeline, V_CmdDescFlag_None, V_HOTKEY( Button_GraveAccent, .alt = 1 ), ) \ + X(toggle_timeline, Toggle Debug Timeline, V_CmdDescFlag_None, V_HOTKEY( Button_GraveAccent, .alt = 1, .ctrl = 1 ), ) \ + X(toggle_profiler, Toggle Profiler, V_CmdDescFlag_None, V_HOTKEY( Button_GraveAccent, .alt = 1 ), ) \ X(pause_timeline, Pause Debug Timeline, V_CmdDescFlag_HideFromPalette, V_HOTKEY( Button_E ), ) \ X(lock_timeline, Lock Debug Timeline, V_CmdDescFlag_HideFromPalette, V_HOTKEY( Button_R ), ) \ X(toggle_fullscreen, Toggle Fullscreen Mode, V_CmdDescFlag_None, V_HOTKEY( Button_Enter, .alt = 1 ) ) \ @@ -307,9 +308,15 @@ Struct(V_Profiler) f64 ruler_start_ns; f32 ruler_opacity; + f64 last_zoom_delta; + f64 last_view_delta; + f64 target_ns_per_px; f64 ns_per_px; + f64 zoom_level; + f64 target_zoom_level; + f64 cursor_ns; f64 drag_cursor_px; }; diff --git a/src/ui/ui_core.c b/src/ui/ui_core.c index b53cff2a..362f7780 100644 --- a/src/ui/ui_core.c +++ b/src/ui/ui_core.c @@ -835,7 +835,7 @@ UI_Frame *UI_BeginFrame(UI_FrameFlag frame_flags) feedback->active_smooth = SaturateF32(LerpF32(feedback->active_smooth, target_active, active_blend_rate)); feedback->hot_smooth = SaturateF32(LerpF32(feedback->hot_smooth, target_hot, hot_blend_rate)); - feedback->hovered_smooth = SaturateF32(LerpF32(feedback->hovered_smooth, target_hovered, hovered_blend_rate)); + feedback->hovered_smooth = SaturateF32(LerpF32(feedback->hovered_smooth, target_hovered, hovered_blend_rate)); feedback->exists_smooth = SaturateF32(LerpF32(feedback->exists_smooth, target_exists, exists_blend_rate)); feedback->misc_smooth = SaturateF32(LerpF32(feedback->misc_smooth, target_misc, misc_blend_rate));