summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Stenger <christian.stenger@theqtcompany.com>2015-04-09 15:51:42 +0200
committerChristian Stenger <christian.stenger@theqtcompany.com>2015-04-10 10:41:02 +0300
commit475c6cea1e5bb30b4853f389c043bb9b08770d03 (patch)
tree5b03a835cdf49b19ba23f6a62b81f0b8fe49447e
parent178318d077c1646d6c75788977731d7949093f2d (diff)
downloadqt-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.cpp17
-rw-r--r--plugins/autotest/testsettings.cpp9
-rw-r--r--plugins/autotest/testsettings.h1
-rw-r--r--plugins/autotest/testsettingspage.cpp2
-rw-r--r--plugins/autotest/testsettingspage.ui15
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>