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

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

Issue 8506038: Support using UMA_HISTOGRAM_CUSTOM_ENUMERATION from the renderer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | base/metrics/histogram.cc » ('j') | 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) 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 30 matching lines...) Expand all
41 #define BASE_METRICS_HISTOGRAM_H_ 41 #define BASE_METRICS_HISTOGRAM_H_
42 #pragma once 42 #pragma once
43 43
44 #include <list> 44 #include <list>
45 #include <map> 45 #include <map>
46 #include <string> 46 #include <string>
47 #include <vector> 47 #include <vector>
48 48
49 #include "base/atomicops.h" 49 #include "base/atomicops.h"
50 #include "base/base_export.h" 50 #include "base/base_export.h"
51 #include "base/compiler_specific.h"
51 #include "base/gtest_prod_util.h" 52 #include "base/gtest_prod_util.h"
52 #include "base/logging.h" 53 #include "base/logging.h"
53 #include "base/time.h" 54 #include "base/time.h"
54 55
55 class Pickle; 56 class Pickle;
56 57
57 namespace base { 58 namespace base {
58 59
59 class Lock; 60 class Lock;
60 //------------------------------------------------------------------------------ 61 //------------------------------------------------------------------------------
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 // Convenience methods for serializing/deserializing the histograms. 476 // Convenience methods for serializing/deserializing the histograms.
476 // Histograms from Renderer process are serialized and sent to the browser. 477 // Histograms from Renderer process are serialized and sent to the browser.
477 // Browser process reconstructs the histogram from the pickled version 478 // Browser process reconstructs the histogram from the pickled version
478 // accumulates the browser-side shadow copy of histograms (that mirror 479 // accumulates the browser-side shadow copy of histograms (that mirror
479 // histograms created in the renderer). 480 // histograms created in the renderer).
480 481
481 // Serialize the given snapshot of a Histogram into a String. Uses 482 // Serialize the given snapshot of a Histogram into a String. Uses
482 // Pickle class to flatten the object. 483 // Pickle class to flatten the object.
483 static std::string SerializeHistogramInfo(const Histogram& histogram, 484 static std::string SerializeHistogramInfo(const Histogram& histogram,
484 const SampleSet& snapshot); 485 const SampleSet& snapshot);
486
485 // The following method accepts a list of pickled histograms and 487 // The following method accepts a list of pickled histograms and
486 // builds a histogram and updates shadow copy of histogram data in the 488 // builds a histogram and updates shadow copy of histogram data in the
487 // browser process. 489 // browser process.
488 static bool DeserializeHistogramInfo(const std::string& histogram_info); 490 static bool DeserializeHistogramInfo(const std::string& histogram_info);
489 491
490 // Check to see if bucket ranges, counts and tallies in the snapshot are 492 // Check to see if bucket ranges, counts and tallies in the snapshot are
491 // consistent with the bucket ranges and checksums in our histogram. This can 493 // consistent with the bucket ranges and checksums in our histogram. This can
492 // produce a false-alarm if a race occurred in the reading of the data during 494 // produce a false-alarm if a race occurred in the reading of the data during
493 // a SnapShot process, but should otherwise be false at all times (unless we 495 // a SnapShot process, but should otherwise be false at all times (unless we
494 // have memory over-writes, or DRAM failures). 496 // have memory over-writes, or DRAM failures).
(...skipping 28 matching lines...) Expand all
523 bool HasValidRangeChecksum() const; 525 bool HasValidRangeChecksum() const;
524 526
525 protected: 527 protected:
526 Histogram(const std::string& name, Sample minimum, 528 Histogram(const std::string& name, Sample minimum,
527 Sample maximum, size_t bucket_count); 529 Sample maximum, size_t bucket_count);
528 Histogram(const std::string& name, TimeDelta minimum, 530 Histogram(const std::string& name, TimeDelta minimum,
529 TimeDelta maximum, size_t bucket_count); 531 TimeDelta maximum, size_t bucket_count);
530 532
531 virtual ~Histogram(); 533 virtual ~Histogram();
532 534
535 // Serialize the histogram's ranges to |*pickle|, returning true on success.
536 // Most subclasses can leave this no-op implementation, but some will want to
537 // override it, especially if the ranges cannot be re-derived from other
538 // serialized parameters.
539 virtual bool SerializeRanges(Pickle* pickle) const;
540
533 // Initialize ranges_ mapping in cached_ranges_. 541 // Initialize ranges_ mapping in cached_ranges_.
534 void InitializeBucketRange(); 542 void InitializeBucketRange();
535 543
536 // Method to override to skip the display of the i'th bucket if it's empty. 544 // Method to override to skip the display of the i'th bucket if it's empty.
537 virtual bool PrintEmptyBucket(size_t index) const; 545 virtual bool PrintEmptyBucket(size_t index) const;
538 546
539 //---------------------------------------------------------------------------- 547 //----------------------------------------------------------------------------
540 // Methods to override to create histogram with different bucket widths. 548 // Methods to override to create histogram with different bucket widths.
541 //---------------------------------------------------------------------------- 549 //----------------------------------------------------------------------------
542 // Find bucket to increment for sample value. 550 // Find bucket to increment for sample value.
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 virtual ClassType histogram_type() const; 740 virtual ClassType histogram_type() const;
733 741
734 // Helper method for transforming an array of valid enumeration values 742 // Helper method for transforming an array of valid enumeration values
735 // to the std::vector<int> expected by HISTOGRAM_CUSTOM_ENUMERATION. 743 // to the std::vector<int> expected by HISTOGRAM_CUSTOM_ENUMERATION.
736 // This function ensures that a guard bucket exists right after any 744 // This function ensures that a guard bucket exists right after any
737 // valid sample value (unless the next higher sample is also a valid value), 745 // valid sample value (unless the next higher sample is also a valid value),
738 // so that invalid samples never fall into the same bucket as valid samples. 746 // so that invalid samples never fall into the same bucket as valid samples.
739 static std::vector<Sample> ArrayToCustomRanges(const Sample* values, 747 static std::vector<Sample> ArrayToCustomRanges(const Sample* values,
740 size_t num_values); 748 size_t num_values);
741 749
750 // Helper for deserializing CustomHistograms. |*ranges| should already be
751 // correctly sized before this call. Return true on success.
752 static bool DeserializeRanges(void** iter, const Pickle& pickle,
753 std::vector<Histogram::Sample>* ranges);
754
755
742 protected: 756 protected:
743 CustomHistogram(const std::string& name, 757 CustomHistogram(const std::string& name,
744 const std::vector<Sample>& custom_ranges); 758 const std::vector<Sample>& custom_ranges);
745 759
760 virtual bool SerializeRanges(Pickle* pickle) const OVERRIDE;
761
746 // Initialize ranges_ mapping in cached_ranges_. 762 // Initialize ranges_ mapping in cached_ranges_.
747 void InitializedCustomBucketRange(const std::vector<Sample>& custom_ranges); 763 void InitializedCustomBucketRange(const std::vector<Sample>& custom_ranges);
748 virtual double GetBucketSize(Count current, size_t i) const; 764 virtual double GetBucketSize(Count current, size_t i) const;
749 765
750 DISALLOW_COPY_AND_ASSIGN(CustomHistogram); 766 DISALLOW_COPY_AND_ASSIGN(CustomHistogram);
751 }; 767 };
752 768
753 //------------------------------------------------------------------------------ 769 //------------------------------------------------------------------------------
754 // StatisticsRecorder handles all histograms in the system. It provides a 770 // StatisticsRecorder handles all histograms in the system. It provides a
755 // general place for histograms to register, and supports a global API for 771 // general place for histograms to register, and supports a global API for
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 // of our data, and to quickly see if some other CachedRanges instance is 884 // of our data, and to quickly see if some other CachedRanges instance is
869 // possibly Equal() to this instance. 885 // possibly Equal() to this instance.
870 uint32 range_checksum_; 886 uint32 range_checksum_;
871 887
872 DISALLOW_COPY_AND_ASSIGN(CachedRanges); 888 DISALLOW_COPY_AND_ASSIGN(CachedRanges);
873 }; 889 };
874 890
875 } // namespace base 891 } // namespace base
876 892
877 #endif // BASE_METRICS_HISTOGRAM_H_ 893 #endif // BASE_METRICS_HISTOGRAM_H_
OLDNEW
« no previous file with comments | « no previous file | base/metrics/histogram.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698