]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
host: Clean it up. Give some functions new names and new homes.
authorcloudwalk <cloudwalk@d7cf8633-e32d-0410-b094-e92efae38249>
Fri, 14 May 2021 16:22:11 +0000 (16:22 +0000)
committercloudwalk <cloudwalk@d7cf8633-e32d-0410-b094-e92efae38249>
Fri, 14 May 2021 16:22:11 +0000 (16:22 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@13135 d7cf8633-e32d-0410-b094-e92efae38249

cmd.c
cmd.h
fs.c
host.c
host.h
jpeg.c
server.h
snd_main.c
sv_ccmds.c
sv_main.c

diff --git a/cmd.c b/cmd.c
index 7632fa14ff6cf22d78b70c3210e2d75f2ffa445a..fba45672c5a341bb3d70b12c144b29ee8c4fb489 100644 (file)
--- a/cmd.c
+++ b/cmd.c
@@ -2403,3 +2403,7 @@ void Cmd_RestoreInitState(void)
        }
        Cvar_RestoreInitState(&cvars_all);
 }
+
+void Cmd_NoOperation_f(cmd_state_t *cmd)
+{
+}
diff --git a/cmd.h b/cmd.h
index 58c8a742067520430f77872f1dc0993e4ac53c72..a1cd3be600c7a9109553729be8059076bb03120d 100644 (file)
--- a/cmd.h
+++ b/cmd.h
@@ -278,5 +278,7 @@ qbool Cmd_QuoteString(char *out, size_t outlen, const char *in, const char *quot
 
 void Cmd_ClearCSQCCommands (cmd_state_t *cmd);
 
+void Cmd_NoOperation_f(cmd_state_t *cmd);
+
 #endif
 
diff --git a/fs.c b/fs.c
index 2efb08ec9109b59c84a53b9ee04190b73a8791f6..ff62140481ea1d773b9d80d665d7a2a8e9ef058c 100644 (file)
--- a/fs.c
+++ b/fs.c
@@ -1566,7 +1566,7 @@ qbool FS_ChangeGameDirs(int numgamedirs, char gamedirs[][MAX_QPATH], qbool compl
                }
        }
 
-       Host_SaveConfig();
+       Host_SaveConfig(CONFIGFILENAME);
 
        fs_numgamedirs = numgamedirs;
        for (i = 0;i < fs_numgamedirs;i++)
diff --git a/host.c b/host.c
index 1bba0f9e9b83f86b9b8a7cc3c16961cdb5616e84..fa3c4911894d04441ef096a3a94bc59a5d31ab11 100644 (file)
--- a/host.c
+++ b/host.c
@@ -68,7 +68,6 @@ Host_AbortCurrentFrame
 aborts the current host frame and goes on with the next one
 ================
 */
-void Host_AbortCurrentFrame(void) DP_FUNC_NORETURN;
 void Host_AbortCurrentFrame(void)
 {
        // in case we were previously nice, make us mean again
@@ -182,44 +181,6 @@ static void SendCvar_f(cmd_state_t *cmd)
        }
 }
 
-/*
-=======================
-Host_InitLocal
-======================
-*/
-void Host_SaveConfig_f(cmd_state_t *cmd);
-void Host_LoadConfig_f(cmd_state_t *cmd);
-extern cvar_t sv_writepicture_quality;
-extern cvar_t r_texture_jpeg_fastpicmip;
-static void Host_InitLocal (void)
-{
-       Cmd_AddCommand(CF_SHARED, "quit", Host_Quit_f, "quit the game");
-       Cmd_AddCommand(CF_SHARED, "version", Host_Version_f, "print engine version");
-       Cmd_AddCommand(CF_SHARED, "saveconfig", Host_SaveConfig_f, "save settings to config.cfg (or a specified filename) immediately (also automatic when quitting)");
-       Cmd_AddCommand(CF_SHARED, "loadconfig", Host_LoadConfig_f, "reset everything and reload configs");
-       Cmd_AddCommand(CF_SHARED, "sendcvar", SendCvar_f, "sends the value of a cvar to the server as a sentcvar command, for use by QuakeC");
-       Cvar_RegisterVariable (&cl_maxphysicsframesperserverframe);
-       Cvar_RegisterVariable (&host_framerate);
-       Cvar_RegisterCallback (&host_framerate, Host_Framerate_c);
-       Cvar_RegisterVariable (&host_speeds);
-       Cvar_RegisterVariable (&host_maxwait);
-       Cvar_RegisterVariable (&host_isclient);
-
-       Cvar_RegisterVariable (&developer);
-       Cvar_RegisterVariable (&developer_extra);
-       Cvar_RegisterVariable (&developer_insane);
-       Cvar_RegisterVariable (&developer_loadfile);
-       Cvar_RegisterVariable (&developer_loading);
-       Cvar_RegisterVariable (&developer_entityparsing);
-
-       Cvar_RegisterVariable (&timestamps);
-       Cvar_RegisterVariable (&timeformat);
-
-       Cvar_RegisterVariable (&sv_writepicture_quality);
-       Cvar_RegisterVariable (&r_texture_jpeg_fastpicmip);
-}
-
-
 /*
 ===============
 Host_SaveConfig_f
@@ -227,7 +188,7 @@ Host_SaveConfig_f
 Writes key bindings and archived cvars to config.cfg
 ===============
 */
