aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlvme_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/qml/qqmlvme_p.h')
-rw-r--r--src/qml/qml/qqmlvme_p.h76
1 files changed, 16 insertions, 60 deletions
diff --git a/src/qml/qml/qqmlvme_p.h b/src/qml/qml/qqmlvme_p.h
index 78631ecdf8..b8dfc28050 100644
--- a/src/qml/qml/qqmlvme_p.h
+++ b/src/qml/qml/qqmlvme_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQml module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QQMLVME_P_H
#define QQMLVME_P_H
@@ -51,12 +15,12 @@
// We mean it.
//
-#include "qqmlerror.h"
#include <private/qrecursionwatcher_p.h>
#include <QtCore/QStack>
#include <QtCore/QString>
#include <QtCore/qelapsedtimer.h>
+#include <QtCore/qdeadlinetimer.h>
#include <QtCore/qcoreapplication.h>
#include <QtCore/qtypeinfo.h>
@@ -72,20 +36,19 @@ 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;
};
-class Q_QML_PRIVATE_EXPORT QQmlVME
+class Q_QML_EXPORT QQmlVME
{
public:
static void enableComponentComplete();
@@ -116,7 +79,7 @@ public:
private:
int m_objectCount;
- QPointer<QObject> *m_objects;
+ QQmlGuard<QObject> *m_objects;
int m_contextCount;
QQmlGuardedContextData *m_contexts;
};
@@ -126,34 +89,27 @@ 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;
+ Q_UNREACHABLE_RETURN(false);
}
QT_END_NAMESPACE