//====== Copyright ©, Valve Corporation, All rights reserved. ======= // // Purpose: Encapsultes the job system's version of time (which is != to wall clock time) // //============================================================================= #ifndef JOBTIME_H #define JOBTIME_H #ifdef _WIN32 #pragma once #endif namespace GCSDK { // CJobTime // This is our primary job time structure. It's similar to the Windows FILETIME structure, but // with 1/10th the nominal resolution. // It offers 1 microsecond resolution beginning on January 1, 1601. // This is NOT wall clock time, it is time based proxy for a frame counter. // This time PAUSES when you are in the debugger. Most timeout checks (things that don't need to be // exact time wise should use this ); class CJobTime { public: CJobTime(); void SetToJobTime(); void SetFromJobTime( int64 dMicroSecOffset ); // Amount of time that's passed between this CJobTime and the current time. int64 CServerMicroSecsPassed() const; // Time accessors uint64 LTime() const { return m_lTime; } void SetLTime( uint64 lTime ) { m_lTime = lTime; } // Access our cached current time value static void UpdateJobTime( int cMicroSecPerShellFrame ); static void SetCurrentJobTime( uint64 lCurrentTime ); static uint64 LJobTimeCur() { return sm_lTimeCur; } bool operator==( const CJobTime &val ) const { return val.m_lTime == m_lTime; } bool operator!=( const CJobTime &val ) const { return val.m_lTime != m_lTime; } bool operator<( const CJobTime &val ) const { return m_lTime < val.m_lTime; } bool operator>( const CJobTime &val ) const { return m_lTime > val.m_lTime; } const CJobTime& operator+( const int64 &val ) { m_lTime += val; return *this; } const CJobTime& operator+=( const int64 &val ) { m_lTime += val; return *this; } private: uint64 m_lTime; // Our time value (microseconds since 1/1/1601) static uint64 sm_lTimeCur; // Cached value of the current time (updated each frame) }; const uint64 k_lJobTimeMaxFuture = (uint64)-1; } #endif // JOBTIME_H