summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Schumacher <timschumi@gmx.de>2023-04-04 17:25:19 +0200
committerTim Flynn <trflynn89@pm.me>2023-04-05 07:30:38 -0400
commit3ec513ecf21b2ec8b64c8548e9bb5b4173eb7a5f (patch)
treee7608e9a6ccc1c6d869c8faf964c1c3da9c87b18
parent7000ccf89fd6b5f4bfb2fc67bd5ca1a6ad8e2c7a (diff)
downloadserenity-3ec513ecf21b2ec8b64c8548e9bb5b4173eb7a5f.zip
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.
-rw-r--r--Userland/Utilities/xzcat.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/Userland/Utilities/xzcat.cpp b/Userland/Utilities/xzcat.cpp
index 81ffe61a45..19837711e8 100644
--- a/Userland/Utilities/xzcat.cpp
+++ b/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;