@@ -18,7 +18,7 @@ import (
18
18
type BlockAnalyzer struct {
19
19
b Buckets
20
20
compressors [numSettings ]compression.Compressor
21
- decompressors [numSettings ]compression.Decompressor
21
+ decompressors [compression . NumAlgorithms ]compression.Decompressor
22
22
minLZFastest compression.Compressor
23
23
buf1 []byte
24
24
buf2 []byte
@@ -28,7 +28,9 @@ func NewBlockAnalyzer() *BlockAnalyzer {
28
28
a := & BlockAnalyzer {}
29
29
for i , s := range Settings {
30
30
a .compressors [i ] = compression .GetCompressor (s )
31
- a .decompressors [i ] = compression .GetDecompressor (s .Algorithm )
31
+ }
32
+ for i := range a .decompressors {
33
+ a .decompressors [i ] = compression .GetDecompressor (compression .Algorithm (i ))
32
34
}
33
35
a .minLZFastest = compression .GetCompressor (compression .MinLZFastest )
34
36
a .buf1 = make ([]byte , 256 * 1024 )
@@ -51,11 +53,12 @@ func (a *BlockAnalyzer) Close() {
51
53
// of various compression algorithms on it.
52
54
func (a * BlockAnalyzer ) Block (kind block.Kind , block []byte ) {
53
55
size := MakeBlockSize (len (block ))
54
- compressibility := MakeCompressibility (len (block ), len (a .minLZFastest .Compress (a .buf1 [:0 ], block )))
56
+ compressed , _ := a .minLZFastest .Compress (a .buf1 [:0 ], block )
57
+ compressibility := MakeCompressibility (len (block ), len (compressed ))
55
58
bucket := & a.b [kind ][size ][compressibility ]
56
59
bucket .UncompressedSize .Add (float64 (len (block )))
57
60
for i := range Settings {
58
- a .runExperiment (& bucket .Experiments [i ], block , a .compressors [i ], a .decompressors [ i ] )
61
+ a .runExperiment (& bucket .Experiments [i ], block , a .compressors [i ], a .decompressors )
59
62
}
60
63
}
61
64
@@ -67,7 +70,7 @@ func (a *BlockAnalyzer) runExperiment(
67
70
pa * PerSetting ,
68
71
block []byte ,
69
72
compressor compression.Compressor ,
70
- decompressor compression.Decompressor ,
73
+ decompressors [ compression . NumAlgorithms ] compression.Decompressor ,
71
74
) {
72
75
// buf1 will hold the compressed data; it can get a bit larger in the worst
73
76
// case, add a bit of head
@@ -77,14 +80,14 @@ func (a *BlockAnalyzer) runExperiment(
77
80
// Compress.
78
81
runtime .Gosched ()
79
82
t1 := crtime .NowMono ()
80
- compressed := compressor .Compress (a .buf1 [:0 ], block )
83
+ compressed , setting := compressor .Compress (a .buf1 [:0 ], block )
81
84
compressionTime := t1 .Elapsed ()
82
85
83
86
// Yield the processor, reducing the chance that we get preempted during
84
87
// DecompressInto.
85
88
runtime .Gosched ()
86
89
t2 := crtime .NowMono ()
87
- if err := decompressor .DecompressInto (a .buf2 , compressed ); err != nil {
90
+ if err := decompressors [ setting . Algorithm ] .DecompressInto (a .buf2 , compressed ); err != nil {
88
91
panic (err )
89
92
}
90
93
decompressionTime := t2 .Elapsed ()
0 commit comments