forked from qt-creator/qt-creator
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:
@@ -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),
|
||||||
|
Reference in New Issue
Block a user