Index: base/metrics/field_trial.cc |
diff --git a/base/metrics/field_trial.cc b/base/metrics/field_trial.cc |
index 970441160ca4afe2acb501095c8e81716e3c45ce..dddb66ef555c3aff582695407df7d75f35a91794 100644 |
--- a/base/metrics/field_trial.cc |
+++ b/base/metrics/field_trial.cc |
@@ -167,7 +167,7 @@ bool ParseFieldTrialsString(const std::string& trials_string, |
trials_string_piece.substr(name_end + 1, group_name_end - name_end - 1); |
next_item = group_name_end + 1; |
- entries->push_back(entry); |
+ entries->push_back(std::move(entry)); |
} |
return true; |
} |
@@ -625,6 +625,39 @@ void FieldTrialList::GetActiveFieldTrialGroupsFromString( |
} |
// static |
+void FieldTrialList::GetInitiallyActiveFieldTrials( |
+ const base::CommandLine& command_line, |
+ FieldTrial::ActiveGroups* active_groups) { |
+ DCHECK(global_->create_trials_from_command_line_called_); |
+ |
+ if (!global_->field_trial_allocator_) { |
+ GetActiveFieldTrialGroupsFromString( |
+ command_line.GetSwitchValueASCII(switches::kForceFieldTrials), |
+ active_groups); |
+ return; |
+ } |
+ |
+ FieldTrialAllocator* allocator = global_->field_trial_allocator_.get(); |
+ FieldTrialAllocator::Iterator mem_iter(allocator); |
+ FieldTrial::FieldTrialRef ref; |
+ while ((ref = mem_iter.GetNextOfType(kFieldTrialType)) != |
+ SharedPersistentMemoryAllocator::kReferenceNull) { |
+ const FieldTrialEntry* entry = |
+ allocator->GetAsObject<const FieldTrialEntry>(ref, kFieldTrialType); |
+ |
+ StringPiece trial_name; |
+ StringPiece group_name; |
+ if (entry->activated && |
+ entry->GetTrialAndGroupName(&trial_name, &group_name)) { |
+ FieldTrial::ActiveGroup group; |
+ group.trial_name = trial_name.as_string(); |
+ group.group_name = group_name.as_string(); |
+ active_groups->push_back(group); |
+ } |
+ } |
+} |
+ |
+// static |
bool FieldTrialList::CreateTrialsFromString( |
const std::string& trials_string, |
const std::set<std::string>& ignored_trial_names) { |
@@ -660,7 +693,7 @@ bool FieldTrialList::CreateTrialsFromString( |
void FieldTrialList::CreateTrialsFromCommandLine( |
const CommandLine& cmd_line, |
const char* field_trial_handle_switch) { |
- DCHECK(global_); |
+ global_->create_trials_from_command_line_called_ = true; |
#if defined(OS_WIN) && !defined(OS_NACL) |
if (cmd_line.HasSwitch(field_trial_handle_switch)) { |