diff options
author | Joerg Bornemann <joerg.bornemann@digia.com> | 2012-11-13 11:53:28 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@digia.com> | 2012-11-13 13:33:37 +0100 |
commit | 8fda8170392236ded89e54b2717d077fdd287dff (patch) | |
tree | 0811e000bca42176c986e53a2d7d503dd235ee01 | |
parent | fad7c5c967c771aaaea0a3df180cfb823b5d17d0 (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.cpp | 32 | ||||
-rw-r--r-- | src/lib/buildgraph/executor.h | 4 |
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; |