make it easier to disable btQuickProf,

added a CProfileManager::DumpAll, to dump/printf all timings for one simulation frame.
This commit is contained in:
erwin.coumans
2008-11-12 02:45:59 +00:00
parent 1381394dd8
commit c4bd276dfc
2 changed files with 82 additions and 8 deletions

View File

@@ -110,7 +110,7 @@ void CProfileNode::Reset( void )
{
TotalCalls = 0;
TotalTime = 0.0f;
gProfileClock.reset();
if ( Child ) {
Child->Reset();
@@ -251,6 +251,7 @@ void CProfileManager::Stop_Profile( void )
*=============================================================================================*/
void CProfileManager::Reset( void )
{
gProfileClock.reset();
Root.Reset();
Root.Call();
FrameCounter = 0;
@@ -278,5 +279,66 @@ float CProfileManager::Get_Time_Since_Reset( void )
return (float)time / Profile_Get_Tick_Rate();
}
#include <stdio.h>
void CProfileManager::DumpRecursive(CProfileIterator* profileIterator, int spacing)
{
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();
for (i=0;i<spacing;i++) printf(".");
printf("----------------------------------\n");
for (i=0;i<spacing;i++) printf(".");
printf("Profiling: %s (total running time: %.3f ms) ---\n", profileIterator->Get_Current_Parent_Name(), parent_time );
float totalTime = 0.f;
int numChildren = 0;
for (i = 0; !profileIterator->Is_Done(); i++,profileIterator->Next())
{
numChildren++;
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;
{
int i; for (i=0;i<spacing;i++) printf(".");
}
printf("%d -- %s (%.2f %%) :: %.3f ms / frame (%d calls)\n",i, profileIterator->Get_Current_Name(), fraction,(current_total_time / (double)frames_since_reset),profileIterator->Get_Current_Total_Calls());
totalTime += current_total_time;
//recurse into children
}
if (parent_time < accumulated_time)
{
printf("what's wrong\n");
}
for (i=0;i<spacing;i++) printf(".");
printf("%s (%.3f %%) :: %.3f ms\n", "Unaccounted:",parent_time > SIMD_EPSILON ? ((parent_time - accumulated_time) / parent_time) * 100 : 0.f, parent_time - accumulated_time);
for (int i=0;i<numChildren;i++)
{
profileIterator->Enter_Child(i);
DumpRecursive(profileIterator,spacing+3);
profileIterator->Enter_Parent();
}
}
void CProfileManager::DumpAll()
{
CProfileIterator* profileIterator = 0;
profileIterator = CProfileManager::Get_Iterator();
DumpRecursive(profileIterator,0);
CProfileManager::Release_Iterator(profileIterator);
}
#endif //USE_BT_CLOCK

View File

@@ -10,14 +10,20 @@
// Credits: The Clock class was inspired by the Timer classes in
// Ogre (www.ogre3d.org).
#ifndef QUICK_PROF_H
#define QUICK_PROF_H
//To disable built-in profiling, please comment out next line
//#define BT_NO_PROFILE 1
#ifndef BT_NO_PROFILE
#include "btScalar.h"
#include "LinearMath/btAlignedAllocator.h"
#include <new>
//To disable built-in profiling, please comment out next line
//#define BT_NO_PROFILE 1
//if you don't need btClock, you can comment next line
@@ -321,6 +327,10 @@ public:
}
static void Release_Iterator( CProfileIterator * iterator ) { delete ( iterator); }
static void DumpRecursive(CProfileIterator* profileIterator, int spacing);
static void DumpAll();
private:
static CProfileNode Root;
static CProfileNode * CurrentNode;
@@ -344,12 +354,14 @@ public:
}
};
#if !defined(BT_NO_PROFILE)
#define BT_PROFILE( name ) CProfileSample __profile( name )
#else
#define BT_PROFILE( name )
#endif
#define BT_PROFILE( name ) CProfileSample __profile( name )
#else
#define BT_PROFILE( name )
#endif //#ifndef BT_NO_PROFILE