aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2023-01-24 10:11:45 +0100
committerFabian Kosmale <fabian.kosmale@qt.io>2023-01-29 17:10:42 +0100
commit6348cee2299b5e99cb0ce18933bc19ddc5fe57bc (patch)
tree2aa0190bc7ea8b88d19f46838e44c84f74bf51f7 /src
parent2d44365f69b9bc946d085c6b149e2ac319700265 (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.cpp7
-rw-r--r--src/qml/qml/qqmlvme_p.h28
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);
}