Index: base/metrics/statistics_recorder.h |
diff --git a/base/metrics/statistics_recorder.h b/base/metrics/statistics_recorder.h |
index 5771abcbf3016219926c979444792eb33c35bdeb..8ff7141f0bc2709e645e060d2d5f493eece35fd7 100644 |
--- a/base/metrics/statistics_recorder.h |
+++ b/base/metrics/statistics_recorder.h |
@@ -28,9 +28,40 @@ class BucketRanges; |
class Lock; |
class BASE_EXPORT StatisticsRecorder { |
+ // We keep all registered histograms in a map, indexed by the hash of the |
+ // name of the histogram. |
+ typedef std::map<uint64_t, HistogramBase*> HistogramMap; |
+ |
public: |
typedef std::vector<HistogramBase*> Histograms; |
+ // A class for iterating over the histograms held within this global resource. |
+ class BASE_EXPORT HistogramIterator { |
+ public: |
+ HistogramIterator(HistogramMap::iterator iter, bool include_persistent) |
+ : iter_(iter), |
+ include_persistent_(include_persistent) {} |
+ |
+ HistogramIterator& operator++(); |
+ HistogramIterator operator++(int) { |
+ HistogramIterator tmp(*this); |
+ operator++(); |
+ return tmp; |
+ } |
+ |
+ bool operator==(const HistogramIterator& rhs) const { |
+ return iter_ == rhs.iter_; |
+ } |
+ bool operator!=(const HistogramIterator& rhs) const { |
+ return iter_ != rhs.iter_; |
+ } |
+ HistogramBase* operator*() { return iter_->second; } |
+ |
+ private: |
+ HistogramMap::iterator iter_; |
+ const bool include_persistent_; |
+ }; |
+ |
// Initializes the StatisticsRecorder system. Safe to call multiple times. |
static void Initialize(); |
@@ -70,6 +101,10 @@ class BASE_EXPORT StatisticsRecorder { |
// safe. It returns NULL if a matching histogram is not found. |
static HistogramBase* FindHistogram(const std::string& name); |
+ // Support for iterating over known histograms. |
+ static HistogramIterator begin(bool include_persistent); |
+ static HistogramIterator end(); |
+ |
// GetSnapshot copies some of the pointers to registered histograms into the |
// caller supplied vector (Histograms). Only histograms which have |query| as |
// a substring are copied (an empty string will process all registered |
@@ -95,10 +130,6 @@ class BASE_EXPORT StatisticsRecorder { |
static OnSampleCallback FindCallback(const std::string& histogram_name); |
private: |
- // We keep all registered histograms in a map, indexed by the hash of the |
- // name of the histogram. |
- typedef std::map<uint64_t, HistogramBase*> HistogramMap; |
- |
// We keep a map of callbacks to histograms, so that as histograms are |
// created, we can set the callback properly. |
typedef std::map<std::string, OnSampleCallback> CallbackMap; |
@@ -113,6 +144,7 @@ class BASE_EXPORT StatisticsRecorder { |
friend class HistogramSnapshotManagerTest; |
friend class HistogramTest; |
friend class JsonPrefStoreTest; |
+ friend class SharedHistogramTest; |
friend class SparseHistogramTest; |
friend class StatisticsRecorderTest; |
FRIEND_TEST_ALL_PREFIXES(HistogramDeltaSerializationTest, |