summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--application/MainWindow.cpp86
-rw-r--r--logic/tools/JProfiler.cpp79
-rw-r--r--logic/tools/JProfiler.h10
-rw-r--r--logic/tools/JVisualVM.cpp63
-rw-r--r--logic/tools/JVisualVM.h10
5 files changed, 140 insertions, 108 deletions
diff --git a/application/MainWindow.cpp b/application/MainWindow.cpp
index 8e235e19..07f0d02f 100644
--- a/application/MainWindow.cpp
+++ b/application/MainWindow.cpp
@@ -1832,58 +1832,48 @@ void MainWindow::launchInstance(InstancePtr instance, AuthSessionPtr session,
proc->setHeader("MultiMC version: " + BuildConfig.printableVersionString() + "\n\n");
proc->arm();
- if (profiler)
+ if (!profiler)
{
- QString error;
- if (!profiler->check(&error))
- {
- QMessageBox::critical(this, tr("Error"),
- tr("Couldn't start profiler: %1").arg(error));
- proc->abort();
- return;
- }
- BaseProfiler *profilerInstance = profiler->createProfiler(instance, this);
- QProgressDialog dialog;
- dialog.setMinimum(0);
- dialog.setMaximum(0);
- dialog.setValue(0);
- dialog.setLabelText(tr("Waiting for profiler..."));
- connect(&dialog, &QProgressDialog::canceled, profilerInstance,
- &BaseProfiler::abortProfiling);
- dialog.show();
- connect(profilerInstance, &BaseProfiler::readyToLaunch,
- [&dialog, this, proc](const QString & message)
- {
- dialog.accept();
- QMessageBox msg;
- msg.setText(tr("The game launch is delayed until you press the "
- "button. This is the right time to setup the profiler, as the "
- "profiler server is running now.\n\n%1").arg(message));
- msg.setWindowTitle(tr("Waiting"));
- msg.setIcon(QMessageBox::Information);
- msg.addButton(tr("Launch"), QMessageBox::AcceptRole);
- msg.exec();
- proc->launch();
- });
- connect(profilerInstance, &BaseProfiler::abortLaunch,
- [&dialog, this, proc](const QString & message)
- {
- dialog.accept();
- QMessageBox msg;
- msg.setText(tr("Couldn't start the profiler: %1").arg(message));
- msg.setWindowTitle(tr("Error"));
- msg.setIcon(QMessageBox::Critical);
- msg.addButton(QMessageBox::Ok);
- msg.exec();
- proc->abort();
- });
- profilerInstance->beginProfiling(proc);
- dialog.exec();
+ proc->launch();
+ return;
}
- else
+
+ QString error;
+ if (!profiler->check(&error))
{
- proc->launch();
+ proc->abort();
+ QMessageBox::critical(this, tr("Error"), tr("Couldn't start profiler: %1").arg(error));
+ return;
}
+ BaseProfiler *profilerInstance = profiler->createProfiler(instance, this);
+
+ connect(profilerInstance, &BaseProfiler::readyToLaunch,
+ [this, proc](const QString & message)
+ {
+ QMessageBox msg;
+ msg.setText(tr("The game launch is delayed until you press the "
+ "button. This is the right time to setup the profiler, as the "
+ "profiler server is running now.\n\n%1").arg(message));
+ msg.setWindowTitle(tr("Waiting"));
+ msg.setIcon(QMessageBox::Information);
+ msg.addButton(tr("Launch"), QMessageBox::AcceptRole);
+ msg.setModal(true);
+ msg.exec();
+ proc->launch();
+ });
+ connect(profilerInstance, &BaseProfiler::abortLaunch,
+ [this, proc](const QString & message)
+ {
+ QMessageBox msg;
+ msg.setText(tr("Couldn't start the profiler: %1").arg(message));
+ msg.setWindowTitle(tr("Error"));
+ msg.setIcon(QMessageBox::Critical);
+ msg.addButton(QMessageBox::Ok);
+ msg.setModal(true);
+ msg.exec();
+ proc->abort();
+ });
+ profilerInstance->beginProfiling(proc);
}
void MainWindow::onGameUpdateError(QString error)
diff --git a/logic/tools/JProfiler.cpp b/logic/tools/JProfiler.cpp
index d53ec615..2522f2b3 100644
--- a/logic/tools/JProfiler.cpp
+++ b/logic/tools/JProfiler.cpp
@@ -7,42 +7,73 @@
#include "BaseProcess.h"
#include "BaseInstance.h"
+class JProfiler : public BaseProfiler
+{
+ Q_OBJECT
+public:
+ JProfiler(SettingsObjectPtr settings, InstancePtr instance, QObject *parent = 0);
+
+private slots:
+ void profilerStarted();
+ void profilerFinished(int exit, QProcess::ExitStatus status);
+
+protected:
+ void beginProfilingImpl(BaseProcess *process);
+
+private:
+ int listeningPort = 0;
+};
+
JProfiler::JProfiler(SettingsObjectPtr settings, InstancePtr instance,
QObject *parent)
: BaseProfiler(settings, instance, parent)
{
}
+void JProfiler::profilerStarted()
+{
+ emit readyToLaunch(tr("Listening on port: %1").arg(listeningPort));
+}
+
+void JProfiler::profilerFinished(int exit, QProcess::ExitStatus status)
+{
+ if (status == QProcess::CrashExit)
+ {
+ emit abortLaunch(tr("Profiler aborted"));
+ }
+ if (m_profilerProcess)
+ {
+ m_profilerProcess->deleteLater();
+ m_profilerProcess = 0;
+ }
+}
+
void JProfiler::beginProfilingImpl(BaseProcess *process)
{
- int port = globalSettings->get("JProfilerPort").toInt();
+ listeningPort = globalSettings->get("JProfilerPort").toInt();
QProcess *profiler = new QProcess(this);
- profiler->setArguments(QStringList() << "-d" << QString::number(pid(process)) << "--gui"
- << "-p" << QString::number(port));
- profiler->setProgram(QDir(globalSettings->get("JProfilerPath").toString())
+ QStringList profilerArgs =
+ {
+ "-d", QString::number(pid(process)),
+ "--gui",
+ "-p", QString::number(listeningPort)
+ };
+ auto basePath = globalSettings->get("JProfilerPath").toString();
+
#ifdef Q_OS_WIN
- .absoluteFilePath("bin/jpenable.exe"));
+ QString profilerProgram = QDir(basePath).absoluteFilePath("bin/jpenable.exe");
#else
- .absoluteFilePath("bin/jpenable"));
+ QString profilerProgram = QDir(basePath).absoluteFilePath("bin/jpenable");
#endif
- connect(profiler, &QProcess::started, [this, port]()
- { emit readyToLaunch(tr("Listening on port: %1").arg(port)); });
- connect(profiler,
- static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
- [this](int exit, QProcess::ExitStatus status)
- {
- if (status == QProcess::CrashExit)
- {
- emit abortLaunch(tr("Profiler aborted"));
- }
- if (m_profilerProcess)
- {
- m_profilerProcess->deleteLater();
- m_profilerProcess = 0;
- }
- });
- profiler->start();
+
+ profiler->setArguments(profilerArgs);
+ profiler->setProgram(profilerProgram);
+
+ connect(profiler, SIGNAL(started()), SLOT(profilerStarted()));
+ connect(profiler, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(profilerFinished(int,QProcess::ExitStatus)));
+
m_profilerProcess = profiler;
+ profiler->start();
}
void JProfilerFactory::registerSettings(SettingsObjectPtr settings)
@@ -82,3 +113,5 @@ bool JProfilerFactory::check(const QString &path, QString *error)
}
return true;
}
+
+#include "JProfiler.moc"
diff --git a/logic/tools/JProfiler.h b/logic/tools/JProfiler.h
index 11df0779..b5440b0b 100644
--- a/logic/tools/JProfiler.h
+++ b/logic/tools/JProfiler.h
@@ -2,16 +2,6 @@
#include "BaseProfiler.h"
-class JProfiler : public BaseProfiler
-{
- Q_OBJECT
-public:
- JProfiler(SettingsObjectPtr settings, InstancePtr instance, QObject *parent = 0);
-
-protected:
- void beginProfilingImpl(BaseProcess *process);
-};
-
class JProfilerFactory : public BaseProfilerFactory
{
public:
diff --git a/logic/tools/JVisualVM.cpp b/logic/tools/JVisualVM.cpp
index d258fde9..e148e7dc 100644
--- a/logic/tools/JVisualVM.cpp
+++ b/logic/tools/JVisualVM.cpp
@@ -7,32 +7,59 @@
#include "BaseProcess.h"
#include "BaseInstance.h"
+class JVisualVM : public BaseProfiler
+{
+ Q_OBJECT
+public:
+ JVisualVM(SettingsObjectPtr settings, InstancePtr instance, QObject *parent = 0);
+
+private slots:
+ void profilerStarted();
+ void profilerFinished(int exit, QProcess::ExitStatus status);
+
+protected:
+ void beginProfilingImpl(BaseProcess *process);
+};
+
+
JVisualVM::JVisualVM(SettingsObjectPtr settings, InstancePtr instance, QObject *parent)
: BaseProfiler(settings, instance, parent)
{
}
+void JVisualVM::profilerStarted()
+{
+ emit readyToLaunch(tr("JVisualVM started"));
+}
+
+void JVisualVM::profilerFinished(int exit, QProcess::ExitStatus status)
+{
+ if (status == QProcess::CrashExit)
+ {
+ emit abortLaunch(tr("Profiler aborted"));
+ }
+ if (m_profilerProcess)
+ {
+ m_profilerProcess->deleteLater();
+ m_profilerProcess = 0;
+ }
+}
+
void JVisualVM::beginProfilingImpl(BaseProcess *process)
{
QProcess *profiler = new QProcess(this);
- profiler->setArguments(QStringList() << "--openpid" << QString::number(pid(process)));
- profiler->setProgram(globalSettings->get("JVisualVMPath").toString());
- connect(profiler, &QProcess::started, [this]()
- { emit readyToLaunch(tr("JVisualVM started")); });
- connect(profiler,
- static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
- [this](int exit, QProcess::ExitStatus status)
+ QStringList profilerArgs =
{
- if (exit != 0 || status == QProcess::CrashExit)
- {
- emit abortLaunch(tr("Profiler aborted"));
- }
- if (m_profilerProcess)
- {
- m_profilerProcess->deleteLater();
- m_profilerProcess = 0;
- }
- });
+ "--openpid", QString::number(pid(process))
+ };
+ auto programPath = globalSettings->get("JVisualVMPath").toString();
+
+ profiler->setArguments(profilerArgs);
+ profiler->setProgram(programPath);
+
+ connect(profiler, SIGNAL(started()), SLOT(profilerStarted()));
+ connect(profiler, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(profilerFinished(int,QProcess::ExitStatus)));
+
profiler->start();
m_profilerProcess = profiler;
}
@@ -72,3 +99,5 @@ bool JVisualVMFactory::check(const QString &path, QString *error)
}
return true;
}
+
+#include "JVisualVM.moc"
diff --git a/logic/tools/JVisualVM.h b/logic/tools/JVisualVM.h
index f4ffe1bd..45de2618 100644
--- a/logic/tools/JVisualVM.h
+++ b/logic/tools/JVisualVM.h
@@ -2,16 +2,6 @@
#include "BaseProfiler.h"
-class JVisualVM : public BaseProfiler
-{
- Q_OBJECT
-public:
- JVisualVM(SettingsObjectPtr settings, InstancePtr instance, QObject *parent = 0);
-
-protected:
- void beginProfilingImpl(BaseProcess *process);
-};
-
class JVisualVMFactory : public BaseProfilerFactory
{
public: