Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2994)

Unified Diff: base/metrics/persistent_histogram_allocator.h

Issue 1803253002: Improved iterator for persistent memory allocator. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@refactor-hp
Patch Set: rebased and fixed up a bit Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/metrics/persistent_histogram_allocator.h
diff --git a/base/metrics/persistent_histogram_allocator.h b/base/metrics/persistent_histogram_allocator.h
index cc8d0233d3d337456651fe9ae9cdadca82d22f0f..527e19c4c5cb1207724740a4e30fba9e559b738b 100644
--- a/base/metrics/persistent_histogram_allocator.h
+++ b/base/metrics/persistent_histogram_allocator.h
@@ -22,19 +22,36 @@ 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 {
+ 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(); }
+ Iterator(PersistentHistogramAllocator* allocator);
Ilya Sherman 2016/03/24 02:03:58 nit: explicit
Ilya Sherman 2016/03/24 02:03:58 nit: Please document lifetime expectations for the
bcwhite 2016/03/24 14:22:34 Done.
bcwhite 2016/03/24 14:22:34 Done.
+
+ // Gets the next histogram from persistent memory. Null will be returned
+ // if there are no more histograms to return. This may still be called
Ilya Sherman 2016/03/24 02:03:58 Optional nit: s/Null will be returned/Returns null
bcwhite 2016/03/24 14:22:34 Done.
+ // again later to retrieve any new histograms added in the meantime.
+ scoped_ptr<HistogramBase> GetNext() { return GetNextWithIgnore(0); }
private:
friend class PersistentHistogramAllocator;
- // The iterator used for stepping through persistent memory iterables.
- PersistentMemoryAllocator::Iterator memory_iter;
- };
+ // Gets the next histogram from persistent memory, ignoring one particular
+ // reference in the process. Pass |ignore| of zero (0) to ignore nothing.
+ scoped_ptr<HistogramBase> GetNextWithIgnore(Reference ignore);
- using Reference = PersistentMemoryAllocator::Reference;
+ // Weak-pointer to histogram allocator being iterated over.
+ PersistentHistogramAllocator* allocator_;
+
+ // The iterator used for stepping through objects in persistent memory.
+ // It is lock-free and thread-safe which is why this class is also so.
+ PersistentMemoryAllocator::Iterator memory_iter_;
+
+ DISALLOW_COPY_AND_ASSIGN(Iterator);
+ };
// A PersistentHistogramAllocator is constructed from a PersistentMemory-
// Allocator object of which it takes ownership.
@@ -63,14 +80,6 @@ class BASE_EXPORT PersistentHistogramAllocator {
// This method will return null if any problem is detected with the data.
scoped_ptr<HistogramBase> GetHistogram(Reference ref);
- // Get the next histogram in persistent data based on iterator.
- scoped_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".
scoped_ptr<HistogramBase> AllocateHistogram(
« no previous file with comments | « no previous file | base/metrics/persistent_histogram_allocator.cc » ('j') | base/metrics/persistent_histogram_allocator.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698