X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=cl_demo.c;h=8a93daf6ce3082168093ec4e80881977558529de;hp=2485afb908de566dd40700ba0af69b276bff5918;hb=e4c40ca7a2a5ea9ecf5b27d39de4b3541da47e09;hpb=00d8da42f76d5e04a9d11e0deaac38391132808a diff --git a/cl_demo.c b/cl_demo.c index 2485afb9..8a93daf6 100644 --- a/cl_demo.c +++ b/cl_demo.c @@ -138,7 +138,7 @@ void CL_ReadDemoMessage(void) if (cls.demopaused) return; - while (1) + for (;;) { // decide if it is time to grab the next message // always grab until fully connected @@ -146,44 +146,34 @@ void CL_ReadDemoMessage(void) { if (cls.timedemo) { - if (host_framecount == cls.td_lastframe) - { - // already read this frame's message - return; - } - if (cls.td_lastframe == -1) - { - // render a couple frames before we start counting - cls.td_startframe = host_framecount + 3; - } - cls.td_lastframe = host_framecount; + cls.td_frames++; cls.td_onesecondframes++; - // don't read any new messages during the warm-up period - if (host_framecount < cls.td_startframe) - return; // if this is the first official frame we can now grab the real // td_starttime so the bogus time on the first frame doesn't // count against the final report - if (host_framecount == cls.td_startframe) + if (cls.td_frames == 0) { cls.td_starttime = realtime; - cls.td_onesecondnexttime = realtime + 1; + cls.td_onesecondnexttime = cl.time + 1; + cls.td_onesecondrealtime = realtime; cls.td_onesecondframes = 0; - cls.td_onesecondminframes = 0; - cls.td_onesecondmaxframes = 0; - cls.td_onesecondavgframes = 0; + cls.td_onesecondminfps = 0; + cls.td_onesecondmaxfps = 0; + cls.td_onesecondavgfps = 0; cls.td_onesecondavgcount = 0; } - if (realtime >= cls.td_onesecondnexttime) + if (cl.time >= cls.td_onesecondnexttime) { + double fps = cls.td_onesecondframes / (realtime - cls.td_onesecondrealtime); if (cls.td_onesecondavgcount == 0) { - cls.td_onesecondminframes = cls.td_onesecondframes; - cls.td_onesecondmaxframes = cls.td_onesecondframes; + cls.td_onesecondminfps = fps; + cls.td_onesecondmaxfps = fps; } - cls.td_onesecondminframes = min(cls.td_onesecondminframes, cls.td_onesecondframes); - cls.td_onesecondmaxframes = max(cls.td_onesecondmaxframes, cls.td_onesecondframes); - cls.td_onesecondavgframes += cls.td_onesecondframes; + cls.td_onesecondrealtime = realtime; + cls.td_onesecondminfps = min(cls.td_onesecondminfps, fps); + cls.td_onesecondmaxfps = max(cls.td_onesecondmaxfps, fps); + cls.td_onesecondavgfps += fps; cls.td_onesecondavgcount++; cls.td_onesecondframes = 0; cls.td_onesecondnexttime++; @@ -199,6 +189,12 @@ void CL_ReadDemoMessage(void) // get the next message FS_Read(cls.demofile, &net_message.cursize, 4); net_message.cursize = LittleLong(net_message.cursize); + if(net_message.cursize & DEMOMSG_CLIENT_TO_SERVER) // This is a client->server message! Ignore for now! + { + // skip over demo packet + FS_Seek(cls.demofile, 12 + (net_message.cursize & (~DEMOMSG_CLIENT_TO_SERVER)), SEEK_CUR); + continue; + } if (net_message.cursize > net_message.maxsize) Host_Error("Demo message (%i) > net_message.maxsize (%i)", net_message.cursize, net_message.maxsize); VectorCopy(cl.mviewangles[0], cl.mviewangles[1]); @@ -216,6 +212,9 @@ void CL_ReadDemoMessage(void) // In case the demo contains a "svc_disconnect" message if (!cls.demoplayback) return; + + if (cls.timedemo) + return; } else { @@ -357,7 +356,7 @@ void CL_PlayDemo_f (void) FS_DefaultExtension (name, ".dem", sizeof (name)); cls.protocol = PROTOCOL_QUAKE; - Con_Printf("Playing demo from %s.\n", name); + Con_Printf("Playing demo %s.\n", name); cls.demofile = FS_Open (name, "rb", false, false); if (!cls.demofile) { @@ -395,16 +394,15 @@ void CL_FinishTimeDemo (void) cls.timedemo = false; -// the first frame didn't count - frames = (host_framecount - cls.td_startframe) - 1; + frames = cls.td_frames; time = realtime - cls.td_starttime; totalfpsavg = time > 0 ? frames / time : 0; - fpsmin = cls.td_onesecondminframes; - fpsavg = cls.td_onesecondavgcount ? cls.td_onesecondavgframes / cls.td_onesecondavgcount : 0; - fpsmax = cls.td_onesecondmaxframes; + fpsmin = cls.td_onesecondminfps; + fpsavg = cls.td_onesecondavgcount ? cls.td_onesecondavgfps / cls.td_onesecondavgcount : 0; + fpsmax = cls.td_onesecondmaxfps; // LordHavoc: timedemo now prints out 7 digits of fraction, and min/avg/max - Con_Printf("%i frames %5.7f seconds %5.7f fps, one-second min/avg/max: %.0f %.0f %.0f\n", frames, time, totalfpsavg, fpsmin, fpsavg, fpsmax); - Log_Printf("benchmark.log", "date %s | enginedate %s | demo %s | commandline %s | result %i frames %5.7f seconds %5.7f fps, one-second min/avg/max: %.0f %.0f %.0f\n", Sys_TimeString("%Y-%m-%d %H:%M:%S"), buildstring, cls.demoname, cmdline.string, frames, time, totalfpsavg, fpsmin, fpsavg, fpsmax); + Con_Printf("%i frames %5.7f seconds %5.7f fps, one-second fps min/avg/max: %.0f %.0f %.0f (%i seconds)\n", frames, time, totalfpsavg, fpsmin, fpsavg, fpsmax, cls.td_onesecondavgcount); + Log_Printf("benchmark.log", "date %s | enginedate %s | demo %s | commandline %s | result %i frames %5.7f seconds %5.7f fps, one-second fps min/avg/max: %.0f %.0f %.0f (%i seconds)\n", Sys_TimeString("%Y-%m-%d %H:%M:%S"), buildstring, cls.demoname, cmdline.string, frames, time, totalfpsavg, fpsmin, fpsavg, fpsmax, cls.td_onesecondavgcount); if (COM_CheckParm("-benchmark")) Host_Quit_f(); } @@ -437,7 +435,8 @@ void CL_TimeDemo_f (void) scr_con_current = 0; cls.timedemo = true; - // get first message this frame - cls.td_lastframe = -1; + cls.td_frames = -2; // skip the first frame + cls.demonum = -1; // stop demo loop + cls.demonum = -1; // stop demo loop }