mirror of
https://github.com/bkaradzic/bx.git
synced 2026-02-17 20:52:37 +01:00
Added bx::Ticks. (#359)
This commit is contained in:
committed by
GitHub
parent
ce31b14454
commit
acc565e47e
66
include/bx/inline/timer.inl
Normal file
66
include/bx/inline/timer.inl
Normal 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
|
||||||
@@ -16,6 +16,63 @@ namespace bx
|
|||||||
///
|
///
|
||||||
int64_t getHPFrequency();
|
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
|
} // namespace bx
|
||||||
|
|
||||||
|
#include "inline/timer.inl"
|
||||||
|
|
||||||
#endif // BX_TIMER_H_HEADER_GUARD
|
#endif // BX_TIMER_H_HEADER_GUARD
|
||||||
|
|||||||
@@ -68,4 +68,8 @@ namespace bx
|
|||||||
#endif // BX_PLATFORM_
|
#endif // BX_PLATFORM_
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const Ticks Ticks::s_kStartup = getNow();
|
||||||
|
const Ticks Ticks::s_kFreq = Ticks(getHPFrequency() );
|
||||||
|
const double Ticks::s_kInvFreq = 1.0/double(Ticks::s_kFreq.ticks);
|
||||||
|
|
||||||
} // namespace bx
|
} // namespace bx
|
||||||
|
|||||||
Reference in New Issue
Block a user