-static void Host_SaveConfig_to(const char *file)
+void Host_SaveConfig(const char *file)
 {
        qfile_t *f;
 
@@ -249,11 +210,8 @@ static void Host_SaveConfig_to(const char *file)
                FS_Close (f);
        }
 }
-void Host_SaveConfig(void)
-{
-       Host_SaveConfig_to(CONFIGFILENAME);
-}
-void Host_SaveConfig_f(cmd_state_t *cmd)
+
+static void Host_SaveConfig_f(cmd_state_t *cmd)
 {
        const char *file = CONFIGFILENAME;
 
@@ -262,7 +220,7 @@ void Host_SaveConfig_f(cmd_state_t *cmd)
                Con_Printf("Saving to %s\n", file);
        }
 
-       Host_SaveConfig_to(file);
+       Host_SaveConfig(file);
 }
 
 static void Host_AddConfigText(cmd_state_t *cmd)
@@ -287,7 +245,7 @@ Host_LoadConfig_f
 Resets key bindings and cvars to defaults and then reloads scripts
 ===============
 */
-void Host_LoadConfig_f(cmd_state_t *cmd)
+static void Host_LoadConfig_f(cmd_state_t *cmd)
 {
        // reset all cvars, commands and aliases to init values
        Cmd_RestoreInitState();
@@ -299,157 +257,39 @@ void Host_LoadConfig_f(cmd_state_t *cmd)
        Host_AddConfigText(cmd_local);
 }
 
-//============================================================================
-
-/*
-==================
-Host_TimeReport
-
-Returns a time report string, for example for
-==================
-*/
-const char *Host_TimingReport(char *buf, size_t buflen)
-{
-       return va(buf, buflen, "%.1f%% CPU, %.2f%% lost, offset avg %.1fms, max %.1fms, sdev %.1fms", svs.perf_cpuload * 100, svs.perf_lost * 100, svs.perf_offset_avg * 1000, svs.perf_offset_max * 1000, svs.perf_offset_sdev * 1000);
-}
-
 /*
-==================
-Host_Frame
-
-Runs all active servers
-==================
+=======================
+Host_InitLocal
+======================
 */
