diff options
Diffstat (limited to 'tests/manual/x11vkbtest/startclose.cpp')
-rw-r--r-- | tests/manual/x11vkbtest/startclose.cpp | 121 |
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; +} |