xref: /aosp_15_r20/external/cronet/components/metrics/metrics_data_validation.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2021 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "components/metrics/metrics_data_validation.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include "base/feature_list.h"
8*6777b538SAndroid Build Coastguard Worker #include "base/metrics/field_trial_params.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/numerics/safe_conversions.h"
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker namespace metrics {
12*6777b538SAndroid Build Coastguard Worker namespace internal {
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker // Used to assess the reliability of field trial data by injecting different
15*6777b538SAndroid Build Coastguard Worker // levels of effects to pseudo metrics. These pseudo metrics are just mirrors of
16*6777b538SAndroid Build Coastguard Worker // some existing metrics.
17*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kPseudoMetricsEffectFeature,
18*6777b538SAndroid Build Coastguard Worker              "UMAPseudoMetricsEffect",
19*6777b538SAndroid Build Coastguard Worker              base::FEATURE_DISABLED_BY_DEFAULT);
20*6777b538SAndroid Build Coastguard Worker 
21*6777b538SAndroid Build Coastguard Worker // The multiplicative factor to apply to all samples. Modified samples will be
22*6777b538SAndroid Build Coastguard Worker // recorded in a pseudo metric alongside with the real metric.
23*6777b538SAndroid Build Coastguard Worker const base::FeatureParam<double> kMultiplicativeFactor{
24*6777b538SAndroid Build Coastguard Worker     &kPseudoMetricsEffectFeature, "multiplicative_factor", 1.0};
25*6777b538SAndroid Build Coastguard Worker 
26*6777b538SAndroid Build Coastguard Worker // The additive factor to apply to every samples. For time metrics, we'll add
27*6777b538SAndroid Build Coastguard Worker // |additive_factor| milliseconds to samples. Modified samples will be recorded
28*6777b538SAndroid Build Coastguard Worker // in a pseudo metric alongside with the real metric.
29*6777b538SAndroid Build Coastguard Worker const base::FeatureParam<double> kAdditiveFactor{&kPseudoMetricsEffectFeature,
30*6777b538SAndroid Build Coastguard Worker                                                  "additive_factor", 0};
31*6777b538SAndroid Build Coastguard Worker 
32*6777b538SAndroid Build Coastguard Worker }  // namespace internal
33*6777b538SAndroid Build Coastguard Worker 
34*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kNonUniformityValidationFeature,
35*6777b538SAndroid Build Coastguard Worker              "UMANonUniformityLogNormal",
36*6777b538SAndroid Build Coastguard Worker              base::FEATURE_DISABLED_BY_DEFAULT);
37*6777b538SAndroid Build Coastguard Worker 
38*6777b538SAndroid Build Coastguard Worker const base::FeatureParam<double> kLogNormalMean{
39*6777b538SAndroid Build Coastguard Worker     &kNonUniformityValidationFeature, "mean", 4.605};
40*6777b538SAndroid Build Coastguard Worker const base::FeatureParam<double> kLogNormalDelta{
41*6777b538SAndroid Build Coastguard Worker     &kNonUniformityValidationFeature, "delta", 0};
42*6777b538SAndroid Build Coastguard Worker const base::FeatureParam<double> kLogNormalStdDev{
43*6777b538SAndroid Build Coastguard Worker     &kNonUniformityValidationFeature, "stdDev", 1.238};
44*6777b538SAndroid Build Coastguard Worker 
GetPseudoMetricsSample(double sample)45*6777b538SAndroid Build Coastguard Worker double GetPseudoMetricsSample(double sample) {
46*6777b538SAndroid Build Coastguard Worker   return sample * internal::kMultiplicativeFactor.Get() +
47*6777b538SAndroid Build Coastguard Worker          internal::kAdditiveFactor.Get();
48*6777b538SAndroid Build Coastguard Worker }
49*6777b538SAndroid Build Coastguard Worker 
GetPseudoMetricsSample(base::TimeDelta sample)50*6777b538SAndroid Build Coastguard Worker base::TimeDelta GetPseudoMetricsSample(base::TimeDelta sample) {
51*6777b538SAndroid Build Coastguard Worker   return sample * internal::kMultiplicativeFactor.Get() +
52*6777b538SAndroid Build Coastguard Worker          base::Milliseconds(internal::kAdditiveFactor.Get());
53*6777b538SAndroid Build Coastguard Worker }
54*6777b538SAndroid Build Coastguard Worker 
55*6777b538SAndroid Build Coastguard Worker }  // namespace metrics
56