aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2022-06-13 16:48:50 +0200
committerhjk <hjk@qt.io>2022-06-23 08:08:30 +0000
commitf32068b7ee62e25d41569c4bbbcf64768b97361d (patch)
treeae880245e74d7c40dc1d2ceaa97386743f89241c
parent368c1d316b547b986a1f66bf423fc965d41c9190 (diff)
Add toolchain abi and build success/failure per toolchainv8.0.1v8.0.0-beta2
Change-Id: I76ebeaaf72c6798834bdd2d751fb971bb9253f9d Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r--src/datasources/kitsource.cpp76
-rw-r--r--src/datasources/kitsource.h14
2 files changed, 74 insertions, 16 deletions
diff --git a/src/datasources/kitsource.cpp b/src/datasources/kitsource.cpp
index 9458853..6cf724e 100644
--- a/src/datasources/kitsource.cpp
+++ b/src/datasources/kitsource.cpp
@@ -26,11 +26,17 @@
#include <QtCore/QSettings>
+#include <projectexplorer/buildmanager.h>
+#include <projectexplorer/gcctoolchain.h>
#include <projectexplorer/kitinformation.h>
#include <projectexplorer/kitmanager.h>
+#include <projectexplorer/project.h>
#include <projectexplorer/projectexplorerconstants.h>
-#include <projectexplorer/gcctoolchain.h>
+#include <projectexplorer/session.h>
+#include <projectexplorer/target.h>
+
#include <qtsupport/qtkitinformation.h>
+
#include <debugger/debuggerkitinformation.h>
#include <debugger/debuggeritem.h>
@@ -45,6 +51,18 @@ using namespace ProjectExplorer;
KitSource::KitSource()
: AbstractDataSource(QStringLiteral("kits"), Provider::DetailedUsageStatistics)
{
+ QObject::connect(ProjectExplorer::BuildManager::instance(),
+ &ProjectExplorer::BuildManager::buildQueueFinished,
+ [&](bool success) {
+ const Project *project = SessionManager::startupProject();
+ const Target *target = project ? project->activeTarget() : nullptr;
+ const Kit *kit = target ? target->kit() : nullptr;
+ const ToolChain *toolChain = ToolChainKitAspect::toolChain(kit, Constants::CXX_LANGUAGE_ID);
+ const Abi abi = toolChain ? toolChain->targetAbi() : Abi();
+ const QString abiName = abi.toString();
+ QVariantMap &bucket = success ? m_buildSuccessesForToolChain : m_buildFailsForToolChain;
+ bucket[abiName] = bucket.value(abiName, 0).toInt() + 1;
+ });
}
KitSource::~KitSource() = default;
@@ -60,6 +78,8 @@ QString KitSource::description() const
}
static QString kitsInfoKey() { return QStringLiteral("kitsInfo"); }
+static QString buildSuccessesKey() { return QStringLiteral("buildSuccesses"); }
+static QString buildFailsKey() { return QStringLiteral("buildFails"); }
static QString extractToolChainVersion(const ToolChain &toolChain)
{
@@ -70,9 +90,36 @@ static QString extractToolChainVersion(const ToolChain &toolChain)
}
}
+void KitSource::loadImpl(QSettings *settings)
+{
+ auto setter = ScopedSettingsGroupSetter::forDataSource(*this, *settings);
+ m_buildSuccessesForToolChain = settings->value(buildSuccessesKey(), QVariantMap{}).toMap();
+ m_buildFailsForToolChain = settings->value(buildFailsKey(), QVariantMap{}).toMap();
+}
+
+void KitSource::storeImpl(QSettings *settings)
+{
+ auto setter = ScopedSettingsGroupSetter::forDataSource(*this, *settings);
+ settings->setValue(buildSuccessesKey(), m_buildSuccessesForToolChain);
+ settings->setValue(buildFailsKey(), m_buildFailsForToolChain);
+}
+
+void KitSource::resetImpl(QSettings *settings)
+{
+ m_buildSuccessesForToolChain.clear();
+ m_buildFailsForToolChain.clear();
+
+ storeImpl(settings);
+}
+
class KitInfo
{
public:
+ KitInfo(Kit &kit, const KitSource &source) : m_kit(kit), m_source(source)
+ {
+ addKitInfo();
+ }
+
KitInfo &withQtVersionInfo()
{
static const QString qtKey = QStringLiteral("qt");
@@ -98,9 +145,14 @@ public:
static const QString compilerKey = QStringLiteral("compiler");
if (auto toolChain = ToolChainKitAspect::toolChain(&m_kit, Constants::CXX_LANGUAGE_ID)) {
- m_map.insert(compilerKey,
- QVariantMap{{nameKey(), toolChain->typeDisplayName()},
- {versionKey(), extractToolChainVersion(*toolChain)}});
+ const QString abiName = toolChain->targetAbi().toString();
+ m_map.insert(compilerKey, QVariantMap{
+ {nameKey(), toolChain->typeDisplayName()},
+ {abiKey(), abiName},
+ {versionKey(), extractToolChainVersion(*toolChain)},
+ {buildSuccessesKey(), m_source.m_buildSuccessesForToolChain.value(abiName).toInt()},
+ {buildFailsKey(), m_source.m_buildFailsForToolChain.value(abiName).toInt()}
+ });
}
return *this;
@@ -121,10 +173,7 @@ public:
QVariantMap extract() const { return m_map; }
- static KitInfo forKit(Kit &kit) { return KitInfo(kit); }
-
private: // Methods
- KitInfo(Kit &kit) : m_kit(kit) { addKitInfo(); }
void addKitInfo()
{
@@ -161,18 +210,20 @@ private: // Methods
static QString versionKey() { return QStringLiteral("version"); }
static QString nameKey() { return QStringLiteral("name"); }
+ static QString abiKey() { return QStringLiteral("abi"); }
private: // Data
Kit &m_kit;
+ const KitSource &m_source;
QVariantMap m_map;
};
-static QVariantList kitsInfo()
+QVariant KitSource::data()
{
QVariantList kitsInfoList;
for (auto &&kit : KitManager::instance()->kits()) {
if (kit && kit->isValid()) {
- kitsInfoList << KitInfo::forKit(*kit)
+ kitsInfoList << KitInfo(*kit, *this)
.withCompilerInfo()
.withDebuggerInfo()
.withQtVersionInfo()
@@ -180,12 +231,7 @@ static QVariantList kitsInfo()
}
}
- return kitsInfoList;
-}
-
-QVariant KitSource::data()
-{
- return QVariantMap{{kitsInfoKey(), kitsInfo()}};
+ return QVariantMap{{kitsInfoKey(), kitsInfoList}};
}
} // namespace Internal
diff --git a/src/datasources/kitsource.h b/src/datasources/kitsource.h
index 4256c01..c42e3fe 100644
--- a/src/datasources/kitsource.h
+++ b/src/datasources/kitsource.h
@@ -50,7 +50,10 @@ public: // AbstractDataSource interface
* {
* "compiler": {
* "name" : string,
- * "version": int
+ * "version": int,
+ * "abi": string,
+ * "buildSuccesses": int,
+ * "buildFails": int
* },
* "debugger": {
* "name" : string,
@@ -78,6 +81,15 @@ public: // AbstractDataSource interface
* The version format if "\d+.\d+.\d+".
*/
QVariant data() override;
+
+private:
+ void loadImpl(QSettings *settings);
+ void storeImpl(QSettings *settings);
+ void resetImpl(QSettings *settings);
+
+ friend class KitInfo;
+ QVariantMap m_buildSuccessesForToolChain;
+ QVariantMap m_buildFailsForToolChain;
};
} // namespace Internal