diff options
Diffstat (limited to 'public/gcsdk/jobtime.h')
| -rw-r--r-- | public/gcsdk/jobtime.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/public/gcsdk/jobtime.h b/public/gcsdk/jobtime.h new file mode 100644 index 0000000..afbf5aa --- /dev/null +++ b/public/gcsdk/jobtime.h @@ -0,0 +1,60 @@ +//========= 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 |