diff --git a/folly/compression/Counters.h b/folly/compression/Counters.h index e327b5ec85bd794470d9fc6a7a7f5ea0948cffe5..97a45b4e7a49c5d2db94f1124327fa56f2cc7fc5 100644 --- a/folly/compression/Counters.h +++ b/folly/compression/Counters.h @@ -69,13 +69,14 @@ namespace detail { /// Wrapper around the makeCompressionCounterHandler() extension point. class CompressionCounter { public: - CompressionCounter() {} + CompressionCounter() : initialized_(true) {} CompressionCounter( folly::io::CodecType codecType, folly::StringPiece codecName, folly::Optional<int> level, CompressionCounterKey key, - CompressionCounterType counterType) { + CompressionCounterType counterType) + : initialized_(false) { initialize_ = [=]() { return makeCompressionCounterHandler( codecType, codecName, level, key, counterType); @@ -112,7 +113,7 @@ class CompressionCounter { } } - bool initialized_{false}; + bool initialized_; folly::Function<folly::Function<void(double)>()> initialize_; folly::Function<void(double)> increment_; }; diff --git a/folly/compression/test/CompressionTest.cpp b/folly/compression/test/CompressionTest.cpp index 4d2ccfec3fd8c83ee6a95dd46702c3701e794ee2..3cbcf01282406e321060dd17506aa4a3fc6b6703 100644 --- a/folly/compression/test/CompressionTest.cpp +++ b/folly/compression/test/CompressionTest.cpp @@ -464,6 +464,35 @@ static bool codecHasFlush(CodecType type) { return type != CodecType::BZIP2; } +namespace { +class NoCountersCodec : public Codec { + public: + NoCountersCodec() + : Codec(CodecType::NO_COMPRESSION, {}, {}, /* counters */ false) {} + + private: + uint64_t doMaxCompressedLength(uint64_t uncompressedLength) const override { + return uncompressedLength; + } + + std::unique_ptr<IOBuf> doCompress(const IOBuf* buf) override { + return buf->clone(); + } + + std::unique_ptr<IOBuf> doUncompress(const IOBuf* buf, Optional<uint64_t>) + override { + return buf->clone(); + } +}; +} // namespace + +TEST(CodecTest, NoCounters) { + NoCountersCodec codec; + for (size_t i = 0; i < 1000; ++i) { + EXPECT_EQ("hello", codec.uncompress(codec.compress("hello"))); + } +} + class StreamingUnitTest : public testing::TestWithParam<CodecType> { protected: void SetUp() override { diff --git a/folly/compression/test/CountersTest.cpp b/folly/compression/test/CountersTest.cpp index 31dd8b64a6eeced72218b15762891da64c212d82..dd17a5c49e5f2333b9ba3bca9e44e567361d9abd 100644 --- a/folly/compression/test/CountersTest.cpp +++ b/folly/compression/test/CountersTest.cpp @@ -49,3 +49,8 @@ TEST(FollyCountersTest, AvgWorks) { counter += 5; } } + +TEST(FollyCountersTest, DefaultConstruction) { + CompressionCounter counter; + ++counter; +}