make it easier to disable btQuickProf,
added a CProfileManager::DumpAll, to dump/printf all timings for one simulation frame.
This commit is contained in:
@@ -110,7 +110,7 @@ void CProfileNode::Reset( void )
|
|||||||
{
|
{
|
||||||
TotalCalls = 0;
|
TotalCalls = 0;
|
||||||
TotalTime = 0.0f;
|
TotalTime = 0.0f;
|
||||||
gProfileClock.reset();
|
|
||||||
|
|
||||||
if ( Child ) {
|
if ( Child ) {
|
||||||
Child->Reset();
|
Child->Reset();
|
||||||
@@ -251,6 +251,7 @@ void CProfileManager::Stop_Profile( void )
|
|||||||
*=============================================================================================*/
|
*=============================================================================================*/
|
||||||
void CProfileManager::Reset( void )
|
void CProfileManager::Reset( void )
|
||||||
{
|
{
|
||||||
|
gProfileClock.reset();
|
||||||
Root.Reset();
|
Root.Reset();
|
||||||
Root.Call();
|
Root.Call();
|
||||||
FrameCounter = 0;
|
FrameCounter = 0;
|
||||||
@@ -278,5 +279,66 @@ float CProfileManager::Get_Time_Since_Reset( void )
|
|||||||
return (float)time / Profile_Get_Tick_Rate();
|
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
|
#endif //USE_BT_CLOCK
|
||||||
|
|
||||||
|
|||||||
@@ -10,14 +10,20 @@
|
|||||||
// Credits: The Clock class was inspired by the Timer classes in
|
// Credits: The Clock class was inspired by the Timer classes in
|
||||||
// Ogre (www.ogre3d.org).
|
// Ogre (www.ogre3d.org).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef QUICK_PROF_H
|
#ifndef QUICK_PROF_H
|
||||||
#define 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 "btScalar.h"
|
||||||
#include "LinearMath/btAlignedAllocator.h"
|
#include "LinearMath/btAlignedAllocator.h"
|
||||||
#include <new>
|
#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
|
//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 Release_Iterator( CProfileIterator * iterator ) { delete ( iterator); }
|
||||||
|
|
||||||
|
static void DumpRecursive(CProfileIterator* profileIterator, int spacing);
|
||||||
|
|
||||||
|
static void DumpAll();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static CProfileNode Root;
|
static CProfileNode Root;
|
||||||
static CProfileNode * CurrentNode;
|
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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user