Index: base/metrics/persistent_histogram_allocator.h |
diff --git a/base/metrics/persistent_histogram_allocator.h b/base/metrics/persistent_histogram_allocator.h |
index 570d5c0301458cde0ef57823d57815ad4d73de4f..12ac68500cb202c63ff8e813d6b16762022f6e85 100644 |
--- a/base/metrics/persistent_histogram_allocator.h |
+++ b/base/metrics/persistent_histogram_allocator.h |
@@ -23,19 +23,39 @@ BASE_EXPORT extern const Feature kPersistentHistogramsFeature; |
// This class manages histograms created within a PersistentMemoryAllocator. |
class BASE_EXPORT PersistentHistogramAllocator { |
public: |
- // This iterator is used for fetching persistent histograms from an allocator. |
- class Iterator { |
+ // A reference to a histogram. While this is implemented as PMA::Reference, |
+ // it is not conceptually the same thing. Outside callers should always use |
+ // a Reference matching the class it is for and not mix the two. |
+ using Reference = PersistentMemoryAllocator::Reference; |
+ |
+ // Iterator used for fetching persistent histograms from an allocator. |
+ // It is lock-free and thread-safe. |
+ // See PersistentMemoryAllocator::Iterator for more information. |
+ class BASE_EXPORT Iterator { |
public: |
- bool is_clear() { return memory_iter.is_clear(); } |
+ // Constructs an iterator on a given |allocator|, starting at the beginning. |
+ // The allocator must live beyond the lifetime of the iterator. |
+ explicit Iterator(PersistentHistogramAllocator* allocator); |
+ |
+ // Gets the next histogram from persistent memory; returns null if there |
+ // are no more histograms to be found. This may still be called again |
+ // later to retrieve any new histograms added in the meantime. |
+ std::unique_ptr<HistogramBase> GetNext() { return GetNextWithIgnore(0); } |
+ |
+ // Gets the next histogram from persistent memory, ignoring one particular |
+ // reference in the process. Pass |ignore| of zero (0) to ignore nothing. |
+ std::unique_ptr<HistogramBase> GetNextWithIgnore(Reference ignore); |
private: |
- friend class PersistentHistogramAllocator; |
+ // Weak-pointer to histogram allocator being iterated over. |
+ PersistentHistogramAllocator* allocator_; |
- // The iterator used for stepping through persistent memory iterables. |
- PersistentMemoryAllocator::Iterator memory_iter; |
- }; |
+ // The iterator used for stepping through objects in persistent memory. |
+ // It is lock-free and thread-safe which is why this class is also such. |
+ PersistentMemoryAllocator::Iterator memory_iter_; |
- using Reference = PersistentMemoryAllocator::Reference; |
+ DISALLOW_COPY_AND_ASSIGN(Iterator); |
+ }; |
// A PersistentHistogramAllocator is constructed from a PersistentMemory- |
// Allocator object of which it takes ownership. |
@@ -65,14 +85,6 @@ class BASE_EXPORT PersistentHistogramAllocator { |
// This method will return null if any problem is detected with the data. |
std::unique_ptr<HistogramBase> GetHistogram(Reference ref); |
- // Get the next histogram in persistent data based on iterator. |
- std::unique_ptr<HistogramBase> GetNextHistogram(Iterator* iter) { |
- return GetNextHistogramWithIgnore(iter, 0); |
- } |
- |
- // Create an iterator for going through all histograms in an allocator. |
- void CreateIterator(Iterator* iter); |
- |
// Allocate a new persistent histogram. The returned histogram will not |
// be able to be located by other allocators until it is "finalized". |
std::unique_ptr<HistogramBase> AllocateHistogram( |