summaryrefslogtreecommitdiff
path: root/deps/v8/test/cctest/heap/test-array-buffer-tracker.cc
diff options
context:
space:
mode:
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.cc55
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);
}