From 15740faf9fe9fe4be08965098bbf2947e096aeeb Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 14 Aug 2019 22:50:43 +0800 Subject: +Unity Runtime code --- Runtime/GfxDevice/d3d/TimerQueryD3D9.h | 67 ++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Runtime/GfxDevice/d3d/TimerQueryD3D9.h (limited to 'Runtime/GfxDevice/d3d/TimerQueryD3D9.h') diff --git a/Runtime/GfxDevice/d3d/TimerQueryD3D9.h b/Runtime/GfxDevice/d3d/TimerQueryD3D9.h new file mode 100644 index 0000000..ecc4a94 --- /dev/null +++ b/Runtime/GfxDevice/d3d/TimerQueryD3D9.h @@ -0,0 +1,67 @@ +#ifndef TIMERQUERYD3D9_H +#define TIMERQUERYD3D9_H + +#if ENABLE_PROFILER + +#include "Runtime/GfxDevice/GfxTimerQuery.h" + +class TimerQueriesD3D9; + +class TimerQueryD3D9 : public GfxTimerQuery +{ +public: + ~TimerQueryD3D9(); + + virtual void Measure(); + virtual ProfileTimeFormat GetElapsed(UInt32 flags); + + bool PollResult(UInt64& prevTime, bool wait); + void SetTimeMultiplier(float tm) { m_TimeMultiplier = tm; } + +private: + friend TimerQueriesD3D9; + TimerQueryD3D9(); + + IDirect3DQuery9* m_Query; + ProfileTimeFormat m_Time; + float m_TimeMultiplier; + bool m_Active; +}; + +class TimerQueriesD3D9 +{ +public: + TimerQueriesD3D9(); + + void ReleaseAllQueries(); + void RecreateAllQueries(); + + void BeginTimerQueries(); + void EndTimerQueries(); + + TimerQueryD3D9* CreateTimerQuery(); + + void AddActiveTimerQuery(TimerQueryD3D9* query); + void PollTimerQueries(); + bool PollNextTimerQuery(bool wait); + + bool HasFrequencyQuery() const { return m_FrequencyQuery != NULL; } + +private: + enum + { + kStartTimeQueryCount = 3 + }; + + UInt64 m_LastQueryTime; + IDirect3DQuery9* m_FrequencyQuery; + TimerQueryD3D9* m_StartTimeQueries[kStartTimeQueryCount]; + int m_StartTimeQueryIndex; + typedef List TimerQueryList; + TimerQueryList m_InactiveTimerQueries; + TimerQueryList m_ActiveTimerQueries; + TimerQueryList m_PolledTimerQueries; +}; + +#endif +#endif -- cgit v1.1-26-g67d0