www.pudn.com > zfxcengine-0.1.0.zip > ceProfile.cpp
// $Id: ceProfile.cpp,v 1.11 2005/09/03 14:24:14 kimmi Exp $ ///////////////////////////////////////////////////////////////// // // Module: Core // File: ceProfile.cpp // Created: 06.02.2005 // Author: Kim Kulling aka kimmi // ///////////////////////////////////////////////////////////////// #include#include #include "Core/ceDebug.h" #include "Core/ceProfile.h" #include "Core/ceMemManager.h" namespace ZFXCE { //------------------------------------------------------------------------------ ceProfile::ceProfile(ceTimer *pInst) { PUSH_FUNCTION; Init(); ce_assert (NULL != pInst); this->m_pTimer = pInst; } //------------------------------------------------------------------------------ ceProfile::ceProfile() { PUSH_FUNCTION; Init(); m_pTimer = new ceTimer(); ce_assert (NULL != m_pTimer); m_bOwn = TRUE; } //------------------------------------------------------------------------------ ceProfile::~ceProfile() { PUSH_FUNCTION; Release(); if (m_bOwn) { delete m_pTimer; } } //------------------------------------------------------------------------------ void ceProfile::Init() { PUSH_FUNCTION; m_pTimer = NULL; m_bOwn = true; m_vCall.reserve(CE_PR_TIMELIMIT); m_vElapsed.reserve(CE_PR_TIMELIMIT); for (UINT i=0; i < CE_PR_TIMELIMIT; i++) { BOOL set = FALSE; UINT temp=0; DOUBLE dTemp = 0.0; m_vCall.push_back(temp); m_vElapsed.push_back(temp); m_vSet.push_back(set); m_vCurrent.push_back(dTemp); } } //------------------------------------------------------------------------------ void ceProfile::Release() { PUSH_FUNCTION; bool bDump = false; std::vector ::iterator it; for (it = m_vSet.begin(); it != m_vSet.end(); it++) { if ((*it)) bDump = true; } if (bDump) Dump(); m_vSet.clear(); m_vCall.clear(); m_vElapsed.clear(); m_vCurrent.clear(); } //------------------------------------------------------------------------------ void ceProfile::Clear() { PUSH_FUNCTION; Release(); Init(); } //------------------------------------------------------------------------------ bool ceProfile::Start(const UINT uiNumber) { PUSH_FUNCTION; ce_assert (uiNumber < CE_PR_TIMELIMIT); if (this->m_vSet[uiNumber]) { const DOUBLE uiCurrent = m_pTimer->GetFrameInterval(); m_vCurrent[uiNumber] = uiCurrent; m_vCall[uiNumber] = m_vCall[uiNumber] + 1; return true; } m_vCurrent[uiNumber] = m_pTimer->GetFrameInterval(); m_vElapsed[uiNumber] = 0.0; m_vSet[uiNumber] = true; m_vCall[uiNumber] = m_vCall[uiNumber] + 1; return true; } //------------------------------------------------------------------------------ bool ceProfile::Stop(const UINT uiNumber) { PUSH_FUNCTION; ce_assert (uiNumber < CE_PR_TIMELIMIT); if (this->m_vSet[uiNumber]) { const DOUBLE Tick = m_pTimer->GetFrameInterval(); m_vElapsed[uiNumber] += fabs(Tick - m_vCurrent[uiNumber]); return true; } return false; } //------------------------------------------------------------------------------ void ceProfile::Dump() { PUSH_FUNCTION; std::cout << "------------------------------------------------------------" << std::endl; std::cout << "Profiler:" << "\t" << "Calls:" << "\t\t" <<"Elapsed: "<< std::endl; std::cout << "------------------------------------------------------------" << std::endl; for (int i=0; i < CE_PR_TIMELIMIT; i++) { if (this->m_vSet[i]) { std::cout << " " << i; std::cout << "\t\t" << m_vCall[i] << "\t\t"; const DOUBLE dElapsed = m_vElapsed[i]; std::cout << dElapsed << std::endl; } } std::cout << "------------------------------------------------------------" << std::endl; Clear(); } //------------------------------------------------------------------------------ } // Namespace ZFXCE