aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2012-11-13 11:53:28 +0100
committerChristian Kandeler <christian.kandeler@digia.com>2012-11-13 13:33:37 +0100
commit8fda8170392236ded89e54b2717d077fdd287dff (patch)
tree0811e000bca42176c986e53a2d7d503dd235ee01
parentfad7c5c967c771aaaea0a3df180cfb823b5d17d0 (diff)
make Executor::m_leaves an ordinary list
There's no need to maintain a set of leaves. If we encounter a leaf that's already built, just skip over it. Along the way: - Rename Executor::execute to Executor::buildArtifact. - Fix style of output parameters. Change-Id: Iab105a5bbc475cc347f228bb81941a1f737a7705 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
-rw-r--r--src/lib/buildgraph/executor.cpp32
-rw-r--r--src/lib/buildgraph/executor.h4
2 files changed, 20 insertions, 16 deletions
diff --git a/src/lib/buildgraph/executor.cpp b/src/lib/buildgraph/executor.cpp
index 813e5965e..b54f60f02 100644
--- a/src/lib/buildgraph/executor.cpp
+++ b/src/lib/buildgraph/executor.cpp
@@ -49,8 +49,6 @@
namespace qbs {
namespace Internal {
-static QHashDummyValue hashDummy;
-
class MocEffortCalculator : public ArtifactVisitor
{
public:
@@ -243,7 +241,7 @@ void Executor::initLeaves(const QList<Artifact *> &changedArtifacts)
initLeavesTopDown(root, seenArtifacts);
} else {
foreach (Artifact *artifact, changedArtifacts) {
- m_leaves.insert(artifact, hashDummy);
+ m_leaves.append(artifact);
initArtifactsBottomUp(artifact);
}
}
@@ -264,7 +262,7 @@ void Executor::initLeavesTopDown(Artifact *artifact, QSet<Artifact *> &seenArtif
}
if (artifact->children.isEmpty()) {
- m_leaves.insert(artifact, hashDummy);
+ m_leaves.append(artifact);
} else {
foreach (Artifact *child, artifact->children)
initLeavesTopDown(child, seenArtifacts);
@@ -286,8 +284,7 @@ bool Executor::run()
return true;
}
- Artifact *leaf = m_leaves.begin().key();
- execute(leaf);
+ buildArtifact(m_leaves.takeFirst());
}
return false;
}
@@ -331,12 +328,17 @@ static bool isUpToDate(Artifact *artifact)
return true;
}
-void Executor::execute(Artifact *artifact)
+void Executor::buildArtifact(Artifact *artifact)
{
if (qbsLogLevel(LoggerDebug))
qbsDebug() << "[EXEC] " << fileName(artifact);
- m_leaves.remove(artifact);
+ // Skip artifacts that are already built.
+ if (artifact->buildState == Artifact::Built) {
+ if (qbsLogLevel(LoggerDebug))
+ qbsDebug("[EXEC] artifact already built. Skipping.");
+ return;
+ }
// skip artifacts without transformer
if (artifact->artifactType != Artifact::Generated) {
@@ -459,7 +461,7 @@ void Executor::finishArtifact(Artifact *leaf)
}
if (allChildrenBuilt(parent)) {
- m_leaves.insert(parent, hashDummy);
+ m_leaves.append(parent);
if (qbsLogLevel(LoggerTrace))
qbsTrace() << "[EXEC] finishArtifact adds leaf " << fileName(parent) << " " << toString(parent->buildState);
} else {
@@ -477,11 +479,13 @@ void Executor::finishArtifact(Artifact *leaf)
m_progressObserver->incrementProgressValue(BuildEffortCalculator::multiplier(leaf));
}
-static void insertLeavesAfterAddingDependencies_recurse(Artifact *artifact, QSet<Artifact *> &seenArtifacts, QMap<Artifact *, QHashDummyValue> &leaves)
+static void insertLeavesAfterAddingDependencies_recurse(Artifact *const artifact,
+ QSet<Artifact *> *seenArtifacts,
+ QList<Artifact *> *leaves)
{
- if (seenArtifacts.contains(artifact))
+ if (seenArtifacts->contains(artifact))
return;
- seenArtifacts += artifact;
+ seenArtifacts->insert(artifact);
if (artifact->buildState == Artifact::Untouched)
artifact->buildState = Artifact::Buildable;
@@ -497,7 +501,7 @@ static void insertLeavesAfterAddingDependencies_recurse(Artifact *artifact, QSet
if (isLeaf) {
if (qbsLogLevel(LoggerDebug))
qbsDebug() << "[EXEC] adding leaf " << fileName(artifact);
- leaves.insert(artifact, hashDummy);
+ leaves->append(artifact);
}
}
@@ -505,7 +509,7 @@ void Executor::insertLeavesAfterAddingDependencies(QVector<Artifact *> dependenc
{
QSet<Artifact *> seenArtifacts;
foreach (Artifact *dependency, dependencies)
- insertLeavesAfterAddingDependencies_recurse(dependency, seenArtifacts, m_leaves);
+ insertLeavesAfterAddingDependencies_recurse(dependency, &seenArtifacts, &m_leaves);
}
void Executor::cancelJobs()
diff --git a/src/lib/buildgraph/executor.h b/src/lib/buildgraph/executor.h
index cc5efcbdf..2f9f9b437 100644
--- a/src/lib/buildgraph/executor.h
+++ b/src/lib/buildgraph/executor.h
@@ -95,7 +95,7 @@ private:
void initLeaves(const QList<Artifact *> &changedArtifacts);
void initLeavesTopDown(Artifact *artifact, QSet<Artifact *> &seenArtifacts);
bool run();
- void execute(Artifact *artifact);
+ void buildArtifact(Artifact *artifact);
void finishArtifact(Artifact *artifact);
void finish();
void initializeArtifactsState();
@@ -118,7 +118,7 @@ private:
BuildResult m_buildResult;
QList<BuildProduct::Ptr> m_productsToBuild;
QList<Artifact *> m_roots;
- QMap<Artifact *, QHashDummyValue> m_leaves;
+ QList<Artifact *> m_leaves;
ScanResultCache m_scanResultCache;
InputArtifactScannerContext *m_inputArtifactScanContext;
AutoMoc *m_autoMoc;