aboutsummaryrefslogtreecommitdiffstats
path: root/tests/manual/x11vkbtest/startclose.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/manual/x11vkbtest/startclose.cpp')
-rw-r--r--tests/manual/x11vkbtest/startclose.cpp121
1 files changed, 121 insertions, 0 deletions
diff --git a/tests/manual/x11vkbtest/startclose.cpp b/tests/manual/x11vkbtest/startclose.cpp
new file mode 100644
index 00000000..2738dc26
--- /dev/null
+++ b/tests/manual/x11vkbtest/startclose.cpp
@@ -0,0 +1,121 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** 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 General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) 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.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-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QProcess>
+#include <QFile>
+#include <QTextStream>
+#include <QTimer>
+
+#include "startclose.h"
+
+namespace {
+const QString KTest_Name = "Test start/close %1 times.";
+const quint16 KTestCycles = 25;
+const int KTestMultiplier = 2;
+}
+
+StartClose::StartClose(QProcess &proc, quint32 numberOfTests, QObject *parent)
+ : TestBase (parent, KTest_Name, numberOfTests),
+ m_procToTest(proc),
+ m_results(QStringList()),
+ m_testCycleCount(0)
+{
+ this->setTestRepeats(KTestCycles);
+ this->setTestName();
+ QObject::connect(&m_procToTest, &QProcess::started, this, &StartClose::runCycles);
+ QObject::connect(&m_procToTest, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
+ this, &StartClose::runCycles);
+}
+
+void StartClose::startTest()
+{
+ m_testTimer.start();
+ m_procToTest.start();
+}
+
+void StartClose::runCycles()
+{
+ QTimer::singleShot(50, this, [&]() {
+ if (m_testCycleCount == 0) {
+ m_results << QString::number(this->currentTotalAvailableMemory());
+ }
+ // The original number of tests will be multiplied by 2 because we always need to
+ // have even number of test cycles because one cycle consists off ON & OFF.
+ if (m_testCycleCount == (m_numberOfTests * KTestMultiplier)) {
+ m_results << QString::number(this->currentTotalAvailableMemory());
+ QObject::disconnect(&m_procToTest, &QProcess::started, this, &StartClose::startTest);
+ QObject::disconnect(&m_procToTest,
+ static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
+ this, &StartClose::startTest);
+
+ m_passed = true;
+ m_timeElapsed = m_testTimer.elapsed();
+
+ emit endTest();
+ return;
+ }
+ m_testCycleCount ++;
+
+ if (m_procToTest.state() == QProcess::Running) {
+ m_procToTest.kill();
+ } else {
+ m_procToTest.start();
+ }
+ });
+}
+
+QString StartClose::reportResult()
+{
+ m_testResult =
+ QString("Total free system memory at start: %1 KB\nTotal free system memory at end: %2 KB\nDifference: %3 KB")
+ .arg(m_results.value(0).toInt()).arg(m_results.value(1).toInt())
+ .arg(m_results.value(1).toInt() - m_results.value(0).toInt());
+ return m_testResult;
+}
+
+/**
+ * @brief StartClose::currentTotalAvailableMemory
+ * @return current free system memory by procID in kB
+ * Getting current free memory using Linux proc
+ * filesystem.
+ */
+ulong StartClose::currentTotalAvailableMemory() const
+{
+ ulong availableMemSize = 0UL;
+ QString str = QString("/proc/meminfo");
+ QFile procFile(str);
+
+ if (procFile.open(QIODevice::ReadOnly)) {
+ QTextStream procStream(&procFile);
+ procStream.readLine(); // "Read away" the first row
+ availableMemSize = procStream.readLine().split(QRegExp("\\s+")).at(1).toULong();
+ procFile.close();
+ }
+ return availableMemSize;
+}