| 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) {
|
|
|