summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2011-01-08 23:20:25 (GMT)
committerEvan Martin <martine@danga.com>2011-01-08 23:20:25 (GMT)
commit4fd99ee15d89b59a6365b45c61582d0f4031883d (patch)
treeff88a46c82b49759972e0cfbf5e722dc181ee6bd
parent07b2072a7bf1bd661750e670ed5743f35d24e5a6 (diff)
downloadNinja-4fd99ee15d89b59a6365b45c61582d0f4031883d.zip
Ninja-4fd99ee15d89b59a6365b45c61582d0f4031883d.tar.gz
Ninja-4fd99ee15d89b59a6365b45c61582d0f4031883d.tar.bz2
record edge timing
-rw-r--r--src/build.cc27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/build.cc b/src/build.cc
index 8ed6f6a..9686b74 100644
--- a/src/build.cc
+++ b/src/build.cc
@@ -12,7 +12,8 @@ struct BuildStatus {
BuildStatus();
void PlanHasTotalEdges(int total);
void BuildEdgeStarted(Edge* edge);
- void BuildEdgeFinished(Edge* edge);
+ // Returns the time the edge took, in ms.
+ int BuildEdgeFinished(Edge* edge);
time_t last_update_;
int finished_edges_, total_edges_;
@@ -32,9 +33,6 @@ void BuildStatus::PlanHasTotalEdges(int total) {
}
void BuildStatus::BuildEdgeStarted(Edge* edge) {
- if (edge->rule_ == &State::kPhonyRule)
- return;
-
timeval now;
gettimeofday(&now, NULL);
running_edges_.insert(make_pair(edge, now));
@@ -48,10 +46,7 @@ void BuildStatus::BuildEdgeStarted(Edge* edge) {
}
}
-void BuildStatus::BuildEdgeFinished(Edge* edge) {
- if (edge->rule_ == &State::kPhonyRule)
- return;
-
+int BuildStatus::BuildEdgeFinished(Edge* edge) {
timeval now;
gettimeofday(&now, NULL);
++finished_edges_;
@@ -65,8 +60,10 @@ void BuildStatus::BuildEdgeFinished(Edge* edge) {
RunningEdgeMap::iterator i = running_edges_.find(edge);
timeval delta;
timersub(&now, &i->second, &delta);
- printf("%dms\n", (int)((delta.tv_sec * 1000) + (delta.tv_usec / 1000)));
+ int ms = (delta.tv_sec * 1000) + (delta.tv_usec / 1000);
running_edges_.erase(i);
+
+ return ms;
}
bool Plan::AddTarget(Node* node, string* err) {
@@ -340,11 +337,11 @@ bool Builder::Build(string* err) {
}
bool Builder::StartEdge(Edge* edge, string* err) {
- status_->BuildEdgeStarted(edge);
-
if (edge->rule_ == &State::kPhonyRule)
return true;
+ status_->BuildEdgeStarted(edge);
+
// Create directories necessary for outputs.
// XXX: this will block; do we care?
for (vector<Node*>::iterator i = edge->outputs_.begin();
@@ -371,6 +368,10 @@ void Builder::FinishEdge(Edge* edge) {
(*i)->dirty_ = false;
}
plan_.EdgeFinished(edge);
- status_->BuildEdgeFinished(edge);
- log_->RecordCommand(edge, 0); // XXX get edge timing.
+
+ if (edge->rule_ == &State::kPhonyRule)
+ return;
+
+ int ms = status_->BuildEdgeFinished(edge);
+ log_->RecordCommand(edge, ms);
}