Don't use qApp->processEvents() if not necessary

Change-Id: I2e92341530f3d79f9c0b47f2007750582db9a361
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
This commit is contained in:
Christian Stenger
2015-06-29 09:22:58 +02:00
parent c7a8a94161
commit 08ab1b6d76
5 changed files with 37 additions and 40 deletions

View File

@@ -168,7 +168,7 @@ void AutotestPlugin::onRunAllTriggered()
TestRunner *runner = TestRunner::instance(); TestRunner *runner = TestRunner::instance();
TestTreeModel *model = TestTreeModel::instance(); TestTreeModel *model = TestTreeModel::instance();
runner->setSelectedTests(model->getAllTestCases()); runner->setSelectedTests(model->getAllTestCases());
runner->runTests(); runner->prepareToRunTests();
} }
void AutotestPlugin::onRunSelectedTriggered() void AutotestPlugin::onRunSelectedTriggered()
@@ -176,7 +176,7 @@ void AutotestPlugin::onRunSelectedTriggered()
TestRunner *runner = TestRunner::instance(); TestRunner *runner = TestRunner::instance();
TestTreeModel *model = TestTreeModel::instance(); TestTreeModel *model = TestTreeModel::instance();
runner->setSelectedTests(model->getSelectedTests()); runner->setSelectedTests(model->getSelectedTests());
runner->runTests(); runner->prepareToRunTests();
} }
void AutotestPlugin::updateMenuItemsEnabledState() void AutotestPlugin::updateMenuItemsEnabledState()

View File

@@ -249,7 +249,7 @@ void TestNavigationWidget::onRunThisTestTriggered()
if (TestConfiguration *configuration = m_model->getTestConfiguration(item)) { if (TestConfiguration *configuration = m_model->getTestConfiguration(item)) {
TestRunner *runner = TestRunner::instance(); TestRunner *runner = TestRunner::instance();
runner->setSelectedTests( {configuration} ); runner->setSelectedTests( {configuration} );
runner->runTests(); runner->prepareToRunTests();
} }
} }
} }

View File

@@ -288,14 +288,14 @@ void TestResultsPane::onRunAllTriggered()
{ {
TestRunner *runner = TestRunner::instance(); TestRunner *runner = TestRunner::instance();
runner->setSelectedTests(TestTreeModel::instance()->getAllTestCases()); runner->setSelectedTests(TestTreeModel::instance()->getAllTestCases());
runner->runTests(); runner->prepareToRunTests();
} }
void TestResultsPane::onRunSelectedTriggered() void TestResultsPane::onRunSelectedTriggered()
{ {
TestRunner *runner = TestRunner::instance(); TestRunner *runner = TestRunner::instance();
runner->setSelectedTests(TestTreeModel::instance()->getSelectedTests()); runner->setSelectedTests(TestTreeModel::instance()->getSelectedTests());
runner->runTests(); runner->prepareToRunTests();
} }
void TestResultsPane::initializeFilterMenu() void TestResultsPane::initializeFilterMenu()

View File