-static void Host_Init(void);
-double Host_Frame(double time)
-{
-       double cl_wait, sv_wait;
-
-       TaskQueue_Frame(false);
-
-       // keep the random time dependent, but not when playing demos/benchmarking
-       if(!*sv_random_seed.string && !host.restless)
-               rand();
-
-       NetConn_UpdateSockets();
-
-       Log_DestBuffer_Flush();
-
-       // Run any downloads
-       Curl_Frame();
-
-       // process console commands
-       Cbuf_Frame(host.cbuf);
-
-       R_TimeReport("---");
-
-       sv_wait = SV_Frame(time);
-       cl_wait = CL_Frame(time);
-
-//     Con_Printf("%6.0f %6.0f\n", cl_wait * 1000000.0, sv_wait * 1000000.0);
-
-       Mem_CheckSentinelsGlobal();
-
-       if(host.restless)
-               return 0;
-
-       // if the accumulators haven't become positive yet, wait a while
-       if (cls.state == ca_dedicated)
-               return sv_wait * -1000000.0; // dedicated
-       else if (!sv.active || svs.threaded)
-               return cl_wait * -1000000.0; // connected to server, main menu, or server is on different thread
-       else
-               return max(cl_wait, sv_wait) * -1000000.0; // listen server or singleplayer
-}
-
-static inline void Host_Sleep(double time)
-{
-       double delta, time0;
-
-       if(host_maxwait.value <= 0)
-               time = min(time, 1000000.0);
-       else
-               time = min(time, host_maxwait.value * 1000.0);
-       if(time < 1)
-               time = 1; // because we cast to int
-
-       time0 = Sys_DirtyTime();
-       if (sv_checkforpacketsduringsleep.integer && !sys_usenoclockbutbenchmark.integer && !svs.threaded) {
-               NetConn_SleepMicroseconds((int)time);
-               if (cls.state != ca_dedicated)
-                       NetConn_ClientFrame(); // helps server browser get good ping values
-               // TODO can we do the same for ServerFrame? Probably not.
-       }
-       else
-               Sys_Sleep((int)time);
-       delta = Sys_DirtyTime() - time0;
-       if (delta < 0 || delta >= 1800) 
-               delta = 0;
-       host.sleeptime += delta;
-//                     R_TimeReport("sleep");
-       return;
-}
-
-// Cloudwalk: Most overpowered function declaration...
-static inline double Host_UpdateTime (double newtime, double oldtime)
-{
-       double time = newtime - oldtime;
-
-       if (time < 0)
-       {
-               // warn if it's significant
-               if (time < -0.01)
-                       Con_Printf(CON_WARN "Host_UpdateTime: time stepped backwards (went from %f to %f, difference %f)\n", oldtime, newtime, time);
-               time = 0;
-       }
-       else if (time >= 1800)
-       {
-               Con_Printf(CON_WARN "Host_UpdateTime: time stepped forward (went from %f to %f, difference %f)\n", oldtime, newtime, time);
-               time = 0;
-       }
-
-       return time;
-}
-
-void Host_Main(void)
+extern cvar_t r_texture_jpeg_fastpicmip;
+static void Host_InitLocal (void)
 {
-       double time, newtime, oldtime, sleeptime;
-
-       Host_Init(); // Start!
-
-       host.realtime = 0;
-       oldtime = Sys_DirtyTime();
-
-       // Main event loop
-       while(host.state != host_shutdown)
-       {
-               // Something bad happened, or the server disconnected
-               if (setjmp(host.abortframe))
-               {
-                       host.state = host_active; // In case we were loading
-                       continue;
-               }
-
-               newtime = host.dirtytime = Sys_DirtyTime();
-               host.realtime += time = Host_UpdateTime(newtime, oldtime);
-
-               sleeptime = Host_Frame(time);
-               oldtime = newtime;
+       Cmd_AddCommand(CF_SHARED, "quit", Host_Quit_f, "quit the game");
+       Cmd_AddCommand(CF_SHARED, "version", Host_Version_f, "print engine version");
+       Cmd_AddCommand(CF_SHARED, "saveconfig", Host_SaveConfig_f, "save settings to config.cfg (or a specified filename) immediately (also automatic when quitting)");
+       Cmd_AddCommand(CF_SHARED, "loadconfig", Host_LoadConfig_f, "reset everything and reload configs");
+       Cmd_AddCommand(CF_SHARED, "sendcvar", SendCvar_f, "sends the value of a cvar to the server as a sentcvar command, for use by QuakeC");
+       Cvar_RegisterVariable (&cl_maxphysicsframesperserverframe);
+       Cvar_RegisterVariable (&host_framerate);
+       Cvar_RegisterCallback (&host_framerate, Host_Framerate_c);
+       Cvar_RegisterVariable (&host_speeds);
+       Cvar_RegisterVariable (&host_maxwait);
+       Cvar_RegisterVariable (&host_isclient);
 
-               if (sleeptime >= 1)
-               {
-                       Host_Sleep(sleeptime);
-                       continue;
-               }
+       Cvar_RegisterVariable (&developer);
+       Cvar_RegisterVariable (&developer_extra);
+       Cvar_RegisterVariable (&developer_insane);
+       Cvar_RegisterVariable (&developer_loadfile);
+       Cvar_RegisterVariable (&developer_loading);
+       Cvar_RegisterVariable (&developer_entityparsing);
 
-               host.framecount++;
-       }
+       Cvar_RegisterVariable (&timestamps);
+       Cvar_RegisterVariable (&timeformat);
 
-       return;
+       Cvar_RegisterVariable (&r_texture_jpeg_fastpicmip);
 }
 
