| Index: webrtc/test/field_trial.cc
|
| diff --git a/webrtc/test/field_trial.cc b/webrtc/test/field_trial.cc
|
| index c40d0783d8d60d914ced95b530701b6b9e38117c..613fb67679a583c797d2ff57c8f4dbec922bc401 100644
|
| --- a/webrtc/test/field_trial.cc
|
| +++ b/webrtc/test/field_trial.cc
|
| @@ -18,12 +18,26 @@
|
| #include <string>
|
|
|
| #include "webrtc/system_wrappers/include/field_trial.h"
|
| -#include "webrtc/system_wrappers/include/field_trial_default.h"
|
|
|
| namespace webrtc {
|
| namespace {
|
| +// Clients of this library have show a clear intent to setup field trials by
|
| +// linking with it. As so try to crash if they forget to call
|
| +// InitFieldTrialsFromString before webrtc tries to access a field trial.
|
| bool field_trials_initiated_ = false;
|
| +std::map<std::string, std::string> field_trials_;
|
| } // namespace
|
| +
|
| +namespace field_trial {
|
| +std::string FindFullName(const std::string& trial_name) {
|
| + assert(field_trials_initiated_);
|
| + std::map<std::string, std::string>::const_iterator it =
|
| + field_trials_.find(trial_name);
|
| + if (it == field_trials_.end())
|
| + return std::string();
|
| + return it->second;
|
| +}
|
| +} // namespace field_trial
|
|
|
| namespace test {
|
| // Note: this code is copied from src/base/metrics/field_trial.cc since the aim
|
| @@ -39,7 +53,6 @@
|
| return;
|
|
|
| size_t next_item = 0;
|
| - std::map<std::string, std::string> field_trials;
|
| while (next_item < trials_string.length()) {
|
| size_t name_end = trials_string.find(kPersistentStringSeparator, next_item);
|
| if (name_end == trials_string.npos || next_item == name_end)
|
| @@ -54,18 +67,15 @@
|
| next_item = group_name_end + 1;
|
|
|
| // Fail if duplicate with different group name.
|
| - if (field_trials.find(name) != field_trials.end() &&
|
| - field_trials.find(name)->second != group_name) {
|
| + if (field_trials_.find(name) != field_trials_.end() &&
|
| + field_trials_.find(name)->second != group_name)
|
| break;
|
| - }
|
|
|
| - field_trials[name] = group_name;
|
| + field_trials_[name] = group_name;
|
|
|
| // Successfully parsed all field trials from the string.
|
| - if (next_item == trials_string.length()) {
|
| - webrtc::field_trial::InitFieldTrialsFromString(trials_string.c_str());
|
| + if (next_item == trials_string.length())
|
| return;
|
| - }
|
| }
|
| // Using fprintf as LOG does not print when this is called early in main.
|
| fprintf(stderr, "Invalid field trials string.\n");
|
| @@ -75,18 +85,18 @@
|
| }
|
|
|
| ScopedFieldTrials::ScopedFieldTrials(const std::string& config)
|
| - : previous_field_trials_(webrtc::field_trial::GetFieldTrialString()) {
|
| + : previous_field_trials_(field_trials_) {
|
| assert(field_trials_initiated_);
|
| field_trials_initiated_ = false;
|
| - current_field_trials_ = config;
|
| - InitFieldTrialsFromString(current_field_trials_);
|
| + field_trials_.clear();
|
| + InitFieldTrialsFromString(config);
|
| }
|
|
|
| ScopedFieldTrials::~ScopedFieldTrials() {
|
| // Should still be initialized, since InitFieldTrials is called from ctor.
|
| // That's why we don't restore the flag.
|
| assert(field_trials_initiated_);
|
| - webrtc::field_trial::InitFieldTrialsFromString(previous_field_trials_);
|
| + field_trials_ = previous_field_trials_;
|
| }
|
|
|
| } // namespace test
|
|
|