2 * Copyright 2018-present Facebook, Inc.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <folly/Function.h>
22 #include <folly/Optional.h>
23 #include <folly/Range.h>
30 enum class CompressionCounterKey {
31 BYTES_BEFORE_COMPRESSION = 0,
32 BYTES_AFTER_COMPRESSION = 1,
33 BYTES_BEFORE_DECOMPRESSION = 2,
34 BYTES_AFTER_DECOMPRESSION = 3,
37 enum class CompressionCounterType {
43 * This functions is an extension point when FOLLY_HAVE_WEAK_SYMBOLS is true.
44 * There is a default no-op implementation provided which can be overrided by
45 * linking in a library which provides its own definition.
47 * @param codecType The type of the codec for this counter.
48 * @param codecName The name of the codec for this counter. If the codecName
49 * is empty it should be defaulted using the codecType.
50 * @param level Optionally the level used to construct the codec.
51 * @param key The key of the counter.
52 * @param counterType The type of the counter.
53 * @returns A function to increment the counter for the given key and
54 * type. It may be an empty folly::Function.
56 folly::Function<void(double)> makeCompressionCounterHandler(
57 folly::io::CodecType codecType,
58 folly::StringPiece codecName,
59 folly::Optional<int> level,
60 CompressionCounterKey key,
61 CompressionCounterType counterType);
65 /// Wrapper around the makeCompressionCounterHandler() extension point.
66 class CompressionCounter {
68 CompressionCounter() {}
70 folly::io::CodecType codecType,
71 folly::StringPiece codecName,
72 folly::Optional<int> level,
73 CompressionCounterKey key,
74 CompressionCounterType counterType) {
75 increment_ = makeCompressionCounterHandler(
76 codecType, codecName, std::move(level), key, counterType);
79 void operator+=(double sum) {
89 void operator++(int) {
93 bool hasImplementation() const {
94 return static_cast<bool>(increment_);
98 folly::Function<void(double)> increment_;
101 } // namespace detail