summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2016-06-15 00:34:10 -0700
committerThiago Macieira <thiago.macieira@intel.com>2020-12-09 12:54:59 -0700
commitc000143ee472fc613b91a4f16f321509e4f0ee18 (patch)
treee90172e83e52db9ace793578c8a74e1c42345236 /src
parent8c8cbd15087f4f3bf642f284a8cc54b7e78ebf7e (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.h28
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