diff options
Diffstat (limited to 'deps/v8/test/cctest/heap/test-array-buffer-tracker.cc')
-rw-r--r-- | deps/v8/test/cctest/heap/test-array-buffer-tracker.cc | 55 |
1 files changed, 49 insertions, 6 deletions
diff --git a/deps/v8/test/cctest/heap/test-array-buffer-tracker.cc b/deps/v8/test/cctest/heap/test-array-buffer-tracker.cc index e50018f75c..31aff4f673 100644 --- a/deps/v8/test/cctest/heap/test-array-buffer-tracker.cc +++ b/deps/v8/test/cctest/heap/test-array-buffer-tracker.cc @@ -224,7 +224,7 @@ TEST(ArrayBuffer_NonLivePromotion) { heap::GcAndSweep(heap, NEW_SPACE); CHECK(IsTracked(JSArrayBuffer::cast(root->get(0)))); raw_ab = JSArrayBuffer::cast(root->get(0)); - root->set(0, heap->undefined_value()); + root->set(0, ReadOnlyRoots(heap).undefined_value()); heap::SimulateIncrementalMarking(heap, true); // Prohibit page from being released. Page::FromAddress(raw_ab->address())->MarkNeverEvacuate(); @@ -261,7 +261,7 @@ TEST(ArrayBuffer_LivePromotion) { heap::GcAndSweep(heap, NEW_SPACE); CHECK(IsTracked(JSArrayBuffer::cast(root->get(0)))); raw_ab = JSArrayBuffer::cast(root->get(0)); - root->set(0, heap->undefined_value()); + root->set(0, ReadOnlyRoots(heap).undefined_value()); // Prohibit page from being released. Page::FromAddress(raw_ab->address())->MarkNeverEvacuate(); heap::GcAndSweep(heap, OLD_SPACE); @@ -343,16 +343,17 @@ TEST(ArrayBuffer_ExternalBackingStoreSizeIncreases) { LocalContext env; v8::Isolate* isolate = env->GetIsolate(); Heap* heap = reinterpret_cast<Isolate*>(isolate)->heap(); + ExternalBackingStoreType type = ExternalBackingStoreType::kArrayBuffer; const size_t backing_store_before = - heap->new_space()->ExternalBackingStoreBytes(); + heap->new_space()->ExternalBackingStoreBytes(type); { const size_t kArraybufferSize = 117; v8::HandleScope handle_scope(isolate); Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(isolate, kArraybufferSize); USE(ab); const size_t backing_store_after = - heap->new_space()->ExternalBackingStoreBytes(); + heap->new_space()->ExternalBackingStoreBytes(type); CHECK_EQ(kArraybufferSize, backing_store_after - backing_store_before); } } @@ -362,9 +363,10 @@ TEST(ArrayBuffer_ExternalBackingStoreSizeDecreases) { LocalContext env; v8::Isolate* isolate = env->GetIsolate(); Heap* heap = reinterpret_cast<Isolate*>(isolate)->heap(); + ExternalBackingStoreType type = ExternalBackingStoreType::kArrayBuffer; const size_t backing_store_before = - heap->new_space()->ExternalBackingStoreBytes(); + heap->new_space()->ExternalBackingStoreBytes(type); { const size_t kArraybufferSize = 117; v8::HandleScope handle_scope(isolate); @@ -373,7 +375,48 @@ TEST(ArrayBuffer_ExternalBackingStoreSizeDecreases) { } heap::GcAndSweep(heap, OLD_SPACE); const size_t backing_store_after = - heap->new_space()->ExternalBackingStoreBytes(); + heap->new_space()->ExternalBackingStoreBytes(type); + CHECK_EQ(0, backing_store_after - backing_store_before); +} + +TEST(ArrayBuffer_ExternalBackingStoreSizeIncreasesMarkCompact) { + if (FLAG_never_compact) return; + ManualGCScope manual_gc_scope; + FLAG_manual_evacuation_candidates_selection = true; + CcTest::InitializeVM(); + LocalContext env; + v8::Isolate* isolate = env->GetIsolate(); + Heap* heap = reinterpret_cast<Isolate*>(isolate)->heap(); + heap::AbandonCurrentlyFreeMemory(heap->old_space()); + ExternalBackingStoreType type = ExternalBackingStoreType::kArrayBuffer; + + const size_t backing_store_before = + heap->old_space()->ExternalBackingStoreBytes(type); + + const size_t kArraybufferSize = 117; + { + v8::HandleScope handle_scope(isolate); + Local<v8::ArrayBuffer> ab1 = + v8::ArrayBuffer::New(isolate, kArraybufferSize); + Handle<JSArrayBuffer> buf1 = v8::Utils::OpenHandle(*ab1); + CHECK(IsTracked(*buf1)); + heap::GcAndSweep(heap, NEW_SPACE); + heap::GcAndSweep(heap, NEW_SPACE); + + Page* page_before_gc = Page::FromAddress(buf1->address()); + heap::ForceEvacuationCandidate(page_before_gc); + CHECK(IsTracked(*buf1)); + + CcTest::CollectAllGarbage(); + + const size_t backing_store_after = + heap->old_space()->ExternalBackingStoreBytes(type); + CHECK_EQ(kArraybufferSize, backing_store_after - backing_store_before); + } + + heap::GcAndSweep(heap, OLD_SPACE); + const size_t backing_store_after = + heap->old_space()->ExternalBackingStoreBytes(type); CHECK_EQ(0, backing_store_after - backing_store_before); } |