Browse Source

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.
Tim Schumacher 2 years ago
parent
commit
3ec513ecf2
1 changed files with 2 additions and 1 deletions
  1. 2 1
      Userland/Utilities/xzcat.cpp

+ 2 - 1
Userland/Utilities/xzcat.cpp

@@ -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;