diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2016-04-26 23:01:43 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2016-08-15 03:07:16 +0000 |
commit | 12eacc3bab00f23d187a295b35e4a0d283ba85f4 (patch) | |
tree | 93a4e36fac6474921d45ce4a9383d5b49e6f5ee7 /src/corelib/kernel/qelapsedtimer_mac.cpp | |
parent | 906fc0f5e394d4d765cb714a52ea46643abcec1e (diff) |
Long live QDeadlineTimer
It's like QElapsedTimer, but marks a time in the future instead.
[ChangeLog][QtCore] Added QDeadlineTimer, a counterpart to
QElapsedTimer, used to mark a time point in the future (a deadline) and
determine whether such a deadline has passed.
Change-Id: Ifea6e497f11a461db432ffff144921f7fbc1d1d3
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/corelib/kernel/qelapsedtimer_mac.cpp')
-rw-r--r-- | src/corelib/kernel/qelapsedtimer_mac.cpp | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/src/corelib/kernel/qelapsedtimer_mac.cpp b/src/corelib/kernel/qelapsedtimer_mac.cpp index 886e0f41b2..7490693991 100644 --- a/src/corelib/kernel/qelapsedtimer_mac.cpp +++ b/src/corelib/kernel/qelapsedtimer_mac.cpp @@ -41,6 +41,8 @@ #define _POSIX_C_SOURCE 200809L #include "qelapsedtimer.h" +#include "qdeadlinetimer.h" +#include "qdeadlinetimer_p.h" #include <sys/time.h> #include <time.h> #include <unistd.h> @@ -50,6 +52,12 @@ QT_BEGIN_NAMESPACE +#ifdef __LP64__ +typedef __int128_t LargeInt; +#else +typedef qint64 LargeInt; +#endif + QElapsedTimer::ClockType QElapsedTimer::clockType() Q_DECL_NOTHROW { return MachAbsoluteTime; @@ -65,13 +73,13 @@ static qint64 absoluteToNSecs(qint64 cpuTime) { if (info.denom == 0) mach_timebase_info(&info); -#ifdef __LP64__ - __uint128_t nsecs = static_cast<__uint128_t>(cpuTime) * info.numer / info.denom; - return static_cast<qint64>(nsecs); -#else - qint64 nsecs = cpuTime * info.numer / info.denom; + + // don't do multiplication & division if those are equal + // (mathematically it would be the same, but it's computationally expensive) + if (info.numer == info.denom) + return cpuTime; + qint64 nsecs = LargeInt(cpuTime) * info.numer / info.denom; return nsecs; -#endif } static qint64 absoluteToMSecs(qint64 cpuTime) @@ -146,4 +154,13 @@ bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2) Q_DECL_NOTHROW return v1.t1 < v2.t1; } +QDeadlineTimer QDeadlineTimer::current(Qt::TimerType timerType) Q_DECL_NOTHROW +{ + Q_STATIC_ASSERT(!QDeadlineTimerNanosecondsInT2); + QDeadlineTimer result; + result.type = timerType; + result.t1 = absoluteToNSecs(mach_absolute_time()); + return result; +} + QT_END_NAMESPACE |