Files
firestorm/Gameleap/code/mw4/Code/MW4/AblProfiler.cpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

133 lines
2.3 KiB
C++

#include "MW4Headers.hpp"
#include "AblProfiler.hpp"
using namespace ABL;
namespace ABL
{
void ABL_AddToProfileLog (char* profileString);
};
Profiler* Profiler::m_Instance = 0;
Profiler* Profiler::Instance()
{
return (m_Instance);
}
Profiler::Profiler()
: m_Active(false)
{
Verify(m_Instance == 0);
m_Instance = this;
}
Profiler::~Profiler()
{
Verify(m_Instance == this);
SpewIt();
m_Instance = 0;
}
void Profiler::SetActive(bool active)
{
if (m_Active == active)
{
return;
}
m_Active = active;
if (m_Active == true)
{
m_PerFunctionTiming.clear();
m_PerModuleTiming.clear();
}
}
bool Profiler::GetActive() const
{
return (m_Active);
}
Profiler::CallInfo::CallInfo()
: total_time(0)
, total_calls(0)
{
}
void Profiler::NotifyFunctionCalled(double time,
const char* function_name,
const char* module_name)
{
AddTimeToCallInfoMap(time,function_name,m_PerFunctionTiming);
AddTimeToCallInfoMap(time,module_name,m_PerModuleTiming);
}
void Profiler::AddTimeToCallInfoMap(double time, const char* name, call_info_map& m)
{
m[name].total_time += time;
++(m[name].total_calls);
call_info_map::iterator i(m.find(name));
}
inline std::string DoubleToString(double d)
{
char buf[80];
sprintf(buf,"%.4f",d);
return (buf);
}
inline std::string IntToString(int i)
{
char buf[100];
sprintf(buf,"%d",i);
return (buf);
}
void Profiler::SpewIt() const
{
#if defined(LAB_ONLY)
SPEWALWAYS((0,"\n"));
{for (call_info_map::const_iterator i = m_PerFunctionTiming.begin();
i != m_PerFunctionTiming.end();
++i)
{
std::string s("Function: ");
s += (*i).first;
s += " Total Time: ";
s += DoubleToString((*i).second.total_time);
s += " Total Function Calls: ";
s += IntToString((*i).second.total_calls);
SPEWALWAYS((0,"%s",s.c_str()));
}}
SPEWALWAYS((0,"\n"));
{for (call_info_map::const_iterator i = m_PerModuleTiming.begin();
i != m_PerModuleTiming.end();
++i)
{
std::string s("Script: ");
s += (*i).first;
s += " Total Time: ";
s += DoubleToString((*i).second.total_time);
s += " Total Function Calls: ";
s += IntToString((*i).second.total_calls);
SPEWALWAYS((0,"%s",s.c_str()));
}}
SPEWALWAYS((0,"\n"));
#endif
}