-//============================================================================
-
 char engineversion[128];
 
 qbool sys_nostdout = false;
@@ -476,6 +316,7 @@ static void Host_InitSession(void)
                }
        }
 }
+
 void Host_LockSession(void)
 {
        if(locksession_run)
@@ -501,6 +342,7 @@ void Host_LockSession(void)
                }
        }
 }
+
 void Host_UnlockSession(void)
 {
        if(!locksession_run)
@@ -713,7 +555,6 @@ static void Host_Init (void)
                SV_StartThread();
 }
 
-
 /*
 ===============
 Host_Shutdown
@@ -753,7 +594,7 @@ void Host_Shutdown(void)
        // AK shutdown PRVM
        // AK hmm, no PRVM_Shutdown(); yet
 
-       Host_SaveConfig();
+       Host_SaveConfig(CONFIGFILENAME);
 
        Curl_Shutdown ();
        NetConn_Shutdown ();
@@ -772,6 +613,138 @@ void Host_Shutdown(void)
        Memory_Shutdown();
 }
 
-void Host_NoOperation_f(cmd_state_t *cmd)
+//============================================================================
+
+/*
+==================
+Host_Frame
+
+Runs all active servers
+==================
+*/
+static double Host_Frame(double time)
 {
+       double cl_wait, sv_wait;
+
+       TaskQueue_Frame(false);
+
+       // keep the random time dependent, but not when playing demos/benchmarking
+       if(!*sv_random_seed.string && !host.restless)
+               rand();
+
+       NetConn_UpdateSockets();
+
+       Log_DestBuffer_Flush();
+
+       // Run any downloads
+       Curl_Frame();
+
+       // process console commands
+       Cbuf_Frame(host.cbuf);
+
+       R_TimeReport("---");
+
+       sv_wait = SV_Frame(time);
+       cl_wait = CL_Frame(time);
+
+//     Con_Printf("%6.0f %6.0f\n", cl_wait * 1000000.0, sv_wait * 1000000.0);
+
+       Mem_CheckSentinelsGlobal();
+
+       if(host.restless)
+               return 0;
+
+       // if the accumulators haven't become positive yet, wait a while
+       if (cls.state == ca_dedicated)
+               return sv_wait * -1000000.0; // dedicated
+       else if (!sv.active || svs.threaded)
+               return cl_wait * -1000000.0; // connected to server, main menu, or server is on different thread
+       else
+               return max(cl_wait, sv_wait) * -1000000.0; // listen server or singleplayer
+}
+
+static inline void Host_Sleep(double time)
+{
+       double delta, time0;
+
+       if(host_maxwait.value <= 0)
+               time = min(time, 1000000.0);
+       else
+               time = min(time, host_maxwait.value * 1000.0);
+       if(time < 1)
+               time = 1; // because we cast to int
+
+       time0 = Sys_DirtyTime();
+       if (sv_checkforpacketsduringsleep.integer && !sys_usenoclockbutbenchmark.integer && !svs.threaded) {
+               NetConn_SleepMicroseconds((int)time);
+               if (cls.state != ca_dedicated)
+                       NetConn_ClientFrame(); // helps server browser get good ping values
+               // TODO can we do the same for ServerFrame? Probably not.
+       }
+       else
+               Sys_Sleep((int)time);
+       delta = Sys_DirtyTime() - time0;
+       if (delta < 0 || delta >= 1800) 
+               delta = 0;
+       host.sleeptime += delta;
+//                     R_TimeReport("sleep");
+       return;
+}
+
+// Cloudwalk: Most overpowered function declaration...
+static inline double Host_UpdateTime (double newtime, double oldtime)
+{
+       double time = newtime - oldtime;
+
+       if (time < 0)
+       {
+               // warn if it's significant
+               if (time < -0.01)
+                       Con_Printf(CON_WARN "Host_UpdateTime: time stepped backwards (went from %f to %f, difference %f)\n", oldtime, newtime, time);
+               time = 0;
+       }
+       else if (time >= 1800)
+       {
+               Con_Printf(CON_WARN "Host_UpdateTime: time stepped forward (went from %f to %f, difference %f)\n", oldtime, newtime, time);
+               time = 0;
+       }
+
+       return time;
+}
+
+void Host_Main(void)
+{
+       double time, newtime, oldtime, sleeptime;
+
+       Host_Init(); // Start!
+
+       host.realtime = 0;
+       oldtime = Sys_DirtyTime();
+
+       // Main event loop
+       while(host.state != host_shutdown)
+       {
+               // Something bad happened, or the server disconnected
+               if (setjmp(host.abortframe))
+               {
+                       host.state = host_active; // In case we were loading
+                       continue;
+               }
+
+               newtime = host.dirtytime = Sys_DirtyTime();
+               host.realtime += time = Host_UpdateTime(newtime, oldtime);
+
+               sleeptime = Host_Frame(time);
+               oldtime = newtime;
+
+               if (sleeptime >= 1)
+               {
+                       Host_Sleep(sleeptime);
+                       continue;
+               }
+
+               host.framecount++;
+       }
+
+       return;
 }
