Android: Reuse common storage for PID fields

Get rid on internal pidStorage, store the data directly inside
the top level storage.

Change-Id: Iaa886191ec53f88aaf56f486714f7d7c5b7988f6
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Jarek Kobus
2024-08-21 14:08:59 +02:00
parent ac0ad40efe
commit d490f8b073

View File

@@ -814,9 +814,6 @@ static ExecutableItem startNativeDebuggingRecipe(RunnerStorage *storage)
static ExecutableItem pidRecipe(RunnerStorage *storage) static ExecutableItem pidRecipe(RunnerStorage *storage)
{ {
using PidUserPair = std::pair<qint64, qint64>;
const Storage<PidUserPair> pidStorage;
const QString pidScript = storage->isPreNougat() const QString pidScript = storage->isPreNougat()
? QString("for p in /proc/[0-9]*; do cat <$p/cmdline && echo :${p##*/}; done") ? QString("for p in /proc/[0-9]*; do cat <$p/cmdline && echo :${p##*/}; done")
: QString("pidof -s '%1'").arg(storage->m_packageName); : QString("pidof -s '%1'").arg(storage->m_packageName);
@@ -824,20 +821,19 @@ static ExecutableItem pidRecipe(RunnerStorage *storage)
const auto onPidSetup = [storage, pidScript](Process &process) { const auto onPidSetup = [storage, pidScript](Process &process) {
process.setCommand(storage->adbCommand({"shell", pidScript})); process.setCommand(storage->adbCommand({"shell", pidScript}));
}; };
const auto onPidDone = [pidStorage, packageName = storage->m_packageName, const auto onPidDone = [storage](const Process &process) {
isPreNougat = storage->isPreNougat()](const Process &process) {
const QString out = process.allOutput(); const QString out = process.allOutput();
if (isPreNougat) if (storage->isPreNougat())
pidStorage->first = extractPID(out, packageName); storage->m_processPID = extractPID(out, storage->m_packageName);
else if (!out.isEmpty()) else if (!out.isEmpty())
pidStorage->first = out.trimmed().toLongLong(); storage->m_processPID = out.trimmed().toLongLong();
}; };
const auto onUserSetup = [storage, pidStorage](Process &process) { const auto onUserSetup = [storage](Process &process) {
process.setCommand( process.setCommand(storage->adbCommand(
storage->adbCommand({"shell", "ps", "-o", "user", "-p", QString::number(pidStorage->first)})); {"shell", "ps", "-o", "user", "-p", QString::number(storage->m_processPID)}));
}; };
const auto onUserDone = [pidStorage](const Process &process) { const auto onUserDone = [storage](const Process &process) {
const QString out = process.allOutput(); const QString out = process.allOutput();
if (out.isEmpty()) if (out.isEmpty())
return DoneResult::Error; return DoneResult::Error;
@@ -848,29 +844,22 @@ static ExecutableItem pidRecipe(RunnerStorage *storage)
bool ok = false; bool ok = false;
const qint64 processUser = match.captured(1).toInt(&ok); const qint64 processUser = match.captured(1).toInt(&ok);
if (ok) { if (ok) {
pidStorage->second = processUser; storage->m_processUser = processUser;
qCDebug(androidRunWorkerLog) << "Process ID changed to:" << storage->m_processPID;
emit storage->remoteProcessStarted(s_localDebugServerPort, storage->m_qmlServer,
storage->m_processPID);
return DoneResult::Success; return DoneResult::Success;
} }
} }
return DoneResult::Error; return DoneResult::Error;
}; };
const auto onPidSync = [storage, pidStorage] { const auto onIsAliveSetup = [storage](Process &process) {
qCDebug(androidRunWorkerLog) << "Process ID changed from:" << storage->m_processPID
<< "to:" << pidStorage->first;
storage->m_processPID = pidStorage->first;
storage->m_processUser = pidStorage->second;
emit storage->remoteProcessStarted(s_localDebugServerPort, storage->m_qmlServer, storage->m_processPID);
};
const auto onIsAliveSetup = [storage, pidStorage](Process &process) {
process.setProcessChannelMode(QProcess::MergedChannels); process.setProcessChannelMode(QProcess::MergedChannels);
process.setCommand(storage->adbCommand({"shell", pidPollingScript.arg(pidStorage->first)})); process.setCommand(storage->adbCommand({"shell", pidPollingScript.arg(storage->m_processPID)}));
}; };
return Group { return Group {
pidStorage,
onGroupSetup([pidStorage] { *pidStorage = {-1, 0}; }),
Forever { Forever {
stopOnSuccess, stopOnSuccess,
ProcessTask(onPidSetup, onPidDone, CallDoneIf::Success), ProcessTask(onPidSetup, onPidDone, CallDoneIf::Success),
@@ -878,7 +867,6 @@ static ExecutableItem pidRecipe(RunnerStorage *storage)
DoneResult::Error) DoneResult::Error)
}.withTimeout(45s), }.withTimeout(45s),
ProcessTask(onUserSetup, onUserDone, CallDoneIf::Success), ProcessTask(onUserSetup, onUserDone, CallDoneIf::Success),
Sync(onPidSync),
Group { Group {
parallel, parallel,
startNativeDebuggingRecipe(storage), startNativeDebuggingRecipe(storage),