Chromium Code Reviews| Index: runtime/vm/virtual_memory_test.cc |
| =================================================================== |
| --- runtime/vm/virtual_memory_test.cc (revision 41017) |
| +++ runtime/vm/virtual_memory_test.cc (working copy) |
| @@ -39,4 +39,41 @@ |
| delete vm; |
| } |
| + |
| +UNIT_TEST_CASE(FreeVirtualMemory) { |
| + // Reservations should always be handed back to OS upon destruction. |
| + const intptr_t kVirtualMemoryBlockSize = 10 * MB; |
| + const intptr_t kIterations = 900; // Enough to exhaust 32-bit address space. |
| + for (intptr_t i = 0; i < kIterations; ++i) { |
| + VirtualMemory* vm = VirtualMemory::Reserve(kVirtualMemoryBlockSize); |
| + vm->Commit(false); |
|
Ivan Posva
2014/10/09 18:31:56
You might want to alternate the value for the exec
|
| + delete vm; |
| + } |
| + // Check that truncation does not introduce leaks. |
| + for (intptr_t i = 0; i < kIterations; ++i) { |
| + VirtualMemory* vm = VirtualMemory::Reserve(kVirtualMemoryBlockSize); |
| + vm->Commit(false); |
| + vm->Truncate(kVirtualMemoryBlockSize / 2, true); |
| + delete vm; |
| + } |
| + for (intptr_t i = 0; i < kIterations; ++i) { |
| + VirtualMemory* vm = VirtualMemory::Reserve(kVirtualMemoryBlockSize); |
| + vm->Commit(false); |
| + vm->Truncate(kVirtualMemoryBlockSize / 2, false); |
| + delete vm; |
| + } |
| + for (intptr_t i = 0; i < kIterations; ++i) { |
| + VirtualMemory* vm = VirtualMemory::Reserve(kVirtualMemoryBlockSize); |
| + vm->Commit(false); |
| + vm->Truncate(0, true); |
| + delete vm; |
| + } |
| + for (intptr_t i = 0; i < kIterations; ++i) { |
| + VirtualMemory* vm = VirtualMemory::Reserve(kVirtualMemoryBlockSize); |
| + vm->Commit(false); |
| + vm->Truncate(0, false); |
| + delete vm; |
| + } |
| +} |
| + |
| } // namespace dart |