diff options
author | Christopher Baines <mail@cbaines.net> | 2021-09-17 11:15:56 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2021-12-12 14:12:15 +0000 |
commit | 604880ae22e1a7662acb1d3f282242470de0cd03 (patch) | |
tree | 9c5e2f0de73fba4cc4aba58bfc7079b8ecc934f5 /guix | |
parent | c12c7f128418d4e0d8373d6e918547bc7f95abef (diff) |
progress: Rate limit drawing in the progress-reporter/bar.
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.
Diffstat (limited to 'guix')
-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 () |