summaryrefslogtreecommitdiffstats
path: root/base/metrics/sparse_histogram.cc
diff options
context:
space:
mode:
authorkaiwang@chromium.org <kaiwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-11 21:52:44 +0000
committerkaiwang@chromium.org <kaiwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-11 21:52:44 +0000
commitc50c21d07c17ade9e6a9b0a67eb505bea7bb8134 (patch)
treefc064c9b90ea4bbf97f016a0028e60d9b3cb9fb3 /base/metrics/sparse_histogram.cc
parent02e33f8aea28a9ca82c87acb422d3fcceb1f9888 (diff)
downloadchromium_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.cc42
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.)