diff options
author | Jan Dalheimer <jan@dalheimer.de> | 2014-02-16 12:52:35 +0100 |
---|---|---|
committer | Jan Dalheimer <jan@dalheimer.de> | 2014-02-16 12:52:35 +0100 |
commit | 9c87bc6c4b99f0c93f2b18039208dcf9f3fb4d79 (patch) | |
tree | cac60e920a67584cf90805382db4464c0e23b03e /logic/tools/JVisualVM.cpp | |
parent | f26b7dedad70a46769b4c96122a7615b328a9fbb (diff) | |
download | MultiMC-9c87bc6c4b99f0c93f2b18039208dcf9f3fb4d79.tar MultiMC-9c87bc6c4b99f0c93f2b18039208dcf9f3fb4d79.tar.gz MultiMC-9c87bc6c4b99f0c93f2b18039208dcf9f3fb4d79.tar.lz MultiMC-9c87bc6c4b99f0c93f2b18039208dcf9f3fb4d79.tar.xz MultiMC-9c87bc6c4b99f0c93f2b18039208dcf9f3fb4d79.zip |
Restructure
Diffstat (limited to 'logic/tools/JVisualVM.cpp')
-rw-r--r-- | logic/tools/JVisualVM.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/logic/tools/JVisualVM.cpp b/logic/tools/JVisualVM.cpp new file mode 100644 index 00000000..02938028 --- /dev/null +++ b/logic/tools/JVisualVM.cpp @@ -0,0 +1,74 @@ +#include "JVisualVM.h" + +#include <QDir> +#include <QStandardPaths> + +#include "settingsobject.h" +#include "logic/MinecraftProcess.h" +#include "logic/BaseInstance.h" +#include "MultiMC.h" + +JVisualVM::JVisualVM(BaseInstance *instance, QObject *parent) : BaseProfiler(instance, parent) +{ +} + +void JVisualVM::beginProfilingImpl(MinecraftProcess *process) +{ + QProcess *profiler = new QProcess(this); + profiler->setArguments(QStringList() << "--openpid" << QString::number(pid(process))); + profiler->setProgram(MMC->settings()->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) + { + if (exit != 0 || status == QProcess::CrashExit) + { + emit abortLaunch(tr("Profiler aborted")); + } + if (m_profilerProcess) + { + m_profilerProcess->deleteLater(); + m_profilerProcess = 0; + } + }); + profiler->start(); + m_profilerProcess = profiler; +} + +void JVisualVMFactory::registerSettings(SettingsObject *settings) +{ + QString defaultValue = QStandardPaths::findExecutable("jvisualvm"); + if (defaultValue.isNull()) + { + defaultValue = QStandardPaths::findExecutable("visualvm"); + } + settings->registerSetting("JVisualVMPath", defaultValue); +} + +BaseExternalTool *JVisualVMFactory::createTool(BaseInstance *instance, QObject *parent) +{ + return new JVisualVM(instance, parent); +} + +bool JVisualVMFactory::check(QString *error) +{ + return check(MMC->settings()->get("JVisualVMPath").toString(), error); +} + +bool JVisualVMFactory::check(const QString &path, QString *error) +{ + if (path.isEmpty()) + { + *error = QObject::tr("Empty path"); + return false; + } + QString resolved = QStandardPaths::findExecutable(path); + if (resolved.isEmpty() && !QDir::isAbsolutePath(path)) + { + *error = QObject::tr("Invalid path to JVisualVM"); + return false; + } + return true; +} |