diff --git a/host.h b/host.h
index 0fcbb71427b1dd3890ee7f35eedf3901077ff476..80b5aa744e61e5bb196284de58dfebfbcaea8786 100644 (file)
--- a/host.h
+++ b/host.h
@@ -42,16 +42,12 @@ typedef struct host_s
 
 extern host_t host;
 
-void Host_InitCommands(void);
 void Host_Main(void);
-double Host_Frame(double time);
 void Host_Shutdown(void);
 void Host_Error(const char *error, ...) DP_FUNC_PRINTF(1) DP_FUNC_NORETURN;
 void Host_LockSession(void);
 void Host_UnlockSession(void);
-void Host_AbortCurrentFrame(void);
-void Host_SaveConfig(void);
-void Host_LoadConfig_f(cmd_state_t *cmd);
-void Host_NoOperation_f(cmd_state_t *cmd);
+void Host_AbortCurrentFrame(void) DP_FUNC_NORETURN;
+void Host_SaveConfig(const char *file);
 
 #endif
diff --git a/jpeg.c b/jpeg.c
index 881be47ab539dec479e1f0b9ed721c5467453cce..beab84335221c9ad4e3f06cb4e765fdc8bbc45b8 100644 (file)
--- a/jpeg.c
+++ b/jpeg.c
@@ -28,7 +28,7 @@
 #include "jpeg.h"
 #include "image_png.h"
 
-cvar_t sv_writepicture_quality = {CF_SERVER | CF_ARCHIVE, "sv_writepicture_quality", "10", "WritePicture quality offset (higher means better quality, but slower)"};
+extern cvar_t sv_writepicture_quality;
 cvar_t r_texture_jpeg_fastpicmip = {CF_CLIENT | CF_ARCHIVE, "r_texture_jpeg_fastpicmip", "1", "perform gl_picmip during decompression for JPEG files (faster)"};
 
 // jboolean is unsigned char instead of int on Win32
index 503d1b146aac2320fea96c8f8bfeebda599d5bad..07639e4b5f52c530fa71cc50e974fe12201fc95d 100644 (file)
--- a/server.h
+++ b/server.h
@@ -603,7 +603,7 @@ void SV_CheckVelocity (prvm_edict_t *ent);
 
 void SV_SetupVM(void);
 
-const char *Host_TimingReport(char *buf, size_t buflen); ///< for output in SV_Status_f
+const char *SV_TimingReport(char *buf, size_t buflen); ///< for output in SV_Status_f
 
 int SV_GetPitchSign(prvm_prog_t *prog, prvm_edict_t *ent);
 void SV_GetEntityMatrix(prvm_prog_t *prog, prvm_edict_t *ent, matrix4x4_t *out, qbool viewmatrix);
index 3e8d52a86ccd8dcb3c44123b32cbc6b54a0918d6..72f8d0058f89a316edf7a199591d509d996d38cd 100644 (file)
@@ -778,8 +778,8 @@ void S_Init(void)
        if (Sys_CheckParm("-nosound"))
        {
                // dummy out Play and Play2 because mods stuffcmd that
-               Cmd_AddCommand(CF_CLIENT, "play", Host_NoOperation_f, "does nothing because -nosound was specified");
-               Cmd_AddCommand(CF_CLIENT, "play2", Host_NoOperation_f, "does nothing because -nosound was specified");
+               Cmd_AddCommand(CF_CLIENT, "play", Cmd_NoOperation_f, "does nothing because -nosound was specified");
+               Cmd_AddCommand(CF_CLIENT, "play2", Cmd_NoOperation_f, "does nothing because -nosound was specified");
                return;
        }
 
