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

Unified Diff: base/metrics/persistent_memory_allocator_unittest.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/metrics/persistent_memory_allocator.cc ('k') | base/metrics/persistent_sample_map.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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) {
« no previous file with comments | « base/metrics/persistent_memory_allocator.cc ('k') | base/metrics/persistent_sample_map.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698