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

View File

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