Dump pools with State
authorRobert Iannucci <robbie@rail.com>
Fri, 9 Nov 2012 20:07:12 +0000 (12:07 -0800)
committerRobert A Iannucci Jr <iannucci@chromium.org>
Fri, 9 Nov 2012 20:07:12 +0000 (12:07 -0800)
src/build.cc
src/state.cc
src/state.h

index 2794c6c..cadf7dc 100644 (file)
@@ -520,7 +520,6 @@ void Plan::Dump() {
       printf("want ");
     i->first->Dump();
   }
-  // TODO(iannucci): Dump pending pools too
   printf("ready: %d\n", (int)ready_.size());
 }
 
index b34b938..b0da350 100644 (file)
@@ -35,7 +35,7 @@ void Pool::EdgeFinished(const Edge& edge) {
 
 void Pool::DelayEdge(Edge* edge) {
   assert(depth_ != 0);
-  delayed_.push(edge);
+  delayed_.push_back(edge);
 }
 
 void Pool::RetrieveReadyEdges(set<Edge*>* ready_queue) {
@@ -43,12 +43,22 @@ void Pool::RetrieveReadyEdges(set<Edge*>* ready_queue) {
     Edge* edge = delayed_.front();
     if(current_use_ + edge->weight() > depth_)
       break;
-    delayed_.pop();
+    delayed_.pop_front();
     ready_queue->insert(edge);
     EdgeScheduled(*edge);
   }
 }
 
+void Pool::Dump() const {
+  printf("%s (%d/%d) ->\n", name_.c_str(), current_use_, depth_);
+  for (deque<Edge*>::const_iterator it = delayed_.begin();
+       it != delayed_.end(); ++it)
+  {
+    printf("\t");
+    (*it)->Dump();
+  }
+}
+
 Pool State::kDefaultPool("", 0);
 const Rule State::kPhonyRule("phony");
 
@@ -188,4 +198,12 @@ void State::Dump() {
            node->status_known() ? (node->dirty() ? "dirty" : "clean")
                                 : "unknown");
   }
+  if(!pools_.empty()) {
+    printf("resource_pools:\n");
+    for (map<string, Pool*>::const_iterator it = pools_.begin();
+         it != pools_.end(); ++it)
+    {
+      it->second->Dump();
+    }
+  }
 }
index 349679a..c28407f 100644 (file)
@@ -16,7 +16,7 @@
 #define NINJA_STATE_H_
 
 #include <map>
-#include <queue>
+#include <deque>
 #include <set>
 #include <string>
 #include <vector>
@@ -56,6 +56,9 @@ struct Pool {
   /// Pool will add zero or more edges to the ready_queue
   void RetrieveReadyEdges(set<Edge*>* ready_queue);
 
+  /// Dump the Pool and it's edges (useful for debugging).
+  void Dump() const;
+
 private:
   int UnitsWaiting() { return delayed_.size(); }
 
@@ -64,7 +67,7 @@ private:
   int current_use_;
   int depth_;
 
-  queue<Edge*> delayed_;
+  deque<Edge*> delayed_;
 };
 
 /// Global state (file status, loaded rules) for a single run.
@@ -94,7 +97,7 @@ struct State {
   /// state where we haven't yet examined the disk for dirty state.
   void Reset();
 
-  /// Dump the nodes (useful for debugging).
+  /// Dump the nodes and Pools (useful for debugging).
   void Dump();
 
   /// @return the root node(s) of the graph. (Root nodes have no output edges).