@@ -62,7 +62,7 @@ Error extractOffloadBundle(MemoryBufferRef Contents, uint64_t SectionOffset,
6262 return createFileError (FileName, EC);
6363
6464 Expected<std::unique_ptr<MemoryBuffer>> DecompressedBufferOrErr =
65- CompressedOffloadBundle::decompress (**CodeOrErr, false , errs ());
65+ CompressedOffloadBundle::decompress (**CodeOrErr, & nulls ());
6666 if (!DecompressedBufferOrErr)
6767 return createStringError (
6868 inconvertibleErrorCode (),
@@ -297,19 +297,19 @@ static std::string formatWithCommas(unsigned long long Value) {
297297Expected<std::unique_ptr<MemoryBuffer>>
298298CompressedOffloadBundle::compress (compression::Params P,
299299 const MemoryBuffer &Input, uint16_t Version,
300- bool Verbose, raw_ostream &OutS ) {
300+ raw_ostream *VerboseStream ) {
301301 if (!compression::zstd::isAvailable () && !compression::zlib::isAvailable ())
302302 return createStringError (" compression not supported." );
303303 Timer HashTimer (" Hash Calculation Timer" , " Hash calculation time" ,
304304 OffloadBundlerTimerGroup);
305- if (Verbose )
305+ if (VerboseStream )
306306 HashTimer.startTimer ();
307307 MD5 Hash;
308308 MD5::MD5Result Result;
309309 Hash.update (Input.getBuffer ());
310310 Hash.final (Result);
311311 uint64_t TruncatedHash = Result.low ();
312- if (Verbose )
312+ if (VerboseStream )
313313 HashTimer.stopTimer ();
314314
315315 SmallVector<uint8_t , 0 > CompressedBuffer;
@@ -318,10 +318,10 @@ CompressedOffloadBundle::compress(compression::Params P,
318318 Input.getBuffer ().size ());
319319 Timer CompressTimer (" Compression Timer" , " Compression time" ,
320320 OffloadBundlerTimerGroup);
321- if (Verbose )
321+ if (VerboseStream )
322322 CompressTimer.startTimer ();
323323 compression::compress (P, BufferUint8, CompressedBuffer);
324- if (Verbose )
324+ if (VerboseStream )
325325 CompressTimer.stopTimer ();
326326
327327 uint16_t CompressionMethod = static_cast <uint16_t >(P.format );
@@ -378,28 +378,30 @@ CompressedOffloadBundle::compress(compression::Params P,
378378 OS.write (reinterpret_cast <const char *>(CompressedBuffer.data ()),
379379 CompressedBuffer.size ());
380380
381- if (Verbose ) {
381+ if (VerboseStream ) {
382382 auto MethodUsed = P.format == compression::Format::Zstd ? " zstd" : " zlib" ;
383383 double CompressionRate =
384384 static_cast <double >(UncompressedSize64) / CompressedBuffer.size ();
385385 double CompressionTimeSeconds = CompressTimer.getTotalTime ().getWallTime ();
386386 double CompressionSpeedMBs =
387387 (UncompressedSize64 / (1024.0 * 1024.0 )) / CompressionTimeSeconds;
388- OutS << " Compressed bundle format version: " << Version << " \n "
389- << " Total file size (including headers): "
390- << formatWithCommas (TotalFileSize64) << " bytes\n "
391- << " Compression method used: " << MethodUsed << " \n "
392- << " Compression level: " << P.level << " \n "
393- << " Binary size before compression: "
394- << formatWithCommas (UncompressedSize64) << " bytes\n "
395- << " Binary size after compression: "
396- << formatWithCommas (CompressedBuffer.size ()) << " bytes\n "
397- << " Compression rate: " << format (" %.2lf" , CompressionRate) << " \n "
398- << " Compression ratio: "
399- << format (" %.2lf%%" , 100.0 / CompressionRate) << " \n "
400- << " Compression speed: " << format (" %.2lf MB/s" , CompressionSpeedMBs)
401- << " \n "
402- << " Truncated MD5 hash: " << format_hex (TruncatedHash, 16 ) << " \n " ;
388+ *VerboseStream << " Compressed bundle format version: " << Version << " \n "
389+ << " Total file size (including headers): "
390+ << formatWithCommas (TotalFileSize64) << " bytes\n "
391+ << " Compression method used: " << MethodUsed << " \n "
392+ << " Compression level: " << P.level << " \n "
393+ << " Binary size before compression: "
394+ << formatWithCommas (UncompressedSize64) << " bytes\n "
395+ << " Binary size after compression: "
396+ << formatWithCommas (CompressedBuffer.size ()) << " bytes\n "
397+ << " Compression rate: " << format (" %.2lf" , CompressionRate)
398+ << " \n "
399+ << " Compression ratio: "
400+ << format (" %.2lf%%" , 100.0 / CompressionRate) << " \n "
401+ << " Compression speed: "
402+ << format (" %.2lf MB/s" , CompressionSpeedMBs) << " \n "
403+ << " Truncated MD5 hash: " << format_hex (TruncatedHash, 16 )
404+ << " \n " ;
403405 }
404406
405407 return MemoryBuffer::getMemBufferCopy (
@@ -510,16 +512,17 @@ CompressedOffloadBundle::CompressedBundleHeader::tryParse(StringRef Blob) {
510512}
511513
512514Expected<std::unique_ptr<MemoryBuffer>>
513- CompressedOffloadBundle::decompress (const MemoryBuffer &Input, bool Verbose, raw_ostream &OS) {
515+ CompressedOffloadBundle::decompress (const MemoryBuffer &Input,
516+ raw_ostream *VerboseStream) {
514517 StringRef Blob = Input.getBuffer ();
515518
516519 // Check minimum header size (using V1 as it's the smallest).
517520 if (Blob.size () < sizeof (RawCompressedBundleHeader::CommonFields))
518521 return MemoryBuffer::getMemBufferCopy (Blob);
519522
520523 if (identify_magic (Blob) != file_magic::offload_bundle_compressed) {
521- if (Verbose )
522- OS << " Uncompressed bundle\n " ;
524+ if (VerboseStream )
525+ *VerboseStream << " Uncompressed bundle\n " ;
523526 return MemoryBuffer::getMemBufferCopy (Blob);
524527 }
525528
@@ -540,7 +543,7 @@ CompressedOffloadBundle::decompress(const MemoryBuffer &Input, bool Verbose, raw
540543
541544 Timer DecompressTimer (" Decompression Timer" , " Decompression time" ,
542545 OffloadBundlerTimerGroup);
543- if (Verbose )
546+ if (VerboseStream )
544547 DecompressTimer.startTimer ();
545548
546549 SmallVector<uint8_t , 0 > DecompressedData;
@@ -554,7 +557,7 @@ CompressedOffloadBundle::decompress(const MemoryBuffer &Input, bool Verbose, raw
554557 " could not decompress embedded file contents: " +
555558 toString (std::move (DecompressionError)));
556559
557- if (Verbose ) {
560+ if (VerboseStream ) {
558561 DecompressTimer.stopTimer ();
559562
560563 double DecompressionTimeSeconds =
@@ -577,25 +580,27 @@ CompressedOffloadBundle::decompress(const MemoryBuffer &Input, bool Verbose, raw
577580 double DecompressionSpeedMBs =
578581 (UncompressedSize / (1024.0 * 1024.0 )) / DecompressionTimeSeconds;
579582
580- OS << " Compressed bundle format version: " << ThisVersion << " \n " ;
583+ *VerboseStream << " Compressed bundle format version: " << ThisVersion
584+ << " \n " ;
581585 if (ThisVersion >= 2 )
582- OS << " Total file size (from header): "
583- << formatWithCommas (TotalFileSize) << " bytes\n " ;
584- OS << " Decompression method: "
585- << (CompressionFormat == compression::Format::Zlib ? " zlib" : " zstd" )
586- << " \n "
587- << " Size before decompression: "
588- << formatWithCommas (CompressedData.size ()) << " bytes\n "
589- << " Size after decompression: " << formatWithCommas (UncompressedSize)
590- << " bytes\n "
591- << " Compression rate: " << format (" %.2lf" , CompressionRate) << " \n "
592- << " Compression ratio: "
593- << format (" %.2lf%%" , 100.0 / CompressionRate) << " \n "
594- << " Decompression speed: "
595- << format (" %.2lf MB/s" , DecompressionSpeedMBs) << " \n "
596- << " Stored hash: " << format_hex (StoredHash, 16 ) << " \n "
597- << " Recalculated hash: " << format_hex (RecalculatedHash, 16 ) << " \n "
598- << " Hashes match: " << (HashMatch ? " Yes" : " No" ) << " \n " ;
586+ *VerboseStream << " Total file size (from header): "
587+ << formatWithCommas (TotalFileSize) << " bytes\n " ;
588+ *VerboseStream
589+ << " Decompression method: "
590+ << (CompressionFormat == compression::Format::Zlib ? " zlib" : " zstd" )
591+ << " \n "
592+ << " Size before decompression: "
593+ << formatWithCommas (CompressedData.size ()) << " bytes\n "
594+ << " Size after decompression: " << formatWithCommas (UncompressedSize)
595+ << " bytes\n "
596+ << " Compression rate: " << format (" %.2lf" , CompressionRate) << " \n "
597+ << " Compression ratio: " << format (" %.2lf%%" , 100.0 / CompressionRate)
598+ << " \n "
599+ << " Decompression speed: "
600+ << format (" %.2lf MB/s" , DecompressionSpeedMBs) << " \n "
601+ << " Stored hash: " << format_hex (StoredHash, 16 ) << " \n "
602+ << " Recalculated hash: " << format_hex (RecalculatedHash, 16 ) << " \n "
603+ << " Hashes match: " << (HashMatch ? " Yes" : " No" ) << " \n " ;
599604 }
600605
601606 return MemoryBuffer::getMemBufferCopy (toStringRef (DecompressedData));
0 commit comments