OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #ifndef COMPONENTS_METRICS_CHROMEOS_METRIC_SAMPLE_H_ |
| 6 #define COMPONENTS_METRICS_CHROMEOS_METRIC_SAMPLE_H_ |
| 7 |
| 8 #include <string> |
| 9 |
| 10 #include "base/gtest_prod_util.h" |
| 11 #include "base/macros.h" |
| 12 #include "base/memory/scoped_ptr.h" |
| 13 |
| 14 namespace metrics { |
| 15 |
| 16 // This class is used by libmetrics (ChromeOS) to serialize |
| 17 // and deserialize measurements to send them to a metrics sending service. |
| 18 // It is meant to be a simple container with serialization functions. |
| 19 class MetricSample { |
| 20 public: |
| 21 // Types of metric sample used. |
| 22 enum SampleType { |
| 23 CRASH, |
| 24 HISTOGRAM, |
| 25 LINEAR_HISTOGRAM, |
| 26 SPARSE_HISTOGRAM, |
| 27 USER_ACTION |
| 28 }; |
| 29 |
| 30 ~MetricSample(); |
| 31 |
| 32 // Return true if the sample is valid (can be serialized without ambiguity). |
| 33 // |
| 34 // This function should be used to filter bad samples before serializing them. |
| 35 bool IsValid() const; |
| 36 |
| 37 // Getters for type and name. All types of metrics have these so we do not |
| 38 // need to check the type. |
| 39 SampleType type() const { return type_; } |
| 40 const std::string& name() const { return name_; } |
| 41 |
| 42 // Getters for sample, min, max, bucket_count. |
| 43 // Check the metric type to make sure the request make sense. (ex: a crash |
| 44 // sample does not have a bucket_count so we crash if we call bucket_count() |
| 45 // on it.) |
| 46 const int sample() const; |
| 47 const int min() const; |
| 48 const int max() const; |
| 49 const int bucket_count() const; |
| 50 |
| 51 // Return a serialized version of the sample. |
| 52 // |
| 53 // The serialized message for each type is: |
| 54 // crash: crash\0|name_|\0 |
| 55 // user action: useraction\0|name_|\0 |
| 56 // histogram: histogram\0|name_| |sample_| |min_| |max_| |bucket_count_|\0 |
| 57 // sparsehistogram: sparsehistogram\0|name_| |sample_|\0 |
| 58 // linearhistogram: linearhistogram\0|name_| |sample_| |max_|\0 |
| 59 std::string ToString() const; |
| 60 |
| 61 // Build a crash sample |
| 62 static scoped_ptr<MetricSample> CrashSample(const std::string& crash_name); |
| 63 |
| 64 // Build a histogram sample |
| 65 static scoped_ptr<MetricSample> HistogramSample( |
| 66 const std::string& histogram_name, |
| 67 int sample, |
| 68 int min, |
| 69 int max, |
| 70 int bucket_count); |
| 71 // Deserialize a histogram sample |
| 72 static scoped_ptr<MetricSample> ReadHistogram(const std::string& serialized); |
| 73 |
| 74 // Build a sparse histogram sample |
| 75 static scoped_ptr<MetricSample> SparseHistogramSample( |
| 76 const std::string& histogram_name, |
| 77 int sample); |
| 78 // Deserialize a sparse histogram sample |
| 79 static scoped_ptr<MetricSample> ReadSparseHistogram( |
| 80 const std::string& serialized); |
| 81 |
| 82 // Build a linear histogram sample |
| 83 static scoped_ptr<MetricSample> LinearHistogramSample( |
| 84 const std::string& histogram_name, |
| 85 int sample, |
| 86 int max); |
| 87 // Deserialize a linear histogram sample |
| 88 static scoped_ptr<MetricSample> ReadLinearHistogram( |
| 89 const std::string& serialized); |
| 90 |
| 91 // Build a user action sample |
| 92 static scoped_ptr<MetricSample> UserActionSample( |
| 93 const std::string& action_name); |
| 94 |
| 95 // Returns true if sample and this object represent the same sample (type, |
| 96 // name, sample, min, max, bucket_count match) |
| 97 bool IsEqual(const MetricSample* sample); |
| 98 |
| 99 private: |
| 100 MetricSample(SampleType sample_type, |
| 101 const std::string& metric_name, |
| 102 const int sample, |
| 103 const int min, |
| 104 const int max, |
| 105 const int bucket_count); |
| 106 |
| 107 const SampleType type_; |
| 108 const std::string name_; |
| 109 const int sample_; |
| 110 const int min_; |
| 111 const int max_; |
| 112 const int bucket_count_; |
| 113 |
| 114 DISALLOW_COPY_AND_ASSIGN(MetricSample); |
| 115 }; |
| 116 |
| 117 } // namespace metrics |
| 118 |
| 119 #endif // COMPONENTS_METRICS_CHROMEOS_METRIC_SAMPLE_H_ |
OLD | NEW |