diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2023-01-24 10:11:45 +0100 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2023-01-29 17:10:42 +0100 |
commit | 6348cee2299b5e99cb0ce18933bc19ddc5fe57bc (patch) | |
tree | 2aa0190bc7ea8b88d19f46838e44c84f74bf51f7 /src | |
parent | 2d44365f69b9bc946d085c6b149e2ac319700265 (diff) |
QQmlInstantiationInterrupt: Port to QDeadLineTimer
This dropes its reset method, which was only used for its side effect of
starting the timer. We however do not actually need support for
resetting interrupts: Any reset logic should be done inside
QQmlIncubationController subclasses.
Change-Id: I8626c745c46d1e941bfaf82c069c001322cc5598
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/qml/qqmlincubator.cpp | 7 | ||||
-rw-r--r-- | src/qml/qml/qqmlvme_p.h | 28 |
2 files changed, 14 insertions, 21 deletions
diff --git a/src/qml/qml/qqmlincubator.cpp b/src/qml/qml/qqmlincubator.cpp index aa696d5434..4ae1f20d6c 100644 --- a/src/qml/qml/qqmlincubator.cpp +++ b/src/qml/qml/qqmlincubator.cpp @@ -415,8 +415,8 @@ void QQmlIncubationController::incubateFor(int msecs) if (!d || !d->incubatorCount) return; - QQmlInstantiationInterrupt i(msecs * Q_INT64_C(1000000)); - i.reset(); + QDeadlineTimer deadline(msecs); + QQmlInstantiationInterrupt i(deadline); do { static_cast<QQmlIncubatorPrivate*>(d->incubatorList.first())->incubate(i); } while (d && d->incubatorCount != 0 && !i.shouldInterrupt()); @@ -439,8 +439,7 @@ void QQmlIncubationController::incubateWhile(std::atomic<bool> *flag, int msecs) if (!d || !d->incubatorCount) return; - QQmlInstantiationInterrupt i(flag, msecs * Q_INT64_C(1000000)); - i.reset(); + QQmlInstantiationInterrupt i(flag, msecs ? QDeadlineTimer(msecs) : QDeadlineTimer::Forever); do { static_cast<QQmlIncubatorPrivate*>(d->incubatorList.first())->incubate(i); } while (d && d->incubatorCount != 0 && !i.shouldInterrupt()); diff --git a/src/qml/qml/qqmlvme_p.h b/src/qml/qml/qqmlvme_p.h index ac0694354d..b4aae29a93 100644 --- a/src/qml/qml/qqmlvme_p.h +++ b/src/qml/qml/qqmlvme_p.h @@ -20,6 +20,7 @@ #include <QtCore/QStack> #include <QtCore/QString> #include <QtCore/qelapsedtimer.h> +#include <QtCore/qdeadlinetimer.h> #include <QtCore/qcoreapplication.h> #include <QtCore/qtypeinfo.h> @@ -35,16 +36,15 @@ class QObject; class QQmlInstantiationInterrupt { public: inline QQmlInstantiationInterrupt(); - inline QQmlInstantiationInterrupt(std::atomic<bool> *runWhile, qint64 nsecs = 0); - inline QQmlInstantiationInterrupt(qint64 nsecs); + inline QQmlInstantiationInterrupt(std::atomic<bool> *runWhile, + QDeadlineTimer deadline = QDeadlineTimer::Forever); + inline QQmlInstantiationInterrupt(QDeadlineTimer deadline); - inline void reset(); inline bool shouldInterrupt() const; private: enum Mode { None, Time, Flag }; Mode mode; - QElapsedTimer timer; - qint64 nsecs = 0; + QDeadlineTimer deadline; std::atomic<bool> *runWhile = nullptr; }; @@ -89,31 +89,25 @@ QQmlInstantiationInterrupt::QQmlInstantiationInterrupt() { } -QQmlInstantiationInterrupt::QQmlInstantiationInterrupt(std::atomic<bool> *runWhile, qint64 nsecs) - : mode(Flag), nsecs(nsecs), runWhile(runWhile) +QQmlInstantiationInterrupt::QQmlInstantiationInterrupt(std::atomic<bool> *runWhile, QDeadlineTimer deadline) + : mode(Flag), deadline(deadline), runWhile(runWhile) { } -QQmlInstantiationInterrupt::QQmlInstantiationInterrupt(qint64 nsecs) - : mode(Time), nsecs(nsecs) +QQmlInstantiationInterrupt::QQmlInstantiationInterrupt(QDeadlineTimer deadline) + : mode(Time), deadline(deadline) { } -void QQmlInstantiationInterrupt::reset() -{ - if (mode == Time || nsecs) - timer.start(); -} - bool QQmlInstantiationInterrupt::shouldInterrupt() const { switch (mode) { case None: return false; case Time: - return timer.nsecsElapsed() > nsecs; + return deadline.hasExpired(); case Flag: - return !runWhile->load(std::memory_order_acquire) || (nsecs && timer.nsecsElapsed() > nsecs); + return !runWhile->load(std::memory_order_acquire) || deadline.hasExpired(); } Q_UNREACHABLE_RETURN(false); } |