+Codec::Codec(
+ CodecType type,
+ Optional<int> level,
+ StringPiece name,
+ bool counters)
+ : type_(type) {
+ if (counters) {
+ bytesBeforeCompression_ = {type,
+ name,
+ level,
+ CompressionCounterKey::BYTES_BEFORE_COMPRESSION,
+ CompressionCounterType::SUM};
+ bytesAfterCompression_ = {type,
+ name,
+ level,
+ CompressionCounterKey::BYTES_AFTER_COMPRESSION,
+ CompressionCounterType::SUM};
+ bytesBeforeDecompression_ = {
+ type,
+ name,
+ level,
+ CompressionCounterKey::BYTES_BEFORE_DECOMPRESSION,
+ CompressionCounterType::SUM};
+ bytesAfterDecompression_ = {
+ type,
+ name,
+ level,
+ CompressionCounterKey::BYTES_AFTER_DECOMPRESSION,
+ CompressionCounterType::SUM};
+ compressions_ = {type,
+ name,
+ level,
+ CompressionCounterKey::COMPRESSIONS,
+ CompressionCounterType::SUM};
+ decompressions_ = {type,
+ name,
+ level,
+ CompressionCounterKey::DECOMPRESSIONS,
+ CompressionCounterType::SUM};
+ compressionMilliseconds_ = {type,
+ name,
+ level,
+ CompressionCounterKey::COMPRESSION_MILLISECONDS,
+ CompressionCounterType::SUM};
+ decompressionMilliseconds_ = {
+ type,
+ name,
+ level,
+ CompressionCounterKey::DECOMPRESSION_MILLISECONDS,
+ CompressionCounterType::SUM};
+ }
+}
+
+namespace {
+constexpr uint32_t kLoggingRate = 50;
+
+class Timer {
+ public:
+ explicit Timer(folly::detail::CompressionCounter& counter)
+ : counter_(&counter) {}
+
+ ~Timer() {
+ *counter_ += timer_.elapsed().count();
+ }
+
+ private:
+ folly::detail::CompressionCounter* counter_;
+ stop_watch<std::chrono::milliseconds> timer_;
+};
+} // namespace