@@ -86,7 +86,6 @@ TestRunner *TestRunner::instance()
TestRunner::TestRunner(QObject *parent) : TestRunner::TestRunner(QObject *parent) :
QObject(parent), QObject(parent),
m_building(false),
m_executingTests(false) m_executingTests(false)
{ {
} }
@@ -197,12 +196,9 @@ void performTestRun(QFutureInterface<void> &futureInterface,
futureInterface.setProgressValue(testCaseCount); futureInterface.setProgressValue(testCaseCount);
} }
void TestRunner::runTests() void TestRunner::prepareToRunTests()
{ {
const QSharedPointer<TestSettings> settings = AutotestPlugin::instance()->settings(); const bool omitRunConfigWarnings = AutotestPlugin::instance()->settings()->omitRunConfigWarn;
const int timeout = settings->timeout;
const QString metricsOption = TestSettings::metricsTypeToOption(settings->metrics);
const bool displayRunConfigWarnings = !settings->omitRunConfigWarn;
m_executingTests = true; m_executingTests = true;
emit testRunStarted(); emit testRunStarted();
@@ -211,7 +207,7 @@ void TestRunner::runTests()
TestResultsPane::instance()->clearContents(); TestResultsPane::instance()->clearContents();
foreach (TestConfiguration *config, m_selectedTests) { foreach (TestConfiguration *config, m_selectedTests) {
if (displayRunConfigWarnings && config->guessedConfiguration()) { if (!omitRunConfigWarnings && config->guessedConfiguration()) {
TestResultsPane::instance()->addTestResult(FaultyTestResult(Result::MESSAGE_WARN, TestResultsPane::instance()->addTestResult(FaultyTestResult(Result::MESSAGE_WARN,
tr("Project's run configuration was guessed for \"%1\".\n" tr("Project's run configuration was guessed for \"%1\".\n"
"This might cause trouble during execution.").arg(config->displayName()))); "This might cause trouble during execution.").arg(config->displayName())));
@@ -237,38 +233,31 @@ void TestRunner::runTests()
ProjectExplorer::Internal::ProjectExplorerSettings projectExplorerSettings = ProjectExplorer::Internal::ProjectExplorerSettings projectExplorerSettings =
ProjectExplorer::ProjectExplorerPlugin::projectExplorerSettings(); ProjectExplorer::ProjectExplorerPlugin::projectExplorerSettings();
if (projectExplorerSettings.buildBeforeDeploy) { if (!projectExplorerSettings.buildBeforeDeploy) {
if (!project->hasActiveBuildSettings()) { runTests();
} else {
if (project->hasActiveBuildSettings()) {
buildProject(project);
} else {
TestResultsPane::instance()->addTestResult(FaultyTestResult(Result::MESSAGE_FATAL, TestResultsPane::instance()->addTestResult(FaultyTestResult(Result::MESSAGE_FATAL,
tr("Project is not configured. Canceling test run."))); tr("Project is not configured. Canceling test run.")));
onFinished(); onFinished();
return; return;
} }
auto connection = connect(this, &TestRunner::requestStopTestRun, [&] () {
ProjectExplorer::BuildManager::instance()->cancel();
m_building = false;
m_buildSucceeded = false;
});
buildProject(project);
while (m_building) {
qApp->processEvents();
}
disconnect(connection);
if (!m_buildSucceeded) {
TestResultsPane::instance()->addTestResult(FaultyTestResult(Result::MESSAGE_FATAL,
tr("Build failed. Canceling test run.")));
onFinished();
return;
}
} }
}
void TestRunner::runTests()
{
const QSharedPointer<TestSettings> settings = AutotestPlugin::instance()->settings();
const QString &metricsOption = TestSettings::metricsTypeToOption(settings->metrics);
connect(this, &TestRunner::testResultCreated, connect(this, &TestRunner::testResultCreated,
TestResultsPane::instance(), &TestResultsPane::addTestResult, TestResultsPane::instance(), &TestResultsPane::addTestResult,
Qt::QueuedConnection); Qt::QueuedConnection);
QFuture<void> future = QtConcurrent::run(&performTestRun, m_selectedTests, timeout, metricsOption, this); QFuture<void> future = QtConcurrent::run(&performTestRun, m_selectedTests, settings->timeout,
metricsOption, this);
Core::FutureProgress *progress = Core::ProgressManager::addTask(future, tr("Running Tests"), Core::FutureProgress *progress = Core::ProgressManager::addTask(future, tr("Running Tests"),
Autotest::Constants::TASK_INDEX); Autotest::Constants::TASK_INDEX);
connect(progress, &Core::FutureProgress::finished, connect(progress, &Core::FutureProgress::finished,
@@ -277,9 +266,9 @@ void TestRunner::runTests()
void TestRunner::buildProject(ProjectExplorer::Project *project) void TestRunner::buildProject(ProjectExplorer::Project *project)
{ {
m_building = true;
m_buildSucceeded = false;
ProjectExplorer::BuildManager *buildManager = ProjectExplorer::BuildManager::instance(); ProjectExplorer::BuildManager *buildManager = ProjectExplorer::BuildManager::instance();
m_buildConnect = connect(this, &TestRunner::requestStopTestRun,
buildManager, &ProjectExplorer::BuildManager::cancel);
connect(buildManager, &ProjectExplorer::BuildManager::buildQueueFinished, connect(buildManager, &ProjectExplorer::BuildManager::buildQueueFinished,
this, &TestRunner::buildFinished); this, &TestRunner::buildFinished);
ProjectExplorer::ProjectExplorerPlugin::buildProject(project); ProjectExplorer::ProjectExplorerPlugin::buildProject(project);
@@ -287,11 +276,18 @@ void TestRunner::buildProject(ProjectExplorer::Project *project)
void TestRunner::buildFinished(bool success) void TestRunner::buildFinished(bool success)
{ {
disconnect(m_buildConnect);
ProjectExplorer::BuildManager *buildManager = ProjectExplorer::BuildManager::instance(); ProjectExplorer::BuildManager *buildManager = ProjectExplorer::BuildManager::instance();
disconnect(buildManager, &ProjectExplorer::BuildManager::buildQueueFinished, disconnect(buildManager, &ProjectExplorer::BuildManager::buildQueueFinished,
this, &TestRunner::buildFinished); this, &TestRunner::buildFinished);
m_building = false;
m_buildSucceeded = success; if (success) {
runTests();
} else {
TestResultsPane::instance()->addTestResult(FaultyTestResult(Result::MESSAGE_FATAL,
tr("Build failed. Canceling test run.")));
onFinished();
}
} }
void TestRunner::onFinished() void TestRunner::onFinished()

View File

@@ -51,7 +51,7 @@ signals:
void requestStopTestRun(); void requestStopTestRun();
public slots: public slots:
void runTests(); void prepareToRunTests();
private slots: private slots:
void buildProject(ProjectExplorer::Project *project); void buildProject(ProjectExplorer::Project *project);
@@ -59,13 +59,14 @@ private slots:
void onFinished(); void onFinished();
private: private:
void runTests();
explicit TestRunner(QObject *parent = 0); explicit TestRunner(QObject *parent = 0);
QList<TestConfiguration *> m_selectedTests; QList<TestConfiguration *> m_selectedTests;
bool m_building;
bool m_buildSucceeded;
bool m_executingTests; bool m_executingTests;
// temporarily used if building before running is necessary
QMetaObject::Connection m_buildConnect;
}; };
} // namespace Internal } // namespace Internal