void Profiling::OutputInfo(FilePtr _pFile) { const float fTotal = s_fStopTime - s_fStartTime; if (0.0f < fTotal) { const int sSize = _snprintf_s(s_szBuffer, s_uBufferSize, s_uBufferSize, "calls\n"); _pFile->Write(s_szBuffer, sSize); TagInfoMap::iterator iPair = s_mTags.begin(); TagInfoMap::iterator iEnd = s_mTags.end(); while (iEnd != iPair) { TagInfoRef rTagInfo = iPair->second; const float fAverage = (0 < rTagInfo.m_uCount) ? rTagInfo.m_fTotal / float(rTagInfo.m_uCount) : 0.0f; const int sSize = _snprintf_s(s_szBuffer, s_uBufferSize, s_uBufferSize, "%s : %u calls total=%f(%5.2f%%) min=%f max=%f avg=%f\n", rTagInfo.m_strName.c_str(), rTagInfo.m_uCount, rTagInfo.m_fTotal, (rTagInfo.m_fTotal / fTotal) * 100.0f, rTagInfo.m_fShortest, rTagInfo.m_fLongest, fAverage); _pFile->Write(s_szBuffer, sSize); ++iPair; } { const int sSize = _snprintf_s(s_szBuffer, s_uBufferSize, s_uBufferSize, "callstack\n"); _pFile->Write(s_szBuffer, sSize); OutputInfoCallStack(s_mCallStacks, 0, _pFile); } } }
void Profiling::OutputInfoCallStack(CallInfoMapRef _rmCallStack, UInt _uDepth, FilePtr _pFile) { const float fTotal = s_fStopTime - s_fStartTime; if (0.0f < fTotal) { CallInfoMap::iterator iPair = _rmCallStack.begin(); CallInfoMap::iterator iEnd = _rmCallStack.end(); while (iEnd != iPair) { CallInfoRef rCallInfo = iPair->second; TagInfoRef rTagInfo = s_mTags[iPair->first]; const float fAverage = (0 < rCallInfo.m_uCount) ? rCallInfo.m_fTotal / float(rCallInfo.m_uCount) : 0.0f; for (UInt i = 0 ; (_uDepth > i) && (s_uBufferSize > i) ; ++i) { s_szBuffer[i] = '\t'; } const int sSize = _snprintf_s(s_szBuffer + _uDepth, s_uBufferSize - _uDepth, s_uBufferSize - _uDepth, "%s : %u calls total=%f(%5.2f%%) min=%f max=%f avg=%f\n", rTagInfo.m_strName.c_str(), rCallInfo.m_uCount, rCallInfo.m_fTotal, (rCallInfo.m_fTotal / fTotal) * 100.0f, rCallInfo.m_fShortest, rCallInfo.m_fLongest, fAverage); _pFile->Write(s_szBuffer, sSize + _uDepth); if (false == rCallInfo.m_mChildrenCalls.empty()) { OutputInfoCallStack(rCallInfo.m_mChildrenCalls, _uDepth + 1, _pFile); } ++iPair; } } }