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

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

Issue 614103004: replace 'virtual ... OVERRIDE' with '... override' (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: process base/ Created 6 years, 2 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
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 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 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 // certain amount of slop before flagging this as an inconsistency. Even with 352 // certain amount of slop before flagging this as an inconsistency. Even with
353 // an inconsistency, we'll snapshot it again (for UMA in about a half hour), 353 // an inconsistency, we'll snapshot it again (for UMA in about a half hour),
354 // so we'll eventually get the data, if it was not the result of a corruption. 354 // so we'll eventually get the data, if it was not the result of a corruption.
355 static const int kCommonRaceBasedCountMismatch; 355 static const int kCommonRaceBasedCountMismatch;
356 356
357 // Check to see if bucket ranges, counts and tallies in the snapshot are 357 // Check to see if bucket ranges, counts and tallies in the snapshot are
358 // consistent with the bucket ranges and checksums in our histogram. This can 358 // consistent with the bucket ranges and checksums in our histogram. This can
359 // produce a false-alarm if a race occurred in the reading of the data during 359 // produce a false-alarm if a race occurred in the reading of the data during
360 // a SnapShot process, but should otherwise be false at all times (unless we 360 // a SnapShot process, but should otherwise be false at all times (unless we
361 // have memory over-writes, or DRAM failures). 361 // have memory over-writes, or DRAM failures).
362 virtual int FindCorruption(const HistogramSamples& samples) const OVERRIDE; 362 int FindCorruption(const HistogramSamples& samples) const override;
363 363
364 //---------------------------------------------------------------------------- 364 //----------------------------------------------------------------------------
365 // Accessors for factory construction, serialization and testing. 365 // Accessors for factory construction, serialization and testing.
366 //---------------------------------------------------------------------------- 366 //----------------------------------------------------------------------------
367 Sample declared_min() const { return declared_min_; } 367 Sample declared_min() const { return declared_min_; }
368 Sample declared_max() const { return declared_max_; } 368 Sample declared_max() const { return declared_max_; }
369 virtual Sample ranges(size_t i) const; 369 virtual Sample ranges(size_t i) const;
370 virtual size_t bucket_count() const; 370 virtual size_t bucket_count() const;
371 const BucketRanges* bucket_ranges() const { return bucket_ranges_; } 371 const BucketRanges* bucket_ranges() const { return bucket_ranges_; }
372 372
373 // This function validates histogram construction arguments. It returns false 373 // This function validates histogram construction arguments. It returns false
374 // if some of the arguments are totally bad. 374 // if some of the arguments are totally bad.
375 // Note. Currently it allow some bad input, e.g. 0 as minimum, but silently 375 // Note. Currently it allow some bad input, e.g. 0 as minimum, but silently
376 // converts it to good input: 1. 376 // converts it to good input: 1.
377 // TODO(kaiwang): Be more restrict and return false for any bad input, and 377 // TODO(kaiwang): Be more restrict and return false for any bad input, and
378 // make this a readonly validating function. 378 // make this a readonly validating function.
379 static bool InspectConstructionArguments(const std::string& name, 379 static bool InspectConstructionArguments(const std::string& name,
380 Sample* minimum, 380 Sample* minimum,
381 Sample* maximum, 381 Sample* maximum,
382 size_t* bucket_count); 382 size_t* bucket_count);
383 383
384 // HistogramBase implementation: 384 // HistogramBase implementation:
385 virtual HistogramType GetHistogramType() const OVERRIDE; 385 HistogramType GetHistogramType() const override;
386 virtual bool HasConstructionArguments( 386 bool HasConstructionArguments(Sample expected_minimum,
387 Sample expected_minimum, 387 Sample expected_maximum,
388 Sample expected_maximum, 388 size_t expected_bucket_count) const override;
389 size_t expected_bucket_count) const OVERRIDE; 389 void Add(Sample value) override;
390 virtual void Add(Sample value) OVERRIDE; 390 scoped_ptr<HistogramSamples> SnapshotSamples() const override;
391 virtual scoped_ptr<HistogramSamples> SnapshotSamples() const OVERRIDE; 391 void AddSamples(const HistogramSamples& samples) override;
392 virtual void AddSamples(const HistogramSamples& samples) OVERRIDE; 392 bool AddSamplesFromPickle(PickleIterator* iter) override;
393 virtual bool AddSamplesFromPickle(PickleIterator* iter) OVERRIDE; 393 void WriteHTMLGraph(std::string* output) const override;
394 virtual void WriteHTMLGraph(std::string* output) const OVERRIDE; 394 void WriteAscii(std::string* output) const override;
395 virtual void WriteAscii(std::string* output) const OVERRIDE;
396 395
397 protected: 396 protected:
398 // |ranges| should contain the underflow and overflow buckets. See top 397 // |ranges| should contain the underflow and overflow buckets. See top
399 // comments for example. 398 // comments for example.
400 Histogram(const std::string& name, 399 Histogram(const std::string& name,
401 Sample minimum, 400 Sample minimum,
402 Sample maximum, 401 Sample maximum,
403 const BucketRanges* ranges); 402 const BucketRanges* ranges);
404 403
405 virtual ~Histogram(); 404 virtual ~Histogram();
406 405
407 // HistogramBase implementation: 406 // HistogramBase implementation:
408 virtual bool SerializeInfoImpl(Pickle* pickle) const OVERRIDE; 407 bool SerializeInfoImpl(Pickle* pickle) const override;
409 408
410 // Method to override to skip the display of the i'th bucket if it's empty. 409 // Method to override to skip the display of the i'th bucket if it's empty.
411 virtual bool PrintEmptyBucket(size_t index) const; 410 virtual bool PrintEmptyBucket(size_t index) const;
412 411
413 // Get normalized size, relative to the ranges(i). 412 // Get normalized size, relative to the ranges(i).
414 virtual double GetBucketSize(Count current, size_t i) const; 413 virtual double GetBucketSize(Count current, size_t i) const;
415 414
416 // Return a string description of what goes in a given bucket. 415 // Return a string description of what goes in a given bucket.
417 // Most commonly this is the numeric value, but in derived classes it may 416 // Most commonly this is the numeric value, but in derived classes it may
418 // be a name (or string description) given to the bucket. 417 // be a name (or string description) given to the bucket.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 Count sample_count, 450 Count sample_count,
452 std::string* output) const; 451 std::string* output) const;
453 452
454 // Write information about previous, current, and next buckets. 453 // Write information about previous, current, and next buckets.
455 // Information such as cumulative percentage, etc. 454 // Information such as cumulative percentage, etc.
456 void WriteAsciiBucketContext(const int64 past, const Count current, 455 void WriteAsciiBucketContext(const int64 past, const Count current,
457 const int64 remaining, const size_t i, 456 const int64 remaining, const size_t i,
458 std::string* output) const; 457 std::string* output) const;
459 458
460 // WriteJSON calls these. 459 // WriteJSON calls these.
461 virtual void GetParameters(DictionaryValue* params) const OVERRIDE; 460 void GetParameters(DictionaryValue* params) const override;
462 461
463 virtual void GetCountAndBucketData(Count* count, 462 void GetCountAndBucketData(Count* count,
464 int64* sum, 463 int64* sum,
465 ListValue* buckets) const OVERRIDE; 464 ListValue* buckets) const override;
466 465
467 // Does not own this object. Should get from StatisticsRecorder. 466 // Does not own this object. Should get from StatisticsRecorder.
468 const BucketRanges* bucket_ranges_; 467 const BucketRanges* bucket_ranges_;
469 468
470 Sample declared_min_; // Less than this goes into the first bucket. 469 Sample declared_min_; // Less than this goes into the first bucket.
471 Sample declared_max_; // Over this goes into the last bucket. 470 Sample declared_max_; // Over this goes into the last bucket.
472 471
473 // Finally, provide the state that changes with the addition of each new 472 // Finally, provide the state that changes with the addition of each new
474 // sample. 473 // sample.
475 scoped_ptr<SampleVector> samples_; 474 scoped_ptr<SampleVector> samples_;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 Sample maximum, 513 Sample maximum,
515 size_t bucket_count, 514 size_t bucket_count,
516 int32 flags, 515 int32 flags,
517 const DescriptionPair descriptions[]); 516 const DescriptionPair descriptions[]);
518 517
519 static void InitializeBucketRanges(Sample minimum, 518 static void InitializeBucketRanges(Sample minimum,
520 Sample maximum, 519 Sample maximum,
521 BucketRanges* ranges); 520 BucketRanges* ranges);
522 521
523 // Overridden from Histogram: 522 // Overridden from Histogram:
524 virtual HistogramType GetHistogramType() const OVERRIDE; 523 HistogramType GetHistogramType() const override;
525 524
526 protected: 525 protected:
527 LinearHistogram(const std::string& name, 526 LinearHistogram(const std::string& name,
528 Sample minimum, 527 Sample minimum,
529 Sample maximum, 528 Sample maximum,
530 const BucketRanges* ranges); 529 const BucketRanges* ranges);
531 530
532 virtual double GetBucketSize(Count current, size_t i) const OVERRIDE; 531 double GetBucketSize(Count current, size_t i) const override;
533 532
534 // If we have a description for a bucket, then return that. Otherwise 533 // If we have a description for a bucket, then return that. Otherwise
535 // let parent class provide a (numeric) description. 534 // let parent class provide a (numeric) description.
536 virtual const std::string GetAsciiBucketRange(size_t i) const OVERRIDE; 535 const std::string GetAsciiBucketRange(size_t i) const override;
537 536
538 // Skip printing of name for numeric range if we have a name (and if this is 537 // Skip printing of name for numeric range if we have a name (and if this is
539 // an empty bucket). 538 // an empty bucket).
540 virtual bool PrintEmptyBucket(size_t index) const OVERRIDE; 539 bool PrintEmptyBucket(size_t index) const override;
541 540
542 private: 541 private:
543 friend BASE_EXPORT_PRIVATE HistogramBase* DeserializeHistogramInfo( 542 friend BASE_EXPORT_PRIVATE HistogramBase* DeserializeHistogramInfo(
544 PickleIterator* iter); 543 PickleIterator* iter);
545 static HistogramBase* DeserializeInfoImpl(PickleIterator* iter); 544 static HistogramBase* DeserializeInfoImpl(PickleIterator* iter);
546 545
547 // For some ranges, we store a printable description of a bucket range. 546 // For some ranges, we store a printable description of a bucket range.
548 // If there is no description, then GetAsciiBucketRange() uses parent class 547 // If there is no description, then GetAsciiBucketRange() uses parent class
549 // to provide a description. 548 // to provide a description.
550 typedef std::map<Sample, std::string> BucketDescriptionMap; 549 typedef std::map<Sample, std::string> BucketDescriptionMap;
551 BucketDescriptionMap bucket_description_; 550 BucketDescriptionMap bucket_description_;
552 551
553 DISALLOW_COPY_AND_ASSIGN(LinearHistogram); 552 DISALLOW_COPY_AND_ASSIGN(LinearHistogram);
554 }; 553 };
555 554
556 //------------------------------------------------------------------------------ 555 //------------------------------------------------------------------------------
557 556
558 // BooleanHistogram is a histogram for booleans. 557 // BooleanHistogram is a histogram for booleans.
559 class BASE_EXPORT BooleanHistogram : public LinearHistogram { 558 class BASE_EXPORT BooleanHistogram : public LinearHistogram {
560 public: 559 public:
561 static HistogramBase* FactoryGet(const std::string& name, int32 flags); 560 static HistogramBase* FactoryGet(const std::string& name, int32 flags);
562 561
563 virtual HistogramType GetHistogramType() const OVERRIDE; 562 HistogramType GetHistogramType() const override;
564 563
565 private: 564 private:
566 BooleanHistogram(const std::string& name, const BucketRanges* ranges); 565 BooleanHistogram(const std::string& name, const BucketRanges* ranges);
567 566
568 friend BASE_EXPORT_PRIVATE HistogramBase* DeserializeHistogramInfo( 567 friend BASE_EXPORT_PRIVATE HistogramBase* DeserializeHistogramInfo(
569 PickleIterator* iter); 568 PickleIterator* iter);
570 static HistogramBase* DeserializeInfoImpl(PickleIterator* iter); 569 static HistogramBase* DeserializeInfoImpl(PickleIterator* iter);
571 570
572 DISALLOW_COPY_AND_ASSIGN(BooleanHistogram); 571 DISALLOW_COPY_AND_ASSIGN(BooleanHistogram);
573 }; 572 };
574 573
575 //------------------------------------------------------------------------------ 574 //------------------------------------------------------------------------------
576 575
577 // CustomHistogram is a histogram for a set of custom integers. 576 // CustomHistogram is a histogram for a set of custom integers.
578 class BASE_EXPORT CustomHistogram : public Histogram { 577 class BASE_EXPORT CustomHistogram : public Histogram {
579 public: 578 public:
580 // |custom_ranges| contains a vector of limits on ranges. Each limit should be 579 // |custom_ranges| contains a vector of limits on ranges. Each limit should be
581 // > 0 and < kSampleType_MAX. (Currently 0 is still accepted for backward 580 // > 0 and < kSampleType_MAX. (Currently 0 is still accepted for backward
582 // compatibility). The limits can be unordered or contain duplication, but 581 // compatibility). The limits can be unordered or contain duplication, but
583 // client should not depend on this. 582 // client should not depend on this.
584 static HistogramBase* FactoryGet(const std::string& name, 583 static HistogramBase* FactoryGet(const std::string& name,
585 const std::vector<Sample>& custom_ranges, 584 const std::vector<Sample>& custom_ranges,
586 int32 flags); 585 int32 flags);
587 586
588 // Overridden from Histogram: 587 // Overridden from Histogram:
589 virtual HistogramType GetHistogramType() const OVERRIDE; 588 HistogramType GetHistogramType() const override;
590 589
591 // Helper method for transforming an array of valid enumeration values 590 // Helper method for transforming an array of valid enumeration values
592 // to the std::vector<int> expected by UMA_HISTOGRAM_CUSTOM_ENUMERATION. 591 // to the std::vector<int> expected by UMA_HISTOGRAM_CUSTOM_ENUMERATION.
593 // This function ensures that a guard bucket exists right after any 592 // This function ensures that a guard bucket exists right after any
594 // valid sample value (unless the next higher sample is also a valid value), 593 // valid sample value (unless the next higher sample is also a valid value),
595 // so that invalid samples never fall into the same bucket as valid samples. 594 // so that invalid samples never fall into the same bucket as valid samples.
596 // TODO(kaiwang): Change name to ArrayToCustomEnumRanges. 595 // TODO(kaiwang): Change name to ArrayToCustomEnumRanges.
597 static std::vector<Sample> ArrayToCustomRanges(const Sample* values, 596 static std::vector<Sample> ArrayToCustomRanges(const Sample* values,
598 size_t num_values); 597 size_t num_values);
599 protected: 598 protected:
600 CustomHistogram(const std::string& name, 599 CustomHistogram(const std::string& name,
601 const BucketRanges* ranges); 600 const BucketRanges* ranges);
602 601
603 // HistogramBase implementation: 602 // HistogramBase implementation:
604 virtual bool SerializeInfoImpl(Pickle* pickle) const OVERRIDE; 603 bool SerializeInfoImpl(Pickle* pickle) const override;
605 604
606 virtual double GetBucketSize(Count current, size_t i) const OVERRIDE; 605 double GetBucketSize(Count current, size_t i) const override;
607 606
608 private: 607 private:
609 friend BASE_EXPORT_PRIVATE HistogramBase* DeserializeHistogramInfo( 608 friend BASE_EXPORT_PRIVATE HistogramBase* DeserializeHistogramInfo(
610 PickleIterator* iter); 609 PickleIterator* iter);
611 static HistogramBase* DeserializeInfoImpl(PickleIterator* iter); 610 static HistogramBase* DeserializeInfoImpl(PickleIterator* iter);
612 611
613 static bool ValidateCustomRanges(const std::vector<Sample>& custom_ranges); 612 static bool ValidateCustomRanges(const std::vector<Sample>& custom_ranges);
614 static BucketRanges* CreateBucketRangesFromCustomRanges( 613 static BucketRanges* CreateBucketRangesFromCustomRanges(
615 const std::vector<Sample>& custom_ranges); 614 const std::vector<Sample>& custom_ranges);
616 615
617 DISALLOW_COPY_AND_ASSIGN(CustomHistogram); 616 DISALLOW_COPY_AND_ASSIGN(CustomHistogram);
618 }; 617 };
619 618
620 } // namespace base 619 } // namespace base
621 620
622 #endif // BASE_METRICS_HISTOGRAM_H_ 621 #endif // BASE_METRICS_HISTOGRAM_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698