index cbd91e62e9e17912ab56664f6b3a82d3fd7c133c..659a2815c92c58f5a4e88cdcb0e52d8fb89b8c59 100644 (file)
@@ -740,7 +740,7 @@ static void SV_Status_f(cmd_state_t *cmd)
        print ("version:  %s build %s (gamename %s)\n", gamename, buildstring, gamenetworkfiltername);
        print ("protocol: %i (%s)\n", Protocol_NumberForEnum(sv.protocol), Protocol_NameForEnum(sv.protocol));
        print ("map:      %s\n", sv.name);
-       print ("timing:   %s\n", Host_TimingReport(vabuf, sizeof(vabuf)));
+       print ("timing:   %s\n", SV_TimingReport(vabuf, sizeof(vabuf)));
        print ("players:  %i active (%i max)\n\n", players, svs.maxclients);
 
        if (in == 1)
index ea6cce396b6cec932f255446b12e5c926fb9ff8b..090e1f4880c272c63ae94767447d3e4ed4a1b280 100644 (file)
--- a/sv_main.c
+++ b/sv_main.c
@@ -205,6 +205,8 @@ cvar_t halflifebsp = {CF_SERVER, "halflifebsp", "0", "indicates the current map
 cvar_t sv_mapformat_is_quake2 = {CF_SERVER, "sv_mapformat_is_quake2", "0", "indicates the current map is q2bsp format (useful to know because of different entity behaviors, .frame on submodels and other things)"};
 cvar_t sv_mapformat_is_quake3 = {CF_SERVER, "sv_mapformat_is_quake3", "0", "indicates the current map is q2bsp format (useful to know because of different entity behaviors)"};
 
+cvar_t sv_writepicture_quality = {CF_SERVER | CF_ARCHIVE, "sv_writepicture_quality", "10", "WritePicture quality offset (higher means better quality, but slower)"};
+
 server_t sv;
 server_static_t svs;
 
@@ -705,6 +707,8 @@ void SV_Init (void)
        Cvar_RegisterVariable (&sv_mapformat_is_quake2);
        Cvar_RegisterVariable (&sv_mapformat_is_quake3);
 
+       Cvar_RegisterVariable (&sv_writepicture_quality);
+
        SV_InitOperatorCommands();
        host.hook.SV_CanSave = SV_CanSave;
 
@@ -2476,6 +2480,18 @@ static void SV_CheckTimeouts(void)
        }
 }
 
+/*
+==================
+SV_TimeReport
+
+Returns a time report string, for example for
+==================
+*/
+const char *SV_TimingReport(char *buf, size_t buflen)
+{
+       return va(buf, buflen, "%.1f%% CPU, %.2f%% lost, offset avg %.1fms, max %.1fms, sdev %.1fms", svs.perf_cpuload * 100, svs.perf_lost * 100, svs.perf_offset_avg * 1000, svs.perf_offset_max * 1000, svs.perf_offset_sdev * 1000);
+}
+
 extern cvar_t host_maxwait;
 extern cvar_t host_framerate;
 extern cvar_t cl_maxphysicsframesperserverframe;
@@ -2509,7 +2525,7 @@ double SV_Frame(double time)
                        }
 
                        if(svs.perf_lost > 0 && developer_extra.integer && playing) // only complain if anyone is looking
-                               Con_DPrintf("Server can't keep up: %s\n", Host_TimingReport(vabuf, sizeof(vabuf)));
+                               Con_DPrintf("Server can't keep up: %s\n", SV_TimingReport(vabuf, sizeof(vabuf)));
                }
 
                if(svs.perf_acc_realtime > 5 || sv.time < 10)
@@ -2705,7 +2721,7 @@ static int SV_ThreadFunc(void *voiddata)
                        }
                        if(svs.perf_lost > 0 && developer_extra.integer)
                                if(playing)
-                                       Con_DPrintf("Server can't keep up: %s\n", Host_TimingReport(vabuf, sizeof(vabuf)));
+                                       Con_DPrintf("Server can't keep up: %s\n", SV_TimingReport(vabuf, sizeof(vabuf)));
                        svs.perf_acc_realtime = svs.perf_acc_sleeptime = svs.perf_acc_lost = svs.perf_acc_offset = svs.perf_acc_offset_squared = svs.perf_acc_offset_max = svs.perf_acc_offset_samples = 0;
                }