Index: base/metrics/persistent_memory_allocator_unittest.cc |
diff --git a/base/metrics/persistent_memory_allocator_unittest.cc b/base/metrics/persistent_memory_allocator_unittest.cc |
index 85a058f217df60f259757f625950cd060c714e2e..57e8e3107497bd56bc01330f37e580b25ba913a4 100644 |
--- a/base/metrics/persistent_memory_allocator_unittest.cc |
+++ b/base/metrics/persistent_memory_allocator_unittest.cc |
@@ -40,12 +40,14 @@ class PersistentMemoryAllocatorTest : public testing::Test { |
uint32_t kAllocAlignment; |
struct TestObject1 { |
+ static constexpr uint32_t kPersistentTypeId = 1; |
static constexpr size_t kExpectedInstanceSize = 4 + 1 + 3; |
int32_t onething; |
char oranother; |
}; |
struct TestObject2 { |
+ static constexpr uint32_t kPersistentTypeId = 2; |
static constexpr size_t kExpectedInstanceSize = 8 + 4 + 4 + 8 + 8; |
int64_t thiis; |
int32_t that; |
@@ -109,10 +111,12 @@ TEST_F(PersistentMemoryAllocatorTest, AllocateAndIterate) { |
// Validate allocation of test object and make sure it can be referenced |
// and all metadata looks correct. |
- Reference block1 = allocator_->Allocate(sizeof(TestObject1), 1); |
- EXPECT_NE(0U, block1); |
- EXPECT_NE(nullptr, allocator_->GetAsObject<TestObject1>(block1, 1)); |
- EXPECT_EQ(nullptr, allocator_->GetAsObject<TestObject2>(block1, 1)); |
+ TestObject1* obj1 = allocator_->AllocateObject<TestObject1>(); |
+ ASSERT_TRUE(obj1); |
+ Reference block1 = allocator_->GetAsReference(obj1); |
+ ASSERT_NE(0U, block1); |
+ EXPECT_NE(nullptr, allocator_->GetAsObject<TestObject1>(block1)); |
+ EXPECT_EQ(nullptr, allocator_->GetAsObject<TestObject2>(block1)); |
EXPECT_LE(sizeof(TestObject1), allocator_->GetAllocSize(block1)); |
EXPECT_GT(sizeof(TestObject1) + kAllocAlignment, |
allocator_->GetAllocSize(block1)); |
@@ -147,10 +151,12 @@ TEST_F(PersistentMemoryAllocatorTest, AllocateAndIterate) { |
// Create second test-object and ensure everything is good and it cannot |
// be confused with test-object of another type. |
- Reference block2 = allocator_->Allocate(sizeof(TestObject2), 2); |
- EXPECT_NE(0U, block2); |
- EXPECT_NE(nullptr, allocator_->GetAsObject<TestObject2>(block2, 2)); |
- EXPECT_EQ(nullptr, allocator_->GetAsObject<TestObject2>(block2, 1)); |
+ TestObject2* obj2 = allocator_->AllocateObject<TestObject2>(); |
+ ASSERT_TRUE(obj2); |
+ Reference block2 = allocator_->GetAsReference(obj2); |
+ ASSERT_NE(0U, block2); |
+ EXPECT_NE(nullptr, allocator_->GetAsObject<TestObject2>(block2)); |
+ EXPECT_EQ(nullptr, allocator_->GetAsObject<TestObject1>(block2)); |
EXPECT_LE(sizeof(TestObject2), allocator_->GetAllocSize(block2)); |
EXPECT_GT(sizeof(TestObject2) + kAllocAlignment, |
allocator_->GetAllocSize(block2)); |
@@ -160,7 +166,7 @@ TEST_F(PersistentMemoryAllocatorTest, AllocateAndIterate) { |
EXPECT_GT(meminfo1.free, meminfo2.free); |
// Ensure that second test-object can also be made iterable. |
- allocator_->MakeIterable(block2); |
+ allocator_->MakeIterable(obj2); |
EXPECT_EQ(block2, iter1a.GetNext(&type)); |
EXPECT_EQ(2U, type); |
EXPECT_EQ(block2, iter1a.GetLast()); |
@@ -214,11 +220,11 @@ TEST_F(PersistentMemoryAllocatorTest, AllocateAndIterate) { |
EXPECT_EQ(1, allocs_samples->GetCount(0)); |
#endif |
- // Check that an objcet's type can be changed. |
+ // Check that an object's type can be changed. |
EXPECT_EQ(2U, allocator_->GetType(block2)); |
allocator_->ChangeType(block2, 3, 2); |
EXPECT_EQ(3U, allocator_->GetType(block2)); |
- allocator_->ChangeType(block2, 2, 3); |
+ allocator_->ChangeObject<TestObject2>(block2, 3); |
EXPECT_EQ(2U, allocator_->GetType(block2)); |
// Create second allocator (read/write) using the same memory segment. |
@@ -235,8 +241,8 @@ TEST_F(PersistentMemoryAllocatorTest, AllocateAndIterate) { |
EXPECT_EQ(block1, iter2.GetNext(&type)); |
EXPECT_EQ(block2, iter2.GetNext(&type)); |
EXPECT_EQ(0U, iter2.GetNext(&type)); |
- EXPECT_NE(nullptr, allocator2->GetAsObject<TestObject1>(block1, 1)); |
- EXPECT_NE(nullptr, allocator2->GetAsObject<TestObject2>(block2, 2)); |
+ EXPECT_NE(nullptr, allocator2->GetAsObject<TestObject1>(block1)); |
+ EXPECT_NE(nullptr, allocator2->GetAsObject<TestObject2>(block2)); |
// Create a third allocator (read-only) using the same memory segment. |
std::unique_ptr<const PersistentMemoryAllocator> allocator3( |
@@ -251,13 +257,23 @@ TEST_F(PersistentMemoryAllocatorTest, AllocateAndIterate) { |
EXPECT_EQ(block1, iter3.GetNext(&type)); |
EXPECT_EQ(block2, iter3.GetNext(&type)); |
EXPECT_EQ(0U, iter3.GetNext(&type)); |
- EXPECT_NE(nullptr, allocator3->GetAsObject<TestObject1>(block1, 1)); |
- EXPECT_NE(nullptr, allocator3->GetAsObject<TestObject2>(block2, 2)); |
+ EXPECT_NE(nullptr, allocator3->GetAsObject<TestObject1>(block1)); |
+ EXPECT_NE(nullptr, allocator3->GetAsObject<TestObject2>(block2)); |
// Ensure that GetNextOfType works. |
PersistentMemoryAllocator::Iterator iter1c(allocator_.get()); |
- EXPECT_EQ(block2, iter1c.GetNextOfType(2)); |
+ EXPECT_EQ(block2, iter1c.GetNextOfType<TestObject2>()); |
EXPECT_EQ(0U, iter1c.GetNextOfType(2)); |
+ |
+ // Ensure that GetNextOfObject works. |
+ PersistentMemoryAllocator::Iterator iter1d(allocator_.get()); |
+ EXPECT_EQ(obj2, iter1d.GetNextOfObject<TestObject2>()); |
+ EXPECT_EQ(nullptr, iter1d.GetNextOfObject<TestObject2>()); |
+ |
+ // Ensure that deleting an object works. |
+ allocator_->DeleteObject(obj2); |
+ PersistentMemoryAllocator::Iterator iter1z(allocator_.get()); |
+ EXPECT_EQ(nullptr, iter1z.GetNextOfObject<TestObject2>()); |
} |
TEST_F(PersistentMemoryAllocatorTest, PageTest) { |