mirror of https://github.com/restic/restic.git
Flatten backend.LimitedReadCloser structure
This inlines the io.LimitedReader into the LimitedReadCloser body to achieve fewer allocations. Results on linux/amd64: name old time/op new time/op delta Backend/BenchmarkLoadPartialFile-8 412µs ± 4% 413µs ± 4% ~ (p=0.634 n=17+17) Backend/BenchmarkLoadPartialFileOffset-8 455µs ±13% 441µs ±10% ~ (p=0.072 n=20+18) name old speed new speed delta Backend/BenchmarkLoadPartialFile-8 10.2GB/s ± 3% 10.2GB/s ± 4% ~ (p=0.817 n=16+17) Backend/BenchmarkLoadPartialFileOffset-8 9.25GB/s ±12% 9.54GB/s ± 9% ~ (p=0.072 n=20+18) name old alloc/op new alloc/op delta Backend/BenchmarkLoadPartialFile-8 888B ± 0% 872B ± 0% -1.80% (p=0.000 n=15+15) Backend/BenchmarkLoadPartialFileOffset-8 888B ± 0% 872B ± 0% -1.80% (p=0.000 n=15+15) name old allocs/op new allocs/op delta Backend/BenchmarkLoadPartialFile-8 18.0 ± 0% 17.0 ± 0% -5.56% (p=0.000 n=15+15) Backend/BenchmarkLoadPartialFileOffset-8 18.0 ± 0% 17.0 ± 0% -5.56% (p=0.000 n=15+15)
This commit is contained in:
parent
f4cd2a7120
commit
190d8e2f51
|
@ -32,19 +32,14 @@ func LoadAll(ctx context.Context, buf []byte, be restic.Backend, h restic.Handle
|
||||||
|
|
||||||
// LimitedReadCloser wraps io.LimitedReader and exposes the Close() method.
|
// LimitedReadCloser wraps io.LimitedReader and exposes the Close() method.
|
||||||
type LimitedReadCloser struct {
|
type LimitedReadCloser struct {
|
||||||
io.ReadCloser
|
io.Closer
|
||||||
io.Reader
|
io.LimitedReader
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read reads data from the limited reader.
|
// LimitReadCloser returns a new reader wraps r in an io.LimitedReader, but also
|
||||||
func (l *LimitedReadCloser) Read(p []byte) (int, error) {
|
|
||||||
return l.Reader.Read(p)
|
|
||||||
}
|
|
||||||
|
|
||||||
// LimitReadCloser returns a new reader wraps r in an io.LimitReader, but also
|
|
||||||
// exposes the Close() method.
|
// exposes the Close() method.
|
||||||
func LimitReadCloser(r io.ReadCloser, n int64) *LimitedReadCloser {
|
func LimitReadCloser(r io.ReadCloser, n int64) *LimitedReadCloser {
|
||||||
return &LimitedReadCloser{ReadCloser: r, Reader: io.LimitReader(r, n)}
|
return &LimitedReadCloser{Closer: r, LimitedReader: io.LimitedReader{R: r, N: n}}
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefaultLoad implements Backend.Load using lower-level openReader func
|
// DefaultLoad implements Backend.Load using lower-level openReader func
|
||||||
|
|
Loading…
Reference in New Issue