summaryrefslogtreecommitdiffstats
path: root/base/field_trial.h
diff options
context:
space:
mode:
Diffstat (limited to 'base/field_trial.h')
-rw-r--r--base/field_trial.h52
1 files changed, 34 insertions, 18 deletions
diff --git a/base/field_trial.h b/base/field_trial.h
index 39a5bc7..6d3c101 100644
--- a/base/field_trial.h
+++ b/base/field_trial.h
@@ -72,14 +72,16 @@
class FieldTrial : public base::RefCounted<FieldTrial> {
public:
- static const int kNotParticipating;
+ typedef int Probability; // Probability type for being selected in a trial.
- // Define a separator charactor to use when creating a persistent form of an
- // instance. This is intended for use as a command line argument, passed to a
- // second process to mimic our state (i.e., provide the same group name).
- static const char kPersistentStringSeparator; // Currently a slash.
+ // A return value to indicate that a given instance has not yet had a group
+ // assignment (and hence is not yet participating in the trial).
+ static const int kNotParticipating;
- typedef int Probability; // Use scaled up probability.
+ // Provide an easy way to assign all remaining probability to a group. Note
+ // that this will force an instance to participate, and make it illegal to
+ // attempt to probabalistically add any other groups to the trial.
+ static const Probability kAllRemainingProbability;
// The name is used to register the instance with the FieldTrialList class,
// and can be used to find the trial (only one trial can be present for each
@@ -111,18 +113,6 @@ class FieldTrial : public base::RefCounted<FieldTrial> {
static std::string MakeName(const std::string& name_prefix,
const std::string& trial_name);
- // Create a persistent representation of the instance that could be resurected
- // in another process. This allows randomization to be done in one process,
- // and secondary processes can by synchronized on the result.
- // The resulting string contains only the name, the trial name, and a "/"
- // separator.
- std::string MakePersistentString() const;
-
- // Using a string created by MakePersistentString(), construct a new instance
- // that has the same state as the original instance. Currently only the
- // group_name_ and name_ are restored.
- static FieldTrial* RestorePersistentString(const std::string &persistent);
-
private:
// The name of the field trial, as can be found via the FieldTrialList.
// This is empty of the trial is not in the experiment.
@@ -159,6 +149,11 @@ class FieldTrial : public base::RefCounted<FieldTrial> {
// Only one instance of this class exists.
class FieldTrialList {
public:
+ // Define a separator charactor to use when creating a persistent form of an
+ // instance. This is intended for use as a command line argument, passed to a
+ // second process to mimic our state (i.e., provide the same group name).
+ static const char kPersistentStringSeparator; // Currently a slash.
+
// This singleton holds the global list of registered FieldTrials.
FieldTrialList();
// Destructor Release()'s references to all registered FieldTrial instances.
@@ -176,6 +171,21 @@ class FieldTrialList {
static std::string FindFullName(const std::string& name);
+ // Create a persistent representation of all FieldTrial instances for
+ // resurrection in another process. This allows randomization to be done in
+ // one process, and secondary processes can by synchronized on the result.
+ // The resulting string contains only the names, the trial name, and a "/"
+ // separator.
+ static void StatesToString(std::string* output);
+
+ // Use a previously generated state string (re: StatesToString()) augment the
+ // current list of field tests to include the supplied tests, and using a 100%
+ // probability for each test, force them to have the same group string. This
+ // is commonly used in a sub-process, to carry randomly selected state in a
+ // parent process into this sub-process.
+ // Currently only the group_name_ and name_ are restored.
+ static bool StringAugmentsState(const std::string& prior_state);
+
// The time of construction of the global map is recorded in a static variable
// and is commonly used by experiments to identify the time since the start
// of the application. In some experiments it may be useful to discount
@@ -185,6 +195,7 @@ class FieldTrialList {
if (global_)
return global_->application_start_time_;
// For testing purposes only, or when we don't yet have a start time.
+ // TODO(jar): Switch to TimeTicks
return base::Time::Now();
}
@@ -192,10 +203,14 @@ class FieldTrialList {
// Helper function should be called only while holding lock_.
FieldTrial* PreLockedFind(const std::string& name);
+ // A map from FieldTrial names to the actual instances.
typedef std::map<std::string, FieldTrial*> RegistrationList;
static FieldTrialList* global_; // The singleton of this class.
+ // A helper value made availabel to users, that shows when the FieldTrialList
+ // was initialized. Note that this is a singleton instance, and hence is a
+ // good approximation to the start of the process.
base::Time application_start_time_;
// Lock for access to registered_.
@@ -206,3 +221,4 @@ class FieldTrialList {
};
#endif // BASE_FIELD_TRIAL_H_
+