forked from qt-creator/qt-creator
Android: Optimize isConnected()
Before, the implementation used connectedDevices() function which constructs the detailed info about each device found, including running 3 extra processes for each device in a loop. For the purpose of isConnected() - the detailed info isn't really necessary - it's enough to parse the output of the {adbToolPath(), {"devices"}} command and detect if the requested serialNumber appears there. We skip executing 3 additional processes for each device found. Change-Id: I34f79fb56b4aa4d52a284bc2c67ae01a3467b505 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -731,9 +731,18 @@ QList<AndroidDeviceInfo> connectedDevices(QString *error)
|
||||
|
||||
bool isConnected(const QString &serialNumber)
|
||||
{
|
||||
const QList<AndroidDeviceInfo> devices = connectedDevices();
|
||||
for (const AndroidDeviceInfo &device : devices) {
|
||||
if (device.serialNumber == serialNumber)
|
||||
Process adbProcess;
|
||||
adbProcess.setCommand({adbToolPath(), {"devices"}});
|
||||
adbProcess.runBlocking();
|
||||
if (adbProcess.result() != ProcessResult::FinishedWithSuccess)
|
||||
return false;
|
||||
|
||||
// mid(1) - remove "List of devices attached" header line.
|
||||
// Example output: "List of devices attached\nemulator-5554\tdevice\n\n".
|
||||
const QStringList lines = adbProcess.allOutput().split('\n', Qt::SkipEmptyParts).mid(1);
|
||||
for (const QString &line : lines) {
|
||||
// skip the daemon logs
|
||||
if (!line.startsWith("* daemon") && line.left(line.indexOf('\t')).trimmed() == serialNumber)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
Reference in New Issue
Block a user