summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
authorkaiwang@chromium.org <kaiwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-20 02:56:18 +0000
committerkaiwang@chromium.org <kaiwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-20 02:56:18 +0000
commit877ef565f44adf4aca389d2a738d80f246947219 (patch)
treeb90b8d68c43ee0573b767226775c08693c843a14 /base
parent1adefead3eb81b0fb5b3ca47a1e7ff3a1df8f352 (diff)
downloadchromium_src-877ef565f44adf4aca389d2a738d80f246947219.zip
chromium_src-877ef565f44adf4aca389d2a738d80f246947219.tar.gz
chromium_src-877ef565f44adf4aca389d2a738d80f246947219.tar.bz2
Move SnapshotSamples to HistogramBase
BUG=139612 Review URL: https://chromiumcodereview.appspot.com/11192077 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@163138 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rw-r--r--base/metrics/histogram.cc17
-rw-r--r--base/metrics/histogram.h10
-rw-r--r--base/metrics/histogram_base.h5
-rw-r--r--base/metrics/histogram_unittest.cc10
-rw-r--r--base/metrics/sparse_histogram.cc5
-rw-r--r--base/metrics/sparse_histogram.h5
-rw-r--r--base/metrics/sparse_histogram_unittest.cc6
7 files changed, 36 insertions, 22 deletions
diff --git a/base/metrics/histogram.cc b/base/metrics/histogram.cc
index 1c5470e..ec1afdd 100644
--- a/base/metrics/histogram.cc
+++ b/base/metrics/histogram.cc
@@ -17,6 +17,7 @@
#include "base/compiler_specific.h"
#include "base/debug/alias.h"
#include "base/logging.h"
+#include "base/metrics/sample_vector.h"
#include "base/metrics/statistics_recorder.h"
#include "base/pickle.h"
#include "base/string_util.h"
@@ -366,10 +367,8 @@ size_t Histogram::bucket_count() const {
return bucket_count_;
}
-scoped_ptr<SampleVector> Histogram::SnapshotSamples() const {
- scoped_ptr<SampleVector> samples(new SampleVector(bucket_ranges()));
- samples->Add(*samples_);
- return samples.Pass();
+scoped_ptr<HistogramSamples> Histogram::SnapshotSamples() const {
+ return SnapshotSampleVector().PassAs<HistogramSamples>();
}
bool Histogram::HasConstructionArguments(Sample minimum,
@@ -464,12 +463,18 @@ const string Histogram::GetAsciiBucketRange(size_t i) const {
//------------------------------------------------------------------------------
// Private methods
+scoped_ptr<SampleVector> Histogram::SnapshotSampleVector() const {
+ scoped_ptr<SampleVector> samples(new SampleVector(bucket_ranges()));
+ samples->Add(*samples_);
+ return samples.Pass();
+}
+
void Histogram::WriteAsciiImpl(bool graph_it,
const string& newline,
string* output) const {
// Get local (stack) copies of all effectively volatile class data so that we
// are consistent across our output activities.
- scoped_ptr<SampleVector> snapshot = SnapshotSamples();
+ scoped_ptr<SampleVector> snapshot = SnapshotSampleVector();
Count sample_count = snapshot->TotalCount();
WriteAsciiHeader(*snapshot, sample_count, output);
@@ -601,7 +606,7 @@ void Histogram::GetParameters(DictionaryValue* params) const {
}
void Histogram::GetCountAndBucketData(Count* count, ListValue* buckets) const {
- scoped_ptr<SampleVector> snapshot = SnapshotSamples();
+ scoped_ptr<SampleVector> snapshot = SnapshotSampleVector();
*count = snapshot->TotalCount();
size_t index = 0;
for (size_t i = 0; i < bucket_count(); ++i) {
diff --git a/base/metrics/histogram.h b/base/metrics/histogram.h
index 338498d..f3007a2 100644
--- a/base/metrics/histogram.h
+++ b/base/metrics/histogram.h
@@ -72,7 +72,6 @@
#include "base/metrics/bucket_ranges.h"
#include "base/metrics/histogram_base.h"
#include "base/metrics/histogram_samples.h"
-#include "base/metrics/sample_vector.h"
#include "base/time.h"
class Pickle;
@@ -481,7 +480,7 @@ class BASE_EXPORT Histogram : public HistogramBase {
// Snapshot the current complete set of sample data.
// Override with atomic/locked snapshot if needed.
- virtual scoped_ptr<SampleVector> SnapshotSamples() const;
+ virtual scoped_ptr<HistogramSamples> SnapshotSamples() const OVERRIDE;
virtual bool HasConstructionArguments(Sample minimum,
Sample maximum,
@@ -527,14 +526,17 @@ class BASE_EXPORT Histogram : public HistogramBase {
private:
// Allow tests to corrupt our innards for testing purposes.
+ FRIEND_TEST_ALL_PREFIXES(HistogramTest, BoundsTest);
+ FRIEND_TEST_ALL_PREFIXES(HistogramTest, BucketPlacementTest);
FRIEND_TEST_ALL_PREFIXES(HistogramTest, CorruptBucketBounds);
FRIEND_TEST_ALL_PREFIXES(HistogramTest, CorruptSampleCounts);
- FRIEND_TEST_ALL_PREFIXES(HistogramTest, Crc32SampleHash);
- FRIEND_TEST_ALL_PREFIXES(HistogramTest, Crc32TableTest);
friend class StatisticsRecorder; // To allow it to delete duplicates.
friend class StatisticsRecorderTest;
+ // Implementation of SnapshotSamples function.
+ scoped_ptr<SampleVector> SnapshotSampleVector() const;
+
//----------------------------------------------------------------------------
// Helpers for emitting Ascii graphic. Each method appends data to output.
diff --git a/base/metrics/histogram_base.h b/base/metrics/histogram_base.h
index 44cc239..211606a 100644
--- a/base/metrics/histogram_base.h
+++ b/base/metrics/histogram_base.h
@@ -9,12 +9,15 @@
#include "base/base_export.h"
#include "base/basictypes.h"
+#include "base/memory/scoped_ptr.h"
namespace base {
class DictionaryValue;
class ListValue;
+class HistogramSamples;
+
class BASE_EXPORT HistogramBase {
public:
typedef int Sample; // Used for samples.
@@ -50,6 +53,8 @@ class BASE_EXPORT HistogramBase {
virtual void Add(Sample value) = 0;
+ virtual scoped_ptr<HistogramSamples> SnapshotSamples() const = 0;
+
// The following methods provide graphical histogram displays.
virtual void WriteHTMLGraph(std::string* output) const = 0;
virtual void WriteAscii(std::string* output) const = 0;
diff --git a/base/metrics/histogram_unittest.cc b/base/metrics/histogram_unittest.cc
index f016487..99f75a5 100644
--- a/base/metrics/histogram_unittest.cc
+++ b/base/metrics/histogram_unittest.cc
@@ -208,7 +208,7 @@ TEST(HistogramTest, BoundsTest) {
histogram->Add(10000);
// Verify they landed in the underflow, and overflow buckets.
- scoped_ptr<SampleVector> samples = histogram->SnapshotSamples();
+ scoped_ptr<SampleVector> samples = histogram->SnapshotSampleVector();
EXPECT_EQ(2, samples->GetCountAtIndex(0));
EXPECT_EQ(0, samples->GetCountAtIndex(1));
size_t array_size = histogram->bucket_count();
@@ -232,7 +232,7 @@ TEST(HistogramTest, BoundsTest) {
// Verify they landed in the underflow, and overflow buckets.
scoped_ptr<SampleVector> custom_samples =
- test_custom_histogram->SnapshotSamples();
+ test_custom_histogram->SnapshotSampleVector();
EXPECT_EQ(2, custom_samples->GetCountAtIndex(0));
EXPECT_EQ(0, custom_samples->GetCountAtIndex(1));
size_t bucket_count = test_custom_histogram->bucket_count();
@@ -255,7 +255,7 @@ TEST(HistogramTest, BucketPlacementTest) {
}
// Check to see that the bucket counts reflect our additions.
- scoped_ptr<SampleVector> samples = histogram->SnapshotSamples();
+ scoped_ptr<SampleVector> samples = histogram->SnapshotSampleVector();
for (int i = 0; i < 8; i++)
EXPECT_EQ(i + 1, samples->GetCountAtIndex(i));
}
@@ -268,7 +268,7 @@ TEST(HistogramTest, CorruptSampleCounts) {
histogram->Add(20);
histogram->Add(40);
- scoped_ptr<SampleVector> snapshot = histogram->SnapshotSamples();
+ scoped_ptr<SampleVector> snapshot = histogram->SnapshotSampleVector();
EXPECT_EQ(Histogram::NO_INCONSISTENCIES,
histogram->FindCorruption(*snapshot));
EXPECT_EQ(2, snapshot->redundant_count());
@@ -291,7 +291,7 @@ TEST(HistogramTest, CorruptBucketBounds) {
Histogram* histogram(Histogram::FactoryGet(
"Histogram", 1, 64, 8, Histogram::kNoFlags)); // As per header file.
- scoped_ptr<SampleVector> snapshot = histogram->SnapshotSamples();
+ scoped_ptr<SampleVector> snapshot = histogram->SnapshotSampleVector();
EXPECT_EQ(Histogram::NO_INCONSISTENCIES,
histogram->FindCorruption(*snapshot));
diff --git a/base/metrics/sparse_histogram.cc b/base/metrics/sparse_histogram.cc
index 236a19e..bb9061c 100644
--- a/base/metrics/sparse_histogram.cc
+++ b/base/metrics/sparse_histogram.cc
@@ -4,6 +4,7 @@
#include "base/metrics/sparse_histogram.h"
+#include "base/metrics/sample_map.h"
#include "base/metrics/statistics_recorder.h"
#include "base/synchronization/lock.h"
@@ -31,7 +32,7 @@ void SparseHistogram::Add(Sample value) {
redundant_count_ += 1;
}
-scoped_ptr<SampleMap> SparseHistogram::SnapshotSamples() const {
+scoped_ptr<HistogramSamples> SparseHistogram::SnapshotSamples() const {
scoped_ptr<SampleMap> snapshot(new SampleMap());
base::AutoLock auto_lock(lock_);
@@ -41,7 +42,7 @@ scoped_ptr<SampleMap> SparseHistogram::SnapshotSamples() const {
snapshot->Accumulate(it->first, it->second);
}
snapshot->ResetRedundantCount(redundant_count_);
- return snapshot.Pass();
+ return snapshot.PassAs<HistogramSamples>();
}
void SparseHistogram::WriteHTMLGraph(string* output) const {
diff --git a/base/metrics/sparse_histogram.h b/base/metrics/sparse_histogram.h
index 3c39b13..d209fd8 100644
--- a/base/metrics/sparse_histogram.h
+++ b/base/metrics/sparse_histogram.h
@@ -13,11 +13,12 @@
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "base/metrics/histogram_base.h"
-#include "base/metrics/sample_map.h"
#include "base/synchronization/lock.h"
namespace base {
+class HistogramSamples;
+
class BASE_EXPORT_PRIVATE SparseHistogram : public HistogramBase {
public:
// If there's one with same name, return the existing one. If not, create a
@@ -31,7 +32,7 @@ class BASE_EXPORT_PRIVATE SparseHistogram : public HistogramBase {
virtual void WriteHTMLGraph(std::string* output) const OVERRIDE;
virtual void WriteAscii(std::string* output) const OVERRIDE;
- virtual scoped_ptr<SampleMap> SnapshotSamples() const;
+ virtual scoped_ptr<HistogramSamples> SnapshotSamples() const OVERRIDE;
private:
// Clients should always use FactoryGet to create SparseHistogram.
diff --git a/base/metrics/sparse_histogram_unittest.cc b/base/metrics/sparse_histogram_unittest.cc
index 2fe614f..b4eb8fd 100644
--- a/base/metrics/sparse_histogram_unittest.cc
+++ b/base/metrics/sparse_histogram_unittest.cc
@@ -20,18 +20,18 @@ class SparseHistogramTest : public testing::Test {
TEST_F(SparseHistogramTest, BasicTest) {
scoped_ptr<SparseHistogram> histogram(NewSparseHistogram("Sparse1"));
- scoped_ptr<SampleMap> snapshot(histogram->SnapshotSamples());
+ scoped_ptr<HistogramSamples> snapshot(histogram->SnapshotSamples());
EXPECT_EQ(0, snapshot->TotalCount());
EXPECT_EQ(0, snapshot->sum());
histogram->Add(100);
- scoped_ptr<SampleMap> snapshot1(histogram->SnapshotSamples());
+ scoped_ptr<HistogramSamples> snapshot1(histogram->SnapshotSamples());
EXPECT_EQ(1, snapshot1->TotalCount());
EXPECT_EQ(1, snapshot1->GetCount(100));
histogram->Add(100);
histogram->Add(101);
- scoped_ptr<SampleMap> snapshot2(histogram->SnapshotSamples());
+ scoped_ptr<HistogramSamples> snapshot2(histogram->SnapshotSamples());
EXPECT_EQ(3, snapshot2->TotalCount());
EXPECT_EQ(2, snapshot2->GetCount(100));
EXPECT_EQ(1, snapshot2->GetCount(101));