AndroidRunnerWorker: Replace adbLogcat process with Utils::Process

Change-Id: Ia4e0e7e0b49ca1847bac537a7672c39b069bf767
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Jarek Kobus
2023-08-08 21:47:23 +02:00
parent fe1aeb3057
commit 81d38bb711
2 changed files with 13 additions and 10 deletions

View File

@@ -215,7 +215,6 @@ static FilePath debugServer(bool useLldb, const Target *target)
AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packageName)
: m_packageName(packageName)
, m_adbLogcatProcess(nullptr, deleter)
, m_psIsAlive(nullptr, deleter)
, m_debugServerProcess(nullptr, deleter)
, m_jdbProcess(nullptr, deleter)
@@ -406,13 +405,13 @@ void AndroidRunnerWorker::forceStop()
void AndroidRunnerWorker::logcatReadStandardError()
{
if (m_processPID != -1)
logcatProcess(m_adbLogcatProcess->readAllStandardError(), m_stderrBuffer, true);
logcatProcess(m_adbLogcatProcess->readAllRawStandardError(), m_stderrBuffer, true);
}
void AndroidRunnerWorker::logcatReadStandardOutput()
{
if (m_processPID != -1)
logcatProcess(m_adbLogcatProcess->readAllStandardOutput(), m_stdoutBuffer, false);
logcatProcess(m_adbLogcatProcess->readAllRawStandardOutput(), m_stdoutBuffer, false);
}
void AndroidRunnerWorker::logcatProcess(const QByteArray &text, QByteArray &buffer, bool onlyError)
@@ -504,16 +503,16 @@ void Android::Internal::AndroidRunnerWorker::asyncStartLogcat()
{
// Its assumed that the device or avd returned by selector() is online.
// Start the logcat process before app starts.
QTC_ASSERT(!m_adbLogcatProcess, /**/);
QTC_CHECK(!m_adbLogcatProcess);
// Ideally AndroidManager::runAdbCommandDetached() should be used, but here
// we need to connect the readyRead signals from logcat otherwise we might
// lost some output between the process start and connecting those signals.
m_adbLogcatProcess.reset(new QProcess());
m_adbLogcatProcess.reset(new Process);
connect(m_adbLogcatProcess.get(), &QProcess::readyReadStandardOutput,
connect(m_adbLogcatProcess.get(), &Process::readyReadStandardOutput,
this, &AndroidRunnerWorker::logcatReadStandardOutput);
connect(m_adbLogcatProcess.get(), &QProcess::readyReadStandardError,
connect(m_adbLogcatProcess.get(), &Process::readyReadStandardError,
this, &AndroidRunnerWorker::logcatReadStandardError);
// Get target current time to fetch only recent logs
@@ -529,7 +528,8 @@ void Android::Internal::AndroidRunnerWorker::asyncStartLogcat()
const FilePath adb = AndroidConfigurations::currentConfig().adbToolPath();
qCDebug(androidRunWorkerLog).noquote() << "Running logcat command (async):"
<< CommandLine(adb, logcatArgs).toUserOutput();
m_adbLogcatProcess->start(adb.toString(), logcatArgs);
m_adbLogcatProcess->setCommand({adb, logcatArgs});
m_adbLogcatProcess->start();
if (m_adbLogcatProcess->waitForStarted(500) && m_adbLogcatProcess->state() == QProcess::Running)
m_adbLogcatProcess->setObjectName("AdbLogcatProcess");
}

View File

@@ -16,7 +16,10 @@ QT_BEGIN_NAMESPACE
class QProcess;
QT_END_NAMESPACE
namespace Utils { class FilePath; }
namespace Utils {
class FilePath;
class Process;
}
namespace ProjectExplorer { class RunWorker; }
namespace Android {
@@ -88,7 +91,7 @@ private:
QStringList m_amStartExtraArgs;
qint64 m_processPID = -1;
qint64 m_processUser = -1;
std::unique_ptr<QProcess, Deleter> m_adbLogcatProcess;
std::unique_ptr<Utils::Process> m_adbLogcatProcess;
std::unique_ptr<QProcess, Deleter> m_psIsAlive;
QByteArray m_stdoutBuffer;
QByteArray m_stderrBuffer;