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

Side by Side Diff: content/common/host_discardable_shared_memory_manager_unittest.cc

Issue 809603004: base: Add ashmem support to base::DiscardableSharedMemory implementation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix include Created 6 years 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 unified diff | Download patch
« no previous file with comments | « base/process/process_metrics_win.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/common/host_discardable_shared_memory_manager.h" 5 #include "content/common/host_discardable_shared_memory_manager.h"
6 #include "testing/gtest/include/gtest/gtest.h" 6 #include "testing/gtest/include/gtest/gtest.h"
7 7
8 namespace content { 8 namespace content {
9 namespace { 9 namespace {
10 10
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 manager_->AllocateLockedDiscardableSharedMemoryForChild( 69 manager_->AllocateLockedDiscardableSharedMemoryForChild(
70 base::GetCurrentProcessHandle(), kDataSize, &shared_handle); 70 base::GetCurrentProcessHandle(), kDataSize, &shared_handle);
71 ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle)); 71 ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle));
72 72
73 TestDiscardableSharedMemory memory(shared_handle); 73 TestDiscardableSharedMemory memory(shared_handle);
74 bool rv = memory.Map(kDataSize); 74 bool rv = memory.Map(kDataSize);
75 ASSERT_TRUE(rv); 75 ASSERT_TRUE(rv);
76 76
77 memcpy(memory.memory(), data, kDataSize); 77 memcpy(memory.memory(), data, kDataSize);
78 memory.SetNow(base::Time::FromDoubleT(1)); 78 memory.SetNow(base::Time::FromDoubleT(1));
79 memory.Unlock(); 79 memory.Unlock(0, 0);
80 80
81 ASSERT_TRUE(memory.Lock()); 81 ASSERT_TRUE(memory.Lock(0, 0));
82 EXPECT_EQ(memcmp(data, memory.memory(), kDataSize), 0); 82 EXPECT_EQ(memcmp(data, memory.memory(), kDataSize), 0);
83 memory.Unlock(); 83 memory.Unlock(0, 0);
84 } 84 }
85 85
86 TEST_F(HostDiscardableSharedMemoryManagerTest, Purge) { 86 TEST_F(HostDiscardableSharedMemoryManagerTest, Purge) {
87 const int kDataSize = 1024; 87 const int kDataSize = 1024;
88 88
89 base::SharedMemoryHandle shared_handle1; 89 base::SharedMemoryHandle shared_handle1;
90 manager_->AllocateLockedDiscardableSharedMemoryForChild( 90 manager_->AllocateLockedDiscardableSharedMemoryForChild(
91 base::GetCurrentProcessHandle(), kDataSize, &shared_handle1); 91 base::GetCurrentProcessHandle(), kDataSize, &shared_handle1);
92 ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle1)); 92 ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle1));
93 93
94 TestDiscardableSharedMemory memory1(shared_handle1); 94 TestDiscardableSharedMemory memory1(shared_handle1);
95 bool rv = memory1.Map(kDataSize); 95 bool rv = memory1.Map(kDataSize);
96 ASSERT_TRUE(rv); 96 ASSERT_TRUE(rv);
97 97
98 base::SharedMemoryHandle shared_handle2; 98 base::SharedMemoryHandle shared_handle2;
99 manager_->AllocateLockedDiscardableSharedMemoryForChild( 99 manager_->AllocateLockedDiscardableSharedMemoryForChild(
100 base::GetCurrentProcessHandle(), kDataSize, &shared_handle2); 100 base::GetCurrentProcessHandle(), kDataSize, &shared_handle2);
101 ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle2)); 101 ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle2));
102 102
103 TestDiscardableSharedMemory memory2(shared_handle2); 103 TestDiscardableSharedMemory memory2(shared_handle2);
104 rv = memory2.Map(kDataSize); 104 rv = memory2.Map(kDataSize);
105 ASSERT_TRUE(rv); 105 ASSERT_TRUE(rv);
106 106
107 // Enough memory for both allocations. 107 // Enough memory for both allocations.
108 manager_->SetNow(base::Time::FromDoubleT(1)); 108 manager_->SetNow(base::Time::FromDoubleT(1));
109 manager_->SetMemoryLimit(memory1.mapped_size() + memory2.mapped_size()); 109 manager_->SetMemoryLimit(memory1.mapped_size() + memory2.mapped_size());
110 110
111 memory1.SetNow(base::Time::FromDoubleT(2)); 111 memory1.SetNow(base::Time::FromDoubleT(2));
112 memory1.Unlock(); 112 memory1.Unlock(0, 0);
113 memory2.SetNow(base::Time::FromDoubleT(2)); 113 memory2.SetNow(base::Time::FromDoubleT(2));
114 memory2.Unlock(); 114 memory2.Unlock(0, 0);
115 115
116 // Manager should not have to schedule another call to EnforceMemoryPolicy(). 116 // Manager should not have to schedule another call to EnforceMemoryPolicy().
117 manager_->SetNow(base::Time::FromDoubleT(3)); 117 manager_->SetNow(base::Time::FromDoubleT(3));
118 manager_->EnforceMemoryPolicy(); 118 manager_->EnforceMemoryPolicy();
119 EXPECT_FALSE(manager_->enforce_memory_policy_pending()); 119 EXPECT_FALSE(manager_->enforce_memory_policy_pending());
120 120
121 // Memory should still be resident. 121 // Memory should still be resident.
122 EXPECT_TRUE(memory1.IsMemoryResident()); 122 EXPECT_TRUE(memory1.IsMemoryResident());
123 EXPECT_TRUE(memory2.IsMemoryResident()); 123 EXPECT_TRUE(memory2.IsMemoryResident());
124 124
125 rv = memory1.Lock(); 125 rv = memory1.Lock(0, 0);
126 EXPECT_TRUE(rv); 126 EXPECT_TRUE(rv);
127 rv = memory2.Lock(); 127 rv = memory2.Lock(0, 0);
128 EXPECT_TRUE(rv); 128 EXPECT_TRUE(rv);
129 129
130 memory1.SetNow(base::Time::FromDoubleT(4)); 130 memory1.SetNow(base::Time::FromDoubleT(4));
131 memory1.Unlock(); 131 memory1.Unlock(0, 0);
132 memory2.SetNow(base::Time::FromDoubleT(5)); 132 memory2.SetNow(base::Time::FromDoubleT(5));
133 memory2.Unlock(); 133 memory2.Unlock(0, 0);
134 134
135 // Just enough memory for one allocation. 135 // Just enough memory for one allocation.
136 manager_->SetNow(base::Time::FromDoubleT(6)); 136 manager_->SetNow(base::Time::FromDoubleT(6));
137 manager_->SetMemoryLimit(memory2.mapped_size()); 137 manager_->SetMemoryLimit(memory2.mapped_size());
138 EXPECT_FALSE(manager_->enforce_memory_policy_pending()); 138 EXPECT_FALSE(manager_->enforce_memory_policy_pending());
139 139
140 // LRU allocation should still be resident. 140 // LRU allocation should still be resident.
141 EXPECT_FALSE(memory1.IsMemoryResident()); 141 EXPECT_FALSE(memory1.IsMemoryResident());
142 EXPECT_TRUE(memory2.IsMemoryResident()); 142 EXPECT_TRUE(memory2.IsMemoryResident());
143 143
144 rv = memory1.Lock(); 144 rv = memory1.Lock(0, 0);
145 EXPECT_FALSE(rv); 145 EXPECT_FALSE(rv);
146 rv = memory2.Lock(); 146 rv = memory2.Lock(0, 0);
147 EXPECT_TRUE(rv); 147 EXPECT_TRUE(rv);
148 } 148 }
149 149
150 TEST_F(HostDiscardableSharedMemoryManagerTest, EnforceMemoryPolicy) { 150 TEST_F(HostDiscardableSharedMemoryManagerTest, EnforceMemoryPolicy) {
151 const int kDataSize = 1024; 151 const int kDataSize = 1024;
152 152
153 base::SharedMemoryHandle shared_handle; 153 base::SharedMemoryHandle shared_handle;
154 manager_->AllocateLockedDiscardableSharedMemoryForChild( 154 manager_->AllocateLockedDiscardableSharedMemoryForChild(
155 base::GetCurrentProcessHandle(), kDataSize, &shared_handle); 155 base::GetCurrentProcessHandle(), kDataSize, &shared_handle);
156 ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle)); 156 ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle));
157 157
158 TestDiscardableSharedMemory memory(shared_handle); 158 TestDiscardableSharedMemory memory(shared_handle);
159 bool rv = memory.Map(kDataSize); 159 bool rv = memory.Map(kDataSize);
160 ASSERT_TRUE(rv); 160 ASSERT_TRUE(rv);
161 161
162 // Not enough memory for one allocation. 162 // Not enough memory for one allocation.
163 manager_->SetNow(base::Time::FromDoubleT(1)); 163 manager_->SetNow(base::Time::FromDoubleT(1));
164 manager_->SetMemoryLimit(memory.mapped_size() - 1); 164 manager_->SetMemoryLimit(memory.mapped_size() - 1);
165 // We need to enforce memory policy as our memory usage is currently above 165 // We need to enforce memory policy as our memory usage is currently above
166 // the limit. 166 // the limit.
167 EXPECT_TRUE(manager_->enforce_memory_policy_pending()); 167 EXPECT_TRUE(manager_->enforce_memory_policy_pending());
168 168
169 manager_->set_enforce_memory_policy_pending(false); 169 manager_->set_enforce_memory_policy_pending(false);
170 manager_->SetNow(base::Time::FromDoubleT(2)); 170 manager_->SetNow(base::Time::FromDoubleT(2));
171 manager_->EnforceMemoryPolicy(); 171 manager_->EnforceMemoryPolicy();
172 // Still need to enforce memory policy as nothing can be purged. 172 // Still need to enforce memory policy as nothing can be purged.
173 EXPECT_TRUE(manager_->enforce_memory_policy_pending()); 173 EXPECT_TRUE(manager_->enforce_memory_policy_pending());
174 174
175 memory.SetNow(base::Time::FromDoubleT(3)); 175 memory.SetNow(base::Time::FromDoubleT(3));
176 memory.Unlock(); 176 memory.Unlock(0, 0);
177 177
178 manager_->set_enforce_memory_policy_pending(false); 178 manager_->set_enforce_memory_policy_pending(false);
179 manager_->SetNow(base::Time::FromDoubleT(4)); 179 manager_->SetNow(base::Time::FromDoubleT(4));
180 manager_->EnforceMemoryPolicy(); 180 manager_->EnforceMemoryPolicy();
181 // Memory policy should have successfully been enforced. 181 // Memory policy should have successfully been enforced.
182 EXPECT_FALSE(manager_->enforce_memory_policy_pending()); 182 EXPECT_FALSE(manager_->enforce_memory_policy_pending());
183 183
184 EXPECT_FALSE(memory.Lock()); 184 EXPECT_FALSE(memory.Lock(0, 0));
185 } 185 }
186 186
187 } // namespace 187 } // namespace
188 } // namespace content 188 } // namespace content
OLDNEW
« no previous file with comments | « base/process/process_metrics_win.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698