| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | 
							- // Copyright 2016 The Chromium Authors. All rights reserved.
 
- // Use of this source code is governed by a BSD-style license that can be
 
- // found in the LICENSE file.
 
- // PersistentSampleMap implements HistogramSamples interface. It is used
 
- // by the SparseHistogram class to store samples in persistent memory which
 
- // allows it to be shared between processes or live across restarts.
 
- #ifndef BASE_METRICS_PERSISTENT_SAMPLE_MAP_H_
 
- #define BASE_METRICS_PERSISTENT_SAMPLE_MAP_H_
 
- #include <stdint.h>
 
- #include <map>
 
- #include <memory>
 
- #include "base/compiler_specific.h"
 
- #include "base/macros.h"
 
- #include "base/metrics/histogram_base.h"
 
- #include "base/metrics/histogram_samples.h"
 
- #include "base/metrics/persistent_memory_allocator.h"
 
- namespace base {
 
- class PersistentHistogramAllocator;
 
- class PersistentSampleMapRecords;
 
- // The logic here is similar to that of SampleMap but with different data
 
- // structures. Changes here likely need to be duplicated there.
 
- class BASE_EXPORT PersistentSampleMap : public HistogramSamples {
 
-  public:
 
-   // Constructs a persistent sample map using a PersistentHistogramAllocator
 
-   // as the data source for persistent records.
 
-   PersistentSampleMap(uint64_t id,
 
-                       PersistentHistogramAllocator* allocator,
 
-                       Metadata* meta);
 
-   ~PersistentSampleMap() override;
 
-   // HistogramSamples:
 
-   void Accumulate(HistogramBase::Sample value,
 
-                   HistogramBase::Count count) override;
 
-   HistogramBase::Count GetCount(HistogramBase::Sample value) const override;
 
-   HistogramBase::Count TotalCount() const override;
 
-   std::unique_ptr<SampleCountIterator> Iterator() const override;
 
-   // Uses a persistent-memory |iterator| to locate and return information about
 
-   // the next record holding information for a PersistentSampleMap. The record
 
-   // could be for any Map so return the |sample_map_id| as well.
 
-   static PersistentMemoryAllocator::Reference GetNextPersistentRecord(
 
-       PersistentMemoryAllocator::Iterator& iterator,
 
-       uint64_t* sample_map_id);
 
-   // Creates a new record in an |allocator| storing count information for a
 
-   // specific sample |value| of a histogram with the given |sample_map_id|.
 
-   static PersistentMemoryAllocator::Reference CreatePersistentRecord(
 
-       PersistentMemoryAllocator* allocator,
 
-       uint64_t sample_map_id,
 
-       HistogramBase::Sample value);
 
-  protected:
 
-   // Performs arithemetic. |op| is ADD or SUBTRACT.
 
-   bool AddSubtractImpl(SampleCountIterator* iter, Operator op) override;
 
-   // Gets a pointer to a "count" corresponding to a given |value|. Returns NULL
 
-   // if sample does not exist.
 
-   HistogramBase::Count* GetSampleCountStorage(HistogramBase::Sample value);
 
-   // Gets a pointer to a "count" corresponding to a given |value|, creating
 
-   // the sample (initialized to zero) if it does not already exists.
 
-   HistogramBase::Count* GetOrCreateSampleCountStorage(
 
-       HistogramBase::Sample value);
 
-  private:
 
-   // Gets the object that manages persistent records. This returns the
 
-   // |records_| member after first initializing it if necessary.
 
-   PersistentSampleMapRecords* GetRecords();
 
-   // Imports samples from persistent memory by iterating over all sample
 
-   // records found therein, adding them to the sample_counts_ map. If a
 
-   // count for the sample |until_value| is found, stop the import and return
 
-   // a pointer to that counter. If that value is not found, null will be
 
-   // returned after all currently available samples have been loaded. Pass
 
-   // true for |import_everything| to force the importing of all available
 
-   // samples even if a match is found.
 
-   HistogramBase::Count* ImportSamples(HistogramBase::Sample until_value,
 
-                                       bool import_everything);
 
-   // All created/loaded sample values and their associated counts. The storage
 
-   // for the actual Count numbers is owned by the |records_| object and its
 
-   // underlying allocator.
 
-   std::map<HistogramBase::Sample, HistogramBase::Count*> sample_counts_;
 
-   // The allocator that manages histograms inside persistent memory. This is
 
-   // owned externally and is expected to live beyond the life of this object.
 
-   PersistentHistogramAllocator* allocator_;
 
-   // The object that manages sample records inside persistent memory. This is
 
-   // owned by the |allocator_| object (above) and so, like it, is expected to
 
-   // live beyond the life of this object. This value is lazily-initialized on
 
-   // first use via the GetRecords() accessor method.
 
-   PersistentSampleMapRecords* records_ = nullptr;
 
-   DISALLOW_COPY_AND_ASSIGN(PersistentSampleMap);
 
- };
 
- }  // namespace base
 
- #endif  // BASE_METRICS_PERSISTENT_SAMPLE_MAP_H_
 
 
  |