| Index: base/histogram_unittest.cc
|
| ===================================================================
|
| --- base/histogram_unittest.cc (revision 35277)
|
| +++ base/histogram_unittest.cc (working copy)
|
| @@ -19,17 +19,15 @@
|
| // Check for basic syntax and use.
|
| TEST(HistogramTest, StartupShutdownTest) {
|
| // Try basic construction
|
| - scoped_refptr<Histogram> histogram =
|
| - Histogram::HistogramFactoryGet("TestHistogram", 1, 1000, 10);
|
| - scoped_refptr<Histogram> histogram1 =
|
| - Histogram::HistogramFactoryGet("Test1Histogram", 1, 1000, 10);
|
| + scoped_refptr<Histogram> histogram = Histogram::FactoryGet(
|
| + "TestHistogram", 1, 1000, 10, Histogram::kNoFlags);
|
| + scoped_refptr<Histogram> histogram1 = Histogram::FactoryGet(
|
| + "Test1Histogram", 1, 1000, 10, Histogram::kNoFlags);
|
|
|
| - scoped_refptr<Histogram> linear_histogram =
|
| - LinearHistogram::LinearHistogramFactoryGet("TestLinearHistogram", 1, 1000,
|
| - 10);
|
| - scoped_refptr<Histogram> linear_histogram1 =
|
| - LinearHistogram::LinearHistogramFactoryGet("Test1LinearHistogram", 1,
|
| - 1000, 10);
|
| + scoped_refptr<Histogram> linear_histogram = LinearHistogram::FactoryGet(
|
| + "TestLinearHistogram", 1, 1000, 10, Histogram::kNoFlags);
|
| + scoped_refptr<Histogram> linear_histogram1 = LinearHistogram::FactoryGet(
|
| + "Test1LinearHistogram", 1, 1000, 10, Histogram::kNoFlags);
|
|
|
| // Use standard macros (but with fixed samples)
|
| HISTOGRAM_TIMES("Test2Histogram", TimeDelta::FromDays(1));
|
| @@ -38,7 +36,7 @@
|
| DHISTOGRAM_TIMES("Test4Histogram", TimeDelta::FromDays(1));
|
| DHISTOGRAM_COUNTS("Test5Histogram", 30);
|
|
|
| - ASSET_HISTOGRAM_COUNTS("Test6Histogram", 129);
|
| + HISTOGRAM_ENUMERATION("Test6Histogram", 129, 130);
|
|
|
| // Try to construct samples.
|
| Histogram::SampleSet sample1;
|
| @@ -63,23 +61,21 @@
|
| EXPECT_EQ(0U, histograms.size());
|
|
|
| // Try basic construction
|
| - scoped_refptr<Histogram> histogram =
|
| - Histogram::HistogramFactoryGet("TestHistogram", 1, 1000, 10);
|
| + scoped_refptr<Histogram> histogram = Histogram::FactoryGet(
|
| + "TestHistogram", 1, 1000, 10, Histogram::kNoFlags);
|
| histograms.clear();
|
| StatisticsRecorder::GetHistograms(&histograms); // Load up lists
|
| EXPECT_EQ(1U, histograms.size());
|
| - scoped_refptr<Histogram> histogram1 =
|
| - Histogram::HistogramFactoryGet("Test1Histogram", 1, 1000, 10);
|
| + scoped_refptr<Histogram> histogram1 = Histogram::FactoryGet(
|
| + "Test1Histogram", 1, 1000, 10, Histogram::kNoFlags);
|
| histograms.clear();
|
| StatisticsRecorder::GetHistograms(&histograms); // Load up lists
|
| EXPECT_EQ(2U, histograms.size());
|
|
|
| - scoped_refptr<Histogram> linear_histogram =
|
| - LinearHistogram::LinearHistogramFactoryGet(
|
| - "TestLinearHistogram", 1, 1000, 10);
|
| - scoped_refptr<Histogram> linear_histogram1 =
|
| - LinearHistogram::LinearHistogramFactoryGet(
|
| - "Test1LinearHistogram", 1, 1000, 10);
|
| + scoped_refptr<Histogram> linear_histogram = LinearHistogram::FactoryGet(
|
| + "TestLinearHistogram", 1, 1000, 10, Histogram::kNoFlags);
|
| + scoped_refptr<Histogram> linear_histogram1 = LinearHistogram::FactoryGet(
|
| + "Test1LinearHistogram", 1, 1000, 10, Histogram::kNoFlags);
|
| histograms.clear();
|
| StatisticsRecorder::GetHistograms(&histograms); // Load up lists
|
| EXPECT_EQ(4U, histograms.size());
|
| @@ -91,7 +87,7 @@
|
| StatisticsRecorder::GetHistograms(&histograms); // Load up lists
|
| EXPECT_EQ(6U, histograms.size());
|
|
|
| - ASSET_HISTOGRAM_COUNTS("TestAssetHistogram", 1000);
|
| + HISTOGRAM_ENUMERATION("TestEnumerationHistogram", 20, 200);
|
| histograms.clear();
|
| StatisticsRecorder::GetHistograms(&histograms); // Load up lists
|
| EXPECT_EQ(7U, histograms.size());
|
| @@ -114,8 +110,8 @@
|
| recorder.GetHistograms(&histograms);
|
| EXPECT_EQ(0U, histograms.size());
|
|
|
| - scoped_refptr<Histogram> histogram = Histogram::HistogramFactoryGet(
|
| - "Histogram", 1, 64, 8); // As mentioned in header file.
|
| + scoped_refptr<Histogram> histogram = Histogram::FactoryGet(
|
| + "Histogram", 1, 64, 8, Histogram::kNoFlags); // As per header file.
|
| // Check that we got a nice exponential when there was enough rooom.
|
| EXPECT_EQ(0, histogram->ranges(0));
|
| int power_of_2 = 1;
|
| @@ -125,51 +121,48 @@
|
| }
|
| EXPECT_EQ(INT_MAX, histogram->ranges(8));
|
|
|
| - scoped_refptr<Histogram> short_histogram =
|
| - Histogram::HistogramFactoryGet("Histogram Shortened", 1, 7, 8);
|
| + scoped_refptr<Histogram> short_histogram = Histogram::FactoryGet(
|
| + "Histogram Shortened", 1, 7, 8, Histogram::kNoFlags);
|
| // Check that when the number of buckets is short, we get a linear histogram
|
| // for lack of space to do otherwise.
|
| for (int i = 0; i < 8; i++)
|
| EXPECT_EQ(i, short_histogram->ranges(i));
|
| EXPECT_EQ(INT_MAX, short_histogram->ranges(8));
|
|
|
| - scoped_refptr<Histogram> linear_histogram =
|
| - LinearHistogram::LinearHistogramFactoryGet("Linear", 1, 7, 8);
|
| + scoped_refptr<Histogram> linear_histogram = LinearHistogram::FactoryGet(
|
| + "Linear", 1, 7, 8, Histogram::kNoFlags);
|
| // We also get a nice linear set of bucket ranges when we ask for it
|
| for (int i = 0; i < 8; i++)
|
| EXPECT_EQ(i, linear_histogram->ranges(i));
|
| EXPECT_EQ(INT_MAX, linear_histogram->ranges(8));
|
|
|
| - scoped_refptr<Histogram> linear_broad_histogram =
|
| - LinearHistogram::LinearHistogramFactoryGet(
|
| - "Linear widened", 2, 14, 8);
|
| + scoped_refptr<Histogram> linear_broad_histogram = LinearHistogram::FactoryGet(
|
| + "Linear widened", 2, 14, 8, Histogram::kNoFlags);
|
| // ...but when the list has more space, then the ranges naturally spread out.
|
| for (int i = 0; i < 8; i++)
|
| EXPECT_EQ(2 * i, linear_broad_histogram->ranges(i));
|
| EXPECT_EQ(INT_MAX, linear_broad_histogram->ranges(8));
|
|
|
| - scoped_refptr<Histogram> threadsafe_histogram =
|
| - ThreadSafeHistogram::ThreadSafeHistogramFactoryGet("ThreadSafe", 1, 32,
|
| - 15);
|
| + scoped_refptr<Histogram> transitioning_histogram =
|
| + Histogram::FactoryGet("LinearAndExponential", 1, 32, 15,
|
| + Histogram::kNoFlags);
|
| // When space is a little tight, we transition from linear to exponential.
|
| - // This is what happens in both the basic histogram, and the threadsafe
|
| - // variant (which is derived).
|
| - EXPECT_EQ(0, threadsafe_histogram->ranges(0));
|
| - EXPECT_EQ(1, threadsafe_histogram->ranges(1));
|
| - EXPECT_EQ(2, threadsafe_histogram->ranges(2));
|
| - EXPECT_EQ(3, threadsafe_histogram->ranges(3));
|
| - EXPECT_EQ(4, threadsafe_histogram->ranges(4));
|
| - EXPECT_EQ(5, threadsafe_histogram->ranges(5));
|
| - EXPECT_EQ(6, threadsafe_histogram->ranges(6));
|
| - EXPECT_EQ(7, threadsafe_histogram->ranges(7));
|
| - EXPECT_EQ(9, threadsafe_histogram->ranges(8));
|
| - EXPECT_EQ(11, threadsafe_histogram->ranges(9));
|
| - EXPECT_EQ(14, threadsafe_histogram->ranges(10));
|
| - EXPECT_EQ(17, threadsafe_histogram->ranges(11));
|
| - EXPECT_EQ(21, threadsafe_histogram->ranges(12));
|
| - EXPECT_EQ(26, threadsafe_histogram->ranges(13));
|
| - EXPECT_EQ(32, threadsafe_histogram->ranges(14));
|
| - EXPECT_EQ(INT_MAX, threadsafe_histogram->ranges(15));
|
| + EXPECT_EQ(0, transitioning_histogram->ranges(0));
|
| + EXPECT_EQ(1, transitioning_histogram->ranges(1));
|
| + EXPECT_EQ(2, transitioning_histogram->ranges(2));
|
| + EXPECT_EQ(3, transitioning_histogram->ranges(3));
|
| + EXPECT_EQ(4, transitioning_histogram->ranges(4));
|
| + EXPECT_EQ(5, transitioning_histogram->ranges(5));
|
| + EXPECT_EQ(6, transitioning_histogram->ranges(6));
|
| + EXPECT_EQ(7, transitioning_histogram->ranges(7));
|
| + EXPECT_EQ(9, transitioning_histogram->ranges(8));
|
| + EXPECT_EQ(11, transitioning_histogram->ranges(9));
|
| + EXPECT_EQ(14, transitioning_histogram->ranges(10));
|
| + EXPECT_EQ(17, transitioning_histogram->ranges(11));
|
| + EXPECT_EQ(21, transitioning_histogram->ranges(12));
|
| + EXPECT_EQ(26, transitioning_histogram->ranges(13));
|
| + EXPECT_EQ(32, transitioning_histogram->ranges(14));
|
| + EXPECT_EQ(INT_MAX, transitioning_histogram->ranges(15));
|
|
|
| recorder.GetHistograms(&histograms);
|
| EXPECT_EQ(5U, histograms.size());
|
| @@ -178,8 +171,8 @@
|
| // Make sure histogram handles out-of-bounds data gracefully.
|
| TEST(HistogramTest, BoundsTest) {
|
| const size_t kBucketCount = 50;
|
| - scoped_refptr<Histogram> histogram = Histogram::HistogramFactoryGet("Bounded",
|
| - 10, 100, kBucketCount);
|
| + scoped_refptr<Histogram> histogram = Histogram::FactoryGet(
|
| + "Bounded", 10, 100, kBucketCount, Histogram::kNoFlags);
|
|
|
| // Put two samples "out of bounds" above and below.
|
| histogram->Add(5);
|
| @@ -201,8 +194,8 @@
|
|
|
| // Check to be sure samples land as expected is "correct" buckets.
|
| TEST(HistogramTest, BucketPlacementTest) {
|
| - scoped_refptr<Histogram> histogram = Histogram::HistogramFactoryGet(
|
| - "Histogram", 1, 64, 8); // As mentioned in header file.
|
| + scoped_refptr<Histogram> histogram = Histogram::FactoryGet(
|
| + "Histogram", 1, 64, 8, Histogram::kNoFlags); // As per header file.
|
|
|
| // Check that we got a nice exponential since there was enough rooom.
|
| EXPECT_EQ(0, histogram->ranges(0));
|
| @@ -231,84 +224,5 @@
|
| EXPECT_EQ(i + 1, sample.counts(i));
|
| }
|
|
|
| -static const char kAssetTestHistogramName[] = "AssetCountTest";
|
| -static const char kAssetTestDebugHistogramName[] = "DAssetCountTest";
|
| -void AssetCountFunction(int sample) {
|
| - ASSET_HISTOGRAM_COUNTS(kAssetTestHistogramName, sample);
|
| - DASSET_HISTOGRAM_COUNTS(kAssetTestDebugHistogramName, sample);
|
| -}
|
| -// Check that asset can be added and removed from buckets.
|
| -TEST(HistogramTest, AssetCountTest) {
|
| - // Start up a recorder system to identify all histograms.
|
| - StatisticsRecorder recorder;
|
|
|
| - // Call through the macro to instantiate the static variables.
|
| - AssetCountFunction(100); // Put a sample in the bucket for 100.
|
| -
|
| - // Find the histogram.
|
| - StatisticsRecorder::Histograms histogram_list;
|
| - StatisticsRecorder::GetHistograms(&histogram_list);
|
| - ASSERT_NE(0U, histogram_list.size());
|
| - const Histogram* our_histogram = NULL;
|
| - const Histogram* our_debug_histogram = NULL;
|
| - for (StatisticsRecorder::Histograms::iterator it = histogram_list.begin();
|
| - it != histogram_list.end();
|
| - ++it) {
|
| - if (!(*it)->histogram_name().compare(kAssetTestHistogramName))
|
| - our_histogram = *it;
|
| - else if (!(*it)->histogram_name().compare(kAssetTestDebugHistogramName)) {
|
| - our_debug_histogram = *it;
|
| - }
|
| - }
|
| - ASSERT_TRUE(our_histogram);
|
| -#ifndef NDEBUG
|
| - EXPECT_TRUE(our_debug_histogram);
|
| -#else
|
| - EXPECT_FALSE(our_debug_histogram);
|
| -#endif
|
| - // Verify it has a 1 in exactly one bucket (where we put the sample).
|
| - Histogram::SampleSet sample;
|
| - our_histogram->SnapshotSample(&sample);
|
| - int match_count = 0;
|
| - for (size_t i = 0; i < our_histogram->bucket_count(); ++i) {
|
| - if (sample.counts(i) > 0) {
|
| - EXPECT_LT(++match_count, 2) << "extra count in bucket " << i;
|
| - }
|
| - }
|
| - EXPECT_EQ(1, match_count);
|
| -
|
| - // Remove our sample.
|
| - AssetCountFunction(-100); // Remove a sample from the bucket for 100.
|
| - our_histogram->SnapshotSample(&sample); // Extract data set.
|
| -
|
| - // Verify that the bucket is now empty, as are all the other buckets.
|
| - for (size_t i = 0; i < our_histogram->bucket_count(); ++i) {
|
| - EXPECT_EQ(0, sample.counts(i)) << "extra count in bucket " << i;
|
| - }
|
| -
|
| - if (!our_debug_histogram)
|
| - return; // This is a production build.
|
| -
|
| - // Repeat test with debug histogram. Note that insertion and deletion above
|
| - // should have cancelled each other out.
|
| - AssetCountFunction(100); // Add a sample into the bucket for 100.
|
| - our_debug_histogram->SnapshotSample(&sample);
|
| - match_count = 0;
|
| - for (size_t i = 0; i < our_debug_histogram->bucket_count(); ++i) {
|
| - if (sample.counts(i) > 0) {
|
| - EXPECT_LT(++match_count, 2) << "extra count in bucket " << i;
|
| - }
|
| - }
|
| - EXPECT_EQ(1, match_count);
|
| -
|
| - // Remove our sample.
|
| - AssetCountFunction(-100); // Remove a sample from the bucket for 100.
|
| - our_debug_histogram->SnapshotSample(&sample); // Extract data set.
|
| -
|
| - // Verify that the bucket is now empty, as are all the other buckets.
|
| - for (size_t i = 0; i < our_debug_histogram->bucket_count(); ++i) {
|
| - EXPECT_EQ(0, sample.counts(i)) << "extra count in bucket " << i;
|
| - }
|
| -}
|
| -
|
| } // namespace
|
|
|