1*6777b538SAndroid Build Coastguard Worker // Copyright 2017 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef COMPONENTS_METRICS_EXPIRED_HISTOGRAMS_CHECKER_H_ 6*6777b538SAndroid Build Coastguard Worker #define COMPONENTS_METRICS_EXPIRED_HISTOGRAMS_CHECKER_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 9*6777b538SAndroid Build Coastguard Worker #include <set> 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #include "base/containers/span.h" 12*6777b538SAndroid Build Coastguard Worker #include "base/metrics/record_histogram_checker.h" 13*6777b538SAndroid Build Coastguard Worker #include "base/strings/string_piece.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace metrics { 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker // ExpiredHistogramsChecker implements RecordHistogramChecker interface 18*6777b538SAndroid Build Coastguard Worker // to avoid recording expired metrics. 19*6777b538SAndroid Build Coastguard Worker class ExpiredHistogramsChecker final : public base::RecordHistogramChecker { 20*6777b538SAndroid Build Coastguard Worker public: 21*6777b538SAndroid Build Coastguard Worker // Takes a sorted array of histogram hashes in ascending order and a 22*6777b538SAndroid Build Coastguard Worker // list of explicitly allowed histogram names as a comma-separated string. 23*6777b538SAndroid Build Coastguard Worker // Histograms in the |allowlist_str| are logged even if their hash is in the 24*6777b538SAndroid Build Coastguard Worker // |expired_histograms_hashes|. 25*6777b538SAndroid Build Coastguard Worker ExpiredHistogramsChecker(base::span<const uint32_t> expired_histogram_hashes, 26*6777b538SAndroid Build Coastguard Worker const std::string& allowlist_str); 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Worker ExpiredHistogramsChecker(const ExpiredHistogramsChecker&) = delete; 29*6777b538SAndroid Build Coastguard Worker ExpiredHistogramsChecker& operator=(const ExpiredHistogramsChecker&) = delete; 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker ~ExpiredHistogramsChecker() override; 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker // Checks if the given |histogram_hash| corresponds to an expired histogram. 34*6777b538SAndroid Build Coastguard Worker bool ShouldRecord(uint32_t histogram_hash) const override; 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker private: 37*6777b538SAndroid Build Coastguard Worker // Initializes the |allowlist_| array of histogram hashes that should be 38*6777b538SAndroid Build Coastguard Worker // recorded regardless of their expiration. 39*6777b538SAndroid Build Coastguard Worker void InitAllowlist(const std::string& allowlist_str); 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker // Array of expired histogram hashes. 42*6777b538SAndroid Build Coastguard Worker const base::span<const uint32_t> expired_histogram_hashes_; 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Worker // Set of expired histogram hashes that should be recorded. 45*6777b538SAndroid Build Coastguard Worker std::set<uint32_t> allowlist_; 46*6777b538SAndroid Build Coastguard Worker }; 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard Worker } // namespace metrics 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Worker #endif // COMPONENTS_METRICS_EXPIRED_HISTOGRAMS_CHECKER_H_ 51