Skip to content

Commit 8b19fbc

Browse files
DrewScogginsrzikm
andauthored
Fixup Brotli compression tests (#2567)
* Fixup Brotli compression tests As seen here, dotnet/runtime#73391 (comment), this test had a bug where in the work that was being done by the underlying test was not being correctly measured. This fix resolves that. * Address pr feedback * code review feedback --------- Co-authored-by: Radek Zikmund <[email protected]>
1 parent 2c0bd74 commit 8b19fbc

File tree

3 files changed

+22
-21
lines changed

3 files changed

+22
-21
lines changed

src/benchmarks/micro/libraries/System.IO.Compression/Brotli.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ public class Brotli : CompressionStreamPerfTestBase
1212
{
1313
private const int Window = 22;
1414

15-
public override Stream CreateStream(Stream stream, CompressionMode mode) => new BrotliStream(stream, mode);
16-
public override Stream CreateStream(Stream stream, CompressionLevel level) => new BrotliStream(stream, level);
15+
public override Stream CreateStream(Stream stream, CompressionMode mode, bool leaveOpen) => new BrotliStream(stream, mode, leaveOpen);
16+
public override Stream CreateStream(Stream stream, CompressionLevel level, bool leaveOpen) => new BrotliStream(stream, level, leaveOpen);
1717

1818
[Benchmark]
1919
public Span<byte> Compress_WithState()
@@ -24,7 +24,7 @@ public Span<byte> Compress_WithState()
2424
ReadOnlySpan<byte> input = CompressedFile.UncompressedData;
2525
while (!input.IsEmpty && !output.IsEmpty)
2626
{
27-
encoder.Compress(input, output, out int bytesConsumed, out int written, isFinalBlock:false);
27+
encoder.Compress(input, output, out int bytesConsumed, out int written, isFinalBlock: false);
2828
input = input.Slice(bytesConsumed);
2929
output = output.Slice(written);
3030
}
@@ -64,7 +64,7 @@ public bool Compress_WithoutState()
6464
[Benchmark]
6565
public bool Decompress_WithoutState() // the level argument is not used here, but it describes how the data was compressed (in the benchmark id)
6666
=> BrotliDecoder.TryDecompress(CompressedFile.CompressedData, CompressedFile.UncompressedData, out int bytesWritten);
67-
67+
6868
private static int GetQuality(CompressionLevel compressLevel)
6969
=> compressLevel == CompressionLevel.Optimal ? 11 : compressLevel == CompressionLevel.Fastest ? 1 : 0;
7070
}

src/benchmarks/micro/libraries/System.IO.Compression/CompressedFile.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ public class CompressedFile
1212
public byte[] UncompressedData { get; }
1313
public byte[] CompressedData { get; }
1414
public MemoryStream CompressedDataStream { get; }
15-
16-
public CompressedFile(string fileName, CompressionLevel compressionLevel, Func<Stream, CompressionLevel, Stream> factory)
15+
16+
public CompressedFile(string fileName, CompressionLevel compressionLevel, Func<Stream, CompressionLevel, bool, Stream> factory)
1717
{
1818
Name = fileName;
1919
CompressionLevel = compressionLevel;
@@ -22,17 +22,18 @@ public CompressedFile(string fileName, CompressionLevel compressionLevel, Func<S
2222
UncompressedData = File.ReadAllBytes(filePath);
2323
CompressedDataStream = new MemoryStream(capacity: UncompressedData.Length);
2424

25-
var compressionStream = factory(CompressedDataStream, compressionLevel);
26-
compressionStream.Write(UncompressedData, 0, UncompressedData.Length);
27-
compressionStream.Flush();
28-
25+
using (var compressionStream = factory(CompressedDataStream, compressionLevel, true))
26+
{
27+
compressionStream.Write(UncompressedData, 0, UncompressedData.Length);
28+
}
29+
2930
CompressedDataStream.Position = 0;
3031
CompressedData = CompressedDataStream.ToArray();
3132
}
3233

3334
public override string ToString() => Name;
3435

35-
internal static string GetFilePath(string fileName)
36+
internal static string GetFilePath(string fileName)
3637
=> Path.Combine(
3738
AppContext.BaseDirectory,
3839
"libraries", "System.IO.Compression", "TestData",

src/benchmarks/micro/libraries/System.IO.Compression/CompressionStreamPerfTestBase.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,21 @@ namespace System.IO.Compression
1010
{
1111
public class Gzip : CompressionStreamPerfTestBase
1212
{
13-
public override Stream CreateStream(Stream stream, CompressionMode mode) => new GZipStream(stream, mode);
14-
public override Stream CreateStream(Stream stream, CompressionLevel level) => new GZipStream(stream, level);
13+
public override Stream CreateStream(Stream stream, CompressionMode mode, bool leaveOpen) => new GZipStream(stream, mode, leaveOpen);
14+
public override Stream CreateStream(Stream stream, CompressionLevel level, bool leaveOpen) => new GZipStream(stream, level, leaveOpen);
1515
}
1616

1717
public class Deflate : CompressionStreamPerfTestBase
1818
{
19-
public override Stream CreateStream(Stream stream, CompressionMode mode) => new DeflateStream(stream, mode);
20-
public override Stream CreateStream(Stream stream, CompressionLevel level) => new DeflateStream(stream, level);
19+
public override Stream CreateStream(Stream stream, CompressionMode mode, bool leaveOpen) => new DeflateStream(stream, mode, leaveOpen);
20+
public override Stream CreateStream(Stream stream, CompressionLevel level, bool leaveOpen) => new DeflateStream(stream, level, leaveOpen);
2121
}
2222

2323
#if NET6_0_OR_GREATER // API introduced in .NET 6
2424
public class ZLib : CompressionStreamPerfTestBase
2525
{
26-
public override Stream CreateStream(Stream stream, CompressionMode mode) => new ZLibStream(stream, mode);
27-
public override Stream CreateStream(Stream stream, CompressionLevel level) => new ZLibStream(stream, level);
26+
public override Stream CreateStream(Stream stream, CompressionMode mode, bool leaveOpen) => new ZLibStream(stream, mode, leaveOpen);
27+
public override Stream CreateStream(Stream stream, CompressionLevel level, bool leaveOpen) => new ZLibStream(stream, level, leaveOpen);
2828
}
2929
#endif
3030

@@ -33,8 +33,8 @@ public class ZLib : CompressionStreamPerfTestBase
3333
[BenchmarkCategory(Categories.Libraries, Categories.NoWASM)]
3434
public abstract class CompressionStreamPerfTestBase
3535
{
36-
public abstract Stream CreateStream(Stream stream, CompressionMode mode);
37-
public abstract Stream CreateStream(Stream stream, CompressionLevel level);
36+
public abstract Stream CreateStream(Stream stream, CompressionMode mode, bool leaveOpen = true);
37+
public abstract Stream CreateStream(Stream stream, CompressionLevel level, bool leaveOpen = true);
3838

3939
[ParamsSource(nameof(UncompressedTestFileNames))]
4040
public string file { get; set; }
@@ -59,7 +59,7 @@ public void Compress()
5959
{
6060
CompressedFile.CompressedDataStream.Position = 0; // all benchmarks invocation reuse the same stream, we set Postion to 0 to start at the beginning
6161

62-
var compressor = CreateStream(CompressedFile.CompressedDataStream, level);
62+
using var compressor = CreateStream(CompressedFile.CompressedDataStream, level);
6363
compressor.Write(CompressedFile.UncompressedData, 0, CompressedFile.UncompressedData.Length);
6464
}
6565

@@ -68,7 +68,7 @@ public int Decompress()
6868
{
6969
CompressedFile.CompressedDataStream.Position = 0;
7070

71-
var compressor = CreateStream(CompressedFile.CompressedDataStream, CompressionMode.Decompress);
71+
using var compressor = CreateStream(CompressedFile.CompressedDataStream, CompressionMode.Decompress);
7272

7373
byte[] buffer = CompressedFile.UncompressedData;
7474

0 commit comments

Comments
 (0)