OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 | 394 |
395 while (s->Available() > 0) { | 395 while (s->Available() > 0) { |
396 s->AllocateRawUnaligned(kMaxRegularHeapObjectSize).ToObjectChecked(); | 396 s->AllocateRawUnaligned(kMaxRegularHeapObjectSize).ToObjectChecked(); |
397 } | 397 } |
398 | 398 |
399 delete s; | 399 delete s; |
400 memory_allocator->TearDown(); | 400 memory_allocator->TearDown(); |
401 delete memory_allocator; | 401 delete memory_allocator; |
402 } | 402 } |
403 | 403 |
| 404 |
| 405 TEST(CompactionSpace) { |
| 406 Isolate* isolate = CcTest::i_isolate(); |
| 407 Heap* heap = isolate->heap(); |
| 408 MemoryAllocator* memory_allocator = new MemoryAllocator(isolate); |
| 409 CHECK(memory_allocator != nullptr); |
| 410 CHECK(memory_allocator->SetUp(heap->MaxReserved(), heap->MaxExecutableSize(), |
| 411 0)); |
| 412 TestMemoryAllocatorScope test_scope(isolate, memory_allocator); |
| 413 |
| 414 CompactionSpace* compaction_space = |
| 415 new CompactionSpace(heap, OLD_SPACE, NOT_EXECUTABLE); |
| 416 CHECK(compaction_space != NULL); |
| 417 CHECK(compaction_space->SetUp()); |
| 418 |
| 419 OldSpace* old_space = new OldSpace(heap, OLD_SPACE, NOT_EXECUTABLE); |
| 420 CHECK(old_space != NULL); |
| 421 CHECK(old_space->SetUp()); |
| 422 |
| 423 // Cannot loop until "Available()" since we initially have 0 bytes available |
| 424 // and would thus neither grow, nor be able to allocate an object. |
| 425 const int kNumObjects = 100; |
| 426 const int kNumObjectsPerPage = |
| 427 compaction_space->AreaSize() / kMaxRegularHeapObjectSize; |
| 428 const int kExpectedPages = |
| 429 (kNumObjects + kNumObjectsPerPage - 1) / kNumObjectsPerPage; |
| 430 for (int i = 0; i < kNumObjects; i++) { |
| 431 compaction_space->AllocateRawUnaligned(kMaxRegularHeapObjectSize) |
| 432 .ToObjectChecked(); |
| 433 } |
| 434 int pages_in_old_space = old_space->CountTotalPages(); |
| 435 int pages_in_compaction_space = compaction_space->CountTotalPages(); |
| 436 CHECK_EQ(pages_in_compaction_space, kExpectedPages); |
| 437 CHECK_LE(pages_in_old_space, 1); |
| 438 |
| 439 old_space->MergeCompactionSpace(compaction_space); |
| 440 CHECK_EQ(old_space->CountTotalPages(), |
| 441 pages_in_old_space + pages_in_compaction_space); |
| 442 |
| 443 delete compaction_space; |
| 444 delete old_space; |
| 445 |
| 446 memory_allocator->TearDown(); |
| 447 delete memory_allocator; |
| 448 } |
| 449 |
| 450 |
404 TEST(LargeObjectSpace) { | 451 TEST(LargeObjectSpace) { |
405 // This test does not initialize allocated objects, which confuses the | 452 // This test does not initialize allocated objects, which confuses the |
406 // incremental marker. | 453 // incremental marker. |
407 FLAG_incremental_marking = false; | 454 FLAG_incremental_marking = false; |
408 v8::V8::Initialize(); | 455 v8::V8::Initialize(); |
409 | 456 |
410 LargeObjectSpace* lo = CcTest::heap()->lo_space(); | 457 LargeObjectSpace* lo = CcTest::heap()->lo_space(); |
411 CHECK(lo != NULL); | 458 CHECK(lo != NULL); |
412 | 459 |
413 int lo_size = Page::kPageSize; | 460 int lo_size = Page::kPageSize; |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
751 HeapObject* filler = | 798 HeapObject* filler = |
752 HeapObject::FromAddress(array->address() + array->Size()); | 799 HeapObject::FromAddress(array->address() + array->Size()); |
753 CHECK_EQ(filler->map(), CcTest::heap()->two_pointer_filler_map()); | 800 CHECK_EQ(filler->map(), CcTest::heap()->two_pointer_filler_map()); |
754 | 801 |
755 const size_t shrinked = page->ShrinkToHighWaterMark(); | 802 const size_t shrinked = page->ShrinkToHighWaterMark(); |
756 CHECK_EQ(0u, shrinked); | 803 CHECK_EQ(0u, shrinked); |
757 } | 804 } |
758 | 805 |
759 } // namespace internal | 806 } // namespace internal |
760 } // namespace v8 | 807 } // namespace v8 |
OLD | NEW |