| OLD | NEW |
| 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 | 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 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 base::TimeDelta maximum, | 389 base::TimeDelta maximum, |
| 390 size_t bucket_count, | 390 size_t bucket_count, |
| 391 int32 flags); | 391 int32 flags); |
| 392 | 392 |
| 393 // Time call for use with DHISTOGRAM*. | 393 // Time call for use with DHISTOGRAM*. |
| 394 // Returns TimeTicks::Now() in debug and TimeTicks() in release build. | 394 // Returns TimeTicks::Now() in debug and TimeTicks() in release build. |
| 395 static TimeTicks DebugNow(); | 395 static TimeTicks DebugNow(); |
| 396 | 396 |
| 397 static void InitializeBucketRanges(Sample minimum, | 397 static void InitializeBucketRanges(Sample minimum, |
| 398 Sample maximum, | 398 Sample maximum, |
| 399 size_t bucket_count, | |
| 400 BucketRanges* ranges); | 399 BucketRanges* ranges); |
| 401 | 400 |
| 402 // This constant if for FindCorruption. Since snapshots of histograms are | 401 // This constant if for FindCorruption. Since snapshots of histograms are |
| 403 // taken asynchronously relative to sampling, and our counting code currently | 402 // taken asynchronously relative to sampling, and our counting code currently |
| 404 // does not prevent race conditions, it is pretty likely that we'll catch a | 403 // does not prevent race conditions, it is pretty likely that we'll catch a |
| 405 // redundant count that doesn't match the sample count. We allow for a | 404 // redundant count that doesn't match the sample count. We allow for a |
| 406 // certain amount of slop before flagging this as an inconsistency. Even with | 405 // certain amount of slop before flagging this as an inconsistency. Even with |
| 407 // an inconsistency, we'll snapshot it again (for UMA in about a half hour), | 406 // an inconsistency, we'll snapshot it again (for UMA in about a half hour), |
| 408 // so we'll eventually get the data, if it was not the result of a corruption. | 407 // so we'll eventually get the data, if it was not the result of a corruption. |
| 409 static const int kCommonRaceBasedCountMismatch; | 408 static const int kCommonRaceBasedCountMismatch; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 430 // converts it to good input: 1. | 429 // converts it to good input: 1. |
| 431 // TODO(kaiwang): Be more restrict and return false for any bad input, and | 430 // TODO(kaiwang): Be more restrict and return false for any bad input, and |
| 432 // make this a readonly validating function. | 431 // make this a readonly validating function. |
| 433 static bool InspectConstructionArguments(const std::string& name, | 432 static bool InspectConstructionArguments(const std::string& name, |
| 434 Sample* minimum, | 433 Sample* minimum, |
| 435 Sample* maximum, | 434 Sample* maximum, |
| 436 size_t* bucket_count); | 435 size_t* bucket_count); |
| 437 | 436 |
| 438 // HistogramBase implementation: | 437 // HistogramBase implementation: |
| 439 virtual HistogramType GetHistogramType() const OVERRIDE; | 438 virtual HistogramType GetHistogramType() const OVERRIDE; |
| 440 virtual bool HasConstructionArguments(Sample minimum, | 439 virtual bool HasConstructionArguments( |
| 441 Sample maximum, | 440 Sample expected_minimum, |
| 442 size_t bucket_count) const OVERRIDE; | 441 Sample expected_maximum, |
| 442 size_t expected_bucket_count) const OVERRIDE; |
| 443 virtual void Add(Sample value) OVERRIDE; | 443 virtual void Add(Sample value) OVERRIDE; |
| 444 virtual scoped_ptr<HistogramSamples> SnapshotSamples() const OVERRIDE; | 444 virtual scoped_ptr<HistogramSamples> SnapshotSamples() const OVERRIDE; |
| 445 virtual void AddSamples(const HistogramSamples& samples) OVERRIDE; | 445 virtual void AddSamples(const HistogramSamples& samples) OVERRIDE; |
| 446 virtual bool AddSamplesFromPickle(PickleIterator* iter) OVERRIDE; | 446 virtual bool AddSamplesFromPickle(PickleIterator* iter) OVERRIDE; |
| 447 virtual void WriteHTMLGraph(std::string* output) const OVERRIDE; | 447 virtual void WriteHTMLGraph(std::string* output) const OVERRIDE; |
| 448 virtual void WriteAscii(std::string* output) const OVERRIDE; | 448 virtual void WriteAscii(std::string* output) const OVERRIDE; |
| 449 | 449 |
| 450 protected: | 450 protected: |
| 451 // |bucket_count| and |ranges| should contain the underflow and overflow | 451 // |ranges| should contain the underflow and overflow buckets. See top |
| 452 // buckets. See top comments for example. | 452 // comments for example. |
| 453 Histogram(const std::string& name, | 453 Histogram(const std::string& name, |
| 454 Sample minimum, | 454 Sample minimum, |
| 455 Sample maximum, | 455 Sample maximum, |
| 456 size_t bucket_count, | |
| 457 const BucketRanges* ranges); | 456 const BucketRanges* ranges); |
| 458 | 457 |
| 459 virtual ~Histogram(); | 458 virtual ~Histogram(); |
| 460 | 459 |
| 461 // HistogramBase implementation: | 460 // HistogramBase implementation: |
| 462 virtual bool SerializeInfoImpl(Pickle* pickle) const OVERRIDE; | 461 virtual bool SerializeInfoImpl(Pickle* pickle) const OVERRIDE; |
| 463 | 462 |
| 464 // Method to override to skip the display of the i'th bucket if it's empty. | 463 // Method to override to skip the display of the i'th bucket if it's empty. |
| 465 virtual bool PrintEmptyBucket(size_t index) const; | 464 virtual bool PrintEmptyBucket(size_t index) const; |
| 466 | 465 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 // WriteJSON calls these. | 513 // WriteJSON calls these. |
| 515 virtual void GetParameters(DictionaryValue* params) const OVERRIDE; | 514 virtual void GetParameters(DictionaryValue* params) const OVERRIDE; |
| 516 | 515 |
| 517 virtual void GetCountAndBucketData(Count* count, | 516 virtual void GetCountAndBucketData(Count* count, |
| 518 int64* sum, | 517 int64* sum, |
| 519 ListValue* buckets) const OVERRIDE; | 518 ListValue* buckets) const OVERRIDE; |
| 520 | 519 |
| 521 // Does not own this object. Should get from StatisticsRecorder. | 520 // Does not own this object. Should get from StatisticsRecorder. |
| 522 const BucketRanges* bucket_ranges_; | 521 const BucketRanges* bucket_ranges_; |
| 523 | 522 |
| 524 Sample declared_min_; // Less than this goes into counts_[0] | 523 Sample declared_min_; // Less than this goes into the first bucket. |
| 525 Sample declared_max_; // Over this goes into counts_[bucket_count_ - 1]. | 524 Sample declared_max_; // Over this goes into the last bucket. |
| 526 size_t bucket_count_; // Dimension of counts_[]. | |
| 527 | 525 |
| 528 // Finally, provide the state that changes with the addition of each new | 526 // Finally, provide the state that changes with the addition of each new |
| 529 // sample. | 527 // sample. |
| 530 scoped_ptr<SampleVector> samples_; | 528 scoped_ptr<SampleVector> samples_; |
| 531 | 529 |
| 532 DISALLOW_COPY_AND_ASSIGN(Histogram); | 530 DISALLOW_COPY_AND_ASSIGN(Histogram); |
| 533 }; | 531 }; |
| 534 | 532 |
| 535 //------------------------------------------------------------------------------ | 533 //------------------------------------------------------------------------------ |
| 536 | 534 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 566 static HistogramBase* FactoryGetWithRangeDescription( | 564 static HistogramBase* FactoryGetWithRangeDescription( |
| 567 const std::string& name, | 565 const std::string& name, |
| 568 Sample minimum, | 566 Sample minimum, |
| 569 Sample maximum, | 567 Sample maximum, |
| 570 size_t bucket_count, | 568 size_t bucket_count, |
| 571 int32 flags, | 569 int32 flags, |
| 572 const DescriptionPair descriptions[]); | 570 const DescriptionPair descriptions[]); |
| 573 | 571 |
| 574 static void InitializeBucketRanges(Sample minimum, | 572 static void InitializeBucketRanges(Sample minimum, |
| 575 Sample maximum, | 573 Sample maximum, |
| 576 size_t bucket_count, | |
| 577 BucketRanges* ranges); | 574 BucketRanges* ranges); |
| 578 | 575 |
| 579 // Overridden from Histogram: | 576 // Overridden from Histogram: |
| 580 virtual HistogramType GetHistogramType() const OVERRIDE; | 577 virtual HistogramType GetHistogramType() const OVERRIDE; |
| 581 | 578 |
| 582 protected: | 579 protected: |
| 583 LinearHistogram(const std::string& name, | 580 LinearHistogram(const std::string& name, |
| 584 Sample minimum, | 581 Sample minimum, |
| 585 Sample maximum, | 582 Sample maximum, |
| 586 size_t bucket_count, | |
| 587 const BucketRanges* ranges); | 583 const BucketRanges* ranges); |
| 588 | 584 |
| 589 virtual double GetBucketSize(Count current, size_t i) const OVERRIDE; | 585 virtual double GetBucketSize(Count current, size_t i) const OVERRIDE; |
| 590 | 586 |
| 591 // If we have a description for a bucket, then return that. Otherwise | 587 // If we have a description for a bucket, then return that. Otherwise |
| 592 // let parent class provide a (numeric) description. | 588 // let parent class provide a (numeric) description. |
| 593 virtual const std::string GetAsciiBucketRange(size_t i) const OVERRIDE; | 589 virtual const std::string GetAsciiBucketRange(size_t i) const OVERRIDE; |
| 594 | 590 |
| 595 // Skip printing of name for numeric range if we have a name (and if this is | 591 // Skip printing of name for numeric range if we have a name (and if this is |
| 596 // an empty bucket). | 592 // an empty bucket). |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 670 static bool ValidateCustomRanges(const std::vector<Sample>& custom_ranges); | 666 static bool ValidateCustomRanges(const std::vector<Sample>& custom_ranges); |
| 671 static BucketRanges* CreateBucketRangesFromCustomRanges( | 667 static BucketRanges* CreateBucketRangesFromCustomRanges( |
| 672 const std::vector<Sample>& custom_ranges); | 668 const std::vector<Sample>& custom_ranges); |
| 673 | 669 |
| 674 DISALLOW_COPY_AND_ASSIGN(CustomHistogram); | 670 DISALLOW_COPY_AND_ASSIGN(CustomHistogram); |
| 675 }; | 671 }; |
| 676 | 672 |
| 677 } // namespace base | 673 } // namespace base |
| 678 | 674 |
| 679 #endif // BASE_METRICS_HISTOGRAM_H_ | 675 #endif // BASE_METRICS_HISTOGRAM_H_ |
| OLD | NEW |