2
2
mirror of https://github.com/octoleo/restic.git synced 2024-06-27 21:03:29 +00:00

Control progress rate with RESTIC_PROGRESS_FPS env

Add a RESTIC_PROGRESS_FPS environment variable to limit the interval
at which the progress indicator updates (allowed values: 1-60).

The default rate of 60 FPS can cause high terminal CPU load on some
systems, like iTerm2 on macOS with font anti-aliasing enabled.

Usage:

    RESTIC_PROGRESS_FPS=1 restic ...
    RESTIC_PROGRESS_FPS=60 restic ...
This commit is contained in:
Konrad Wojas 2017-10-26 14:46:56 +08:00
parent 359b273649
commit 5b96885c6d

View File

@ -3,17 +3,31 @@ package restic
import ( import (
"fmt" "fmt"
"os" "os"
"strconv"
"sync" "sync"
"time" "time"
"golang.org/x/crypto/ssh/terminal" "golang.org/x/crypto/ssh/terminal"
) )
const minTickerTime = time.Second / 60 // minTickerTime limits how often the progress ticker is updated. It can be
// overridden using the RESTIC_PROGRESS_FPS (frames per second) environment
// variable.
var minTickerTime = time.Second / 60
var isTerminal = terminal.IsTerminal(int(os.Stdout.Fd())) var isTerminal = terminal.IsTerminal(int(os.Stdout.Fd()))
var forceUpdateProgress = make(chan bool) var forceUpdateProgress = make(chan bool)
func init() {
fps, err := strconv.ParseInt(os.Getenv("RESTIC_PROGRESS_FPS"), 10, 64)
if err == nil && fps >= 1 {
if fps > 60 {
fps = 60
}
minTickerTime = time.Second / time.Duration(fps)
}
}
// Progress reports progress on an operation. // Progress reports progress on an operation.
type Progress struct { type Progress struct {
OnStart func() OnStart func()