Home | History | Annotate | Download | only in metrics

Lines Matching refs:Histogram

5 // Histogram is an object that aggregates statistics, and can summarize them in
10 #include "base/metrics/histogram.h"
51 DLOG(ERROR) << "Pickle error decoding Histogram: " << *histogram_name;
56 // checks above and beyond those in Histogram::Initialize()
62 DLOG(ERROR) << "Values error decoding Histogram: " << histogram_name;
66 // We use the arguments to find or create the local version of the histogram
73 bool ValidateRangeChecksum(const HistogramBase& histogram,
75 const Histogram& casted_histogram =
76 static_cast<const Histogram&>(histogram);
87 const uint32_t Histogram::kBucketCount_MAX = 16384u;
89 class Histogram::Factory {
96 : Factory(name, HISTOGRAM, minimum, maximum, bucket_count, flags) {}
99 // Create histogram based on construction parameters. Caller takes
117 // Create a BucketRanges structure appropriate for this histogram.
120 Histogram::InitializeBucketRanges(minimum_, maximum_, ranges);
124 // Allocate the correct Histogram object off the heap (in case persistent
127 return WrapUnique(new Histogram(name_, minimum_, maximum_, ranges));
130 // Perform any required datafill on the just-created histogram. If
133 virtual void FillHistogram(HistogramBase* /*histogram*/) {}
149 HistogramBase* Histogram::Factory::Build() {
150 HistogramBase* histogram = StatisticsRecorder::FindHistogram(name_);
151 if (!histogram) {
168 // Try to create the histogram using a "persistent" allocator. As of
171 // allocating from it fails, code below will allocate the histogram from
199 // Register this histogram with the StatisticsRecorder. Keep a copy of
200 // the pointer value to tell later whether the locally created histogram
204 histogram = StatisticsRecorder::RegisterOrDeleteDuplicate(
210 histogram == tentative_histogram_ptr);
214 ReportHistogramActivity(*histogram, HISTOGRAM_CREATED);
217 ReportHistogramActivity(*histogram, HISTOGRAM_LOOKUP);
220 DCHECK_EQ(histogram_type_, histogram->GetHistogramType()) << name_;
222 !histogram->HasConstructionArguments(minimum_, maximum_, bucket_count_)) {
223 // The construction arguments do not match the existing histogram. This can
229 DLOG(ERROR) << "Histogram " << name_ << " has bad construction arguments";
232 return histogram;
235 HistogramBase* Histogram::FactoryGet(const std::string& name,
247 HistogramBase* Histogram::FactoryTimeGet(const std::string& name,
257 HistogramBase* Histogram::FactoryGet(const char* name,
265 HistogramBase* Histogram::FactoryTimeGet(const char* name,
274 std::unique_ptr<HistogramBase> Histogram::PersistentCreate(
284 return WrapUnique(new Histogram(name, minimum, maximum, ranges, counts,
299 void Histogram::InitializeBucketRanges(Sample minimum,
329 const int Histogram::kCommonRaceBasedCountMismatch = 5;
331 uint32_t Histogram::FindCorruption(const HistogramSamples& samples) const {
350 UMA_HISTOGRAM_COUNTS("Histogram.InconsistentCountHigh", delta);
355 UMA_HISTOGRAM_COUNTS("Histogram.InconsistentCountLow", -delta);
363 Sample Histogram::ranges(uint32_t i) const {
367 uint32_t Histogram::bucket_count() const {
372 bool Histogram::InspectConstructionArguments(const std::string& name,
378 DVLOG(1) << "Histogram: " << name << " has bad minimum: " << *minimum;
382 DVLOG(1) << "Histogram: " << name << " has bad maximum: " << *maximum;
386 DVLOG(1) << "Histogram: " << name << " has bad bucket_count: "
400 uint64_t Histogram::name_hash() const {
404 HistogramType Histogram::GetHistogramType() const {
405 return HISTOGRAM;
408 bool Histogram::HasConstructionArguments(Sample expected_minimum,
416 void Histogram::Add(int value) {
420 void Histogram::AddCount(int value, int count) {
437 std::unique_ptr<HistogramSamples> Histogram::SnapshotSamples() const {
441 std::unique_ptr<HistogramSamples> Histogram::SnapshotDelta() {
458 std::unique_ptr<HistogramSamples> Histogram::SnapshotFinalDelta() const {
470 void Histogram::AddSamples(const HistogramSamples& samples) {
474 bool Histogram::AddSamplesFromPickle(PickleIterator* iter) {
478 // The following methods provide a graphical histogram display.
479 void Histogram::WriteHTMLGraph(std::string* output) const {
486 void Histogram::WriteAscii(std::string* output) const {
490 bool Histogram::SerializeInfoImpl(Pickle* pickle) const {
500 Histogram::Histogram(const std::string& name,
512 Histogram::Histogram(const std::string& name,
533 Histogram::~Histogram() {
536 bool Histogram::PrintEmptyBucket(uint32_t /*index*/) const {
540 // Use the actual bucket widths (like a linear histogram) until the widths get
545 double Histogram::GetBucketSize(Count current, uint32_t i) const {
554 const std::string Histogram::GetAsciiBucketRange(uint32_t i) const {
562 HistogramBase* Histogram::DeserializeInfoImpl(PickleIterator* iter) {
575 // Find or create the local version of the histogram in this process.
576 HistogramBase* histogram = Histogram::FactoryGet(
579 if (!ValidateRangeChecksum(*histogram, range_checksum)) {
580 // The serialized histogram might be corrupted.
583 return histogram;
586 std::unique_ptr<SampleVector> Histogram::SnapshotSampleVector() const {
593 void Histogram::WriteAsciiImpl(bool graph_it,
610 // nearly the largest bucket range without sliding over the histogram.
630 // Output the actual histogram graph.
660 double Histogram::GetPeakBucketSize(const SampleVector& samples) const {
670 void Histogram::WriteAsciiHeader(const SampleVector& samples,
674 "Histogram: %s recorded %d samples",
688 void Histogram::WriteAsciiBucketContext(const int64_t past,
701 void Histogram::GetParameters(DictionaryValue* params) const {
708 void Histogram::GetCountAndBucketData(Count* count,
730 // LinearHistogram: This histogram uses a traditional set of evenly spaced
734 class LinearHistogram::Factory : public Histogram::Factory {
742 : Histogram::Factory(name, LINEAR_HISTOGRAM, minimum, maximum,
762 Histogram::Factory::FillHistogram(base_histogram);
763 LinearHistogram* histogram = static_cast<LinearHistogram*>(base_histogram);
767 histogram->bucket_description_[descriptions_[i].sample] =
839 bool valid_arguments = Histogram::InspectConstructionArguments(
855 : Histogram(name, minimum, maximum, ranges) {
867 : Histogram(name, minimum, maximum, ranges, counts, logged_counts,
873 // samples in a histogram if we didn't normalize this way.
882 return Histogram::GetAsciiBucketRange(i);
922 HistogramBase* histogram = LinearHistogram::FactoryGet(
924 if (!ValidateRangeChecksum(*histogram, range_checksum)) {
925 // The serialized histogram might be corrupted.
928 return histogram;
935 class BooleanHistogram::Factory : public Histogram::Factory {
938 : Histogram::Factory(name, BOOLEAN_HISTOGRAM, 1, 2, 3, flags) {}
1007 HistogramBase* histogram = BooleanHistogram::FactoryGet(
1009 if (!ValidateRangeChecksum(*histogram, range_checksum)) {
1010 // The serialized histogram might be corrupted.
1013 return histogram;
1020 class CustomHistogram::Factory : public Histogram::Factory {
1025 : Histogram::Factory(name, CUSTOM_HISTOGRAM, 0, 0, 0, flags) {
1107 : Histogram(name,
1119 : Histogram(name,
1130 if (!Histogram::SerializeInfoImpl(pickle))
1168 HistogramBase* histogram = CustomHistogram::FactoryGet(
1170 if (!ValidateRangeChecksum(*histogram, range_checksum)) {
1171 // The serialized histogram might be corrupted.
1174 return histogram;