[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdev-valgrind] /: Check for errors during visualizer process execution
From: Anton Anikin <null () kde ! org>
Date: 2017-03-01 3:31:22
Message-ID: E1ciuz4-0001fq-Fg () code ! kde ! org
[Download RAW message or body]
Git commit c64bf0ca1b056f6247f7e89832dfac96025b821c by Anton Anikin.
Committed on 01/03/2017 at 03:29.
Pushed by antonanikin into branch 'master'.
Check for errors during visualizer process execution
M +9 -0 include/utils.h
M +1 -1 tools/callgrind/configpage.ui
M +9 -18 tools/callgrind/view.cpp
M +0 -2 tools/callgrind/view.h
M +47 -0 tools/generic/core/utils.cpp
M +1 -1 tools/massif/configpage.ui
M +10 -18 tools/massif/view.cpp
M +0 -2 tools/massif/view.h
https://commits.kde.org/kdev-valgrind/c64bf0ca1b056f6247f7e89832dfac96025b821c
diff --git a/include/utils.h b/include/utils.h
index cefedc4..63badd4 100644
--- a/include/utils.h
+++ b/include/utils.h
@@ -21,7 +21,11 @@
#include <QString>
+#include <functional>
+
class QAbstractTableModel;
+class QProcess;
+class QPushButton;
namespace Valgrind
{
@@ -40,4 +44,9 @@ QString displayValue(double value);
void emitDataChanged(QAbstractTableModel* model);
+void setupVisualizerProcess(QProcess* visualizerProcess,
+ QPushButton* startButton,
+ std::function<void()> startFunction,
+ bool startImmediately);
+
}
diff --git a/tools/callgrind/configpage.ui b/tools/callgrind/configpage.ui
index ab35fc8..c0bd7b4 100644
--- a/tools/callgrind/configpage.ui
+++ b/tools/callgrind/configpage.ui
@@ -112,7 +112,7 @@
<item>
<widget class="QCheckBox" name="launchKCachegrind">
<property name="text">
- <string>Launch KCachegrind after finish</string>
+ <string>Launch KCachegrind after analysis finish</string>
</property>
</widget>
</item>
diff --git a/tools/callgrind/view.cpp b/tools/callgrind/view.cpp
index 45592e6..eeadf37 100644
--- a/tools/callgrind/view.cpp
+++ b/tools/callgrind/view.cpp
@@ -126,35 +126,26 @@ View::View(KConfigGroup config, QTemporaryFile* outputFile, \
FunctionsModel* mode
ui->functionsView->setCurrentIndex(functionsProxyModel->index(0,0));
}
- connect(ui->launchKCachegrindButton, &QPushButton::clicked,
- this, [this, outputFile]() {
- launchKCachegrind(outputFile->fileName());
- });
-
- connect(m_kcachegrindProcess, static_cast<void(QProcess::*)(int, \
QProcess::ExitStatus)>(&QProcess::finished),
- this, [this]() {
- ui->launchKCachegrindButton->setEnabled(true);
- });
+ auto startVisualizer = [this, outputFile]() {
+ m_kcachegrindProcess->start(Settings::kcachegrindExecutablePath(),
+ { outputFile->fileName() });
+ };
Settings settings;
settings.load(config);
- if (settings.launchKCachegrind) {
- launchKCachegrind(outputFile->fileName());
- }
+
+ setupVisualizerProcess(m_kcachegrindProcess,
+ ui->launchKCachegrindButton,
+ startVisualizer, settings.launchKCachegrind);
}
View::~View()
{
+ m_kcachegrindProcess->disconnect();
delete m_kcachegrindProcess;
delete ui;
}
-void View::launchKCachegrind(const QString& outputFile)
-{
- m_kcachegrindProcess->start(Settings::kcachegrindExecutablePath(), { outputFile \
});
- ui->launchKCachegrindButton->setEnabled(false);
-}
-
}
}
diff --git a/tools/callgrind/view.h b/tools/callgrind/view.h
index 6a9ea2f..81bc37e 100644
--- a/tools/callgrind/view.h
+++ b/tools/callgrind/view.h
@@ -51,8 +51,6 @@ public:
~View() override;
private:
- void launchKCachegrind(const QString& outputFile);
-
Ui::View* ui;
QProcess* m_kcachegrindProcess;
};
diff --git a/tools/generic/core/utils.cpp b/tools/generic/core/utils.cpp
index 9fea3c8..112b36e 100644
--- a/tools/generic/core/utils.cpp
+++ b/tools/generic/core/utils.cpp
@@ -20,9 +20,12 @@
#include "utils.h"
#include <klocalizedstring.h>
+#include <kmessagebox.h>
#include <QAbstractTableModel>
#include <QMap>
+#include <QProcess>
+#include <QPushButton>
namespace Valgrind
{
@@ -85,4 +88,48 @@ void emitDataChanged(QAbstractTableModel* model)
{ Qt::DisplayRole });
}
+void setupVisualizerProcess(
+ QProcess* visualizerProcess,
+ QPushButton* startButton,
+ std::function<void()> startFunction,
+ bool startImmediately)
+{
+ Q_ASSERT(visualizerProcess);
+ Q_ASSERT(startButton);
+
+ QObject::connect(startButton, &QPushButton::clicked,
+ startButton, [startFunction]() {
+ startFunction();
+ });
+
+ QObject::connect(visualizerProcess, &QProcess::started, startButton, \
[startButton]() { + startButton->setEnabled(false);
+ });
+
+ QObject::connect(visualizerProcess, &QProcess::errorOccurred, startButton, \
[visualizerProcess, startButton]() { + QString errorMessage;
+ if (visualizerProcess->error() == QProcess::FailedToStart) {
+ errorMessage += i18n("Failed to start visualizer from \"%1\".", \
visualizerProcess->program()); + errorMessage += QStringLiteral("\n\n");
+ errorMessage += i18n("Check your settings and install the visualizer if \
necessary."); + } else {
+ errorMessage += i18n("Error during visualizer execution:");
+ errorMessage += QStringLiteral("\n\n");
+ errorMessage = visualizerProcess->errorString();
+ }
+ KMessageBox::error(startButton, errorMessage, i18n("Valgrind Error"));
+
+ startButton->setEnabled(true);
+ });
+
+ QObject::connect(visualizerProcess, static_cast<void(QProcess::*)(int, \
QProcess::ExitStatus)>(&QProcess::finished), + startButton, \
[startButton]() { + startButton->setEnabled(true);
+ });
+
+ if (startImmediately) {
+ startFunction();
+ }
+}
+
}
diff --git a/tools/massif/configpage.ui b/tools/massif/configpage.ui
index 8fad4bb..7a136a6 100644
--- a/tools/massif/configpage.ui
+++ b/tools/massif/configpage.ui
@@ -278,7 +278,7 @@
<item>
<widget class="QCheckBox" name="launchMassifVisualizer">
<property name="text">
- <string>Launch Massif Visualizer after finish</string>
+ <string>Launch Massif Visualizer after analysis finish</string>
</property>
</widget>
</item>
diff --git a/tools/massif/view.cpp b/tools/massif/view.cpp
index 120452e..8502221 100644
--- a/tools/massif/view.cpp
+++ b/tools/massif/view.cpp
@@ -26,6 +26,7 @@
#include "model.h"
#include "settings.h"
#include "snapshot.h"
+#include "utils.h"
#include <QStringListModel>
#include <QProcess>
@@ -62,35 +63,26 @@ View::View(KConfigGroup config, QTemporaryFile* outputFile, \
SnapshotsModel* mode treesModel->setStringList(snapshot->heapTree);
});
- connect(ui->launchVisualizerButton, &QPushButton::clicked,
- this, [this, outputFile]() {
- launchVisualizer(outputFile->fileName());
- });
-
- connect(m_visualizerProcess, static_cast<void(QProcess::*)(int, \
QProcess::ExitStatus)>(&QProcess::finished),
- this, [this]() {
- ui->launchVisualizerButton->setEnabled(true);
- });
+ auto startVisualizer = [this, outputFile]() {
+ m_visualizerProcess->start(Settings::visualizerExecutablePath(),
+ { outputFile->fileName() });
+ };
Settings settings;
settings.load(config);
- if (settings.launchVisualizer) {
- launchVisualizer(outputFile->fileName());
- }
+
+ setupVisualizerProcess(m_visualizerProcess,
+ ui->launchVisualizerButton,
+ startVisualizer, settings.launchVisualizer);
}
View::~View()
{
+ m_visualizerProcess->disconnect();
delete m_visualizerProcess;
delete ui;
}
-void View::launchVisualizer(const QString& outputFile)
-{
- m_visualizerProcess->start(Settings::visualizerExecutablePath(), { outputFile \
});
- ui->launchVisualizerButton->setEnabled(false);
-}
-
}
}
diff --git a/tools/massif/view.h b/tools/massif/view.h
index be5c08a..18528cf 100644
--- a/tools/massif/view.h
+++ b/tools/massif/view.h
@@ -49,8 +49,6 @@ public:
~View() override;
private:
- void launchVisualizer(const QString& outputFile);
-
Ui::View* ui;
QProcess* m_visualizerProcess;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic