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

Side by Side Diff: base/metrics/histogram_unittest.cc

Issue 7696017: Cache the ranges_ vector and share the ranges_ vector (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 2 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/metrics/histogram.cc ('k') | chrome/browser/browser_about_handler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Test of Histogram class 5 // Test of Histogram class
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 380
381 TEST(HistogramTest, CorruptBucketBounds) { 381 TEST(HistogramTest, CorruptBucketBounds) {
382 Histogram* histogram(Histogram::FactoryGet( 382 Histogram* histogram(Histogram::FactoryGet(
383 "Histogram", 1, 64, 8, Histogram::kNoFlags)); // As per header file. 383 "Histogram", 1, 64, 8, Histogram::kNoFlags)); // As per header file.
384 384
385 Histogram::SampleSet snapshot; 385 Histogram::SampleSet snapshot;
386 histogram->SnapshotSample(&snapshot); 386 histogram->SnapshotSample(&snapshot);
387 EXPECT_EQ(Histogram::NO_INCONSISTENCIES, 0); 387 EXPECT_EQ(Histogram::NO_INCONSISTENCIES, 0);
388 EXPECT_EQ(0, histogram->FindCorruption(snapshot)); // No default corruption. 388 EXPECT_EQ(0, histogram->FindCorruption(snapshot)); // No default corruption.
389 389
390 std::swap(histogram->ranges_[1], histogram->ranges_[2]); 390 CachedRanges* cached_ranges = histogram->cached_ranges();
391 std::swap(cached_ranges->ranges_[1], cached_ranges->ranges_[2]);
391 EXPECT_EQ(Histogram::BUCKET_ORDER_ERROR | Histogram::RANGE_CHECKSUM_ERROR, 392 EXPECT_EQ(Histogram::BUCKET_ORDER_ERROR | Histogram::RANGE_CHECKSUM_ERROR,
392 histogram->FindCorruption(snapshot)); 393 histogram->FindCorruption(snapshot));
393 394
394 std::swap(histogram->ranges_[1], histogram->ranges_[2]); 395 std::swap(cached_ranges->ranges_[1], cached_ranges->ranges_[2]);
395 EXPECT_EQ(0, histogram->FindCorruption(snapshot)); 396 EXPECT_EQ(0, histogram->FindCorruption(snapshot));
396 397
397 ++histogram->ranges_[3]; 398 ++cached_ranges->ranges_[3];
398 EXPECT_EQ(Histogram::RANGE_CHECKSUM_ERROR, 399 EXPECT_EQ(Histogram::RANGE_CHECKSUM_ERROR,
399 histogram->FindCorruption(snapshot)); 400 histogram->FindCorruption(snapshot));
400 401
401 // Show that two simple changes don't offset each other 402 // Show that two simple changes don't offset each other
402 --histogram->ranges_[4]; 403 --cached_ranges->ranges_[4];
403 EXPECT_EQ(Histogram::RANGE_CHECKSUM_ERROR, 404 EXPECT_EQ(Histogram::RANGE_CHECKSUM_ERROR,
404 histogram->FindCorruption(snapshot)); 405 histogram->FindCorruption(snapshot));
405 406
406 // Repair histogram so that destructor won't DCHECK(). 407 // Repair histogram so that destructor won't DCHECK().
407 --histogram->ranges_[3]; 408 --cached_ranges->ranges_[3];
408 ++histogram->ranges_[4]; 409 ++cached_ranges->ranges_[4];
409 } 410 }
410 411
411 // Table was generated similarly to sample code for CRC-32 given on: 412 // Table was generated similarly to sample code for CRC-32 given on:
412 // http://www.w3.org/TR/PNG/#D-CRCAppendix. 413 // http://www.w3.org/TR/PNG/#D-CRCAppendix.
413 TEST(HistogramTest, Crc32TableTest) { 414 TEST(HistogramTest, Crc32TableTest) {
414 for (int i = 0; i < 256; ++i) { 415 for (int i = 0; i < 256; ++i) {
415 uint32 checksum = i; 416 uint32 checksum = i;
416 for (int j = 0; j < 8; ++j) { 417 for (int j = 0; j < 8; ++j) {
417 const uint32 kReversedPolynomial = 0xedb88320L; 418 const uint32 kReversedPolynomial = 0xedb88320L;
418 if (checksum & 1) 419 if (checksum & 1)
419 checksum = kReversedPolynomial ^ (checksum >> 1); 420 checksum = kReversedPolynomial ^ (checksum >> 1);
420 else 421 else
421 checksum >>= 1; 422 checksum >>= 1;
422 } 423 }
423 EXPECT_EQ(Histogram::kCrcTable[i], checksum); 424 EXPECT_EQ(Histogram::kCrcTable[i], checksum);
424 } 425 }
425 } 426 }
426 427
428 // RangeTest, CustomRangeTest and CorruptBucketBounds test CachedRanges class.
429 // The following tests sharing of CachedRanges object.
430 TEST(HistogramTest, CachedRangesTest) {
431 StatisticsRecorder recorder;
432 StatisticsRecorder::Histograms histograms;
433
434 recorder.GetHistograms(&histograms);
435 EXPECT_EQ(0U, histograms.size());
436
437 Histogram* histogram1(Histogram::FactoryGet(
438 "Histogram", 1, 64, 8, Histogram::kNoFlags));
439
440 Histogram* histogram2(Histogram::FactoryGet(
441 "Histogram2", 1, 64, 8, Histogram::kNoFlags));
442
443 Histogram* histogram3(Histogram::FactoryGet(
444 "Histogram3", 1, 64, 16, Histogram::kNoFlags));
445
446 CachedRanges* cached_ranges1 = histogram1->cached_ranges();
447 CachedRanges* cached_ranges2 = histogram2->cached_ranges();
448 CachedRanges* cached_ranges3 = histogram3->cached_ranges();
449 EXPECT_TRUE(cached_ranges1->Equals(cached_ranges2));
450 EXPECT_FALSE(cached_ranges1->Equals(cached_ranges3));
451 }
452
427 } // namespace base 453 } // namespace base
OLDNEW
« no previous file with comments | « base/metrics/histogram.cc ('k') | chrome/browser/browser_about_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698