Hooks
static bool BeforecvStopWatch_PerfLog(cvStopWatch* self, const char* szName, double dtSeconds);static void AftercvStopWatch_PerfLog(cvStopWatch* self, const char* szName, double dtSeconds);static void ReplacecvStopWatch_PerfLog(void (*original)(cvStopWatch*, const char*, double), cvStopWatch* self, const char* szName, double dtSeconds);// CivHooks.h gives this hook point no types, so nothing checks these hooks' parameters.host->RegisterHook(host->pluginIndex, CivHooks::cvStopWatch_PerfLog::ID, CIV_HOOK_BEFORE, (void*)&BeforecvStopWatch_PerfLog);host->RegisterHook(host->pluginIndex, CivHooks::cvStopWatch_PerfLog::ID, CIV_HOOK_AFTER, (void*)&AftercvStopWatch_PerfLog);host->RegisterHook(host->pluginIndex, CivHooks::cvStopWatch_PerfLog::ID, CIV_HOOK_REPLACE, (void*)&ReplacecvStopWatch_PerfLog);
Code
78void cvStopWatch::PerfLog(const char* szName, double dtSeconds)79{80 if (!m_bDisable)81 {82 const char* szLogFile = (m_szLogFile == NULL)? "stopwatch.log" : m_szLogFile;83 if (m_bShowNesting)84 {85 if (m_nesting == 0)86 LOGFILEMGR.GetLog(szLogFile, m_logFlags)->Msg(", %d, %s, %f", m_nesting, szName, dtSeconds);87 else88 {89 const int MAX_NESTING = 20;90 static const char ms_nestingOffset[] = ",,,,,,,,,,,,,,,,,,,,";91 LOGFILEMGR.GetLog(szLogFile, m_logFlags)->Msg(", %d, %s,%s %f", m_nesting, szName, ((m_nesting < MAX_NESTING)?(&ms_nestingOffset[MAX_NESTING - m_nesting]):(&ms_nestingOffset[0])), dtSeconds);92 }93 }94 else95 LOGFILEMGR.GetLog(szLogFile, m_logFlags)->Msg(", %s, %f", szName, dtSeconds);96 }97}