diff options
author | Christian Stenger <christian.stenger@theqtcompany.com> | 2015-04-09 15:51:42 +0200 |
---|---|---|
committer | Christian Stenger <christian.stenger@theqtcompany.com> | 2015-04-10 10:41:02 +0300 |
commit | 475c6cea1e5bb30b4853f389c043bb9b08770d03 (patch) | |
tree | 5b03a835cdf49b19ba23f6a62b81f0b8fe49447e | |
parent | 178318d077c1646d6c75788977731d7949093f2d (diff) | |
download | qt-creator-475c6cea1e5bb30b4853f389c043bb9b08770d03.tar.gz |
Limit result output by default
For huge amount of output the processing takes much too long
and blocks QC. So, limiting it to a reasonable value seems
appropriate. Additionally provide a setting to be still able
to get the full output if you need to.
Change-Id: I811d69be33c77830049f64fcf291681f05011966
Reviewed-by: Riitta-Leena Miettinen <riitta-leena.miettinen@theqtcompany.com>
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
-rw-r--r-- | plugins/autotest/testresultdelegate.cpp | 17 | ||||
-rw-r--r-- | plugins/autotest/testsettings.cpp | 9 | ||||
-rw-r--r-- | plugins/autotest/testsettings.h | 1 | ||||
-rw-r--r-- | plugins/autotest/testsettingspage.cpp | 2 | ||||
-rw-r--r-- | plugins/autotest/testsettingspage.ui | 15 |
5 files changed, 40 insertions, 4 deletions
diff --git a/plugins/autotest/testresultdelegate.cpp b/plugins/autotest/testresultdelegate.cpp index 51226270e7..86a12323a7 100644 --- a/plugins/autotest/testresultdelegate.cpp +++ b/plugins/autotest/testresultdelegate.cpp @@ -17,8 +17,10 @@ ** ****************************************************************************/ +#include "autotestplugin.h" #include "testresultdelegate.h" #include "testresultmodel.h" +#include "testsettings.h" #include <QAbstractItemView> #include <QDebug> @@ -28,6 +30,8 @@ namespace Autotest { namespace Internal { +const static int outputLimit = 100000; + TestResultDelegate::TestResultDelegate(QObject *parent) : QStyledItemDelegate(parent) { @@ -124,6 +128,11 @@ void TestResultDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op int leading = fm.leading(); int fontHeight = fm.height(); output.replace(QLatin1Char('\n'), QChar::LineSeparator); + + if (AutotestPlugin::instance()->settings()->limitResultOutput + && output.length() > outputLimit) + output = output.left(outputLimit).append(QLatin1String("...")); + QTextLayout tl(output); tl.setFont(painter->font()); QTextOption txtOption; @@ -143,8 +152,9 @@ void TestResultDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op tl.draw(painter, QPoint(positions.textAreaLeft(), positions.top())); } else { painter->setClipRect(positions.textArea()); + // cut output before generating elided text as this takes quite long for exhaustive output painter->drawText(positions.textAreaLeft(), positions.top() + fm.ascent(), - fm.elidedText(output, Qt::ElideRight, positions.textAreaWidth())); + fm.elidedText(output.left(2000), Qt::ElideRight, positions.textAreaWidth())); } QString file = testResult.fileName(); @@ -222,6 +232,11 @@ QSize TestResultDelegate::sizeHint(const QStyleOptionViewItem &option, const QMo int height = 0; int leading = fm.leading(); + + if (AutotestPlugin::instance()->settings()->limitResultOutput + && output.length() > outputLimit) + output = output.left(outputLimit).append(QLatin1String("...")); + QTextLayout tl(output); tl.setFont(opt.font); QTextOption txtOption; diff --git a/plugins/autotest/testsettings.cpp b/plugins/autotest/testsettings.cpp index 0656784215..3a11b8c66b 100644 --- a/plugins/autotest/testsettings.cpp +++ b/plugins/autotest/testsettings.cpp @@ -29,10 +29,12 @@ static const char timeoutKey[] = "Timeout"; static const char metricsKey[] = "Metrics"; static const char omitInternalKey[] = "OmitInternal"; static const char omitRunConfigWarnKey[] = "OmitRCWarnings"; +static const char limitResultOutputKey[] = "LimitResultOutput"; static const int defaultTimeout = 60000; TestSettings::TestSettings() - : timeout(defaultTimeout), metrics(Walltime), omitInternalMssg(true), omitRunConfigWarn(false) + : timeout(defaultTimeout), metrics(Walltime), omitInternalMssg(true), omitRunConfigWarn(false), + limitResultOutput(true) { } @@ -43,6 +45,7 @@ void TestSettings::toSettings(QSettings *s) const s->setValue(QLatin1String(metricsKey), metrics); s->setValue(QLatin1String(omitInternalKey), omitInternalMssg); s->setValue(QLatin1String(omitRunConfigWarnKey), omitRunConfigWarn); + s->setValue(QLatin1String(limitResultOutputKey), limitResultOutput); s->endGroup(); } @@ -71,13 +74,15 @@ void TestSettings::fromSettings(const QSettings *s) metrics = intToMetrics(s->value(root + QLatin1String(metricsKey), Walltime).toInt()); omitInternalMssg = s->value(root + QLatin1String(omitInternalKey), true).toBool(); omitRunConfigWarn = s->value(root + QLatin1String(omitRunConfigWarnKey), false).toBool(); + limitResultOutput = s->value(root + QLatin1String(limitResultOutputKey), true).toBool(); } bool TestSettings::equals(const TestSettings &rhs) const { return timeout == rhs.timeout && metrics == rhs.metrics && omitInternalMssg == rhs.omitInternalMssg - && omitRunConfigWarn == rhs.omitRunConfigWarn; + && omitRunConfigWarn == rhs.omitRunConfigWarn + && limitResultOutput == rhs.limitResultOutput; } QString TestSettings::metricsTypeToOption(const MetricsType type) diff --git a/plugins/autotest/testsettings.h b/plugins/autotest/testsettings.h index c7ff22c3ff..520edde6fc 100644 --- a/plugins/autotest/testsettings.h +++ b/plugins/autotest/testsettings.h @@ -49,6 +49,7 @@ struct TestSettings MetricsType metrics; bool omitInternalMssg; bool omitRunConfigWarn; + bool limitResultOutput; }; inline bool operator==(const TestSettings &s1, const TestSettings &s2) { return s1.equals(s2); } diff --git a/plugins/autotest/testsettingspage.cpp b/plugins/autotest/testsettingspage.cpp index 53ab2c71a1..e65bff754a 100644 --- a/plugins/autotest/testsettingspage.cpp +++ b/plugins/autotest/testsettingspage.cpp @@ -41,6 +41,7 @@ void TestSettingsWidget::setSettings(const TestSettings &settings) m_ui.timeoutSpin->setValue(settings.timeout / 1000); // we store milliseconds m_ui.omitInternalMsgCB->setChecked(settings.omitInternalMssg); m_ui.omitRunConfigWarnCB->setChecked(settings.omitRunConfigWarn); + m_ui.limitResultOutputCB->setChecked(settings.limitResultOutput); switch (settings.metrics) { case MetricsType::Walltime: @@ -69,6 +70,7 @@ TestSettings TestSettingsWidget::settings() const result.timeout = m_ui.timeoutSpin->value() * 1000; // we display seconds result.omitInternalMssg = m_ui.omitInternalMsgCB->isChecked(); result.omitRunConfigWarn = m_ui.omitRunConfigWarnCB->isChecked(); + result.limitResultOutput = m_ui.limitResultOutputCB->isChecked(); if (m_ui.walltimeRB->isChecked()) result.metrics = MetricsType::Walltime; diff --git a/plugins/autotest/testsettingspage.ui b/plugins/autotest/testsettingspage.ui index b715426883..bc3c6f6b0c 100644 --- a/plugins/autotest/testsettingspage.ui +++ b/plugins/autotest/testsettingspage.ui @@ -13,7 +13,7 @@ <property name="windowTitle"> <string>Form</string> </property> - <widget class="QWidget" name=""> + <widget class="QWidget" name="layoutWidget"> <property name="geometry"> <rect> <x>9</x> @@ -103,6 +103,19 @@ </property> </widget> </item> + <item> + <widget class="QCheckBox" name="limitResultOutputCB"> + <property name="toolTip"> + <string>Limit result output to 100000 characters.</string> + </property> + <property name="text"> + <string>Limit result output</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> </layout> </item> <item> |