| Index: base/metrics/field_trial.cc
|
| diff --git a/base/metrics/field_trial.cc b/base/metrics/field_trial.cc
|
| index 3b398cd20e793401ee1f73d914b7f5b393fce6da..430cae0b7287d1c3f400ad64afdc272b3a4fd0dc 100644
|
| --- a/base/metrics/field_trial.cc
|
| +++ b/base/metrics/field_trial.cc
|
| @@ -7,7 +7,6 @@
|
| #include <algorithm>
|
|
|
| #include "base/build_time.h"
|
| -#include "base/lazy_instance.h"
|
| #include "base/logging.h"
|
| #include "base/rand_util.h"
|
| #include "base/strings/string_number_conversions.h"
|
| @@ -107,38 +106,6 @@ bool ParseFieldTrialsString(const std::string& trials_string,
|
| return true;
|
| }
|
|
|
| -void CheckTrialGroup(const std::string& trial_name,
|
| - const std::string& trial_group,
|
| - std::map<std::string, std::string>* seen_states) {
|
| - if (ContainsKey(*seen_states, trial_name)) {
|
| - CHECK_EQ((*seen_states)[trial_name], trial_group) << trial_name;
|
| - } else {
|
| - (*seen_states)[trial_name] = trial_group;
|
| - }
|
| -}
|
| -
|
| -// A second copy of FieldTrialList::seen_states_ that is meant to outlive the
|
| -// FieldTrialList object to determine if the inconsistency happens because there
|
| -// might be multiple FieldTrialList objects.
|
| -// TODO(asvitkine): Remove when crbug.com/359406 is resolved.
|
| -base::LazyInstance<std::map<std::string, std::string>>::Leaky g_seen_states =
|
| - LAZY_INSTANCE_INITIALIZER;
|
| -
|
| -// A debug token generated during FieldTrialList construction. Used to diagnose
|
| -// crbug.com/359406.
|
| -// TODO(asvitkine): Remove when crbug.com/359406 is resolved.
|
| -int32_t g_debug_token = -1;
|
| -
|
| -// Whether to append the debug token to the child process --force-fieldtrials
|
| -// command line. Used to diagnose crbug.com/359406.
|
| -// TODO(asvitkine): Remove when crbug.com/359406 is resolved.
|
| -bool g_append_debug_token_to_trial_string = false;
|
| -
|
| -// Tracks whether |g_seen_states| is used. Defaults to false, because unit tests
|
| -// will create multiple FieldTrialList instances. Also controls whether
|
| -// |g_debug_token| is included in the field trial state string.
|
| -bool g_use_global_check_states = false;
|
| -
|
| } // namespace
|
|
|
| // statics
|
| @@ -242,9 +209,7 @@ void FieldTrial::SetForced() {
|
|
|
| // static
|
| void FieldTrial::EnableBenchmarking() {
|
| - // TODO(asvitkine): Change this back to 0u after the trial in FieldTrialList
|
| - // constructor is removed.
|
| - DCHECK_EQ(1u, FieldTrialList::GetFieldTrialCount());
|
| + DCHECK_EQ(0u, FieldTrialList::GetFieldTrialCount());
|
| enable_benchmarking_ = true;
|
| }
|
|
|
| @@ -276,9 +241,6 @@ FieldTrial::FieldTrial(const std::string& trial_name,
|
| DCHECK_GT(total_probability, 0);
|
| DCHECK(!trial_name_.empty());
|
| DCHECK(!default_group_name_.empty());
|
| -
|
| - if (g_debug_token == -1)
|
| - g_debug_token = RandInt(1, INT32_MAX);
|
| }
|
|
|
| FieldTrial::~FieldTrial() {}
|
| @@ -344,8 +306,7 @@ FieldTrialList::FieldTrialList(
|
| : entropy_provider_(entropy_provider),
|
| observer_list_(new ObserverListThreadSafe<FieldTrialList::Observer>(
|
| ObserverListBase<FieldTrialList::Observer>::NOTIFY_EXISTING_ONLY)) {
|
| - // TODO(asvitkine): Turn into a DCHECK after http://crbug.com/359406 is fixed.
|
| - CHECK(!global_);
|
| + DCHECK(!global_);
|
| DCHECK(!used_without_global_);
|
| global_ = this;
|
|
|
| @@ -353,30 +314,6 @@ FieldTrialList::FieldTrialList(
|
| Time::Exploded exploded;
|
| two_years_from_build_time.LocalExplode(&exploded);
|
| kNoExpirationYear = exploded.year;
|
| -
|
| - // Run a 50/50 experiment that enables |g_use_global_check_states| only for
|
| - // half the users, to investigate if this instrumentation is causing the
|
| - // crashes to disappear for http://crbug.com/359406. Done here instead of a
|
| - // server-side trial because this needs to be done early during FieldTrialList
|
| - // initialization.
|
| - //
|
| - // Note: |g_use_global_check_states| is set via EnableGlobalStateChecks()
|
| - // prior to the FieldTrialList being created. We only want to do the trial
|
| - // check once the first time FieldTrialList is created, so use a static
|
| - // |first_time| variable to track this.
|
| - //
|
| - // TODO(asvitkine): Remove after http://crbug.com/359406 is fixed.
|
| - static bool first_time = true;
|
| - if (first_time && g_use_global_check_states) {
|
| - first_time = false;
|
| - base::FieldTrial* trial =
|
| - FactoryGetFieldTrial("UMA_CheckStates", 100, "NoChecks",
|
| - kNoExpirationYear, 1, 1,
|
| - FieldTrial::SESSION_RANDOMIZED, nullptr);
|
| - trial->AppendGroup("Checks", 50);
|
| - if (trial->group_name() == "NoChecks")
|
| - g_use_global_check_states = false;
|
| - }
|
| }
|
|
|
| FieldTrialList::~FieldTrialList() {
|
| @@ -391,18 +328,6 @@ FieldTrialList::~FieldTrialList() {
|
| }
|
|
|
| // static
|
| -void FieldTrialList::EnableGlobalStateChecks() {
|
| - CHECK(!g_use_global_check_states);
|
| - g_use_global_check_states = true;
|
| - g_append_debug_token_to_trial_string = true;
|
| -}
|
| -
|
| -// static
|
| -int32_t FieldTrialList::GetDebugToken() {
|
| - return g_debug_token;
|
| -}
|
| -
|
| -// static
|
| FieldTrial* FieldTrialList::FactoryGetFieldTrial(
|
| const std::string& trial_name,
|
| FieldTrial::Probability total_probability,
|
| @@ -534,12 +459,6 @@ void FieldTrialList::StatesToString(std::string* output) {
|
| output->append(it->group_name);
|
| output->append(1, kPersistentStringSeparator);
|
| }
|
| - if (g_append_debug_token_to_trial_string) {
|
| - output->append("DebugToken");
|
| - output->append(1, kPersistentStringSeparator);
|
| - output->append(IntToString(g_debug_token));
|
| - output->append(1, kPersistentStringSeparator);
|
| - }
|
| }
|
|
|
| // static
|
| @@ -562,14 +481,6 @@ void FieldTrialList::AllStatesToString(std::string* output) {
|
| output->append(1, kPersistentStringSeparator);
|
| trial.group_name.AppendToString(output);
|
| output->append(1, kPersistentStringSeparator);
|
| -
|
| - // TODO(asvitkine): Remove these when http://crbug.com/359406 is fixed.
|
| - CheckTrialGroup(trial.trial_name.as_string(), trial.group_name.as_string(),
|
| - &global_->seen_states_);
|
| - if (g_use_global_check_states) {
|
| - CheckTrialGroup(trial.trial_name.as_string(),
|
| - trial.group_name.as_string(), &g_seen_states.Get());
|
| - }
|
| }
|
| }
|
|
|
| @@ -694,16 +605,6 @@ void FieldTrialList::NotifyFieldTrialGroupSelection(FieldTrial* field_trial) {
|
| if (!field_trial->enable_field_trial_)
|
| return;
|
|
|
| - // TODO(asvitkine): Remove this block when http://crbug.com/359406 is fixed.
|
| - {
|
| - AutoLock auto_lock(global_->lock_);
|
| - CheckTrialGroup(field_trial->trial_name(),
|
| - field_trial->group_name_internal(), &global_->seen_states_);
|
| - if (g_use_global_check_states) {
|
| - CheckTrialGroup(field_trial->trial_name(),
|
| - field_trial->group_name_internal(), &g_seen_states.Get());
|
| - }
|
| - }
|
| global_->observer_list_->Notify(
|
| FROM_HERE, &FieldTrialList::Observer::OnFieldTrialGroupFinalized,
|
| field_trial->trial_name(), field_trial->group_name_internal());
|
|
|