| 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,10 +38,18 @@
|
| random_(static_cast<Probability>(divisor_ * base::RandDouble())),
|
| accumulated_group_probability_(0),
|
| next_group_number_(0),
|
| - group_(kNotParticipating) {
|
| + group_(kNotParticipating),
|
| + disable_duration_(base::TimeDelta::FromDays(30)),
|
| + disable_field_trail_(false) {
|
| FieldTrialList::Register(this);
|
| + DetermineIfFieldTrailIsToBeDisabled();
|
| }
|
|
|
| +void FieldTrial::DetermineIfFieldTrailIsToBeDisabled() {
|
| + if (base::Time::NowFromSystemTime() - GetBuildTime() >= disable_duration_)
|
| + disable_field_trail_ = true;
|
| +}
|
| +
|
| int FieldTrial::AppendGroup(const std::string& name,
|
| Probability group_probability) {
|
| DCHECK(group_probability <= divisor_);
|
| @@ -46,8 +58,9 @@
|
| if (group_probability == kAllRemainingProbability) {
|
| accumulated_group_probability_ = divisor_;
|
| } else {
|
| - if (enable_benchmarking_)
|
| + if (enable_benchmarking_ || disable_field_trail_)
|
| group_probability = 0;
|
| +
|
| accumulated_group_probability_ += group_probability;
|
| }
|
| DCHECK(accumulated_group_probability_ <= divisor_);
|
| @@ -62,6 +75,11 @@
|
| return next_group_number_++;
|
| }
|
|
|
| +void FieldTrial::SetDisableDuration(const base::TimeDelta& duration) {
|
| + disable_duration_ = duration;
|
| + DetermineIfFieldTrailIsToBeDisabled();
|
| +}
|
| +
|
| // static
|
| std::string FieldTrial::MakeName(const std::string& name_prefix,
|
| const std::string& trial_name) {
|
| @@ -76,6 +94,18 @@
|
| enable_benchmarking_ = true;
|
| }
|
|
|
| +// 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() {}
|
|
|
| //------------------------------------------------------------------------------
|
|
|