Add code to xz-compress log files
Change-Id: I2e00c8aa316f5907f7f9bc1a4653b1f7c793a876
diff --git a/aos/events/logging/logfile_utils.cc b/aos/events/logging/logfile_utils.cc
index 9d8145d..7ddc658 100644
--- a/aos/events/logging/logfile_utils.cc
+++ b/aos/events/logging/logfile_utils.cc
@@ -16,6 +16,18 @@
#include "gflags/gflags.h"
#include "glog/logging.h"
+#if defined(__x86_64__)
+#define ENABLE_LZMA 1
+#elif defined(__aarch64__)
+#define ENABLE_LZMA 1
+#else
+#define ENABLE_LZMA 0
+#endif
+
+#if ENABLE_LZMA
+#include "aos/events/logging/lzma_encoder.h"
+#endif
+
DEFINE_int32(flush_size, 128000,
"Number of outstanding bytes to allow before flushing to disk.");
@@ -206,9 +218,16 @@
}
SpanReader::SpanReader(std::string_view filename) : filename_(filename) {
- // Support for other kinds of decoders based on the filename should be added
- // here.
- decoder_ = std::make_unique<DummyDecoder>(filename);
+ static const std::string_view kXz = ".xz";
+ if (filename.substr(filename.size() - kXz.size()) == kXz) {
+#if ENABLE_LZMA
+ decoder_ = std::make_unique<LzmaDecoder>(filename);
+#else
+ LOG(FATAL) << "Reading xz-compressed files not supported on this platform";
+#endif
+ } else {
+ decoder_ = std::make_unique<DummyDecoder>(filename);
+ }
}
absl::Span<const uint8_t> SpanReader::ReadMessage() {