diff options
Diffstat (limited to 'src/plugins/ios/iostoolhandler.cpp')
-rw-r--r-- | src/plugins/ios/iostoolhandler.cpp | 68 |
1 files changed, 33 insertions, 35 deletions
diff --git a/src/plugins/ios/iostoolhandler.cpp b/src/plugins/ios/iostoolhandler.cpp index f9318712a6..c64a273142 100644 --- a/src/plugins/ios/iostoolhandler.cpp +++ b/src/plugins/ios/iostoolhandler.cpp @@ -29,12 +29,15 @@ #include "iossimulator.h" #include "simulatorcontrol.h" -#include "debugger/debuggerconstants.h" #include <coreplugin/icore.h> -#include <utils/qtcassert.h> + +#include <debugger/debuggerconstants.h> + #include <utils/fileutils.h> +#include <utils/futuresynchronizer.h> +#include <utils/qtcassert.h> +#include <utils/qtcprocess.h> #include <utils/runextensions.h> -#include <utils/synchronousprocess.h> #include <QCoreApplication> #include <QDir> @@ -304,7 +307,6 @@ class IosSimulatorToolHandlerPrivate : public IosToolHandlerPrivate { public: explicit IosSimulatorToolHandlerPrivate(const IosDeviceType &devType, IosToolHandler *q); - ~IosSimulatorToolHandlerPrivate() override; // IosToolHandlerPrivate overrides public: @@ -324,9 +326,8 @@ private: private: qint64 m_pid = -1; - SimulatorControl *simCtl; LogTailFiles outputLogger; - QList<QFuture<void>> futureList; + Utils::FutureSynchronizer futureSynchronizer; }; IosToolHandlerPrivate::IosToolHandlerPrivate(const IosDeviceType &devType, @@ -799,22 +800,14 @@ void IosDeviceToolHandlerPrivate::stop(int errorCode) // IosSimulatorToolHandlerPrivate IosSimulatorToolHandlerPrivate::IosSimulatorToolHandlerPrivate(const IosDeviceType &devType, - IosToolHandler *q) - : IosToolHandlerPrivate(devType, q), - simCtl(new SimulatorControl) + IosToolHandler *q) + : IosToolHandlerPrivate(devType, q) { QObject::connect(&outputLogger, &LogTailFiles::logMessage, std::bind(&IosToolHandlerPrivate::appOutput, this, _1)); + futureSynchronizer.setCancelOnWait(true); } -IosSimulatorToolHandlerPrivate::~IosSimulatorToolHandlerPrivate() -{ - foreach (auto f, futureList) { - if (!f.isFinished()) - f.cancel(); - } - delete simCtl; -} void IosSimulatorToolHandlerPrivate::requestTransferApp(const QString &appBundlePath, const QString &deviceIdentifier, int timeout) { @@ -839,7 +832,8 @@ void IosSimulatorToolHandlerPrivate::requestTransferApp(const QString &appBundle if (SimulatorControl::isSimulatorRunning(m_deviceId)) installAppOnSimulator(); else - futureList << QFuture<void>(Utils::onResultReady(simCtl->startSimulator(m_deviceId), onSimulatorStart)); + futureSynchronizer.addFuture( + Utils::onResultReady(SimulatorControl::startSimulator(m_deviceId), onSimulatorStart)); } void IosSimulatorToolHandlerPrivate::requestRunApp(const QString &appBundlePath, @@ -875,7 +869,8 @@ void IosSimulatorToolHandlerPrivate::requestRunApp(const QString &appBundlePath, if (SimulatorControl::isSimulatorRunning(m_deviceId)) launchAppOnSimulator(extraArgs); else - futureList << QFuture<void>(Utils::onResultReady(simCtl->startSimulator(m_deviceId), onSimulatorStart)); + futureSynchronizer.addFuture( + Utils::onResultReady(SimulatorControl::startSimulator(m_deviceId), onSimulatorStart)); } void IosSimulatorToolHandlerPrivate::requestDeviceInfo(const QString &deviceId, int timeout) @@ -900,10 +895,8 @@ void IosSimulatorToolHandlerPrivate::stop(int errorCode) kill(m_pid, SIGKILL); #endif m_pid = -1; - foreach (auto f, futureList) { - if (!f.isFinished()) - f.cancel(); - } + futureSynchronizer.cancelAllFutures(); + futureSynchronizer.flushFinishedFutures(); toolExited(errorCode); emit q->finished(q); @@ -927,8 +920,9 @@ void IosSimulatorToolHandlerPrivate::installAppOnSimulator() }; isTransferringApp(m_bundlePath, m_deviceId, 20, 100, ""); - auto installFuture = simCtl->installApp(m_deviceId, Utils::FilePath::fromString(m_bundlePath)); - futureList << QFuture<void>(Utils::onResultReady(installFuture, onResponseAppInstall)); + auto installFuture = SimulatorControl::installApp(m_deviceId, + Utils::FilePath::fromString(m_bundlePath)); + futureSynchronizer.addFuture(Utils::onResultReady(installFuture, onResponseAppInstall)); } void IosSimulatorToolHandlerPrivate::launchAppOnSimulator(const QStringList &extraArgs) @@ -977,10 +971,10 @@ void IosSimulatorToolHandlerPrivate::launchAppOnSimulator(const QStringList &ext gotInferiorPid(m_bundlePath, m_deviceId, response.pID); didStartApp(m_bundlePath, m_deviceId, Ios::IosToolHandler::Success); // Start monitoring app's life signs. - futureList << Utils::runAsync(monitorPid, response.pID); + futureSynchronizer.addFuture(Utils::runAsync(monitorPid, response.pID)); if (captureConsole) - futureList << Utils::runAsync(&LogTailFiles::exec, &outputLogger, stdoutFile, - stderrFile); + futureSynchronizer.addFuture(Utils::runAsync(&LogTailFiles::exec, &outputLogger, + stdoutFile, stderrFile)); } else { m_pid = -1; errorMsg(IosToolHandler::tr("Application launch on simulator failed. %1") @@ -991,11 +985,16 @@ void IosSimulatorToolHandlerPrivate::launchAppOnSimulator(const QStringList &ext } }; - futureList << QFuture<void>(Utils::onResultReady( - simCtl->launchApp(m_deviceId, bundleId, debugRun, extraArgs, - captureConsole ? stdoutFile->fileName() : QString(), - captureConsole ? stderrFile->fileName() : QString()), - onResponseAppLaunch)); + futureSynchronizer.addFuture( + Utils::onResultReady(SimulatorControl::launchApp(m_deviceId, + bundleId, + debugRun, + extraArgs, + captureConsole ? stdoutFile->fileName() + : QString(), + captureConsole ? stderrFile->fileName() + : QString()), + onResponseAppLaunch)); } bool IosSimulatorToolHandlerPrivate::isResponseValid(const SimulatorControl::ResponseData &responseData) @@ -1015,8 +1014,7 @@ bool IosSimulatorToolHandlerPrivate::isResponseValid(const SimulatorControl::Res QString IosToolHandler::iosDeviceToolPath() { - QString res = Core::ICore::libexecPath() + QLatin1String("/ios/iostool"); - return res; + return Core::ICore::libexecPath("ios/iostool").toString(); } IosToolHandler::IosToolHandler(const Internal::IosDeviceType &devType, QObject *parent) : |