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

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

Issue 1195473002: Optimize size of UMA histogram macros. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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.h ('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 // Histogram is an object that aggregates statistics, and can summarize them in 5 // Histogram is an object that aggregates statistics, and can summarize them in
6 // various forms, including ASCII graphical, HTML, and numerically (as a 6 // various forms, including ASCII graphical, HTML, and numerically (as a
7 // vector of numbers corresponding to each of the aggregating buckets). 7 // vector of numbers corresponding to each of the aggregating buckets).
8 // See header file for details and examples. 8 // See header file for details and examples.
9 9
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 HistogramBase* Histogram::FactoryTimeGet(const std::string& name, 124 HistogramBase* Histogram::FactoryTimeGet(const std::string& name,
125 TimeDelta minimum, 125 TimeDelta minimum,
126 TimeDelta maximum, 126 TimeDelta maximum,
127 size_t bucket_count, 127 size_t bucket_count,
128 int32 flags) { 128 int32 flags) {
129 return FactoryGet(name, static_cast<Sample>(minimum.InMilliseconds()), 129 return FactoryGet(name, static_cast<Sample>(minimum.InMilliseconds()),
130 static_cast<Sample>(maximum.InMilliseconds()), bucket_count, 130 static_cast<Sample>(maximum.InMilliseconds()), bucket_count,
131 flags); 131 flags);
132 } 132 }
133 133
134 HistogramBase* Histogram::FactoryGet(const char* name,
135 Sample minimum,
136 Sample maximum,
137 size_t bucket_count,
138 int32 flags) {
139 return FactoryGet(std::string(name), minimum, maximum, bucket_count, flags);
140 }
141
142 HistogramBase* Histogram::FactoryTimeGet(const char* name,
143 TimeDelta minimum,
144 TimeDelta maximum,
145 size_t bucket_count,
146 int32 flags) {
147 return FactoryTimeGet(std::string(name), minimum, maximum, bucket_count,
148 flags);
149 }
150
134 // Calculate what range of values are held in each bucket. 151 // Calculate what range of values are held in each bucket.
135 // We have to be careful that we don't pick a ratio between starting points in 152 // We have to be careful that we don't pick a ratio between starting points in
136 // consecutive buckets that is sooo small, that the integer bounds are the same 153 // consecutive buckets that is sooo small, that the integer bounds are the same
137 // (effectively making one bucket get no values). We need to avoid: 154 // (effectively making one bucket get no values). We need to avoid:
138 // ranges(i) == ranges(i + 1) 155 // ranges(i) == ranges(i + 1)
139 // To avoid that, we just do a fine-grained bucket width as far as we need to 156 // To avoid that, we just do a fine-grained bucket width as far as we need to
140 // until we get a ratio that moves us along at least 2 units at a time. From 157 // until we get a ratio that moves us along at least 2 units at a time. From
141 // that bucket onward we do use the exponential growth of buckets. 158 // that bucket onward we do use the exponential growth of buckets.
142 // 159 //
143 // static 160 // static
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 HistogramBase* LinearHistogram::FactoryTimeGet(const std::string& name, 542 HistogramBase* LinearHistogram::FactoryTimeGet(const std::string& name,
526 TimeDelta minimum, 543 TimeDelta minimum,
527 TimeDelta maximum, 544 TimeDelta maximum,
528 size_t bucket_count, 545 size_t bucket_count,
529 int32 flags) { 546 int32 flags) {
530 return FactoryGet(name, static_cast<Sample>(minimum.InMilliseconds()), 547 return FactoryGet(name, static_cast<Sample>(minimum.InMilliseconds()),
531 static_cast<Sample>(maximum.InMilliseconds()), bucket_count, 548 static_cast<Sample>(maximum.InMilliseconds()), bucket_count,
532 flags); 549 flags);
533 } 550 }
534 551
552 HistogramBase* LinearHistogram::FactoryGet(const char* name,
553 Sample minimum,
554 Sample maximum,
555 size_t bucket_count,
556 int32 flags) {
557 return FactoryGet(std::string(name), minimum, maximum, bucket_count, flags);
558 }
559
560 HistogramBase* LinearHistogram::FactoryTimeGet(const char* name,
561 TimeDelta minimum,
562 TimeDelta maximum,
563 size_t bucket_count,
564 int32 flags) {
565 return FactoryTimeGet(std::string(name), minimum, maximum, bucket_count,
566 flags);
567 }
568
535 HistogramBase* LinearHistogram::FactoryGetWithRangeDescription( 569 HistogramBase* LinearHistogram::FactoryGetWithRangeDescription(
536 const std::string& name, 570 const std::string& name,
537 Sample minimum, 571 Sample minimum,
538 Sample maximum, 572 Sample maximum,
539 size_t bucket_count, 573 size_t bucket_count,
540 int32 flags, 574 int32 flags,
541 const DescriptionPair descriptions[]) { 575 const DescriptionPair descriptions[]) {
542 bool valid_arguments = Histogram::InspectConstructionArguments( 576 bool valid_arguments = Histogram::InspectConstructionArguments(
543 name, &minimum, &maximum, &bucket_count); 577 name, &minimum, &maximum, &bucket_count);
544 DCHECK(valid_arguments); 578 DCHECK(valid_arguments);
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
670 704
671 tentative_histogram->SetFlags(flags); 705 tentative_histogram->SetFlags(flags);
672 histogram = 706 histogram =
673 StatisticsRecorder::RegisterOrDeleteDuplicate(tentative_histogram); 707 StatisticsRecorder::RegisterOrDeleteDuplicate(tentative_histogram);
674 } 708 }
675 709
676 DCHECK_EQ(BOOLEAN_HISTOGRAM, histogram->GetHistogramType()); 710 DCHECK_EQ(BOOLEAN_HISTOGRAM, histogram->GetHistogramType());
677 return histogram; 711 return histogram;
678 } 712 }
679 713
714 HistogramBase* BooleanHistogram::FactoryGet(const char* name, int32 flags) {
715 return FactoryGet(std::string(name), flags);
716 }
717
680 HistogramType BooleanHistogram::GetHistogramType() const { 718 HistogramType BooleanHistogram::GetHistogramType() const {
681 return BOOLEAN_HISTOGRAM; 719 return BOOLEAN_HISTOGRAM;
682 } 720 }
683 721
684 BooleanHistogram::BooleanHistogram(const std::string& name, 722 BooleanHistogram::BooleanHistogram(const std::string& name,
685 const BucketRanges* ranges) 723 const BucketRanges* ranges)
686 : LinearHistogram(name, 1, 2, ranges) {} 724 : LinearHistogram(name, 1, 2, ranges) {}
687 725
688 HistogramBase* BooleanHistogram::DeserializeInfoImpl(PickleIterator* iter) { 726 HistogramBase* BooleanHistogram::DeserializeInfoImpl(PickleIterator* iter) {
689 std::string histogram_name; 727 std::string histogram_name;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
730 tentative_histogram->SetFlags(flags); 768 tentative_histogram->SetFlags(flags);
731 769
732 histogram = 770 histogram =
733 StatisticsRecorder::RegisterOrDeleteDuplicate(tentative_histogram); 771 StatisticsRecorder::RegisterOrDeleteDuplicate(tentative_histogram);
734 } 772 }
735 773
736 DCHECK_EQ(histogram->GetHistogramType(), CUSTOM_HISTOGRAM); 774 DCHECK_EQ(histogram->GetHistogramType(), CUSTOM_HISTOGRAM);
737 return histogram; 775 return histogram;
738 } 776 }
739 777
778 HistogramBase* CustomHistogram::FactoryGet(
779 const char* name,
780 const std::vector<Sample>& custom_ranges,
781 int32 flags) {
782 return FactoryGet(std::string(name), custom_ranges, flags);
783 }
784
740 HistogramType CustomHistogram::GetHistogramType() const { 785 HistogramType CustomHistogram::GetHistogramType() const {
741 return CUSTOM_HISTOGRAM; 786 return CUSTOM_HISTOGRAM;
742 } 787 }
743 788
744 // static 789 // static
745 std::vector<Sample> CustomHistogram::ArrayToCustomRanges( 790 std::vector<Sample> CustomHistogram::ArrayToCustomRanges(
746 const Sample* values, size_t num_values) { 791 const Sample* values, size_t num_values) {
747 std::vector<Sample> all_values; 792 std::vector<Sample> all_values;
748 for (size_t i = 0; i < num_values; ++i) { 793 for (size_t i = 0; i < num_values; ++i) {
749 Sample value = values[i]; 794 Sample value = values[i];
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
837 882
838 BucketRanges* bucket_ranges = new BucketRanges(ranges.size()); 883 BucketRanges* bucket_ranges = new BucketRanges(ranges.size());
839 for (size_t i = 0; i < ranges.size(); i++) { 884 for (size_t i = 0; i < ranges.size(); i++) {
840 bucket_ranges->set_range(i, ranges[i]); 885 bucket_ranges->set_range(i, ranges[i]);
841 } 886 }
842 bucket_ranges->ResetChecksum(); 887 bucket_ranges->ResetChecksum();
843 return bucket_ranges; 888 return bucket_ranges;
844 } 889 }
845 890
846 } // namespace base 891 } // namespace base
OLDNEW
« no previous file with comments | « base/metrics/histogram.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698