================
@@ -425,26 +439,68 @@ void llvm::timeTraceProfilerFinishThread() {
void llvm::timeTraceProfilerWrite(raw_pwrite_stream &OS) {
assert(TimeTraceProfilerInstance != nullptr &&
"Profiler object can't be null");
- TimeTraceProfilerInstance->write(OS);
+ DebugCompressionType CompressType =
+ TimeTraceProfilerInstance->TimeTraceCompress;
+ if (CompressType == DebugCompressionType::None) {
+ TimeTraceProfilerInstance->write(OS);
+ return;
+ }
+
+ compression::Format F = compression::formatFor(CompressType);
+ if (const char *Reason = compression::getReasonIfUnsupported(F))
+ report_fatal_error(Reason);
+
+ SmallVector<char, 0> Uncompressed;
+ {
+ raw_svector_ostream UncompressedOS(Uncompressed);
+ TimeTraceProfilerInstance->write(UncompressedOS);
+ }
+ SmallVector<uint8_t, 0> Compressed;
+ compression::compress(
+ compression::Params(F),
+ ArrayRef(reinterpret_cast<const uint8_t *>(Uncompressed.data()),
+ Uncompressed.size()),
+ Compressed);
+ OS.write(reinterpret_cast<const char *>(Compressed.data()),
+ Compressed.size());
}
Error llvm::timeTraceProfilerWrite(StringRef PreferredFileName,
StringRef FallbackFileName) {
assert(TimeTraceProfilerInstance != nullptr &&
"Profiler object can't be null");
+ DebugCompressionType CompressType =
+ TimeTraceProfilerInstance->TimeTraceCompress;
std::string Path = PreferredFileName.str();
if (Path.empty()) {
Path = FallbackFileName == "-" ? "out" : FallbackFileName.str();
Path += TimeTraceFileExtension;
+ if (CompressType == DebugCompressionType::Zstd)
+ Path += ".zst";
+ } else if (CompressType == DebugCompressionType::None) {
+ CompressType = inferTimeTraceCompressionFromPath(Path);
----------------
chandlerc wrote:
Yeah, introduced `llvm::TimeTraceCompression` and added `infer` to
`-ftime-trace-compress=<none|zstd|infer>`. Seems a bit cleaner this way too.
https://github.com/llvm/llvm-project/pull/228627
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits