OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/metrics/field_trial.h" | 5 #include "base/metrics/field_trial.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/base_switches.h" | 10 #include "base/base_switches.h" |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 return false; | 160 return false; |
161 next_item++; | 161 next_item++; |
162 entry.activated = true; | 162 entry.activated = true; |
163 } | 163 } |
164 entry.trial_name = | 164 entry.trial_name = |
165 trials_string_piece.substr(next_item, name_end - next_item); | 165 trials_string_piece.substr(next_item, name_end - next_item); |
166 entry.group_name = | 166 entry.group_name = |
167 trials_string_piece.substr(name_end + 1, group_name_end - name_end - 1); | 167 trials_string_piece.substr(name_end + 1, group_name_end - name_end - 1); |
168 next_item = group_name_end + 1; | 168 next_item = group_name_end + 1; |
169 | 169 |
170 entries->push_back(entry); | 170 entries->push_back(std::move(entry)); |
171 } | 171 } |
172 return true; | 172 return true; |
173 } | 173 } |
174 | 174 |
175 void AddForceFieldTrialsFlag(CommandLine* cmd_line) { | 175 void AddForceFieldTrialsFlag(CommandLine* cmd_line) { |
176 std::string field_trial_states; | 176 std::string field_trial_states; |
177 FieldTrialList::AllStatesToString(&field_trial_states); | 177 FieldTrialList::AllStatesToString(&field_trial_states); |
178 if (!field_trial_states.empty()) { | 178 if (!field_trial_states.empty()) { |
179 cmd_line->AppendSwitchASCII(switches::kForceFieldTrials, | 179 cmd_line->AppendSwitchASCII(switches::kForceFieldTrials, |
180 field_trial_states); | 180 field_trial_states); |
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
618 if (entry.activated) { | 618 if (entry.activated) { |
619 FieldTrial::ActiveGroup group; | 619 FieldTrial::ActiveGroup group; |
620 group.trial_name = entry.trial_name.as_string(); | 620 group.trial_name = entry.trial_name.as_string(); |
621 group.group_name = entry.group_name.as_string(); | 621 group.group_name = entry.group_name.as_string(); |
622 active_groups->push_back(group); | 622 active_groups->push_back(group); |
623 } | 623 } |
624 } | 624 } |
625 } | 625 } |
626 | 626 |
627 // static | 627 // static |
| 628 void FieldTrialList::GetInitiallyActiveFieldTrials( |
| 629 const base::CommandLine& command_line, |
| 630 FieldTrial::ActiveGroups* active_groups) { |
| 631 DCHECK(global_->create_trials_from_command_line_called_); |
| 632 |
| 633 if (!global_->field_trial_allocator_) { |
| 634 GetActiveFieldTrialGroupsFromString( |
| 635 command_line.GetSwitchValueASCII(switches::kForceFieldTrials), |
| 636 active_groups); |
| 637 return; |
| 638 } |
| 639 |
| 640 FieldTrialAllocator* allocator = global_->field_trial_allocator_.get(); |
| 641 FieldTrialAllocator::Iterator mem_iter(allocator); |
| 642 FieldTrial::FieldTrialRef ref; |
| 643 while ((ref = mem_iter.GetNextOfType(kFieldTrialType)) != |
| 644 SharedPersistentMemoryAllocator::kReferenceNull) { |
| 645 const FieldTrialEntry* entry = |
| 646 allocator->GetAsObject<const FieldTrialEntry>(ref, kFieldTrialType); |
| 647 |
| 648 StringPiece trial_name; |
| 649 StringPiece group_name; |
| 650 if (entry->activated && |
| 651 entry->GetTrialAndGroupName(&trial_name, &group_name)) { |
| 652 FieldTrial::ActiveGroup group; |
| 653 group.trial_name = trial_name.as_string(); |
| 654 group.group_name = group_name.as_string(); |
| 655 active_groups->push_back(group); |
| 656 } |
| 657 } |
| 658 } |
| 659 |
| 660 // static |
628 bool FieldTrialList::CreateTrialsFromString( | 661 bool FieldTrialList::CreateTrialsFromString( |
629 const std::string& trials_string, | 662 const std::string& trials_string, |
630 const std::set<std::string>& ignored_trial_names) { | 663 const std::set<std::string>& ignored_trial_names) { |
631 DCHECK(global_); | 664 DCHECK(global_); |
632 if (trials_string.empty() || !global_) | 665 if (trials_string.empty() || !global_) |
633 return true; | 666 return true; |
634 | 667 |
635 std::vector<FieldTrial::State> entries; | 668 std::vector<FieldTrial::State> entries; |
636 if (!ParseFieldTrialsString(trials_string, &entries)) | 669 if (!ParseFieldTrialsString(trials_string, &entries)) |
637 return false; | 670 return false; |
(...skipping 15 matching lines...) Expand all Loading... |
653 trial->group(); | 686 trial->group(); |
654 } | 687 } |
655 } | 688 } |
656 return true; | 689 return true; |
657 } | 690 } |
658 | 691 |
659 // static | 692 // static |
660 void FieldTrialList::CreateTrialsFromCommandLine( | 693 void FieldTrialList::CreateTrialsFromCommandLine( |
661 const CommandLine& cmd_line, | 694 const CommandLine& cmd_line, |
662 const char* field_trial_handle_switch) { | 695 const char* field_trial_handle_switch) { |
663 DCHECK(global_); | 696 global_->create_trials_from_command_line_called_ = true; |
664 | 697 |
665 #if defined(OS_WIN) && !defined(OS_NACL) | 698 #if defined(OS_WIN) && !defined(OS_NACL) |
666 if (cmd_line.HasSwitch(field_trial_handle_switch)) { | 699 if (cmd_line.HasSwitch(field_trial_handle_switch)) { |
667 std::string arg = cmd_line.GetSwitchValueASCII(field_trial_handle_switch); | 700 std::string arg = cmd_line.GetSwitchValueASCII(field_trial_handle_switch); |
668 int field_trial_handle = std::stoi(arg); | 701 int field_trial_handle = std::stoi(arg); |
669 HANDLE handle = reinterpret_cast<HANDLE>(field_trial_handle); | 702 HANDLE handle = reinterpret_cast<HANDLE>(field_trial_handle); |
670 bool result = CreateTrialsFromWindowsHandle(handle); | 703 bool result = CreateTrialsFromWindowsHandle(handle); |
671 DCHECK(result); | 704 DCHECK(result); |
672 } | 705 } |
673 #endif | 706 #endif |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1010 return; | 1043 return; |
1011 } | 1044 } |
1012 AutoLock auto_lock(global_->lock_); | 1045 AutoLock auto_lock(global_->lock_); |
1013 CHECK(!global_->PreLockedFind(trial->trial_name())) << trial->trial_name(); | 1046 CHECK(!global_->PreLockedFind(trial->trial_name())) << trial->trial_name(); |
1014 trial->AddRef(); | 1047 trial->AddRef(); |
1015 trial->SetTrialRegistered(); | 1048 trial->SetTrialRegistered(); |
1016 global_->registered_[trial->trial_name()] = trial; | 1049 global_->registered_[trial->trial_name()] = trial; |
1017 } | 1050 } |
1018 | 1051 |
1019 } // namespace base | 1052 } // namespace base |
OLD | NEW |