diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2016-06-15 00:34:10 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2020-12-09 12:54:59 -0700 |
commit | c000143ee472fc613b91a4f16f321509e4f0ee18 (patch) | |
tree | e90172e83e52db9ace793578c8a74e1c42345236 /src | |
parent | 8c8cbd15087f4f3bf642f284a8cc54b7e78ebf7e (diff) |
QDeadlineTimer: optimize when std::chrono::steady_clock is the same
Change-Id: Ib57b52598e2f452985e9fffd14583173716343b0
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/kernel/qdeadlinetimer.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/corelib/kernel/qdeadlinetimer.h b/src/corelib/kernel/qdeadlinetimer.h index 180d5fe431..8ec9380916 100644 --- a/src/corelib/kernel/qdeadlinetimer.h +++ b/src/corelib/kernel/qdeadlinetimer.h @@ -192,6 +192,34 @@ public: QPair<qint64, unsigned> _q_data() const { return qMakePair(t1, t2); } }; +#if QT_HAS_INCLUDE(<chrono>) && (defined(Q_OS_DARWIN) || defined(Q_OS_LINUX) || (defined(Q_CC_MSVC) && Q_CC_MSVC >= 1900)) +// We know for these OS/compilers that the std::chrono::steady_clock uses the same +// reference time as QDeadlineTimer + +template <> inline std::chrono::steady_clock::time_point +QDeadlineTimer::deadline<std::chrono::steady_clock, std::chrono::steady_clock::duration>() const +{ + return std::chrono::steady_clock::time_point(std::chrono::nanoseconds(deadlineNSecs())); +} + +template <> inline void +QDeadlineTimer::setDeadline<std::chrono::steady_clock, std::chrono::steady_clock::duration>(std::chrono::steady_clock::time_point tp, Qt::TimerType type_) +{ + using namespace std::chrono; + if (tp == tp.max()) { + *this = Forever; + type = type_; + } else if (type_ != Qt::PreciseTimer) { + // if we aren't using PreciseTimer, then we need to convert + setPreciseRemainingTime(0, duration_cast<nanoseconds>(tp - steady_clock::now()).count(), type_); + } else { + setPreciseDeadline(0, + duration_cast<nanoseconds>(tp.time_since_epoch()).count(), + type_); + } +} +#endif + Q_DECLARE_SHARED(QDeadlineTimer) QT_END_NAMESPACE |