mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-12-02 17:22:22 +00:00
Merge branch 'timedemo-revise' into md3-vanilla
This commit is contained in:
commit
1a4f1e54f3
7 changed files with 83 additions and 9 deletions
|
@ -4596,7 +4596,12 @@ void TryRunTics(tic_t realtics)
|
|||
if (neededtic > gametic)
|
||||
{
|
||||
if (advancedemo)
|
||||
D_StartTitle();
|
||||
{
|
||||
if (timedemo_quit)
|
||||
COM_ImmedExecute("quit");
|
||||
else
|
||||
D_StartTitle();
|
||||
}
|
||||
else
|
||||
// run the count * tics
|
||||
while (neededtic > gametic)
|
||||
|
|
|
@ -483,6 +483,13 @@ static void D_Display(void)
|
|||
F_WipeEndScreen();
|
||||
F_RunWipe(wipedefs[wipedefindex], gamestate != GS_TIMEATTACK);
|
||||
}
|
||||
|
||||
// reset counters so timedemo doesn't count the wipe duration
|
||||
if (timingdemo)
|
||||
{
|
||||
framecount = 0;
|
||||
demostarttime = I_GetTime();
|
||||
}
|
||||
}
|
||||
|
||||
NetUpdate(); // send out any new accumulation
|
||||
|
|
|
@ -364,6 +364,11 @@ consvar_t cv_mute = {"mute", "Off", CV_NETVAR|CV_CALL, CV_OnOff, Mute_OnChange,
|
|||
|
||||
consvar_t cv_sleep = {"cpusleep", "-1", CV_SAVE, sleeping_cons_t, NULL, -1, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
char timedemo_name[256];
|
||||
boolean timedemo_csv;
|
||||
char timedemo_csv_id[256];
|
||||
boolean timedemo_quit;
|
||||
|
||||
INT16 gametype = GT_COOP;
|
||||
boolean splitscreen = false;
|
||||
boolean circuitmap = false;
|
||||
|
@ -1479,11 +1484,11 @@ static void Command_Playdemo_f(void)
|
|||
|
||||
static void Command_Timedemo_f(void)
|
||||
{
|
||||
char name[256];
|
||||
size_t i = 0;
|
||||
|
||||
if (COM_Argc() != 2)
|
||||
if (COM_Argc() < 2)
|
||||
{
|
||||
CONS_Printf(M_GetText("timedemo <demoname>: time a demo\n"));
|
||||
CONS_Printf(M_GetText("timedemo <demoname> [-csv [<trialid>]] [-quit]: time a demo\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1500,12 +1505,23 @@ static void Command_Timedemo_f(void)
|
|||
G_StopMetalDemo();
|
||||
|
||||
// open the demo file
|
||||
strcpy (name, COM_Argv(1));
|
||||
strcpy (timedemo_name, COM_Argv(1));
|
||||
// dont add .lmp so internal game demos can be played
|
||||
|
||||
CONS_Printf(M_GetText("Timing demo '%s'.\n"), name);
|
||||
// print timedemo results as CSV?
|
||||
i = COM_CheckParm("-csv");
|
||||
timedemo_csv = (i > 0);
|
||||
if (COM_CheckParm("-quit") != i + 1)
|
||||
strcpy(timedemo_csv_id, COM_Argv(i + 1)); // user-defined string to identify row
|
||||
else
|
||||
timedemo_csv_id[0] = 0;
|
||||
|
||||
G_TimeDemo(name);
|
||||
// exit after the timedemo?
|
||||
timedemo_quit = (COM_CheckParm("-quit") > 0);
|
||||
|
||||
CONS_Printf(M_GetText("Timing demo '%s'.\n"), timedemo_name);
|
||||
|
||||
G_TimeDemo(timedemo_name);
|
||||
}
|
||||
|
||||
// stop current demo
|
||||
|
|
|
@ -111,6 +111,11 @@ extern consvar_t cv_skipmapcheck;
|
|||
|
||||
extern consvar_t cv_sleep;
|
||||
|
||||
extern char timedemo_name[256];
|
||||
extern boolean timedemo_csv;
|
||||
extern char timedemo_csv_id[256];
|
||||
extern boolean timedemo_quit;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
XD_NAMEANDCOLOR = 1,
|
||||
|
|
43
src/g_game.c
43
src/g_game.c
|
@ -97,7 +97,7 @@ UINT32 demoIdleTime = 3*TICRATE;
|
|||
boolean timingdemo; // if true, exit with report on completion
|
||||
boolean nodrawers; // for comparative timing purposes
|
||||
boolean noblit; // for comparative timing purposes
|
||||
static tic_t demostarttime; // for comparative timing purposes
|
||||
tic_t demostarttime; // for comparative timing purposes
|
||||
|
||||
boolean netgame; // only true if packets are broadcast
|
||||
boolean multiplayer;
|
||||
|
@ -5660,7 +5660,46 @@ boolean G_CheckDemoStatus(void)
|
|||
timingdemo = false;
|
||||
f1 = (double)demotime;
|
||||
f2 = (double)framecount*TICRATE;
|
||||
CONS_Printf(M_GetText("timed %u gametics in %d realtics\n%f seconds, %f avg fps\n"), leveltime,demotime,f1/TICRATE,f2/f1);
|
||||
|
||||
CONS_Printf(M_GetText("timed %u gametics in %d realtics - %u frames\n%f seconds, %f avg fps\n"),
|
||||
leveltime,demotime,(UINT32)framecount,f1/TICRATE,f2/f1);
|
||||
|
||||
// CSV-readable timedemo results, for external parsing
|
||||
if (timedemo_csv)
|
||||
{
|
||||
FILE *f;
|
||||
const char *csvpath = va("%s"PATHSEP"%s", srb2home, "timedemo.csv");
|
||||
const char *header = "id,demoname,seconds,avgfps,leveltime,demotime,framecount,ticrate,rendermode,vidmode,vidwidth,vidheight,procbits\n";
|
||||
const char *rowformat = "\"%s\",\"%s\",%f,%f,%u,%d,%u,%u,%u,%u,%u,%u,%u\n";
|
||||
boolean headerrow = !FIL_FileExists(csvpath);
|
||||
UINT8 procbits = 0;
|
||||
|
||||
// Bitness
|
||||
if (sizeof(void*) == 4)
|
||||
procbits = 32;
|
||||
else if (sizeof(void*) == 8)
|
||||
procbits = 64;
|
||||
|
||||
f = fopen(csvpath, "a+");
|
||||
|
||||
if (f)
|
||||
{
|
||||
if (headerrow)
|
||||
fputs(header, f);
|
||||
fprintf(f, rowformat,
|
||||
timedemo_csv_id,timedemo_name,f1/TICRATE,f2/f1,leveltime,demotime,(UINT32)framecount,TICRATE,rendermode,vid.modenum,vid.width,vid.height,procbits);
|
||||
fclose(f);
|
||||
CONS_Printf("Timedemo results saved to '%s'\n", csvpath);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Just print the CSV output to console
|
||||
CON_LogMessage(header);
|
||||
CONS_Printf(rowformat,
|
||||
timedemo_csv_id,timedemo_name,f1/TICRATE,f2/f1,leveltime,demotime,(UINT32)framecount,TICRATE,rendermode,vid.modenum,vid.width,vid.height,procbits);
|
||||
}
|
||||
}
|
||||
|
||||
if (restorecv_vidwait != cv_vidwait.value)
|
||||
CV_SetValue(&cv_vidwait, restorecv_vidwait);
|
||||
D_AdvanceDemo();
|
||||
|
|
|
@ -37,6 +37,7 @@ extern boolean playeringame[MAXPLAYERS];
|
|||
|
||||
// demoplaying back and demo recording
|
||||
extern boolean demoplayback, titledemo, demorecording, timingdemo;
|
||||
extern tic_t demostarttime;
|
||||
|
||||
// Quit after playing a demo from cmdline.
|
||||
extern boolean singledemo;
|
||||
|
|
|
@ -6032,6 +6032,7 @@ void HWR_RenderPlayerView(INT32 viewnumber, player_t *player)
|
|||
|
||||
// note: sets viewangle, viewx, viewy, viewz
|
||||
R_SetupFrame(player, false); // This can stay false because it is only used to set viewsky in r_main.c, which isn't used here
|
||||
framecount++; // timedemo
|
||||
|
||||
// copy view cam position for local use
|
||||
dup_viewx = viewx;
|
||||
|
|
Loading…
Reference in a new issue