25 #include <sys/sys_time.h>    26 #include <sys/time_util.h>    30 #if defined (SUNOS) || defined (__SUNOS__)    34 #if defined(WIN32) || defined(_WIN32)    36 #define BT_USE_WINDOWS_TIMERS    37 #define WIN32_LEAN_AND_MEAN    48 #define GetTickCount64 GetTickCount    60 #define mymin(a,b) (a > b ? a : b)    65 #ifdef BT_USE_WINDOWS_TIMERS    74         struct timeval mStartTime;
    76 #endif //__CELLOS_LV2__    84 #ifdef BT_USE_WINDOWS_TIMERS    85         QueryPerformanceFrequency(&m_data->mClockFrequency);
   111 #ifdef BT_USE_WINDOWS_TIMERS   112         QueryPerformanceCounter(&m_data->mStartTime);
   114         m_data->mPrevElapsedTime = 0;
   116 #ifdef __CELLOS_LV2__   121         SYS_TIMEBASE_GET( newTime );
   122         m_data->mStartTime = newTime;
   124         gettimeofday(&m_data->mStartTime, 0);
   133 #ifdef BT_USE_WINDOWS_TIMERS   134         LARGE_INTEGER currentTime;
   135         QueryPerformanceCounter(¤tTime);
   136         LONGLONG elapsedTime = currentTime.QuadPart -
   137                 m_data->mStartTime.QuadPart;
   139         unsigned long msecTicks = (
unsigned long)(1000 * elapsedTime /
   140                 m_data->mClockFrequency.QuadPart);
   144                 unsigned long elapsedTicks = (
unsigned long)(
GetTickCount64() - m_data->mStartTick);
   145                 signed long msecOff = (
signed long)(msecTicks - elapsedTicks);
   146                 if (msecOff < -100 || msecOff > 100)
   149                         LONGLONG msecAdjustment = 
mymin(msecOff *
   150                                 m_data->mClockFrequency.QuadPart / 1000, elapsedTime -
   151                                 m_data->mPrevElapsedTime);
   152                         m_data->mStartTime.QuadPart += msecAdjustment;
   153                         elapsedTime -= msecAdjustment;
   156                         msecTicks = (
unsigned long)(1000 * elapsedTime /
   157                                 m_data->mClockFrequency.QuadPart);
   161                 m_data->mPrevElapsedTime = elapsedTime;
   166 #ifdef __CELLOS_LV2__   167                 uint64_t freq=sys_time_get_timebase_frequency();
   168                 double dFreq=((double) freq) / 1000.0;
   171                 SYS_TIMEBASE_GET( newTime );
   174                 return (
unsigned long int)((double(newTime-m_data->mStartTime)) / dFreq);
   177                 struct timeval currentTime;
   178                 gettimeofday(¤tTime, 0);
   179                 return (currentTime.tv_sec - m_data->mStartTime.tv_sec) * 1000 +
   180                         (currentTime.tv_usec - m_data->mStartTime.tv_usec) / 1000;
   181 #endif //__CELLOS_LV2__   189 #ifdef BT_USE_WINDOWS_TIMERS   190                 LARGE_INTEGER currentTime;
   191                 QueryPerformanceCounter(¤tTime);
   192                 LONGLONG elapsedTime = currentTime.QuadPart -
   193                         m_data->mStartTime.QuadPart;
   196                 unsigned long msecTicks = (
unsigned long)(1000 * elapsedTime /
   197                         m_data->mClockFrequency.QuadPart);
   202                 unsigned long elapsedTicks = (
unsigned long)(
GetTickCount64() - m_data->mStartTick);
   203                 signed long msecOff = (
signed long)(msecTicks - elapsedTicks);
   204                 if (msecOff < -100 || msecOff > 100)
   207                         LONGLONG msecAdjustment = 
