diff options
author | kaiwang@chromium.org <kaiwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-11 21:52:44 +0000 |
---|---|---|
committer | kaiwang@chromium.org <kaiwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-11 21:52:44 +0000 |
commit | c50c21d07c17ade9e6a9b0a67eb505bea7bb8134 (patch) | |
tree | fc064c9b90ea4bbf97f016a0028e60d9b3cb9fb3 /base/metrics/sparse_histogram.cc | |
parent | 02e33f8aea28a9ca82c87acb422d3fcceb1f9888 (diff) | |
download | chromium_src-c50c21d07c17ade9e6a9b0a67eb505bea7bb8134.zip chromium_src-c50c21d07c17ade9e6a9b0a67eb505bea7bb8134.tar.gz chromium_src-c50c21d07c17ade9e6a9b0a67eb505bea7bb8134.tar.bz2 |
Serialize/Deserialize support in HistogramBase
BUG=139612,167343
Review URL: https://chromiumcodereview.appspot.com/11682003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@176449 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/metrics/sparse_histogram.cc')
-rw-r--r-- | base/metrics/sparse_histogram.cc | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/base/metrics/sparse_histogram.cc b/base/metrics/sparse_histogram.cc index 169037d..c64f7cb 100644 --- a/base/metrics/sparse_histogram.cc +++ b/base/metrics/sparse_histogram.cc @@ -6,6 +6,7 @@ #include "base/metrics/sample_map.h" #include "base/metrics/statistics_recorder.h" +#include "base/pickle.h" #include "base/synchronization/lock.h" using std::map; @@ -39,23 +40,27 @@ bool SparseHistogram::HasConstructionArguments(Sample minimum, void SparseHistogram::Add(Sample value) { base::AutoLock auto_lock(lock_); - sample_counts_[value]++; - redundant_count_ += 1; + samples_.Accumulate(value, 1); } scoped_ptr<HistogramSamples> SparseHistogram::SnapshotSamples() const { scoped_ptr<SampleMap> snapshot(new SampleMap()); base::AutoLock auto_lock(lock_); - for(map<Sample, Count>::const_iterator it = sample_counts_.begin(); - it != sample_counts_.end(); - ++it) { - snapshot->Accumulate(it->first, it->second); - } - snapshot->ResetRedundantCount(redundant_count_); + snapshot->Add(samples_); return snapshot.PassAs<HistogramSamples>(); } +void SparseHistogram::AddSamples(const HistogramSamples& samples) { + base::AutoLock auto_lock(lock_); + samples_.Add(samples); +} + +bool SparseHistogram::AddSamplesFromPickle(PickleIterator* iter) { + base::AutoLock auto_lock(lock_); + return samples_.AddFromPickle(iter); +} + void SparseHistogram::WriteHTMLGraph(string* output) const { // TODO(kaiwang): Implement. } @@ -64,9 +69,26 @@ void SparseHistogram::WriteAscii(string* output) const { // TODO(kaiwang): Implement. } +bool SparseHistogram::SerializeInfoImpl(Pickle* pickle) const { + return pickle->WriteString(histogram_name()) && pickle->WriteInt(flags()); +} + SparseHistogram::SparseHistogram(const string& name) - : HistogramBase(name), - redundant_count_(0) {} + : HistogramBase(name) {} + +HistogramBase* SparseHistogram::DeserializeInfoImpl(PickleIterator* iter) { + string histogram_name; + int flags; + if (!iter->ReadString(&histogram_name) || !iter->ReadInt(&flags)) { + DLOG(ERROR) << "Pickle error decoding Histogram: " << histogram_name; + return NULL; + } + + DCHECK(flags & HistogramBase::kIPCSerializationSourceFlag); + flags &= ~HistogramBase::kIPCSerializationSourceFlag; + + return SparseHistogram::FactoryGet(histogram_name, flags); +} void SparseHistogram::GetParameters(DictionaryValue* params) const { // TODO(kaiwang): Implement. (See HistogramBase::WriteJSON.) |