Index: base/metrics/field_trial.cc |
diff --git a/base/metrics/field_trial.cc b/base/metrics/field_trial.cc |
index ee1629c2e55c40bf343f1e5f9db48f598c95e36d..831239835fe23c729bb128d4135eb269948c7865 100644 |
--- a/base/metrics/field_trial.cc |
+++ b/base/metrics/field_trial.cc |
@@ -66,9 +66,9 @@ const size_t kFieldTrialAllocationSize = 128 << 10; // 128 KiB |
#endif |
// We create one FieldTrialEntry per field trial in shared memory, via |
-// AddToAllocatorWhileLocked. The FieldTrialEntry is followed by a base::Pickle |
-// object that we unpickle and read from. Any changes to this structure requires |
-// a bump in kFieldTrialType id defined above. |
+// AddTrialToAllocatorWhileLocked. The FieldTrialEntry is followed by a |
+// base::Pickle object that we unpickle and read from. Any changes to this |
+// structure requires a bump in kFieldTrialType id defined above. |
struct FieldTrialEntry { |
// Expected size for 32/64-bit check. |
static constexpr size_t kExpectedInstanceSize = 8; |
@@ -739,6 +739,11 @@ void FieldTrialList::CreateTrialsFromCommandLine( |
std::set<std::string>()); |
DCHECK(result); |
} |
+ |
+ // TODO(lawrencewu): rename CreateTrialsFromCommandLine to |
+ // CreateTrialsAndFeaturesFromCommandLine, cause that's what we're doing. |
+ FeatureList::GetInstance()->InitializeFromSharedMemory( |
+ global_->field_trial_allocator_.get()); |
} |
#if defined(POSIX_WITH_ZYGOTE) |
@@ -879,10 +884,10 @@ void FieldTrialList::OnGroupFinalized(bool is_locked, FieldTrial* field_trial) { |
if (!global_) |
return; |
if (is_locked) { |
- AddToAllocatorWhileLocked(field_trial); |
+ AddTrialToAllocatorWhileLocked(field_trial); |
} else { |
AutoLock auto_lock(global_->lock_); |
- AddToAllocatorWhileLocked(field_trial); |
+ AddTrialToAllocatorWhileLocked(field_trial); |
} |
} |
@@ -1004,9 +1009,13 @@ void FieldTrialList::InstantiateFieldTrialAllocatorIfNeeded() { |
// Add all existing field trials. |
for (const auto& registered : global_->registered_) { |
- AddToAllocatorWhileLocked(registered.second); |
+ AddTrialToAllocatorWhileLocked(registered.second); |
} |
+ // Add all existing features. |
+ FeatureList::GetInstance()->AddFeaturesToAllocator( |
+ global_->field_trial_allocator_.get()); |
+ |
#if defined(OS_WIN) || defined(POSIX_WITH_ZYGOTE) |
// Set |readonly_allocator_handle_| so we can pass it to be inherited and |
// via the command line. |
@@ -1017,7 +1026,7 @@ void FieldTrialList::InstantiateFieldTrialAllocatorIfNeeded() { |
#endif |
// static |
-void FieldTrialList::AddToAllocatorWhileLocked(FieldTrial* field_trial) { |
+void FieldTrialList::AddTrialToAllocatorWhileLocked(FieldTrial* field_trial) { |
FieldTrialAllocator* allocator = global_->field_trial_allocator_.get(); |
// Don't do anything if the allocator hasn't been instantiated yet. |
@@ -1075,7 +1084,7 @@ void FieldTrialList::ActivateFieldTrialEntryWhileLocked( |
if (ref == FieldTrialAllocator::kReferenceNull) { |
// It's fine to do this even if the allocator hasn't been instantiated |
// yet -- it'll just return early. |
- AddToAllocatorWhileLocked(field_trial); |
+ AddTrialToAllocatorWhileLocked(field_trial); |
} else { |
// It's also okay to do this even though the callee doesn't have a lock -- |
// the only thing that happens on a stale read here is a slight performance |