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

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

Issue 1731453002: Reduce histogram creation time by avoiding import of those just created. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: clear last-histogram when releasing allocator Created 4 years, 10 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
« no previous file with comments | « base/metrics/histogram_persistence.cc ('k') | no next file » | 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include "base/metrics/histogram.h" 5 #include "base/metrics/histogram.h"
6 6
7 #include <limits.h> 7 #include <limits.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 // Create all histogram names in advance for accurate timing below. 702 // Create all histogram names in advance for accurate timing below.
703 std::vector<std::string> histogram_names; 703 std::vector<std::string> histogram_names;
704 for (int i = 0; i < kTestCreateCount; ++i) { 704 for (int i = 0; i < kTestCreateCount; ++i) {
705 histogram_names.push_back( 705 histogram_names.push_back(
706 StringPrintf("TestHistogram.%d", i % kTestCreateCount)); 706 StringPrintf("TestHistogram.%d", i % kTestCreateCount));
707 } 707 }
708 708
709 // Calculate cost of creating histograms. 709 // Calculate cost of creating histograms.
710 TimeTicks create_start = TimeTicks::Now(); 710 TimeTicks create_start = TimeTicks::Now();
711 for (int i = 0; i < kTestCreateCount; ++i) { 711 for (int i = 0; i < kTestCreateCount; ++i) {
712 Histogram::FactoryGet(histogram_names[i], 0, 100, 10, 712 Histogram::FactoryGet(histogram_names[i], 1, 100, 10,
713 HistogramBase::kNoFlags); 713 HistogramBase::kNoFlags);
714 } 714 }
715 TimeDelta create_ticks = TimeTicks::Now() - create_start; 715 TimeDelta create_ticks = TimeTicks::Now() - create_start;
716 int64_t create_ms = create_ticks.InMilliseconds(); 716 int64_t create_ms = create_ticks.InMilliseconds();
717 717
718 VLOG(1) << kTestCreateCount << " histogram creations took " << create_ms 718 VLOG(1) << kTestCreateCount << " histogram creations took " << create_ms
719 << "ms or about " 719 << "ms or about "
720 << (create_ms * 1000000) / kTestCreateCount 720 << (create_ms * 1000000) / kTestCreateCount
721 << "ns each."; 721 << "ns each.";
722 722
723 // Calculate cost of looking up existing histograms. 723 // Calculate cost of looking up existing histograms.
724 TimeTicks lookup_start = TimeTicks::Now(); 724 TimeTicks lookup_start = TimeTicks::Now();
725 for (int i = 0; i < kTestLookupCount; ++i) { 725 for (int i = 0; i < kTestLookupCount; ++i) {
726 // 6007 is co-prime with kTestCreateCount and so will do lookups in an 726 // 6007 is co-prime with kTestCreateCount and so will do lookups in an
727 // order less likely to be cacheable (but still hit them all) should the 727 // order less likely to be cacheable (but still hit them all) should the
728 // underlying storage use the exact histogram name as the key. 728 // underlying storage use the exact histogram name as the key.
729 const int i_mult = 6007; 729 const int i_mult = 6007;
730 static_assert(i_mult < INT_MAX / kTestCreateCount, "Multiplier too big"); 730 static_assert(i_mult < INT_MAX / kTestCreateCount, "Multiplier too big");
731 int index = (i * i_mult) & (kTestCreateCount - 1); 731 int index = (i * i_mult) & (kTestCreateCount - 1);
732 Histogram::FactoryGet(histogram_names[index], 0, 100, 10, 732 Histogram::FactoryGet(histogram_names[index], 1, 100, 10,
733 HistogramBase::kNoFlags); 733 HistogramBase::kNoFlags);
734 } 734 }
735 TimeDelta lookup_ticks = TimeTicks::Now() - lookup_start; 735 TimeDelta lookup_ticks = TimeTicks::Now() - lookup_start;
736 int64_t lookup_ms = lookup_ticks.InMilliseconds(); 736 int64_t lookup_ms = lookup_ticks.InMilliseconds();
737 737
738 VLOG(1) << kTestLookupCount << " histogram lookups took " << lookup_ms 738 VLOG(1) << kTestLookupCount << " histogram lookups took " << lookup_ms
739 << "ms or about " 739 << "ms or about "
740 << (lookup_ms * 1000000) / kTestLookupCount 740 << (lookup_ms * 1000000) / kTestLookupCount
741 << "ns each."; 741 << "ns each.";
742 742
743 // Calculate cost of accessing histograms. 743 // Calculate cost of accessing histograms.
744 HistogramBase* histogram = Histogram::FactoryGet( 744 HistogramBase* histogram = Histogram::FactoryGet(
745 histogram_names[0], 0, 100, 10, HistogramBase::kNoFlags); 745 histogram_names[0], 1, 100, 10, HistogramBase::kNoFlags);
746 ASSERT_TRUE(histogram); 746 ASSERT_TRUE(histogram);
747 TimeTicks add_start = TimeTicks::Now(); 747 TimeTicks add_start = TimeTicks::Now();
748 for (int i = 0; i < kTestAddCount; ++i) 748 for (int i = 0; i < kTestAddCount; ++i)
749 histogram->Add(i & 127); 749 histogram->Add(i & 127);
750 TimeDelta add_ticks = TimeTicks::Now() - add_start; 750 TimeDelta add_ticks = TimeTicks::Now() - add_start;
751 int64_t add_ms = add_ticks.InMilliseconds(); 751 int64_t add_ms = add_ticks.InMilliseconds();
752 752
753 VLOG(1) << kTestAddCount << " histogram adds took " << add_ms 753 VLOG(1) << kTestAddCount << " histogram adds took " << add_ms
754 << "ms or about " 754 << "ms or about "
755 << (add_ms * 1000000) / kTestAddCount 755 << (add_ms * 1000000) / kTestAddCount
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 // CustomHistogram needs at least 1 valid range. 797 // CustomHistogram needs at least 1 valid range.
798 custom_ranges.clear(); 798 custom_ranges.clear();
799 custom_ranges.push_back(0); 799 custom_ranges.push_back(0);
800 EXPECT_DEATH(CustomHistogram::FactoryGet("BadRangesCustom3", custom_ranges, 800 EXPECT_DEATH(CustomHistogram::FactoryGet("BadRangesCustom3", custom_ranges,
801 HistogramBase::kNoFlags), 801 HistogramBase::kNoFlags),
802 ""); 802 "");
803 } 803 }
804 #endif 804 #endif
805 805
806 } // namespace base 806 } // namespace base
OLDNEW
« no previous file with comments | « base/metrics/histogram_persistence.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698