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

Unified Diff: components/metrics/chromeos/metric_sample.h

Issue 227873002: Create a histogram serialization mechanism in components/metrics (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Simplify the code to only one metric sample class. Created 6 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: components/metrics/chromeos/metric_sample.h
diff --git a/components/metrics/chromeos/metric_sample.h b/components/metrics/chromeos/metric_sample.h
new file mode 100644
index 0000000000000000000000000000000000000000..9a940bcfba26030d6eec243ae9779efc3215770b
--- /dev/null
+++ b/components/metrics/chromeos/metric_sample.h
@@ -0,0 +1,119 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_METRICS_CHROMEOS_METRIC_SAMPLE_H_
+#define COMPONENTS_METRICS_CHROMEOS_METRIC_SAMPLE_H_
+
+#include <string>
+
+#include "base/gtest_prod_util.h"
+#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
+
+namespace metrics {
+
+// This class and its subclasses are used by libmetrics (ChromeOS) to serialize
+// and deserialize measurements to send them to a metrics sending service.
+// It is meant to be a simple container with serialization functions.
+class MetricSample {
+ public:
+ // Types of metric sample used.
+ enum SampleType {
+ CRASH,
+ HISTOGRAM,
+ LINEAR_HISTOGRAM,
+ SPARSE_HISTOGRAM,
+ USER_ACTION
+ };
+
+ ~MetricSample();
+
+ // Return true if the sample is valid (can be serialized without ambiguity).
+ //
+ // This function should be used to filter bad samples before serializing them.
+ bool IsValid() const;
+
+ // Getters for type and name. All types of metrics have these so we do not
+ // need to check the type.
+ SampleType type() const { return type_; }
+ const std::string& name() const { return name_; }
+
+ // Getters for sample, min, max, bucket_count.
+ // Check the metric type to make sure the request make sense. (ex: a crash
+ // sample does not have a bucket_count so we crash if we call bucket_count()
+ // on it.)
+ const int sample() const;
+ const int min() const;
+ const int max() const;
+ const int bucket_count() const;
+
+ // Return a serialized version of the sample.
+ //
+ // The serialized message for each type is:
+ // crash: crash\0|name_|\0
+ // user action: useraction\0|name_|\0
+ // histogram: histogram\0|name_| |sample_| |min_| |max_| |bucket_count_|\0
+ // sparsehistogram: sparsehistogram\0|name_| |sample_|\0
+ // linearhistogram: linearhistogram\0|name_| |sample_| |max_|\0
+ std::string ToString() const;
+
+ // Build a Crash
+ static scoped_ptr<MetricSample> CrashSample(const std::string& crash_name);
+
+ // Build a Histogram
Luigi Semenzato 2014/05/12 23:04:48 "Build a histogram sample" may be better.
+ static scoped_ptr<MetricSample> HistogramSample(
+ const std::string& histogram_name,
+ int sample,
+ int min,
+ int max,
+ int bucket_count);
+ // Deserialize a Histogram
Luigi Semenzato 2014/05/12 23:04:48 ... and also here and the following places.
+ static scoped_ptr<MetricSample> ReadHistogram(const std::string& serialized);
+
+ // Build a SparseHistogram
+ static scoped_ptr<MetricSample> SparseHistogramSample(
+ const std::string& histogram_name,
+ int sample);
+ // Deserialize a SparseHistogram
+ static scoped_ptr<MetricSample> ReadSparseHistogram(
+ const std::string& serialized);
+
+ // Build a LinearHistogram
+ static scoped_ptr<MetricSample> LinearHistogramSample(
+ const std::string& histogram_name,
+ int sample,
+ int max);
+ // Deserialize a LinearHistogram
+ static scoped_ptr<MetricSample> ReadLinearHistogram(
+ const std::string& serialized);
+
+ // Build a UserAction
+ static scoped_ptr<MetricSample> UserActionSample(
+ const std::string& action_name);
+
+ // Returns true if sample and this object represent the same sample (type,
+ // name, sample, min, max, bucket_count match)
+ bool IsEqual(MetricSample* sample);
gauravsh 2014/05/12 22:53:10 This can be const?
+
+ private:
+ MetricSample(SampleType sample_type,
+ const std::string& metric_name,
+ const int sample,
+ const int min,
+ const int max,
+ const int bucket_count);
+
+ const SampleType type_;
+ const std::string name_;
+ const int sample_;
+ const int min_;
+ const int max_;
+ const int bucket_count_;
+
+ DISALLOW_COPY_AND_ASSIGN(MetricSample);
+};
+
+} // namespace metrics
+
+#endif // COMPONENTS_METRICS_CHROMEOS_METRIC_SAMPLE_H_

Powered by Google App Engine
This is Rietveld 408576698