OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // FieldTrial is a class for handling details of statistical experiments | 5 // FieldTrial is a class for handling details of statistical experiments |
6 // performed by actual users in the field (i.e., in a shipped or beta product). | 6 // performed by actual users in the field (i.e., in a shipped or beta product). |
7 // All code is called exclusively on the UI thread currently. | 7 // All code is called exclusively on the UI thread currently. |
8 // | 8 // |
9 // The simplest example is an experiment to see whether one of two options | 9 // The simplest example is an experiment to see whether one of two options |
10 // produces "better" results across our user population. In that scenario, UMA | 10 // produces "better" results across our user population. In that scenario, UMA |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 // if (trial->group() == high_mem_group) | 47 // if (trial->group() == high_mem_group) |
48 // SetPruningAlgorithm(kType1); // Sample setting of browser state. | 48 // SetPruningAlgorithm(kType1); // Sample setting of browser state. |
49 // else if (trial->group() == low_mem_group) | 49 // else if (trial->group() == low_mem_group) |
50 // SetPruningAlgorithm(kType2); // Sample alternate setting. | 50 // SetPruningAlgorithm(kType2); // Sample alternate setting. |
51 | 51 |
52 //------------------------------------------------------------------------------ | 52 //------------------------------------------------------------------------------ |
53 | 53 |
54 #ifndef BASE_METRICS_FIELD_TRIAL_H_ | 54 #ifndef BASE_METRICS_FIELD_TRIAL_H_ |
55 #define BASE_METRICS_FIELD_TRIAL_H_ | 55 #define BASE_METRICS_FIELD_TRIAL_H_ |
56 | 56 |
| 57 #include <stddef.h> |
| 58 #include <stdint.h> |
| 59 |
57 #include <map> | 60 #include <map> |
58 #include <set> | 61 #include <set> |
59 #include <string> | 62 #include <string> |
60 #include <vector> | 63 #include <vector> |
61 | 64 |
62 #include "base/base_export.h" | 65 #include "base/base_export.h" |
63 #include "base/gtest_prod_util.h" | 66 #include "base/gtest_prod_util.h" |
| 67 #include "base/macros.h" |
64 #include "base/memory/ref_counted.h" | 68 #include "base/memory/ref_counted.h" |
65 #include "base/observer_list_threadsafe.h" | 69 #include "base/observer_list_threadsafe.h" |
66 #include "base/synchronization/lock.h" | 70 #include "base/synchronization/lock.h" |
67 #include "base/time/time.h" | 71 #include "base/time/time.h" |
68 | 72 |
69 namespace base { | 73 namespace base { |
70 | 74 |
71 class FieldTrialList; | 75 class FieldTrialList; |
72 | 76 |
73 class BASE_EXPORT FieldTrial : public RefCounted<FieldTrial> { | 77 class BASE_EXPORT FieldTrial : public RefCounted<FieldTrial> { |
(...skipping 16 matching lines...) Expand all Loading... |
90 class BASE_EXPORT EntropyProvider { | 94 class BASE_EXPORT EntropyProvider { |
91 public: | 95 public: |
92 virtual ~EntropyProvider(); | 96 virtual ~EntropyProvider(); |
93 | 97 |
94 // Returns a double in the range of [0, 1) to be used for the dice roll for | 98 // Returns a double in the range of [0, 1) to be used for the dice roll for |
95 // the specified field trial. If |randomization_seed| is not 0, it will be | 99 // the specified field trial. If |randomization_seed| is not 0, it will be |
96 // used in preference to |trial_name| for generating the entropy by entropy | 100 // used in preference to |trial_name| for generating the entropy by entropy |
97 // providers that support it. A given instance should always return the same | 101 // providers that support it. A given instance should always return the same |
98 // value given the same input |trial_name| and |randomization_seed| values. | 102 // value given the same input |trial_name| and |randomization_seed| values. |
99 virtual double GetEntropyForTrial(const std::string& trial_name, | 103 virtual double GetEntropyForTrial(const std::string& trial_name, |
100 uint32 randomization_seed) const = 0; | 104 uint32_t randomization_seed) const = 0; |
101 }; | 105 }; |
102 | 106 |
103 // A pair representing a Field Trial and its selected group. | 107 // A pair representing a Field Trial and its selected group. |
104 struct ActiveGroup { | 108 struct ActiveGroup { |
105 std::string trial_name; | 109 std::string trial_name; |
106 std::string group_name; | 110 std::string group_name; |
107 }; | 111 }; |
108 | 112 |
109 // A triplet representing a FieldTrial, its selected group and whether it's | 113 // A triplet representing a FieldTrial, its selected group and whether it's |
110 // active. | 114 // active. |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 // Note: Using a custom randomization seed is only supported by the | 395 // Note: Using a custom randomization seed is only supported by the |
392 // PermutedEntropyProvider (which is used when UMA is not enabled). | 396 // PermutedEntropyProvider (which is used when UMA is not enabled). |
393 static FieldTrial* FactoryGetFieldTrialWithRandomizationSeed( | 397 static FieldTrial* FactoryGetFieldTrialWithRandomizationSeed( |
394 const std::string& trial_name, | 398 const std::string& trial_name, |
395 FieldTrial::Probability total_probability, | 399 FieldTrial::Probability total_probability, |
396 const std::string& default_group_name, | 400 const std::string& default_group_name, |
397 const int year, | 401 const int year, |
398 const int month, | 402 const int month, |
399 const int day_of_month, | 403 const int day_of_month, |
400 FieldTrial::RandomizationType randomization_type, | 404 FieldTrial::RandomizationType randomization_type, |
401 uint32 randomization_seed, | 405 uint32_t randomization_seed, |
402 int* default_group_number); | 406 int* default_group_number); |
403 | 407 |
404 // The Find() method can be used to test to see if a named trial was already | 408 // The Find() method can be used to test to see if a named trial was already |
405 // registered, or to retrieve a pointer to it from the global map. | 409 // registered, or to retrieve a pointer to it from the global map. |
406 static FieldTrial* Find(const std::string& trial_name); | 410 static FieldTrial* Find(const std::string& trial_name); |
407 | 411 |
408 // Returns the group number chosen for the named trial, or | 412 // Returns the group number chosen for the named trial, or |
409 // FieldTrial::kNotFinalized if the trial does not exist. | 413 // FieldTrial::kNotFinalized if the trial does not exist. |
410 static int FindValue(const std::string& trial_name); | 414 static int FindValue(const std::string& trial_name); |
411 | 415 |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
521 | 525 |
522 // List of observers to be notified when a group is selected for a FieldTrial. | 526 // List of observers to be notified when a group is selected for a FieldTrial. |
523 scoped_refptr<ObserverListThreadSafe<Observer> > observer_list_; | 527 scoped_refptr<ObserverListThreadSafe<Observer> > observer_list_; |
524 | 528 |
525 DISALLOW_COPY_AND_ASSIGN(FieldTrialList); | 529 DISALLOW_COPY_AND_ASSIGN(FieldTrialList); |
526 }; | 530 }; |
527 | 531 |
528 } // namespace base | 532 } // namespace base |
529 | 533 |
530 #endif // BASE_METRICS_FIELD_TRIAL_H_ | 534 #endif // BASE_METRICS_FIELD_TRIAL_H_ |
OLD | NEW |