Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(666)

Unified Diff: base/feature_list.cc

Issue 2578323002: Improved support for objects inside persistent memory. (Closed)
Patch Set: addressed review comments by asvitkine Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/debug/activity_tracker.cc ('k') | base/metrics/field_trial.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/feature_list.cc
diff --git a/base/feature_list.cc b/base/feature_list.cc
index c2f268b138b479ad1bdca59a855ab61f9b9425b2..234d5be190efa88de116e3663f6eaca0058ae506 100644
--- a/base/feature_list.cc
+++ b/base/feature_list.cc
@@ -28,12 +28,12 @@ FeatureList* g_instance = nullptr;
// Tracks whether the FeatureList instance was initialized via an accessor.
bool g_initialized_from_accessor = false;
-const uint32_t kFeatureType = 0x06567CA6 + 1; // SHA1(FeatureEntry) v1
-
// An allocator entry for a feature in shared memory. The FeatureEntry is
// followed by a base::Pickle object that contains the feature and trial name.
-// Any changes to this structure requires a bump in kFeatureType defined above.
struct FeatureEntry {
+ // SHA1(FeatureEntry): Increment this if structure changes!
+ static constexpr uint32_t kPersistentTypeId = 0x06567CA6 + 1;
+
// Expected size for 32/64-bit check.
static constexpr size_t kExpectedInstanceSize = 8;
@@ -98,13 +98,8 @@ void FeatureList::InitializeFromSharedMemory(
DCHECK(!initialized_);
PersistentMemoryAllocator::Iterator iter(allocator);
-
- PersistentMemoryAllocator::Reference ref;
- while ((ref = iter.GetNextOfType(kFeatureType)) !=
- PersistentMemoryAllocator::kReferenceNull) {
- const FeatureEntry* entry =
- allocator->GetAsObject<const FeatureEntry>(ref, kFeatureType);
-
+ const FeatureEntry* entry;
+ while ((entry = iter.GetNextOfObject<FeatureEntry>()) != nullptr) {
OverrideState override_state =
static_cast<OverrideState>(entry->override_state);
@@ -170,20 +165,17 @@ void FeatureList::AddFeaturesToAllocator(PersistentMemoryAllocator* allocator) {
pickle.WriteString(override.second.field_trial->trial_name());
size_t total_size = sizeof(FeatureEntry) + pickle.size();
- PersistentMemoryAllocator::Reference ref =
- allocator->Allocate(total_size, kFeatureType);
- if (!ref)
+ FeatureEntry* entry = allocator->AllocateObject<FeatureEntry>(total_size);
+ if (!entry)
return;
- FeatureEntry* entry =
- allocator->GetAsObject<FeatureEntry>(ref, kFeatureType);
entry->override_state = override.second.overridden_state;
entry->pickle_size = pickle.size();
char* dst = reinterpret_cast<char*>(entry) + sizeof(FeatureEntry);
memcpy(dst, pickle.data(), pickle.size());
- allocator->MakeIterable(ref);
+ allocator->MakeIterable(entry);
}
}
« no previous file with comments | « base/debug/activity_tracker.cc ('k') | base/metrics/field_trial.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698