xzcat: Use BufferedFile for reading inputs

This improves the decompression time of `clang-15.0.7.src.tar.xz` from
41 seconds down to about 5 seconds.

The reason for this very significant improvement is that LZMA, the
underlying compression of XZ, fills its range decompressor one byte at a
time, causing a lot of overhead at the syscall barrier.
This commit is contained in:
Tim Schumacher 2023-04-04 17:25:19 +02:00 committed by Tim Flynn
parent 7000ccf89f
commit 3ec513ecf2
Notes: sideshowbarker 2024-07-17 07:09:53 +09:00

View File

@ -22,7 +22,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
args_parser.parse(arguments);
auto file = TRY(Core::File::open_file_or_standard_stream(filename, Core::File::OpenMode::Read));
auto stream = TRY(Compress::XzDecompressor::create(move(file)));
auto buffered_file = TRY(Core::BufferedFile::create(move(file)));
auto stream = TRY(Compress::XzDecompressor::create(move(buffered_file)));
// Arbitrarily chosen buffer size.
Array<u8, 4096> buffer;