diff options
author | Junio C Hamano <gitster@pobox.com> | 2017-07-31 13:51:04 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-07-31 13:51:04 -0700 |
commit | 4f77f618d99174559f3c99439d9448e916ee45cf (patch) | |
tree | 92aa6aaa22feb01ddc51f091002fefbe166c15a4 | |
parent | Merge branch 'tb/push-to-cygwin-unc-path' into maint (diff) | |
parent | progress: show overall rate in last update (diff) | |
download | tgif-4f77f618d99174559f3c99439d9448e916ee45cf.tar.xz |
Merge branch 'rs/progress-overall-throughput-at-the-end' into maint
The progress meter did not give a useful output when we haven't had
0.5 seconds to measure the throughput during the interval. Instead
show the overall throughput rate at the end, which is a much more
useful number.
* rs/progress-overall-throughput-at-the-end:
progress: show overall rate in last update
-rw-r--r-- | progress.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/progress.c b/progress.c index 29378caa05..73e36d4a42 100644 --- a/progress.c +++ b/progress.c @@ -36,6 +36,7 @@ struct progress { unsigned delay; unsigned delayed_percent_treshold; struct throughput *throughput; + uint64_t start_ns; }; static volatile sig_atomic_t progress_update; @@ -221,6 +222,7 @@ struct progress *start_progress_delay(const char *title, unsigned total, progress->delayed_percent_treshold = percent_treshold; progress->delay = delay; progress->throughput = NULL; + progress->start_ns = getnanotime(); set_progress_signal(); return progress; } @@ -247,8 +249,10 @@ void stop_progress_msg(struct progress **p_progress, const char *msg) struct throughput *tp = progress->throughput; if (tp) { - unsigned int rate = !tp->avg_misecs ? 0 : - tp->avg_bytes / tp->avg_misecs; + uint64_t now_ns = getnanotime(); + unsigned int misecs, rate; + misecs = ((now_ns - progress->start_ns) * 4398) >> 32; + rate = tp->curr_total / (misecs ? misecs : 1); throughput_string(&tp->display, tp->curr_total, rate); } progress_update = 1; |