Skip to content

Commit 279c86f

Browse files
qweasdd136963q4a
authored andcommitted
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 aaf3df8 commit 279c86f

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
}
@@ -53,6 +50,33 @@ void AddOne(const char* split)
5350
if (LogExecCB && LogCB)
5451
LogCB(split);
5552

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

@@ -192,20 +216,44 @@ void CreateLog(BOOL nl)
192216
FS.update_path(logFName, "$logs$", log_file_name);
193217
if (!no_log)
194218
{
195-
IWriter* f = FS.w_open(logFName);
196-
if (f == NULL)
219+
// Alun: Backup existing log
220+
xr_string backup_logFName = EFS.ChangeFileExt(logFName, ".bkp");
221+
FS.file_rename(logFName, backup_logFName.c_str(), true);
222+
//-Alun
223+
224+
LogWriter = FS.w_open(logFName);
225+
if (LogWriter == nullptr)
197226
{
198227
#if defined(WINDOWS)
199228
MessageBox(NULL, "Can't create log file.", "Error", MB_ICONERROR);
200229
#endif
201230
abort();
202231
}
203-
FS.w_close(f);
232+
233+
time_t t = time(NULL);
234+
tm* ti = localtime(&t);
235+
char buf[64];
236+
strftime(buf, 64, "[%x %X]\t", ti);
237+
238+
for (u32 it = 0; it < LogFile.size(); it++)
239+
{
240+
LPCSTR s = LogFile[it].c_str();
241+
LogWriter->w_printf("%s%s\n", buf, s ? s : "");
242+
}
243+
LogWriter->flush();
204244
}
245+
246+
LogFile.reserve(128);
247+
248+
if (strstr(Core.Params, "-force_flushlog"))
249+
ForceFlushLog = true;
205250
}
206251

207252
void CloseLog(void)
208253
{
209254
FlushLog();
255+
if (LogWriter)
256+
FS.w_close(LogWriter);
257+
210258
LogFile.clear();
211259
}

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)