| Index: base/metrics/field_trial.cc
|
| ===================================================================
|
| --- base/metrics/field_trial.cc (revision 70854)
|
| +++ base/metrics/field_trial.cc (working copy)
|
| @@ -7,7 +7,11 @@
|
| #include "base/logging.h"
|
| #include "base/rand_util.h"
|
| #include "base/stringprintf.h"
|
| +#include "base/utf_string_conversions.h"
|
|
|
| +using base::Time;
|
| +using base::TimeDelta;
|
| +
|
| namespace base {
|
|
|
| // static
|
| @@ -34,8 +38,11 @@
|
| random_(static_cast<Probability>(divisor_ * base::RandDouble())),
|
| accumulated_group_probability_(0),
|
| next_group_number_(0),
|
| - group_(kNotParticipating) {
|
| + group_(kNotParticipating),
|
| + all_remaining_probability_set_(false),
|
| + usage_timeout_(base::TimeDelta::FromDays(30)) {
|
| FieldTrialList::Register(this);
|
| + disable_field_trial_ = ShouldFieldTrialBeDisabled(usage_timeout_);
|
| }
|
|
|
| int FieldTrial::AppendGroup(const std::string& name,
|
| @@ -45,9 +52,11 @@
|
| group_probability == kAllRemainingProbability);
|
| if (group_probability == kAllRemainingProbability) {
|
| accumulated_group_probability_ = divisor_;
|
| + all_remaining_probability_set_ = true;
|
| } else {
|
| - if (enable_benchmarking_)
|
| + if (enable_benchmarking_ || disable_field_trial_)
|
| group_probability = 0;
|
| +
|
| accumulated_group_probability_ += group_probability;
|
| }
|
| DCHECK(accumulated_group_probability_ <= divisor_);
|
| @@ -62,6 +71,11 @@
|
| return next_group_number_++;
|
| }
|
|
|
| +void FieldTrial::SetUsageTimeout(const base::TimeDelta& usage_timeout) {
|
| + usage_timeout_ = usage_timeout;
|
| + disable_field_trial_ = ShouldFieldTrialBeDisabled(usage_timeout);
|
| +}
|
| +
|
| // static
|
| std::string FieldTrial::MakeName(const std::string& name_prefix,
|
| const std::string& trial_name) {
|
| @@ -76,6 +90,26 @@
|
| enable_benchmarking_ = true;
|
| }
|
|
|
| +// static
|
| +bool FieldTrial::ShouldFieldTrialBeDisabled(
|
| + const base::TimeDelta& usage_timeout) {
|
| + if (base::Time::NowFromSystemTime() - GetBuildTime() >= usage_timeout)
|
| + return true;
|
| + return false;
|
| +}
|
| +
|
| +// static
|
| +Time FieldTrial::GetBuildTime() {
|
| + static Time integral_build_time;
|
| + if (integral_build_time.is_null()) {
|
| + const char* kDateTime = __DATE__ " " __TIME__;
|
| + bool result = Time::FromString(ASCIIToWide(kDateTime).c_str(),
|
| + &integral_build_time);
|
| + DCHECK(result);
|
| + }
|
| + return integral_build_time;
|
| +}
|
| +
|
| FieldTrial::~FieldTrial() {}
|
|
|
| //------------------------------------------------------------------------------
|
| @@ -127,8 +161,10 @@
|
| // static
|
| std::string FieldTrialList::FindFullName(const std::string& name) {
|
| FieldTrial* field_trial = Find(name);
|
| - if (field_trial)
|
| + if (field_trial) {
|
| + DCHECK(field_trial->all_remaining_probability_set());
|
| return field_trial->group_name();
|
| + }
|
| return "";
|
| }
|
|
|
| @@ -197,7 +233,7 @@
|
| }
|
| const int kTotalProbability = 100;
|
| field_trial = new FieldTrial(name, kTotalProbability);
|
| - field_trial->AppendGroup(group_name, kTotalProbability);
|
| + field_trial->AppendGroup(group_name, FieldTrial::kAllRemainingProbability);
|
| }
|
| return true;
|
| }
|
|
|