From a26ed2e12e94930948c1dc0fc4315eafb2c7e97d Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 23 Jul 2024 11:07:00 +0200 Subject: [PATCH] Android: Move pid recipe into a separate function The task tree runner is going to run more tasks. Change-Id: I342d041134968286a2cf1b20cabe2b4c01ce02b0 Reviewed-by: Alessandro Portale --- src/plugins/android/androidrunnerworker.cpp | 23 +++++++++++++-------- src/plugins/android/androidrunnerworker.h | 3 ++- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp index f4bfcf56161..96981286401 100644 --- a/src/plugins/android/androidrunnerworker.cpp +++ b/src/plugins/android/androidrunnerworker.cpp @@ -38,6 +38,7 @@ static const int GdbTempFileMaxCounter = 20; } using namespace ProjectExplorer; +using namespace Tasking; using namespace Utils; using namespace std; @@ -206,7 +207,7 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packa QtSupport::QtVersion *version = QtSupport::QtKitAspect::qtVersion(target->kit()); m_useAppParamsForQmlDebugger = version->qtVersion() >= QVersionNumber(5, 12); - m_pidRunner.setParent(this); // Move m_pidRunner object together with *this into a separate thread. + m_taskTreeRunner.setParent(this); // Move m_taskTreeRunner object together with *this into a separate thread. } AndroidRunnerWorker::~AndroidRunnerWorker() @@ -443,6 +444,7 @@ void AndroidRunnerWorker::asyncStartHelper() forceStop(); asyncStartLogcat(); + // 1. For loop for (const QString &entry : std::as_const(m_beforeStartAdbCommands)) runAdb(entry.split(' ', Qt::SkipEmptyParts)); @@ -454,6 +456,7 @@ void AndroidRunnerWorker::asyncStartHelper() if (m_qmlDebugServices != QmlDebug::NoQmlDebugServices) { // currently forward to same port on device and host const QString port = "tcp:" + QString::number(m_qmlServer.port()); + // 2. removeForwardPort recipe if (!removeForwardPort(port, port, "QML")) return; @@ -488,6 +491,7 @@ void AndroidRunnerWorker::asyncStartHelper() } QString stdErr; + // 3. run adb recipe const bool startResult = runAdb(args, nullptr, &stdErr); if (!startResult) { emit remoteProcessFinished(Tr::tr("Failed to start the activity.")); @@ -602,12 +606,8 @@ void AndroidRunnerWorker::startDebuggerServer(const QString &packageDir, } } -void AndroidRunnerWorker::asyncStart() +ExecutableItem AndroidRunnerWorker::pidRecipe() { - asyncStartHelper(); - - using namespace Tasking; - const Storage pidStorage; const FilePath adbPath = AndroidConfig::adbToolPath(); @@ -650,7 +650,7 @@ void AndroidRunnerWorker::asyncStart() return DoneResult::Error; }; - const Group root { + return Group { pidStorage, onGroupSetup([pidStorage] { *pidStorage = {-1, 0}; }), Forever { @@ -662,13 +662,18 @@ void AndroidRunnerWorker::asyncStart() ProcessTask(onUserSetup, onUserDone, CallDoneIf::Success), onGroupDone([pidStorage, this] { onProcessIdChanged(*pidStorage); }) }; +} - m_pidRunner.start(root); +void AndroidRunnerWorker::asyncStart() +{ + asyncStartHelper(); + + m_taskTreeRunner.start({pidRecipe()}); } void AndroidRunnerWorker::asyncStop() { - m_pidRunner.reset(); + m_taskTreeRunner.reset(); if (m_processPID != -1) forceStop(); diff --git a/src/plugins/android/androidrunnerworker.h b/src/plugins/android/androidrunnerworker.h index 12fd12696d9..d969aa1f181 100644 --- a/src/plugins/android/androidrunnerworker.h +++ b/src/plugins/android/androidrunnerworker.h @@ -74,6 +74,7 @@ private: }; void onProcessIdChanged(const PidUserPair &pidUser); bool isPreNougat() const { return m_apiLevel > 0 && m_apiLevel <= 23; } + Tasking::ExecutableItem pidRecipe(); // Create the processes and timer in the worker thread, for correct thread affinity QString m_packageName; @@ -87,7 +88,7 @@ private: std::unique_ptr m_psIsAlive; QByteArray m_stdoutBuffer; QByteArray m_stderrBuffer; - Tasking::TaskTreeRunner m_pidRunner; + Tasking::TaskTreeRunner m_taskTreeRunner; bool m_useCppDebugger = false; bool m_useLldb = false; // FIXME: Un-implemented currently. QmlDebug::QmlDebugServicesPreset m_qmlDebugServices;