forked from qt-creator/qt-creator
Android: Use task tree for startAvd() action
As a drive-by, lower some timeouts from 2s into 1s. Change-Id: I495ad20058b0f97b6cdd5271a390b779c66b4864 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
#include <coreplugin/icore.h>
|
||||
|
||||
#include <projectexplorer/devicesupport/devicemanager.h>
|
||||
#include <projectexplorer/devicesupport/idevicefactory.h>
|
||||
#include <projectexplorer/devicesupport/idevicewidget.h>
|
||||
#include <projectexplorer/kitaspects.h>
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
@@ -23,13 +24,12 @@
|
||||
#include <projectexplorer/projectmanager.h>
|
||||
#include <projectexplorer/target.h>
|
||||
|
||||
#include <solutions/tasking/tasktree.h>
|
||||
|
||||
#include <utils/async.h>
|
||||
#include <utils/guard.h>
|
||||
#include <utils/qtcprocess.h>
|
||||
#include <utils/qtcassert.h>
|
||||
#include <utils/url.h>
|
||||
|
||||
#include <QFileSystemWatcher>
|
||||
#include <QFormLayout>
|
||||
#include <QInputDialog>
|
||||
#include <QLoggingCategory>
|
||||
@@ -105,22 +105,6 @@ static void updateDeviceState(const IDevice::ConstPtr &device)
|
||||
devMgr->setDeviceState(id, IDevice::DeviceConnected);
|
||||
}
|
||||
|
||||
static void startAvd(const IDevice::Ptr &device, QWidget *parent)
|
||||
{
|
||||
Q_UNUSED(parent)
|
||||
const AndroidDevice *androidDev = static_cast<const AndroidDevice *>(device.get());
|
||||
const QString name = androidDev->avdName();
|
||||
qCDebug(androidDeviceLog, "Starting Android AVD id \"%s\".", qPrintable(name));
|
||||
Utils::futureSynchronizer()->addFuture(Utils::asyncRun([name, device](QPromise<void> &promise) {
|
||||
const QString serialNumber = AndroidAvdManager::startAvd(name, promise.future());
|
||||
// Mark the AVD as ReadyToUse once we know it's started
|
||||
if (!serialNumber.isEmpty()) {
|
||||
DeviceManager *const devMgr = DeviceManager::instance();
|
||||
devMgr->setDeviceState(device->id(), IDevice::DeviceReadyToUse);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
static void setEmulatorArguments(QWidget *parent)
|
||||
{
|
||||
const QString helpUrl =
|
||||
@@ -401,8 +385,8 @@ void AndroidDevice::addActionsIfNotFound()
|
||||
|
||||
if (machineType() == Emulator) {
|
||||
if (!hasStartAction) {
|
||||
addDeviceAction({startAvdAction, [](const IDevice::Ptr &device, QWidget *parent) {
|
||||
startAvd(device, parent);
|
||||
addDeviceAction({startAvdAction, [](const IDevice::Ptr &device, QWidget *) {
|
||||
static_cast<AndroidDevice *>(device.get())->startAvd();
|
||||
}});
|
||||
}
|
||||
|
||||
@@ -581,6 +565,24 @@ QString AndroidDevice::openGLStatus() const
|
||||
return openGL.isEmpty() ? Tr::tr("Unknown") : openGL;
|
||||
}
|
||||
|
||||
void AndroidDevice::startAvd()
|
||||
{
|
||||
const Storage<QString> serialNumberStorage;
|
||||
|
||||
const auto onDone = [this, serialNumberStorage] {
|
||||
if (!serialNumberStorage->isEmpty())
|
||||
DeviceManager::instance()->setDeviceState(id(), IDevice::DeviceReadyToUse);
|
||||
};
|
||||
|
||||
const Group root {
|
||||
serialNumberStorage,
|
||||
AndroidAvdManager::startAvdRecipe(avdName(), serialNumberStorage),
|
||||
onGroupDone(onDone, CallDoneIf::Success)
|
||||
};
|
||||
|
||||
m_taskTreeRunner.start(root);
|
||||
}
|
||||
|
||||
IDevice::DeviceInfo AndroidDevice::deviceInformation() const
|
||||
{
|
||||
return IDevice::DeviceInfo();
|
||||
|
||||
Reference in New Issue
Block a user