diff options
author | Christopher Baines <mail@cbaines.net> | 2021-09-17 11:12:19 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2021-09-17 11:12:19 +0100 |
commit | 841d834c53c7d2c1b828594123899ae08597c5d1 (patch) | |
tree | 54249e92e77c8703f1e1b16ab7f883fd0f7bea4c | |
parent | 05605998b2f70403c360ad5e27d942cef2b9502c (diff) | |
download | guix-bar-progress-reporter.tar guix-bar-progress-reporter.tar.gz |
progress: Rate limit drawing in the progress-reporter/bar.bar-progress-reporter
This helps smooth the output in cases where the bar is updated very quickly,
for example in guix weather where it's computing derivations.
* guix/progress.scm (progress-reporter/bar): Wrap the drawing code with the
rate-limited procedure.
-rw-r--r-- | guix/progress.scm | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/guix/progress.scm b/guix/progress.scm index 0cbc804ec1..4f8e98edc0 100644 --- a/guix/progress.scm +++ b/guix/progress.scm @@ -270,19 +270,25 @@ ABBREVIATION used to shorten FILE for display." tasks is performed. Write PREFIX at the beginning of the line." (define done 0) + (define (draw-bar) + (let* ((ratio (* 100. (/ done total)))) + (erase-current-line port) + (if (string-null? prefix) + (display (progress-bar ratio (current-terminal-columns)) port) + (let ((width (- (current-terminal-columns) + (string-length prefix) 3))) + (display prefix port) + (display " " port) + (display (progress-bar ratio width) port))) + (force-output port))) + + (define draw-bar/rate-limited + (rate-limited draw-bar %progress-interval)) + (define (report-progress) (set! done (+ 1 done)) (unless (> done total) - (let* ((ratio (* 100. (/ done total)))) - (erase-current-line port) - (if (string-null? prefix) - (display (progress-bar ratio (current-terminal-columns)) port) - (let ((width (- (current-terminal-columns) - (string-length prefix) 3))) - (display prefix port) - (display " " port) - (display (progress-bar ratio width) port))) - (force-output port)))) + (draw-bar/rate-limited))) (progress-reporter (start (lambda () |