29#include "NvFlowTypes.h"
47NV_FLOW_INLINE
void appTimerInit(
AppTimer* ptr)
53 ptr->statTimeAccum = 0.f;
54 ptr->statTimeCount = 0.f;
57NV_FLOW_INLINE
void appTimerDestroy(
AppTimer* ptr)
62NV_FLOW_INLINE
void appTimerBegin(
AppTimer* ptr)
67 LARGE_INTEGER tmpCpuFreq = {};
68 QueryPerformanceFrequency(&tmpCpuFreq);
69 ptr->freq = tmpCpuFreq.QuadPart;
71 LARGE_INTEGER tmpCpuTime = {};
72 QueryPerformanceCounter(&tmpCpuTime);
73 ptr->begin = tmpCpuTime.QuadPart;
77 timespec timeValue = {};
78 clock_gettime(CLOCK_MONOTONIC, &timeValue);
79 ptr->begin = 1E9 * NvFlowUint64(timeValue.tv_sec) + NvFlowUint64(timeValue.tv_nsec);
86NV_FLOW_INLINE
void appTimerEnd(
AppTimer* ptr)
91 LARGE_INTEGER tmpCpuTime = {};
92 QueryPerformanceCounter(&tmpCpuTime);
93 ptr->end = tmpCpuTime.QuadPart;
95 timespec timeValue = {};
96 clock_gettime(CLOCK_MONOTONIC, &timeValue);
97 ptr->end = 1E9 * NvFlowUint64(timeValue.tv_sec) + NvFlowUint64(timeValue.tv_nsec);
104NV_FLOW_INLINE NvFlowBool32 appTimerGetResults(
AppTimer* ptr,
float* deltaTime)
106 if (ptr->state == 0u)
108 *deltaTime = (float)(((
double)(ptr->end - ptr->begin) / (
double)(ptr->freq)));
111 return NV_FLOW_FALSE;
114NV_FLOW_INLINE NvFlowBool32 appTimerUpdateStats(
AppTimer* ptr,
float deltaTime,
float sampleCount,
float* pAverageTime)
116 ptr->statTimeAccum += deltaTime;
117 ptr->statTimeCount += 1.f;
118 if (ptr->statTimeCount > sampleCount)
120 *pAverageTime = ptr->statTimeAccum / ptr->statTimeCount;
121 ptr->statTimeAccum = 0.f;
122 ptr->statTimeCount = 0.f;
125 return NV_FLOW_FALSE;