void DisplayProfile(sf::RenderWindow * renderWindow, CProfileIterator * iter, int x, int & y) { if (!renderWindow) return; FontManager * fontManager = FontManager::Get(); y += 15; while ( !iter->Is_Done() ) { sf::Text text("", *fontManager->GetFont("")); text.setCharacterSize(12); ostringstream texte; if ( CProfileManager::Get_Frame_Count_Since_Reset() != 0 ) texte << fixed << iter->Get_Current_Name() << " Calls/Frame:" << iter->Get_Current_Total_Calls()/CProfileManager::Get_Frame_Count_Since_Reset() << " Time/Frame:" << iter->Get_Current_Total_Time()/CProfileManager::Get_Frame_Count_Since_Reset() << " %Time/Parent " << iter->Get_Current_Total_Time()/iter->Get_Current_Parent_Total_Time()*100.0f; text.setString(texte.str()); text.setPosition(x,y); renderWindow->draw(text); //Childs CProfileIterator * childIter = CProfileManager::Get_Iterator(); *childIter = *iter; childIter->Enter_Child(0); DisplayProfile(renderWindow, childIter, x+15, y); CProfileManager::Release_Iterator(childIter); y += 15; iter->Next(); } }
void CProfileInfo::SetProfileInfo() { CProfileIterator* it = CProfileManager::Get_Iterator(); float fTotal = 0.0f; while( !it->Is_Done() ) { fTotal += it->Get_Current_Total_Time(); it->Next(); } it->First(); Clear(); m_vecstrProfileInfo.push_back( "Root" ); char szTab[64], szTemp[4096]; while( !it->Is_Done() ) { memset( szTab, 0, sizeof(szTab) ); for( DWORD i=0; i<it->GetPreOrderDepth(); i++ ) strcat( szTab, PROFILE_TAB_STR ); sprintf( szTemp, "%s---> %.2f%% %s, <%.3f ms>, <%d calls>, <%f ms/call>", szTab, (it->Get_Current_Total_Time() / fTotal) * 100, it->Get_Current_Name(), it->Get_Current_Total_Time() * 1000, it->Get_Current_Total_Calls(), (it->Get_Current_Total_Time() * 1000) / (it->Get_Current_Total_Calls() ? it->Get_Current_Total_Calls() : 1)); m_vecstrProfileInfo.push_back( szTemp ); it->NextPreOrder(); } CProfileManager::Release_Iterator( it ); Reset(); if( fTotal * 1000 > SEC( 1 ) ) // 1초이상 지연되면 로그 남김 FileOut( "..\\profile.txt" ); }
void DumpSimulationTime(FILE* f) { CProfileIterator* profileIterator = CProfileManager::Get_Iterator(); profileIterator->First(); if (profileIterator->Is_Done()) return; float accumulated_time=0,parent_time = profileIterator->Is_Root() ? CProfileManager::Get_Time_Since_Reset() : profileIterator->Get_Current_Parent_Total_Time(); int i; int frames_since_reset = CProfileManager::Get_Frame_Count_Since_Reset(); //fprintf(f,"%.3f,", parent_time ); float totalTime = 0.f; static bool headersOnce = true; if (headersOnce) { headersOnce = false; fprintf(f,"total (%dx%dx%d interop=%d),",NUM_OBJECTS_X,NUM_OBJECTS_Y,NUM_OBJECTS_Z,useInterop); for (i = 0; !profileIterator->Is_Done(); i++,profileIterator->Next()) { float current_total_time = profileIterator->Get_Current_Total_Time(); accumulated_time += current_total_time; float fraction = parent_time > SIMD_EPSILON ? (current_total_time / parent_time) * 100 : 0.f; const char* name = profileIterator->Get_Current_Name(); fprintf(f,"%s,",name); } fprintf(f,"\n"); } fprintf(f,"%.3f,",parent_time); profileIterator->First(); for (i = 0; !profileIterator->Is_Done(); i++,profileIterator->Next()) { float current_total_time = profileIterator->Get_Current_Total_Time(); accumulated_time += current_total_time; float fraction = parent_time > SIMD_EPSILON ? (current_total_time / parent_time) * 100 : 0.f; const char* name = profileIterator->Get_Current_Name(); //if (!strcmp(name,"stepSimulation")) { fprintf(f,"%.3f,",current_total_time); } totalTime += current_total_time; //recurse into children } fprintf(f,"\n"); CProfileManager::Release_Iterator(profileIterator); }