Index: components/metrics/metrics_service.h |
diff --git a/components/metrics/metrics_service.h b/components/metrics/metrics_service.h |
index 8d81484da9896ad8c643930db52730da2b8b3a1b..3b71571f183b77103fb63f69588ff17cf8f89c2b 100644 |
--- a/components/metrics/metrics_service.h |
+++ b/components/metrics/metrics_service.h |
@@ -9,6 +9,7 @@ |
#define COMPONENTS_METRICS_METRICS_SERVICE_H_ |
#include <map> |
+#include <set> |
#include <string> |
#include <vector> |
@@ -104,6 +105,8 @@ class MetricsService : public base::HistogramFlattener { |
SHUTDOWN_COMPLETE = 700, |
}; |
+ typedef std::set<base::HistogramBase*> HistogramSet; |
+ |
// Creates the MetricsService with the given |state_manager|, |client|, and |
// |local_state|. Does not take ownership of the paramaters; instead stores |
// a weak pointer to each. Caller should ensure that the parameters are valid |
@@ -296,21 +299,14 @@ class MetricsService : public base::HistogramFlattener { |
// A class for iterating over the histograms in persistent memory segments. |
class PersistentHistogramIterator { |
- // This class provides a reference-counted pointer to a histogram which |
- // is necessary for histogram objects that are dynamically generated |
- // (generally pointing to persistent memory) and to be owned by an STL |
- // iterator which, by necessity, must be copyable. |
- class HistogramPointer : public base::RefCounted<HistogramPointer> { |
- public: |
- HistogramPointer(base::HistogramBase* h) : histogram_(h) {} |
- base::HistogramBase* get() { return histogram_.get(); } |
- |
- private: |
- scoped_ptr<base::HistogramBase> histogram_; |
- }; |
- |
public: |
- PersistentHistogramIterator(AllocatorSet& allocators, |
+ // The |found_histograms| set will be loaded with pointers to all the |
+ // histograms found during iteration. This is important because users |
+ // of the iterator may expect the returned histograms to live longer |
+ // than a particular iteration step. The caller must delete these |
+ // if necessary. |
+ PersistentHistogramIterator(HistogramSet* found_histograms, |
+ AllocatorSet& allocators, |
AllocatorSet::iterator pos); |
PersistentHistogramIterator& operator++(); |
@@ -329,7 +325,7 @@ class MetricsService : public base::HistogramFlattener { |
histogram_iter_ != rhs.histogram_iter_; |
} |
base::HistogramBase* operator*() { |
- return current_histogram_->get(); |
+ return current_histogram_; |
} |
private: |
@@ -337,9 +333,8 @@ class MetricsService : public base::HistogramFlattener { |
AllocatorSet::iterator allocator_iter_; |
base::PersistentMemoryAllocator::Iterator histogram_iter_; |
- // STL iterators must be copyable so a regular scoped_ptr is not |
- // sufficient as it doesn't allow such. A ref-counted one is needed. |
- scoped_refptr<HistogramPointer> current_histogram_; |
+ HistogramSet* found_histograms_; |
+ base::HistogramBase* current_histogram_; |
}; |
typedef std::vector<SyntheticTrialGroup> SyntheticTrialGroups; |
@@ -483,7 +478,7 @@ class MetricsService : public base::HistogramFlattener { |
void SkipAndDiscardUpload(); |
// Begin and End iterators for going through all the metrics under management. |
- PersistentHistogramIterator persistent_begin(); |
+ PersistentHistogramIterator persistent_begin(HistogramSet* found); |
PersistentHistogramIterator persistent_end(); |
// Manager for the various in-flight logs. |