| Index: base/metrics/field_trial.cc
|
| diff --git a/base/metrics/field_trial.cc b/base/metrics/field_trial.cc
|
| index e53fdf39386ee71c2b2fabcd8ba0dd1dcc76d34b..f447c1fb1fd8074f33f2d13a949caaad41d8051c 100644
|
| --- a/base/metrics/field_trial.cc
|
| +++ b/base/metrics/field_trial.cc
|
| @@ -20,7 +20,6 @@ static const char kHistogramFieldTrialSeparator('_');
|
| // statics
|
| const int FieldTrial::kNotFinalized = -1;
|
| const int FieldTrial::kDefaultGroupNumber = 0;
|
| -const uint32 FieldTrial::kReservedHashValue = 0;
|
| bool FieldTrial::enable_benchmarking_ = false;
|
|
|
| const char FieldTrialList::kPersistentStringSeparator('/');
|
| @@ -36,14 +35,12 @@ FieldTrial::FieldTrial(const std::string& name,
|
| const int month,
|
| const int day_of_month)
|
| : name_(name),
|
| - name_hash_(HashName(name)),
|
| divisor_(total_probability),
|
| default_group_name_(default_group_name),
|
| random_(static_cast<Probability>(divisor_ * RandDouble())),
|
| accumulated_group_probability_(0),
|
| next_group_number_(kDefaultGroupNumber + 1),
|
| group_(kNotFinalized),
|
| - group_name_hash_(kReservedHashValue),
|
| enable_field_trial_(true),
|
| forced_(false) {
|
| DCHECK_GT(total_probability, 0);
|
| @@ -151,11 +148,11 @@ std::string FieldTrial::group_name() {
|
| return group_name_;
|
| }
|
|
|
| -bool FieldTrial::GetNameGroupId(NameGroupId* name_group_id) {
|
| - if (group_name_hash_ == kReservedHashValue)
|
| +bool FieldTrial::GetSelectedGroup(SelectedGroup* selected_group) {
|
| + if (group_ == kNotFinalized)
|
| return false;
|
| - name_group_id->name = name_hash_;
|
| - name_group_id->group = group_name_hash_;
|
| + selected_group->trial = name_;
|
| + selected_group->group = group_name_;
|
| return true;
|
| }
|
|
|
| @@ -168,16 +165,6 @@ std::string FieldTrial::MakeName(const std::string& name_prefix,
|
| }
|
|
|
| // static
|
| -FieldTrial::NameGroupId FieldTrial::MakeNameGroupId(
|
| - const std::string& trial_name,
|
| - const std::string& group_name) {
|
| - NameGroupId id;
|
| - id.name = HashName(trial_name);
|
| - id.group = HashName(group_name);
|
| - return id;
|
| -}
|
| -
|
| -// static
|
| void FieldTrial::EnableBenchmarking() {
|
| DCHECK_EQ(0u, FieldTrialList::GetFieldTrialCount());
|
| enable_benchmarking_ = true;
|
| @@ -191,7 +178,6 @@ void FieldTrial::SetGroupChoice(const std::string& name, int number) {
|
| StringAppendF(&group_name_, "%d", group_);
|
| else
|
| group_name_ = name;
|
| - group_name_hash_ = HashName(group_name_);
|
| }
|
|
|
| // static
|
| @@ -215,26 +201,6 @@ double FieldTrial::HashClientId(const std::string& client_id,
|
| return BitsToOpenEndedUnitInterval(bits);
|
| }
|
|
|
| -// static
|
| -uint32 FieldTrial::HashName(const std::string& name) {
|
| - // SHA-1 is designed to produce a uniformly random spread in its output space,
|
| - // even for nearly-identical inputs.
|
| - unsigned char sha1_hash[kSHA1Length];
|
| - SHA1HashBytes(reinterpret_cast<const unsigned char*>(name.c_str()),
|
| - name.size(),
|
| - sha1_hash);
|
| -
|
| - COMPILE_ASSERT(sizeof(uint32) < sizeof(sha1_hash), need_more_data);
|
| - uint32 bits;
|
| - memcpy(&bits, sha1_hash, sizeof(bits));
|
| -
|
| - // We only DCHECK, since this should not happen because the registration
|
| - // of the experiment on the server should have already warn the developer.
|
| - // If this ever happen, we'll ignore this experiment/group when reporting.
|
| - DCHECK(bits != kReservedHashValue);
|
| - return base::ByteSwapToLE32(bits);
|
| -}
|
| -
|
| //------------------------------------------------------------------------------
|
| // FieldTrialList methods and members.
|
|
|
| @@ -352,18 +318,18 @@ void FieldTrialList::StatesToString(std::string* output) {
|
| }
|
|
|
| // static
|
| -void FieldTrialList::GetFieldTrialNameGroupIds(
|
| - std::vector<FieldTrial::NameGroupId>* name_group_ids) {
|
| - DCHECK(name_group_ids->empty());
|
| +void FieldTrialList::GetFieldTrialSelectedGroups(
|
| + FieldTrial::SelectedGroups* selected_groups) {
|
| + DCHECK(selected_groups->empty());
|
| if (!global_)
|
| return;
|
| AutoLock auto_lock(global_->lock_);
|
|
|
| for (RegistrationList::iterator it = global_->registered_.begin();
|
| it != global_->registered_.end(); ++it) {
|
| - FieldTrial::NameGroupId name_group_id;
|
| - if (it->second->GetNameGroupId(&name_group_id))
|
| - name_group_ids->push_back(name_group_id);
|
| + FieldTrial::SelectedGroup selected_group;
|
| + if (it->second->GetSelectedGroup(&selected_group))
|
| + selected_groups->push_back(selected_group);
|
| }
|
| }
|
|
|
|
|