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