From f2a19b29d98807ebf8557341ffe3c064ae568753 Mon Sep 17 00:00:00 2001
From: Sally Coolatta <tehrealsalt@gmail.com>
Date: Wed, 27 Apr 2022 18:59:54 -0400
Subject: [PATCH] Put interpdebug stuff in perfstats instead

---
 src/d_main.c      |  7 ++++---
 src/m_perfstats.c | 20 ++++++++++++++++++--
 src/r_fps.c       |  4 +++-
 src/r_fps.h       |  5 ++++-
 src/r_main.c      |  1 -
 src/st_stuff.c    | 20 --------------------
 src/st_stuff.h    |  2 --
 7 files changed, 29 insertions(+), 30 deletions(-)

diff --git a/src/d_main.c b/src/d_main.c
index 7a8ae5f0f9..850da2f1aa 100644
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -841,9 +841,10 @@ void D_SRB2Loop(void)
 				tictime = entertime;
 			}
 
-			dbg_entertime = entertime;
-			dbg_prevtime = prevtime;
-			dbg_tictime = tictime;
+			// I looked at the possibility of putting in a float drawer for
+			// perfstats and it's very complicated, so we'll just do this instead...
+			ps_interp_frac.value.p = (precise_t)((entertime - tictime) * 1000.0f);
+			ps_interp_lag.value.p = (precise_t)((entertime - prevtime) * 1000.0f);
 
 			if (!(paused || P_AutoPause()))
 			{
diff --git a/src/m_perfstats.c b/src/m_perfstats.c
index 9fc41000d2..f58959f1dc 100644
--- a/src/m_perfstats.c
+++ b/src/m_perfstats.c
@@ -17,6 +17,7 @@
 #include "i_system.h"
 #include "z_zone.h"
 #include "p_local.h"
+#include "r_fps.h"
 
 #ifdef HWRENDER
 #include "hardware/hw_main.h"
@@ -122,6 +123,12 @@ perfstatrow_t commoncounter_rows[] = {
 	{0}
 };
 
+perfstatrow_t interpolation_rows[] = {
+	{"intpfrc", "Interp frac: ", &ps_interp_frac, PS_TIME},
+	{"intplag", "Interp lag:  ", &ps_interp_lag, PS_TIME},
+	{0}
+};
+
 #ifdef HWRENDER
 perfstatrow_t batchcount_rows[] = {
 	{"polygon", "Polygons:  ", &ps_hw_numpolys, 0},
@@ -473,6 +480,9 @@ static void PS_UpdateFrameStats(void)
 		if (PS_IsLevelActive())
 			PS_UpdateRowHistories(commoncounter_rows, true);
 
+		if (R_UsingFrameInterpolation())
+			PS_UpdateRowHistories(interpolation_rows, true);
+
 #ifdef HWRENDER
 		if (rendermode == render_opengl && cv_glbatching.value)
 		{
@@ -634,7 +644,7 @@ static void PS_DrawRenderStats(void)
 {
 	const boolean hires = PS_HighResolution();
 	const int half_row = hires ? 5 : 4;
-	int x, y;
+	int x, y, cy = 10;
 
 	PS_DrawDescriptorHeader();
 
@@ -645,7 +655,7 @@ static void PS_DrawRenderStats(void)
 	if (PS_IsLevelActive())
 	{
 		x = hires ? 115 : 90;
-		PS_DrawPerfRows(x, 10, V_BLUEMAP, commoncounter_rows);
+		cy = PS_DrawPerfRows(x, 10, V_BLUEMAP, commoncounter_rows) + half_row;
 
 #ifdef HWRENDER
 		if (rendermode == render_opengl && cv_glbatching.value)
@@ -659,6 +669,12 @@ static void PS_DrawRenderStats(void)
 		}
 #endif
 	}
+
+	if (R_UsingFrameInterpolation())
+	{
+		x = hires ? 115 : 90;
+		PS_DrawPerfRows(x, cy, V_ROSYMAP, interpolation_rows);
+	}
 }
 
 static void PS_DrawGameLogicStats(void)
diff --git a/src/r_fps.c b/src/r_fps.c
index 6307d83a1a..b4b11a43ae 100644
--- a/src/r_fps.c
+++ b/src/r_fps.c
@@ -22,6 +22,7 @@
 #include "r_state.h"
 #include "z_zone.h"
 #include "console.h" // con_startup_loadprogress
+#include "m_perfstats.h" // ps_metric_t
 #ifdef HWRENDER
 #include "hardware/hw_main.h" // for cv_glshearing
 #endif
@@ -40,7 +41,8 @@ static CV_PossibleValue_t fpscap_cons_t[] = {
 };
 consvar_t cv_fpscap = CVAR_INIT ("fpscap", "Match refresh rate", CV_SAVE, fpscap_cons_t, NULL);
 
-consvar_t cv_interpdebug = CVAR_INIT ("interpdebug", "Off", 0, CV_OnOff, NULL);
+ps_metric_t ps_interp_frac = {0};
+ps_metric_t ps_interp_lag = {0};
 
 UINT32 R_GetFramerateCap(void)
 {
diff --git a/src/r_fps.h b/src/r_fps.h
index 4a0750c3a5..cf66d72f97 100644
--- a/src/r_fps.h
+++ b/src/r_fps.h
@@ -18,9 +18,12 @@
 #include "m_fixed.h"
 #include "p_local.h"
 #include "r_state.h"
+#include "m_perfstats.h" // ps_metric_t
 
 extern consvar_t cv_fpscap;
-extern consvar_t cv_interpdebug;
+
+extern ps_metric_t ps_interp_frac;
+extern ps_metric_t ps_interp_lag;
 
 UINT32 R_GetFramerateCap(void);
 boolean R_UsingFrameInterpolation(void);
diff --git a/src/r_main.c b/src/r_main.c
index a3bddf44fa..896b6a29b9 100644
--- a/src/r_main.c
+++ b/src/r_main.c
@@ -1625,5 +1625,4 @@ void R_RegisterEngineStuff(void)
 
 	// Frame interpolation/uncapped
 	CV_RegisterVar(&cv_fpscap);
-	CV_RegisterVar(&cv_interpdebug);
 }
diff --git a/src/st_stuff.c b/src/st_stuff.c
index 535c68ee89..6ab3102524 100644
--- a/src/st_stuff.c
+++ b/src/st_stuff.c
@@ -623,24 +623,6 @@ static void ST_drawDebugInfo(void)
 #undef VFLAGS
 }
 
-float dbg_entertime = 0.0f, dbg_prevtime = 0.0f, dbg_tictime = 0.0f;
-static void ST_DrawInterpDebug(void)
-{
-	// TODO: when the devmode situation stops sucking eggs,
-	// remove cv_interpdebug and use DBG_RENDER instead.
-	if (!cv_interpdebug.value || !R_UsingFrameInterpolation())
-	{
-		return;
-	}
-
-	V_DrawRightAlignedString(312, 8, V_MONOSPACE, va("enter - tic: %.3f", dbg_entertime - dbg_tictime));
-	V_DrawRightAlignedString(312, 16, V_MONOSPACE, va("enter - prev: %.3f", dbg_entertime - dbg_prevtime));
-
-	V_DrawRightAlignedString(312, 24, V_MONOSPACE, va("tic: %.3f", dbg_tictime));
-	V_DrawRightAlignedString(312, 32, V_MONOSPACE, va("prev: %.3f", dbg_prevtime));
-	V_DrawRightAlignedString(312, 40, V_MONOSPACE, va("enter: %.3f", dbg_entertime));
-}
-
 static void ST_drawScore(void)
 {
 	if (F_GetPromptHideHud(hudinfo[HUD_SCORE].y))
@@ -2775,8 +2757,6 @@ static void ST_overlayDrawer(void)
 		ST_drawInput();
 
 	ST_drawDebugInfo();
-
-	ST_DrawInterpDebug();
 }
 
 void ST_Drawer(void)
diff --git a/src/st_stuff.h b/src/st_stuff.h
index 0956bbb7d6..c59bc2ac69 100644
--- a/src/st_stuff.h
+++ b/src/st_stuff.h
@@ -55,8 +55,6 @@ void ST_preDrawTitleCard(void);
 void ST_preLevelTitleCardDrawer(void);
 void ST_drawWipeTitleCard(void);
 
-extern float dbg_entertime, dbg_prevtime, dbg_tictime;
-
 extern tic_t lt_ticker, lt_lasttic;
 extern tic_t lt_exitticker, lt_endtime;
 
-- 
GitLab