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

Unified Diff: base/metrics/histogram.h

Issue 11682003: Serialize/Deserialize support in HistogramBase (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years 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/histogram.h
diff --git a/base/metrics/histogram.h b/base/metrics/histogram.h
index 24585b7ab1dee6679106c85aff17dea87ed46b14..56b01307d1aa223e9f1fecb64ea3ed4af0f5caab 100644
--- a/base/metrics/histogram.h
+++ b/base/metrics/histogram.h
@@ -371,11 +371,6 @@ class BASE_EXPORT Histogram : public HistogramBase {
NEVER_EXCEEDED_VALUE = 0x10
};
- struct DescriptionPair {
- Sample sample;
- const char* description; // Null means end of a list of pairs.
- };
-
//----------------------------------------------------------------------------
// For a valid histogram, input should follow these restrictions:
// minimum > 0 (if a minimum below 1 is specified, it will implicitly be
@@ -414,25 +409,6 @@ class BASE_EXPORT Histogram : public HistogramBase {
Add(static_cast<int>(time.InMilliseconds()));
}
- void AddSamples(const HistogramSamples& samples);
- bool AddSamplesFromPickle(PickleIterator* iter);
-
- // Convenience methods for serializing/deserializing the histograms.
- // Histograms from Renderer process are serialized and sent to the browser.
- // Browser process reconstructs the histogram from the pickled version
- // accumulates the browser-side shadow copy of histograms (that mirror
- // histograms created in the renderer).
-
- // Serialize the given snapshot of a Histogram into a String. Uses
- // Pickle class to flatten the object.
- static std::string SerializeHistogramInfo(const Histogram& histogram,
- const HistogramSamples& snapshot);
-
- // The following method accepts a list of pickled histograms and
- // builds a histogram and updates shadow copy of histogram data in the
- // browser process.
- static bool DeserializeHistogramInfo(const std::string& histogram_info);
-
// This constant if for FindCorruption. Since snapshots of histograms are
// taken asynchronously relative to sampling, and our counting code currently
// does not prevent race conditions, it is pretty likely that we'll catch a
@@ -476,6 +452,8 @@ class BASE_EXPORT Histogram : public HistogramBase {
size_t bucket_count) const OVERRIDE;
virtual void Add(Sample value) OVERRIDE;
virtual scoped_ptr<HistogramSamples> SnapshotSamples() const OVERRIDE;
+ virtual void AddSamples(const HistogramSamples& samples) OVERRIDE;
+ virtual bool AddSamplesFromPickle(PickleIterator* iter) OVERRIDE;
virtual void WriteHTMLGraph(std::string* output) const OVERRIDE;
virtual void WriteAscii(std::string* output) const OVERRIDE;
@@ -490,11 +468,8 @@ class BASE_EXPORT Histogram : public HistogramBase {
virtual ~Histogram();
- // Serialize the histogram's ranges to |*pickle|, returning true on success.
- // Most subclasses can leave this no-op implementation, but some will want to
- // override it, especially if the ranges cannot be re-derived from other
- // serialized parameters.
- virtual bool SerializeRanges(Pickle* pickle) const;
+ // HistogramBase implementation:
+ virtual bool SerializeInfoImpl(Pickle* pickle) const OVERRIDE;
// Method to override to skip the display of the i'th bucket if it's empty.
virtual bool PrintEmptyBucket(size_t index) const;
@@ -517,6 +492,10 @@ class BASE_EXPORT Histogram : public HistogramBase {
friend class StatisticsRecorder; // To allow it to delete duplicates.
friend class StatisticsRecorderTest;
+ friend HistogramBase* HistogramBase::DeserializeHistogramInfo(
+ PickleIterator* iter);
Ilya Sherman 2012/12/29 00:17:30 Why does HistogramBase need to know about the Hist
kaiwang 2013/01/08 00:51:40 I need a function to know all kind of histograms t
Ilya Sherman 2013/01/08 22:31:53 If you keep roughly the current design, I'd prefer
+
+ static HistogramBase* DeserializeHistogramInfo(PickleIterator* iter);
// Implementation of SnapshotSamples function.
scoped_ptr<SampleVector> SnapshotSampleVector() const;
@@ -597,6 +576,10 @@ class BASE_EXPORT LinearHistogram : public Histogram {
// |descriptions| can be NULL, which means no special descriptions to set. If
// it's not NULL, the last element in the array must has a NULL in its
// "description" field.
+ struct DescriptionPair {
+ Sample sample;
+ const char* description; // Null means end of a list of pairs.
+ };
Ilya Sherman 2012/12/29 00:17:30 nit: Please move this to be above the comment that
kaiwang 2013/01/08 00:51:40 Done.
static Histogram* FactoryGetWithRangeDescription(
const std::string& name,
Sample minimum,
@@ -631,6 +614,10 @@ class BASE_EXPORT LinearHistogram : public Histogram {
virtual bool PrintEmptyBucket(size_t index) const OVERRIDE;
private:
+ friend HistogramBase* HistogramBase::DeserializeHistogramInfo(
+ PickleIterator* iter);
+ static HistogramBase* DeserializeHistogramInfo(PickleIterator* iter);
+
// For some ranges, we store a printable description of a bucket range.
// If there is no desciption, then GetAsciiBucketRange() uses parent class
// to provide a description.
@@ -654,6 +641,10 @@ class BASE_EXPORT BooleanHistogram : public LinearHistogram {
private:
BooleanHistogram(const std::string& name, const BucketRanges* ranges);
+ friend HistogramBase* HistogramBase::DeserializeHistogramInfo(
+ PickleIterator* iter);
+ static HistogramBase* DeserializeHistogramInfo(PickleIterator* iter);
+
DISALLOW_COPY_AND_ASSIGN(BooleanHistogram);
};
@@ -681,20 +672,20 @@ class BASE_EXPORT CustomHistogram : public Histogram {
// TODO(kaiwang): Change name to ArrayToCustomEnumRanges.
static std::vector<Sample> ArrayToCustomRanges(const Sample* values,
size_t num_values);
-
- // Helper for deserializing CustomHistograms. |*ranges| should already be
- // correctly sized before this call. Return true on success.
- static bool DeserializeRanges(PickleIterator* iter,
- std::vector<Sample>* ranges);
protected:
CustomHistogram(const std::string& name,
const BucketRanges* ranges);
- virtual bool SerializeRanges(Pickle* pickle) const OVERRIDE;
+ // HistogramBase implementation:
+ virtual bool SerializeInfoImpl(Pickle* pickle) const OVERRIDE;
virtual double GetBucketSize(Count current, size_t i) const OVERRIDE;
private:
+ friend HistogramBase* HistogramBase::DeserializeHistogramInfo(
+ PickleIterator* iter);
+ static HistogramBase* DeserializeHistogramInfo(PickleIterator* iter);
+
static bool ValidateCustomRanges(const std::vector<Sample>& custom_ranges);
static BucketRanges* CreateBucketRangesFromCustomRanges(
const std::vector<Sample>& custom_ranges);
« no previous file with comments | « base/base.gyp ('k') | base/metrics/histogram.cc » ('j') | base/metrics/histogram.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698