// Copyright 2021 The Abseil Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef ABSL_STRINGS_INTERNAL_CORDZ_UPDATE_TRACKER_H_ #define ABSL_STRINGS_INTERNAL_CORDZ_UPDATE_TRACKER_H_ #include <atomic> #include <cstdint> #include "absl/base/config.h" namespace absl { ABSL_NAMESPACE_BEGIN namespace cord_internal { // CordzUpdateTracker tracks counters for Cord update methods. // // The purpose of CordzUpdateTracker is to track the number of calls to methods // updating Cord data for sampled cords. The class internally uses 'lossy' // atomic operations: Cord is thread-compatible, so there is no need to // synchronize updates. However, Cordz collection threads may call 'Value()' at // any point, so the class needs to provide thread safe access. // // This class is thread-safe. But as per above comments, all non-const methods // should be used single-threaded only: updates are thread-safe but lossy. class CordzUpdateTracker { … }; } // namespace cord_internal ABSL_NAMESPACE_END } // namespace absl #endif // ABSL_STRINGS_INTERNAL_CORDZ_UPDATE_TRACKER_H_