mymin(msecOff *
   208                                 m_data->mClockFrequency.QuadPart / 1000, elapsedTime -
   209                                 m_data->mPrevElapsedTime);
   210                         m_data->mStartTime.QuadPart += msecAdjustment;
   211                         elapsedTime -= msecAdjustment;
   215                 m_data->mPrevElapsedTime = elapsedTime;
   218                 unsigned long usecTicks = (
unsigned long)(1000000 * elapsedTime /
   219                         m_data->mClockFrequency.QuadPart);
   224 #ifdef __CELLOS_LV2__   225                 uint64_t freq=sys_time_get_timebase_frequency();
   226                 double dFreq=((double) freq)/ 1000000.0;
   230                 SYS_TIMEBASE_GET( newTime );
   232                 return (
unsigned long int)((double(newTime-m_data->mStartTime)) / dFreq);
   235                 struct timeval currentTime;
   236                 gettimeofday(¤tTime, 0);
   237                 return (currentTime.tv_sec - m_data->mStartTime.tv_sec) * 1000000 +
   238                         (currentTime.tv_usec - m_data->mStartTime.tv_usec);
   239 #endif//__CELLOS_LV2__   250         return btScalar(getTimeMicroseconds()) * microseconds_to_seconds;
   289         RecursionCounter( 0 ),
   326                 if ( child->
Name == name ) {
   368                 unsigned long int time;
   384         CurrentParent = start;
   385         CurrentChild = CurrentParent->
Get_Child();
   391         CurrentChild = CurrentParent->Get_Child();
   397         CurrentChild = CurrentChild->Get_Sibling();
   403         return CurrentChild == NULL;
   409         CurrentChild = CurrentParent->Get_Child();
   410         while ( (CurrentChild != NULL) && (index != 0) ) {
   412                 CurrentChild = CurrentChild->Get_Sibling();
   415         if ( CurrentChild != NULL ) {
   416                 CurrentParent = CurrentChild;
   417                 CurrentChild = CurrentParent->Get_Child();
   424         if ( CurrentParent->Get_Parent() != NULL ) {
   425                 CurrentParent = CurrentParent->Get_Parent();
   427         CurrentChild = CurrentParent->Get_Child();
   458         if (name != CurrentNode->Get_Name()) {
   459                 CurrentNode = CurrentNode->Get_Sub_Node( name );
   473         if (CurrentNode->Return()) {
   474                 CurrentNode = CurrentNode->Get_Parent();
   486         gProfileClock.
reset();
   508         unsigned long int time;
   518         profileIterator->
First();
   519         if (profileIterator->
Is_Done())
   525         for (i=0;i<spacing;i++) printf(
".");
   526         printf(
"----------------------------------\n");
   527         for (i=0;i<spacing;i++) printf(
".");
   528         printf(
"Profiling: %s (total running time: %.3f ms) ---\n",     profileIterator->
Get_Current_Parent_Name(), parent_time );
   529         float totalTime = 0.f;
   534         for (i = 0; !profileIterator->
Is_Done(); i++,profileIterator->
Next())
   538                 accumulated_time += current_total_time;
   539                 float fraction = parent_time > 
SIMD_EPSILON ? (current_total_time / parent_time) * 100 : 0.f;
   541                         int i;  
for (i=0;i<spacing;i++) printf(
".");
   543                 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());
   544                 totalTime += current_total_time;
   548         if (parent_time < accumulated_time)
   552         for (i=0;i<spacing;i++) printf(
".");
   553         printf(
"%s (%.3f %%) :: %.3f ms\n", 
"Unaccounted:",parent_time > 
SIMD_EPSILON ? ((parent_time - accumulated_time) / parent_time) * 100 : 0.f, parent_time - accumulated_time);
   555         for (i=0;i<numChildren;i++)
   558                 dumpRecursive(profileIterator,spacing+3);
   570         dumpRecursive(profileIterator,0);
   578 #endif //BT_NO_PROFILE CProfileNode * Get_Sub_Node(const char *name)
static CProfileNode * CurrentNode
CProfileNode * Get_Child(void)
unsigned long long int uint64_t
CProfileIterator(CProfileNode *start)
static void Start_Profile(const char *name)
btScalar getTimeSeconds()
Returns the time in s since the last call to reset or since the Clock was created. 
LONGLONG mPrevElapsedTime
const char * Get_Current_Name(void)
float Get_Current_Parent_Total_Time(void)
unsigned long int getTimeMicroseconds()
Returns the time in us since the last call to reset or since the Clock was created. 
The btClock is a portable basic clock that measures accurate time in seconds, use for profiling...
float Get_Current_Total_Time(void)
void Enter_Child(int index)
void reset()
Resets the initial reference time. 
An iterator to navigate through the tree. 
static void Stop_Profile(void)
float Profile_Get_Tick_Rate(void)
unsigned long int getTimeMilliseconds()
Returns the time in ms since the last call to reset or since the btClock was created. 
static void dumpRecursive(CProfileIterator *profileIterator, int spacing)
static unsigned long int ResetTime
btClock()
The btClock is a portable basic clock that measures accurate time in seconds, use for profiling...
struct btClockData * m_data
void Profile_Get_Ticks(unsigned long int *ticks)
static void Release_Iterator(CProfileIterator *iterator)
btClock & operator=(const btClock &other)
static btClock gProfileClock
static float Get_Time_Since_Reset(void)
A node in the Profile Hierarchy Tree. 
static void Increment_Frame_Counter(void)
int Get_Current_Total_Calls(void)
unsigned long int StartTime
CProfileNode(const char *name, CProfileNode *parent)
LARGE_INTEGER mClockFrequency
static CProfileIterator * Get_Iterator(void)
static int Get_Frame_Count_Since_Reset(void)
const char * Get_Current_Parent_Name(void)
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...