diff options
author | Peter Kuemmel <syntheticpp@gmx.net> | 2012-06-29 14:12:03 (GMT) |
---|---|---|
committer | Peter Kümmel <syntheticpp@gmx.net> | 2012-07-15 20:22:27 (GMT) |
commit | c0c5ef9bffb0130e169aeddcb8487b670c6b56fe (patch) | |
tree | 229e624ce902d6f1cf4204c8a55a5abdee73daa6 /src/build.cc | |
parent | 638b0336e98af65240c1d0d66c5e0d9e5b800d9e (diff) | |
download | Ninja-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.cc | 28 |
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); } + |