Added bx::Ticks. (#359)

This commit is contained in:
Branimir Karadžić
2025-12-23 19:27:32 -08:00
committed by GitHub
parent ce31b14454
commit acc565e47e
3 changed files with 127 additions and 0 deletions

View File

@@ -0,0 +1,66 @@
/*
* Copyright 2011-2025 Branimir Karadzic. All rights reserved.
* License: https://github.com/bkaradzic/bx/blob/master/LICENSE
*/
#ifndef BX_TIMER_H_HEADER_GUARD
# error "Must be included from bx/timer.h!"
#endif // BX_TIMER_H_HEADER_GUARD
namespace bx
{
inline Ticks::Ticks(InitNoneTag)
{
}
inline constexpr Ticks::Ticks(InitZeroTag)
: Ticks(0)
{
}
inline Ticks::Ticks(InitIdentityTag)
: Ticks(getHPCounter() )
{
}
inline constexpr Ticks::Ticks(int64_t _ticks)
: ticks(_ticks)
{
}
inline constexpr Ticks Ticks::operator+ (Ticks _rhs) const { return Ticks(ticks + _rhs.ticks); }
inline constexpr Ticks Ticks::operator- (Ticks _rhs) const { return Ticks(ticks - _rhs.ticks); }
inline constexpr Ticks Ticks::operator* (float _rhs) const { return Ticks(int64_t(double(ticks * _rhs) ) ); }
inline constexpr Ticks& Ticks::operator+=(Ticks _rhs) { ticks += _rhs.ticks; return *this; }
inline constexpr Ticks& Ticks::operator-=(Ticks _rhs) { ticks -= _rhs.ticks; return *this; }
inline constexpr Ticks& Ticks::operator*=(float _rhs) { ticks = int64_t(double(ticks * _rhs) ); return *this; }
inline constexpr bool Ticks::operator==(Ticks _rhs) const { return ticks == _rhs.ticks; }
inline constexpr bool Ticks::operator!=(Ticks _rhs) const { return ticks != _rhs.ticks; }
inline constexpr bool Ticks::operator< (Ticks _rhs) const { return ticks < _rhs.ticks; }
inline constexpr bool Ticks::operator<=(Ticks _rhs) const { return ticks <= _rhs.ticks; }
inline constexpr bool Ticks::operator> (Ticks _rhs) const { return ticks > _rhs.ticks; }
inline constexpr bool Ticks::operator>=(Ticks _rhs) const { return ticks >= _rhs.ticks; }
inline Ticks getNow()
{
return Ticks(getHPCounter() );
}
inline Ticks getTicksSinceStartup()
{
return Ticks(getNow() - Ticks::s_kStartup);
}
template<typename Ty>
inline constexpr Ty toSeconds(const Ticks& _ticks)
{
return Ty(double(_ticks.ticks * Ticks::s_kInvFreq) );
}
template<typename Ty>
inline constexpr Ty toMilliseconds(const Ticks& _ticks)
{
return Ty(double(_ticks.ticks * 1000 * Ticks::s_kInvFreq) );
}
} // namespace bx

View File

@@ -16,6 +16,63 @@ namespace bx
///
int64_t getHPFrequency();
/// Ticks.
struct Ticks
{
/// No default constructor.
Ticks() = delete;
/// No initialization.
Ticks(InitNoneTag);
/// Initialize to zero.
constexpr Ticks(InitZeroTag);
/// Initialize to current time.
Ticks(InitIdentityTag);
/// Initialize to specific time in ticks.
explicit constexpr Ticks(int64_t _ticks);
/// Binary arithmetic operators.
constexpr Ticks operator+ (Ticks _rhs) const;
constexpr Ticks operator- (Ticks _rhs) const;
constexpr Ticks operator* (float _rhs) const;
constexpr Ticks& operator+=(Ticks _rhs);
constexpr Ticks& operator-=(Ticks _rhs);
constexpr Ticks& operator*=(float _rhs);
/// Comparison operators.
constexpr bool operator==(Ticks _rhs) const;
constexpr bool operator!=(Ticks _rhs) const;
constexpr bool operator< (Ticks _rhs) const;
constexpr bool operator<=(Ticks _rhs) const;
constexpr bool operator> (Ticks _rhs) const;
constexpr bool operator>=(Ticks _rhs) const;
static const Ticks s_kStartup; //!< App start time.
static const Ticks s_kFreq; //!< Frequency, ticks per second.
static const double s_kInvFreq; //!< 1.0/s_kFreq
int64_t ticks; //!< Timer ticks.
};
/// Returns current time.
Ticks getNow();
/// Returns time since app startup.
Ticks getTicksSinceStartup();
/// Returns time in seconds.
template<typename Ty>
constexpr Ty toSeconds(const Ticks& _time);
/// Returns time in milliseconds.
template<typename Ty>
constexpr Ty toMilliseconds(const Ticks& _time);
} // namespace bx
#include "inline/timer.inl"
#endif // BX_TIMER_H_HEADER_GUARD