From 4e37f1cd7fac22e05b2ef271aa95bb9af871b801 Mon Sep 17 00:00:00 2001 From: Daniel Teske <daniel.teske@digia.com> Date: Fri, 19 Apr 2013 16:27:31 +0200 Subject: [PATCH] Android: Speed up project opening by caching the sdk version The slowness is due to AndroidToolChain::addToEnvironment() being called a lot on project opening. Thus we need to avoid any file opening or process on loading. This patch does 2 things: a) It removes the call to sdkTargets() which is unneeded. That actually checks which avds are available. b) It caches the target sdk inside a named target setting. That means, we assume that the file does not change behind our backs. Task-number: QTCREATORBUG-9164 Change-Id: I9287934a0624db0b3e8318b8cf76e605418850c2 Reviewed-by: Aurindam Jana <aurindam.jana@digia.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com> Reviewed-by: Eike Ziller <eike.ziller@digia.com> --- src/plugins/android/androidmanager.cpp | 6 ++++++ src/plugins/android/androidqtversion.cpp | 2 -- src/plugins/projectexplorer/target.cpp | 20 ++++++++++++++++++++ src/plugins/projectexplorer/target.h | 2 ++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index 1cbeae98737..e8b3694d312 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -236,6 +236,10 @@ bool AndroidManager::ensureIconAttribute(ProjectExplorer::Target *target) QString AndroidManager::targetSDK(ProjectExplorer::Target *target) { + QVariant v = target->namedSettings(QLatin1String("AndroidManager.TargetSdk")); + if (v.isValid()) + return v.toString(); + QString fallback = QLatin1String("android-8"); if (QtSupport::BaseQtVersion *qt = QtSupport::QtKitInformation::qtVersion(target->kit())) if (qt->qtVersion() >= QtSupport::QtVersionNumber(5, 0, 0)) @@ -243,6 +247,7 @@ QString AndroidManager::targetSDK(ProjectExplorer::Target *target) if (!createAndroidTemplatesIfNecessary(target)) return AndroidConfigurations::instance().bestMatch(fallback); + QFile file(defaultPropertiesPath(target).toString()); if (!file.open(QIODevice::ReadOnly)) return AndroidConfigurations::instance().bestMatch(fallback); @@ -257,6 +262,7 @@ QString AndroidManager::targetSDK(ProjectExplorer::Target *target) bool AndroidManager::setTargetSDK(ProjectExplorer::Target *target, const QString &sdk) { updateTarget(target, sdk, applicationName(target)); + target->setNamedSettings(QLatin1String("AndroidManager.TargetSdk"), sdk); return true; } diff --git a/src/plugins/android/androidqtversion.cpp b/src/plugins/android/androidqtversion.cpp index e92bc0240f0..b4e82b6cd2a 100644 --- a/src/plugins/android/androidqtversion.cpp +++ b/src/plugins/android/androidqtversion.cpp @@ -118,8 +118,6 @@ void AndroidQtVersion::addToEnvironment(const ProjectExplorer::Kit *k, Utils::En if (AndroidConfigurations::instance().config().ndkLocation.isEmpty() || AndroidConfigurations::instance().config().sdkLocation.isEmpty()) return; - if (AndroidConfigurations::instance().sdkTargets().isEmpty()) - return; env.set(QLatin1String("ANDROID_NDK_PLATFORM"), AndroidConfigurations::instance().bestMatch(AndroidManager::targetSDK(target))); diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp index 922af6c690d..bbd8e3fcf2e 100644 --- a/src/plugins/projectexplorer/target.cpp +++ b/src/plugins/projectexplorer/target.cpp @@ -64,6 +64,7 @@ const char DC_COUNT_KEY[] = "ProjectExplorer.Target.DeployConfigurationCount"; const char ACTIVE_RC_KEY[] = "ProjectExplorer.Target.ActiveRunConfiguration"; const char RC_KEY_PREFIX[] = "ProjectExplorer.Target.RunConfiguration."; const char RC_COUNT_KEY[] = "ProjectExplorer.Target.RunConfigurationCount"; +const char PLUGIN_SETTINGS_KEY[] = "ProjectExplorer.Target.PluginSettings"; } // namespace @@ -93,6 +94,7 @@ public: RunConfiguration* m_activeRunConfiguration; DeploymentData m_deploymentData; BuildTargetInfoList m_appTargets; + QVariantMap m_pluginSettings; QPixmap m_connectedPixmap; QPixmap m_readyToUsePixmap; @@ -517,6 +519,8 @@ QVariantMap Target::toMap() const for (int i = 0; i < rcs.size(); ++i) map.insert(QString::fromLatin1(RC_KEY_PREFIX) + QString::number(i), rcs.at(i)->toMap()); + map.insert(QLatin1String(PLUGIN_SETTINGS_KEY), d->m_pluginSettings); + return map; } @@ -663,6 +667,19 @@ void Target::updateDefaultRunConfigurations() addRunConfiguration(rc); } +QVariant Target::namedSettings(const QString &name) const +{ + return d->m_pluginSettings.value(name); +} + +void Target::setNamedSettings(const QString &name, const QVariant &value) +{ + if (value.isNull()) + d->m_pluginSettings.remove(name); + else + d->m_pluginSettings.insert(name, value); +} + static QString formatToolTip(const IDevice::DeviceInfo &input) { QStringList lines; @@ -824,6 +841,9 @@ bool Target::fromMap(const QVariantMap &map) setActiveRunConfiguration(rc); } + if (map.contains(QLatin1String(PLUGIN_SETTINGS_KEY))) + d->m_pluginSettings = map.value(QLatin1String(PLUGIN_SETTINGS_KEY)).toMap(); + return true; } diff --git a/src/plugins/projectexplorer/target.h b/src/plugins/projectexplorer/target.h index 3583ffd0c6e..b9f36113c52 100644 --- a/src/plugins/projectexplorer/target.h +++ b/src/plugins/projectexplorer/target.h @@ -116,6 +116,8 @@ public: void updateDefaultDeployConfigurations(); void updateDefaultRunConfigurations(); + QVariant namedSettings(const QString &name) const; + void setNamedSettings(const QString &name, const QVariant &value); signals: void targetEnabled(bool); void iconChanged(); -- GitLab