Skip to content

Commit e5d87a1

Browse files
committed
Added new startup command "-force_flushlog". Allows write to log file immediately (Thx alpet, RvP)
Environment_misc: fixed formatting Added USE_LOG_TIMING. When used, log message is written in the following format: '[H:M:S.MS] log msg' (e.g. '[16:09:58.603] Loading DLL: xrRender_R2')
1 parent 587c66c commit e5d87a1

File tree

3 files changed

+92
-40
lines changed

3 files changed

+92
-40
lines changed

src/Common/Config.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@
3333
#define NEW_SOUNDS // use new sounds. Please enclose any new sound additions with this define
3434
#define LAYERED_SND_SHOOT// see comment down below
3535

36+
/* Debug: */
37+
//#define USE_LOG_TIMING
38+
39+
3640
/* LAYERED_SND_SHOOT by Alundaio
3741
When defined, it will allow you to play a group of sounds from a specified section for snd_shoot.
3842
You can have as many layers as you want, but you must follow naming convention,

src/xrCore/log.cpp

Lines changed: 61 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,18 @@ Lock logCS;
2121
xr_vector<xr_string> LogFile;
2222
LogCallback LogCB = 0;
2323

24+
bool ForceFlushLog = false;
25+
IWriter* LogWriter = nullptr;
26+
size_t CachedLog = 0;
27+
2428
void FlushLog()
2529
{
2630
if (!no_log)
2731
{
2832
logCS.Enter();
29-
IWriter* f = FS.w_open(logFName);
30-
if (f)
31-
{
32-
for (const auto &i : LogFile)
33-
{
34-
LPCSTR s = i.c_str();
35-
f->w_string(s ? s : "");
36-
}
37-
FS.w_close(f);
38-
}
33+
if (LogWriter)
34+
LogWriter->flush();
35+
CachedLog = 0;
3936
logCS.Leave();
4037
}
4138
}
@@ -55,6 +52,33 @@ void AddOne(const char* split)
5552
if (LogExecCB && LogCB)
5653
LogCB(split);
5754

55+
if (LogWriter)
56+
{
57+
#ifdef USE_LOG_TIMING
58+
char buf[64];
59+
char curTime[64];
60+
61+
auto now = std::chrono::system_clock::now();
62+
auto time = std::chrono::system_clock::to_time_t(now);
63+
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) -
64+
std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch());
65+
66+
std::strftime(buf, sizeof(buf), "%H:%M:%S", std::localtime(&time));
67+
int len = xr_sprintf(curTime, 64, "[%s.%03lld] ", buf, ms.count());
68+
69+
LogWriter->w_printf("%s%s\r\n", curTime, split);
70+
CachedLog += len;
71+
#else
72+
LogWriter->w_printf("%s\r\n", split);
73+
#endif
74+
CachedLog += xr_strlen(split) + 2;
75+
76+
if (ForceFlushLog || CachedLog >= 32768)
77+
FlushLog();
78+
79+
//-RvP
80+
}
81+
5882
logCS.Leave();
5983
}
6084

@@ -194,20 +218,44 @@ void CreateLog(BOOL nl)
194218
FS.update_path(logFName, "$logs$", log_file_name);
195219
if (!no_log)
196220
{
197-
IWriter* f = FS.w_open(logFName);
198-
if (f == NULL)
221+
// Alun: Backup existing log
222+
xr_string backup_logFName = EFS.ChangeFileExt(logFName, ".bkp");
223+
FS.file_rename(logFName, backup_logFName.c_str(), true);
224+
//-Alun
225+
226+
LogWriter = FS.w_open(logFName);
227+
if (LogWriter == nullptr)
199228
{
200229
#if defined(WINDOWS)
201230
MessageBox(NULL, "Can't create log file.", "Error", MB_ICONERROR);
202231
#endif
203232
abort();
204233
}
205-
FS.w_close(f);
234+
235+
time_t t = time(NULL);
236+
tm* ti = localtime(&t);
237+
char buf[64];
238+
strftime(buf, 64, "[%x %X]\t", ti);
239+
240+
for (u32 it = 0; it < LogFile.size(); it++)
241+
{
242+
LPCSTR s = LogFile[it].c_str();
243+
LogWriter->w_printf("%s%s\n", buf, s ? s : "");
244+
}
245+
LogWriter->flush();
206246
}
247+
248+
LogFile.reserve(128);
249+
250+
if (strstr(Core.Params, "-force_flushlog"))
251+
ForceFlushLog = true;
207252
}
208253

209254
void CloseLog(void)
210255
{
211256
FlushLog();
257+
if (LogWriter)
258+
FS.w_close(LogWriter);
259+
212260
LogFile.clear();
213261
}

src/xrEngine/Environment_misc.cpp

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -449,41 +449,41 @@ void CEnvDescriptorMixer::lerp(
449449
m_fSunShaftsIntensity = fi * A.m_fSunShaftsIntensity + f * B.m_fSunShaftsIntensity;
450450
}
451451

452-
m_fWaterIntensity = fi * A.m_fWaterIntensity + f * B.m_fWaterIntensity;
452+
m_fWaterIntensity = fi * A.m_fWaterIntensity + f * B.m_fWaterIntensity;
453453

454-
m_fTreeAmplitudeIntensity = fi * A.m_fTreeAmplitudeIntensity + f * B.m_fTreeAmplitudeIntensity;
454+
m_fTreeAmplitudeIntensity = fi * A.m_fTreeAmplitudeIntensity + f * B.m_fTreeAmplitudeIntensity;
455455

456-
// colors
457-
//. sky_color.lerp (A.sky_color,B.sky_color,f).add(Mdf.sky_color).mul(modif_power);
458-
sky_color.lerp(A.sky_color, B.sky_color, f);
459-
if (Mdf.use_flags.test(eSkyColor))
460-
sky_color.add(Mdf.sky_color).mul(modif_power);
456+
// colors
457+
//. sky_color.lerp (A.sky_color,B.sky_color,f).add(Mdf.sky_color).mul(modif_power);
458+
sky_color.lerp(A.sky_color, B.sky_color, f);
459+
if (Mdf.use_flags.test(eSkyColor))
460+
sky_color.add(Mdf.sky_color).mul(modif_power);
461461

462-
//. ambient.lerp (A.ambient,B.ambient,f).add(Mdf.ambient).mul(modif_power);
463-
ambient.lerp(A.ambient, B.ambient, f);
464-
if (Mdf.use_flags.test(eAmbientColor))
465-
ambient.add(Mdf.ambient).mul(modif_power);
462+
//. ambient.lerp (A.ambient,B.ambient,f).add(Mdf.ambient).mul(modif_power);
463+
ambient.lerp(A.ambient, B.ambient, f);
464+
if (Mdf.use_flags.test(eAmbientColor))
465+
ambient.add(Mdf.ambient).mul(modif_power);
466466

467-
hemi_color.lerp(A.hemi_color, B.hemi_color, f);
467+
hemi_color.lerp(A.hemi_color, B.hemi_color, f);
468468

469-
if (Mdf.use_flags.test(eHemiColor))
470-
{
471-
hemi_color.x += Mdf.hemi_color.x;
472-
hemi_color.y += Mdf.hemi_color.y;
473-
hemi_color.z += Mdf.hemi_color.z;
474-
hemi_color.x *= modif_power;
475-
hemi_color.y *= modif_power;
476-
hemi_color.z *= modif_power;
477-
}
469+
if (Mdf.use_flags.test(eHemiColor))
470+
{
471+
hemi_color.x += Mdf.hemi_color.x;
472+
hemi_color.y += Mdf.hemi_color.y;
473+
hemi_color.z += Mdf.hemi_color.z;
474+
hemi_color.x *= modif_power;
475+
hemi_color.y *= modif_power;
476+
hemi_color.z *= modif_power;
477+
}
478478

479-
sun_color.lerp(A.sun_color, B.sun_color, f);
479+
sun_color.lerp(A.sun_color, B.sun_color, f);
480480

481-
R_ASSERT(_valid(A.sun_dir));
482-
R_ASSERT(_valid(B.sun_dir));
483-
sun_dir.lerp(A.sun_dir, B.sun_dir, f).normalize();
484-
R_ASSERT(_valid(sun_dir));
481+
R_ASSERT(_valid(A.sun_dir));
482+
R_ASSERT(_valid(B.sun_dir));
483+
sun_dir.lerp(A.sun_dir, B.sun_dir, f).normalize();
484+
R_ASSERT(_valid(sun_dir));
485485

486-
VERIFY2(sun_dir.y < 0, "Invalid sun direction settings while lerp");
486+
VERIFY2(sun_dir.y < 0, "Invalid sun direction settings while lerp");
487487
}
488488

489489
//-----------------------------------------------------------------------------

0 commit comments

Comments
 (0)