|  | // Copyright 2020 The Fuchsia Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef SRC_STORAGE_BLOBFS_COMPRESSION_SETTINGS_H_ | 
|  | #define SRC_STORAGE_BLOBFS_COMPRESSION_SETTINGS_H_ | 
|  |  | 
|  | #include <lib/zx/status.h> | 
|  | #include <stdint.h> | 
|  |  | 
|  | #include <optional> | 
|  |  | 
|  | #include "src/storage/blobfs/format.h" | 
|  |  | 
|  | namespace blobfs { | 
|  |  | 
|  | // Unique identifiers for each |Compressor|/|Decompressor| strategy. | 
|  | enum class CompressionAlgorithm { | 
|  | UNCOMPRESSED = 0, | 
|  | LZ4, | 
|  | ZSTD, | 
|  | ZSTD_SEEKABLE, | 
|  | CHUNKED, | 
|  | }; | 
|  |  | 
|  | const char* CompressionAlgorithmToString(CompressionAlgorithm); | 
|  |  | 
|  | // Returns the compression algorithm used in |inode|. | 
|  | zx::status<CompressionAlgorithm> AlgorithmForInode(const Inode& inode); | 
|  |  | 
|  | // Return an Inode header flagset with the flags associated with |algorithm| | 
|  | // set, and all other flags are unset. | 
|  | uint16_t CompressionInodeHeaderFlags(const CompressionAlgorithm& algorithm); | 
|  |  | 
|  | // Clear any existing compression flags and apply the new one. | 
|  | void SetCompressionAlgorithm(Inode* inode, const CompressionAlgorithm algorithm); | 
|  |  | 
|  | // Settings to configure compression behavior. | 
|  | struct CompressionSettings { | 
|  | // Compression algorithm to use when storing blobs. | 
|  | // Blobs that are already stored on disk using another compression algorithm from disk are not | 
|  | // affected by this flag. | 
|  | CompressionAlgorithm compression_algorithm = CompressionAlgorithm::CHUNKED; | 
|  | // Write compression aggressiveness. Currently only used for ZSTD* and CHUNKED algorithms. | 
|  | // If set to std::nullopt, an implementation-defined default is used. | 
|  | std::optional<int> compression_level; | 
|  |  | 
|  | // Returns true if the configured settings are valid. | 
|  | bool IsValid() const; | 
|  | }; | 
|  |  | 
|  | }  // namespace blobfs | 
|  |  | 
|  | #endif  // SRC_STORAGE_BLOBFS_COMPRESSION_SETTINGS_H_ |