diff options
author | Robert Iannucci <robbie@rail.com> | 2012-10-03 23:27:27 (GMT) |
---|---|---|
committer | Robert A Iannucci Jr <iannucci@chromium.org> | 2012-11-09 04:25:39 (GMT) |
commit | aca4ec54656057e58ca7a9ae5de7f94c869b2ccb (patch) | |
tree | 4dc557e0df2399092aa6e782f86dae7aa72895a0 /src/build.cc | |
parent | a4220cdcd298cb43133c241497f2edb9e5cbc8d9 (diff) | |
download | Ninja-aca4ec54656057e58ca7a9ae5de7f94c869b2ccb.zip Ninja-aca4ec54656057e58ca7a9ae5de7f94c869b2ccb.tar.gz Ninja-aca4ec54656057e58ca7a9ae5de7f94c869b2ccb.tar.bz2 |
stub out an api and de-constify Pool
Diffstat (limited to 'src/build.cc')
-rw-r--r-- | src/build.cc | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/build.cc b/src/build.cc index 19775e7..0710e51 100644 --- a/src/build.cc +++ b/src/build.cc @@ -359,7 +359,7 @@ bool Plan::AddSubTarget(Node* node, vector<Node*>* stack, string* err) { want = true; ++wanted_edges_; if (edge->AllInputsReady()) - ready_.insert(edge); + ScheduleWork(edge); if (!edge->is_phony()) ++command_edges_; } @@ -408,6 +408,22 @@ Edge* Plan::FindWork() { return edge; } +void Plan::ScheduleWork(Edge* edge) { + // TODO(iannucci): See if this should get delayed instead + // if edge has pool + // create pool if DNE + // pool.InsertEdge(edge) + // ready_.insert(pool.GetAvailableEdges()) + // else + ready_.insert(edge); +} + +void Plan::ResumeDelayedJobs(Edge* edge) { + // if edge has pool + // pool.ReturnUnits(edge) + // ready_.insert(pool.GetAvailableEdges()) +} + void Plan::EdgeFinished(Edge* edge) { map<Edge*, bool>::iterator i = want_.find(edge); assert(i != want_.end()); @@ -416,6 +432,9 @@ void Plan::EdgeFinished(Edge* edge) { want_.erase(i); edge->outputs_ready_ = true; + // See if this job frees up any delayed jobs + ResumeDelayedJobs(edge); + // Check off any nodes we were waiting for with this edge. for (vector<Node*>::iterator i = edge->outputs_.begin(); i != edge->outputs_.end(); ++i) { @@ -434,7 +453,7 @@ void Plan::NodeFinished(Node* node) { // See if the edge is now ready. if ((*i)->AllInputsReady()) { if (want_i->second) { - ready_.insert(*i); + ScheduleWork(*i); } else { // We do not need to build this edge, but we might need to build one of // its dependents. @@ -501,6 +520,7 @@ void Plan::Dump() { printf("want "); i->first->Dump(); } + // TODO(iannucci): Dump pending pools too printf("ready: %d\n", (int)ready_.size()); } |