diff options
author | Evan Martin <martine@danga.com> | 2011-01-08 23:20:25 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2011-01-08 23:20:25 (GMT) |
commit | 4fd99ee15d89b59a6365b45c61582d0f4031883d (patch) | |
tree | ff88a46c82b49759972e0cfbf5e722dc181ee6bd | |
parent | 07b2072a7bf1bd661750e670ed5743f35d24e5a6 (diff) | |
download | Ninja-4fd99ee15d89b59a6365b45c61582d0f4031883d.zip Ninja-4fd99ee15d89b59a6365b45c61582d0f4031883d.tar.gz Ninja-4fd99ee15d89b59a6365b45c61582d0f4031883d.tar.bz2 |
record edge timing
-rw-r--r-- | src/build.cc | 27 |
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); } |