summaryrefslogtreecommitdiffstats
path: root/src/build.cc
diff options
context:
space:
mode:
authorPeter Kuemmel <syntheticpp@gmx.net>2012-06-29 14:12:03 (GMT)
committerPeter Kümmel <syntheticpp@gmx.net>2012-07-15 20:22:27 (GMT)
commitc0c5ef9bffb0130e169aeddcb8487b670c6b56fe (patch)
tree229e624ce902d6f1cf4204c8a55a5abdee73daa6 /src/build.cc
parent638b0336e98af65240c1d0d66c5e0d9e5b800d9e (diff)
downloadNinja-c0c5ef9bffb0130e169aeddcb8487b670c6b56fe.zip
Ninja-c0c5ef9bffb0130e169aeddcb8487b670c6b56fe.tar.gz
Ninja-c0c5ef9bffb0130e169aeddcb8487b670c6b56fe.tar.bz2
print edges per second
prints the rate of finished edges per second to the console, for instance with NINJA_STATUS="[%s/%t %o(%c)/s] ": [132/1922 16.1(14)/s] 16.1 is the average for all processed files (here 132 since start) 14 is the average of the last n files while n is the number specifies by -j (or its default)
Diffstat (limited to 'src/build.cc')
-rw-r--r--src/build.cc28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/build.cc b/src/build.cc
index 0fc387c..48e5c4b 100644
--- a/src/build.cc
+++ b/src/build.cc
@@ -37,7 +37,9 @@ BuildStatus::BuildStatus(const BuildConfig& config)
: config_(config),
start_time_millis_(GetTimeMillis()),
started_edges_(0), finished_edges_(0), total_edges_(0),
- have_blank_line_(true), progress_status_format_(NULL) {
+ have_blank_line_(true), progress_status_format_(NULL),
+ overall_rate_(), current_rate_(),
+ current_rate_average_count_(config.parallelism) {
#ifndef _WIN32
const char* term = getenv("TERM");
smart_terminal_ = isatty(1) && term && string(term) != "dumb";
@@ -171,6 +173,25 @@ string BuildStatus::FormatProgressStatus(const char* progress_status_format) con
out += buf;
break;
+ // Overall finished edges per second.
+ case 'o':
+ overall_rate_.UpdateRate(finished_edges_, finished_edges_);
+ overall_rate_.snprinfRate(buf, "%.1f");
+ out += buf;
+ break;
+
+ // Current rate, average over the last '-j' jobs.
+ case 'c':
+ // TODO use sliding window?
+ if (finished_edges_ > current_rate_.last_update() &&
+ finished_edges_ - current_rate_.last_update() == current_rate_average_count_) {
+ current_rate_.UpdateRate(current_rate_average_count_, finished_edges_);
+ current_rate_.Restart();
+ }
+ current_rate_.snprinfRate(buf, "%.0f");
+ out += buf;
+ break;
+
default: {
Fatal("unknown placeholder '%%%c' in $NINJA_STATUS", *s);
return "";
@@ -208,6 +229,10 @@ void BuildStatus::PrintStatus(Edge* edge) {
#endif
}
+ if (finished_edges_ == 0) {
+ overall_rate_.Restart();
+ current_rate_.Restart();
+ }
to_print = FormatProgressStatus(progress_status_format_) + to_print;
if (smart_terminal_ && !force_full_command) {
@@ -770,3 +795,4 @@ void Builder::FinishEdge(Edge* edge, bool success, const string& output) {
if (success && log_)
log_->RecordCommand(edge, start_time, end_time, restat_mtime);
}
+