| OLD | NEW |
| 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 // 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 | 8 |
| 9 // It supports calls to accumulate either time intervals (which are processed | 9 // It supports calls to accumulate either time intervals (which are processed |
| 10 // as integral number of milliseconds), or arbitrary integral units. | 10 // as integral number of milliseconds), or arbitrary integral units. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 // gigantic range with the addition of very few buckets. | 29 // gigantic range with the addition of very few buckets. |
| 30 | 30 |
| 31 #ifndef BASE_METRICS_HISTOGRAM_H_ | 31 #ifndef BASE_METRICS_HISTOGRAM_H_ |
| 32 #define BASE_METRICS_HISTOGRAM_H_ | 32 #define BASE_METRICS_HISTOGRAM_H_ |
| 33 #pragma once | 33 #pragma once |
| 34 | 34 |
| 35 #include <map> | 35 #include <map> |
| 36 #include <string> | 36 #include <string> |
| 37 #include <vector> | 37 #include <vector> |
| 38 | 38 |
| 39 #include "base/base_api.h" |
| 39 #include "base/gtest_prod_util.h" | 40 #include "base/gtest_prod_util.h" |
| 40 #include "base/ref_counted.h" | 41 #include "base/ref_counted.h" |
| 41 #include "base/logging.h" | 42 #include "base/logging.h" |
| 42 #include "base/time.h" | 43 #include "base/time.h" |
| 43 | 44 |
| 44 class Pickle; | 45 class Pickle; |
| 45 | 46 |
| 46 namespace base { | 47 namespace base { |
| 47 | 48 |
| 48 class Lock; | 49 class Lock; |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 if (counter.get()) counter->Add(sample); \ | 230 if (counter.get()) counter->Add(sample); \ |
| 230 } while (0) | 231 } while (0) |
| 231 | 232 |
| 232 //------------------------------------------------------------------------------ | 233 //------------------------------------------------------------------------------ |
| 233 | 234 |
| 234 class BooleanHistogram; | 235 class BooleanHistogram; |
| 235 class CustomHistogram; | 236 class CustomHistogram; |
| 236 class Histogram; | 237 class Histogram; |
| 237 class LinearHistogram; | 238 class LinearHistogram; |
| 238 | 239 |
| 239 class Histogram : public base::RefCountedThreadSafe<Histogram> { | 240 class BASE_API Histogram : public base::RefCountedThreadSafe<Histogram> { |
| 240 public: | 241 public: |
| 241 typedef int Sample; // Used for samples (and ranges of samples). | 242 typedef int Sample; // Used for samples (and ranges of samples). |
| 242 typedef int Count; // Used to count samples in a bucket. | 243 typedef int Count; // Used to count samples in a bucket. |
| 243 static const Sample kSampleType_MAX = INT_MAX; | 244 static const Sample kSampleType_MAX = INT_MAX; |
| 244 // Initialize maximum number of buckets in histograms as 16,384. | 245 // Initialize maximum number of buckets in histograms as 16,384. |
| 245 static const size_t kBucketCount_MAX; | 246 static const size_t kBucketCount_MAX; |
| 246 | 247 |
| 247 typedef std::vector<Count> Counts; | 248 typedef std::vector<Count> Counts; |
| 248 typedef std::vector<Sample> Ranges; | 249 typedef std::vector<Sample> Ranges; |
| 249 | 250 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 }; | 289 }; |
| 289 | 290 |
| 290 struct DescriptionPair { | 291 struct DescriptionPair { |
| 291 Sample sample; | 292 Sample sample; |
| 292 const char* description; // Null means end of a list of pairs. | 293 const char* description; // Null means end of a list of pairs. |
| 293 }; | 294 }; |
| 294 | 295 |
| 295 //---------------------------------------------------------------------------- | 296 //---------------------------------------------------------------------------- |
| 296 // Statistic values, developed over the life of the histogram. | 297 // Statistic values, developed over the life of the histogram. |
| 297 | 298 |
| 298 class SampleSet { | 299 class BASE_API SampleSet { |
| 299 public: | 300 public: |
| 300 explicit SampleSet(); | 301 explicit SampleSet(); |
| 301 ~SampleSet(); | 302 ~SampleSet(); |
| 302 | 303 |
| 303 // Adjust size of counts_ for use with given histogram. | 304 // Adjust size of counts_ for use with given histogram. |
| 304 void Resize(const Histogram& histogram); | 305 void Resize(const Histogram& histogram); |
| 305 void CheckSize(const Histogram& histogram) const; | 306 void CheckSize(const Histogram& histogram) const; |
| 306 | 307 |
| 307 // Accessor for histogram to make routine additions. | 308 // Accessor for histogram to make routine additions. |
| 308 void Accumulate(Sample value, Count count, size_t index); | 309 void Accumulate(Sample value, Count count, size_t index); |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 // sample. | 542 // sample. |
| 542 SampleSet sample_; | 543 SampleSet sample_; |
| 543 | 544 |
| 544 DISALLOW_COPY_AND_ASSIGN(Histogram); | 545 DISALLOW_COPY_AND_ASSIGN(Histogram); |
| 545 }; | 546 }; |
| 546 | 547 |
| 547 //------------------------------------------------------------------------------ | 548 //------------------------------------------------------------------------------ |
| 548 | 549 |
| 549 // LinearHistogram is a more traditional histogram, with evenly spaced | 550 // LinearHistogram is a more traditional histogram, with evenly spaced |
| 550 // buckets. | 551 // buckets. |
| 551 class LinearHistogram : public Histogram { | 552 class BASE_API LinearHistogram : public Histogram { |
| 552 public: | 553 public: |
| 553 virtual ~LinearHistogram(); | 554 virtual ~LinearHistogram(); |
| 554 | 555 |
| 555 /* minimum should start from 1. 0 is as minimum is invalid. 0 is an implicit | 556 /* minimum should start from 1. 0 is as minimum is invalid. 0 is an implicit |
| 556 default underflow bucket. */ | 557 default underflow bucket. */ |
| 557 static scoped_refptr<Histogram> FactoryGet(const std::string& name, | 558 static scoped_refptr<Histogram> FactoryGet(const std::string& name, |
| 558 Sample minimum, Sample maximum, size_t bucket_count, Flags flags); | 559 Sample minimum, Sample maximum, size_t bucket_count, Flags flags); |
| 559 static scoped_refptr<Histogram> FactoryTimeGet(const std::string& name, | 560 static scoped_refptr<Histogram> FactoryTimeGet(const std::string& name, |
| 560 TimeDelta minimum, TimeDelta maximum, size_t bucket_count, | 561 TimeDelta minimum, TimeDelta maximum, size_t bucket_count, |
| 561 Flags flags); | 562 Flags flags); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 592 // to provide a description. | 593 // to provide a description. |
| 593 typedef std::map<Sample, std::string> BucketDescriptionMap; | 594 typedef std::map<Sample, std::string> BucketDescriptionMap; |
| 594 BucketDescriptionMap bucket_description_; | 595 BucketDescriptionMap bucket_description_; |
| 595 | 596 |
| 596 DISALLOW_COPY_AND_ASSIGN(LinearHistogram); | 597 DISALLOW_COPY_AND_ASSIGN(LinearHistogram); |
| 597 }; | 598 }; |
| 598 | 599 |
| 599 //------------------------------------------------------------------------------ | 600 //------------------------------------------------------------------------------ |
| 600 | 601 |
| 601 // BooleanHistogram is a histogram for booleans. | 602 // BooleanHistogram is a histogram for booleans. |
| 602 class BooleanHistogram : public LinearHistogram { | 603 class BASE_API BooleanHistogram : public LinearHistogram { |
| 603 public: | 604 public: |
| 604 static scoped_refptr<Histogram> FactoryGet(const std::string& name, | 605 static scoped_refptr<Histogram> FactoryGet(const std::string& name, |
| 605 Flags flags); | 606 Flags flags); |
| 606 | 607 |
| 607 virtual ClassType histogram_type() const; | 608 virtual ClassType histogram_type() const; |
| 608 | 609 |
| 609 virtual void AddBoolean(bool value); | 610 virtual void AddBoolean(bool value); |
| 610 | 611 |
| 611 private: | 612 private: |
| 612 explicit BooleanHistogram(const std::string& name); | 613 explicit BooleanHistogram(const std::string& name); |
| 613 | 614 |
| 614 DISALLOW_COPY_AND_ASSIGN(BooleanHistogram); | 615 DISALLOW_COPY_AND_ASSIGN(BooleanHistogram); |
| 615 }; | 616 }; |
| 616 | 617 |
| 617 //------------------------------------------------------------------------------ | 618 //------------------------------------------------------------------------------ |
| 618 | 619 |
| 619 // CustomHistogram is a histogram for a set of custom integers. | 620 // CustomHistogram is a histogram for a set of custom integers. |
| 620 class CustomHistogram : public Histogram { | 621 class BASE_API CustomHistogram : public Histogram { |
| 621 public: | 622 public: |
| 622 | 623 |
| 623 static scoped_refptr<Histogram> FactoryGet(const std::string& name, | 624 static scoped_refptr<Histogram> FactoryGet(const std::string& name, |
| 624 const std::vector<Sample>& custom_ranges, Flags flags); | 625 const std::vector<Sample>& custom_ranges, Flags flags); |
| 625 | 626 |
| 626 // Overridden from Histogram: | 627 // Overridden from Histogram: |
| 627 virtual ClassType histogram_type() const; | 628 virtual ClassType histogram_type() const; |
| 628 | 629 |
| 629 protected: | 630 protected: |
| 630 CustomHistogram(const std::string& name, | 631 CustomHistogram(const std::string& name, |
| 631 const std::vector<Sample>& custom_ranges); | 632 const std::vector<Sample>& custom_ranges); |
| 632 | 633 |
| 633 // Initialize ranges_ mapping. | 634 // Initialize ranges_ mapping. |
| 634 void InitializedCustomBucketRange(const std::vector<Sample>& custom_ranges); | 635 void InitializedCustomBucketRange(const std::vector<Sample>& custom_ranges); |
| 635 virtual double GetBucketSize(Count current, size_t i) const; | 636 virtual double GetBucketSize(Count current, size_t i) const; |
| 636 | 637 |
| 637 DISALLOW_COPY_AND_ASSIGN(CustomHistogram); | 638 DISALLOW_COPY_AND_ASSIGN(CustomHistogram); |
| 638 }; | 639 }; |
| 639 | 640 |
| 640 //------------------------------------------------------------------------------ | 641 //------------------------------------------------------------------------------ |
| 641 // StatisticsRecorder handles all histograms in the system. It provides a | 642 // StatisticsRecorder handles all histograms in the system. It provides a |
| 642 // general place for histograms to register, and supports a global API for | 643 // general place for histograms to register, and supports a global API for |
| 643 // accessing (i.e., dumping, or graphing) the data in all the histograms. | 644 // accessing (i.e., dumping, or graphing) the data in all the histograms. |
| 644 | 645 |
| 645 class StatisticsRecorder { | 646 class BASE_API StatisticsRecorder { |
| 646 public: | 647 public: |
| 647 typedef std::vector<scoped_refptr<Histogram> > Histograms; | 648 typedef std::vector<scoped_refptr<Histogram> > Histograms; |
| 648 | 649 |
| 649 StatisticsRecorder(); | 650 StatisticsRecorder(); |
| 650 | 651 |
| 651 ~StatisticsRecorder(); | 652 ~StatisticsRecorder(); |
| 652 | 653 |
| 653 // Find out if histograms can now be registered into our list. | 654 // Find out if histograms can now be registered into our list. |
| 654 static bool IsActive(); | 655 static bool IsActive(); |
| 655 | 656 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 696 | 697 |
| 697 // Dump all known histograms to log. | 698 // Dump all known histograms to log. |
| 698 static bool dump_on_exit_; | 699 static bool dump_on_exit_; |
| 699 | 700 |
| 700 DISALLOW_COPY_AND_ASSIGN(StatisticsRecorder); | 701 DISALLOW_COPY_AND_ASSIGN(StatisticsRecorder); |
| 701 }; | 702 }; |
| 702 | 703 |
| 703 } // namespace base | 704 } // namespace base |
| 704 | 705 |
| 705 #endif // BASE_METRICS_HISTOGRAM_H_ | 706 #endif // BASE_METRICS_HISTOGRAM_H_ |
| OLD | NEW |