Add erofs compression param

Test: th
Bug: 206729162
Change-Id: I774918693262c8e48a2656d82d5acaeb4e3aaed2
diff --git a/payload_generator/erofs_filesystem.cc b/payload_generator/erofs_filesystem.cc
index 9ab37fd..677b473 100644
--- a/payload_generator/erofs_filesystem.cc
+++ b/payload_generator/erofs_filesystem.cc
@@ -27,11 +27,13 @@
 
 #include "erofs_iterate.h"
 #include "lz4diff/lz4diff.pb.h"
-#include "payload_generator/filesystem_interface.h"
+#include "lz4diff/lz4patch.h"
+#include "lz4diff/lz4diff.h"
 #include "update_engine/common/utils.h"
 #include "update_engine/payload_generator/delta_diff_generator.h"
 #include "update_engine/payload_generator/extent_ranges.h"
 #include "update_engine/payload_generator/extent_utils.h"
+#include "update_engine/payload_generator/filesystem_interface.h"
 
 namespace chromeos_update_engine {
 
@@ -81,10 +83,6 @@
   if (!file.is_compressed) {
     return;
   }
-  // TODO(b/206729162) Fill in compression algorithm info from input target
-  // files
-  file.compressed_file_info.algo.set_type(CompressionAlgorithm::LZ4HC);
-  file.compressed_file_info.algo.set_level(9);
 
   struct erofs_map_blocks block {};
   block.m_la = 0;
@@ -142,7 +140,7 @@
 static_assert(kBlockSize == EROFS_BLKSIZ);
 
 std::unique_ptr<ErofsFilesystem> ErofsFilesystem::CreateFromFile(
-    const std::string& filename) {
+    const std::string& filename, const CompressionAlgorithm& algo) {
   // erofs-utils makes heavy use of global variables. Hence its functions aren't
   // thread safe. For example, it stores a global int holding file descriptors
   // to the opened EROFS image. It doesn't even support opening more than 1
@@ -171,9 +169,10 @@
   LOG(INFO) << "Parsed EROFS image of size " << st.st_size << " built in "
             << ctime(&time) << " " << filename;
   std::vector<File> files;
-  if (!ErofsFilesystem::GetFiles(filename, &files)) {
+  if (!ErofsFilesystem::GetFiles(filename, &files, algo)) {
     return nullptr;
   }
+  LOG(INFO) << "Using compression algo " << algo << " for " << filename;
   // private ctor doesn't work with make_unique
   return std::unique_ptr<ErofsFilesystem>(
       new ErofsFilesystem(filename, st.st_size, std::move(files)));
@@ -185,7 +184,8 @@
 }
 
 bool ErofsFilesystem::GetFiles(const std::string& filename,
-                               std::vector<File>* files) {
+                               std::vector<File>* files,
+                               const CompressionAlgorithm& algo) {
   erofs_iterate_root_dir(&sbi, [&](struct erofs_iterate_dir_context* p_info) {
     const auto& info = *p_info;
     if (info.ctx.de_ftype != EROFS_FT_REG_FILE) {
@@ -226,6 +226,7 @@
     file.file_stat.st_size = uncompressed_size;
     file.file_stat.st_ino = inode.nid;
     FillCompressedBlockInfo(&file, filename, &inode);
+    file.compressed_file_info.algo = algo;
 
     files->emplace_back(std::move(file));
     return 0;