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 | |
451 TEST(LargeObjectSpace) { | 404 TEST(LargeObjectSpace) { |
452 // This test does not initialize allocated objects, which confuses the | 405 // This test does not initialize allocated objects, which confuses the |
453 // incremental marker. | 406 // incremental marker. |
454 FLAG_incremental_marking = false; | 407 FLAG_incremental_marking = false; |
455 v8::V8::Initialize(); | 408 v8::V8::Initialize(); |
456 | 409 |
457 LargeObjectSpace* lo = CcTest::heap()->lo_space(); | 410 LargeObjectSpace* lo = CcTest::heap()->lo_space(); |
458 CHECK(lo != NULL); | 411 CHECK(lo != NULL); |
459 | 412 |
460 int lo_size = Page::kPageSize; | 413 int lo_size = Page::kPageSize; |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
798 HeapObject* filler = | 751 HeapObject* filler = |
799 HeapObject::FromAddress(array->address() + array->Size()); | 752 HeapObject::FromAddress(array->address() + array->Size()); |
800 CHECK_EQ(filler->map(), CcTest::heap()->two_pointer_filler_map()); | 753 CHECK_EQ(filler->map(), CcTest::heap()->two_pointer_filler_map()); |
801 | 754 |
802 const size_t shrinked = page->ShrinkToHighWaterMark(); | 755 const size_t shrinked = page->ShrinkToHighWaterMark(); |
803 CHECK_EQ(0u, shrinked); | 756 CHECK_EQ(0u, shrinked); |
804 } | 757 } |
805 | 758 |
806 } // namespace internal | 759 } // namespace internal |
807 } // namespace v8 | 760 } // namespace v8 |
OLD | NEW |