| Index: test/cctest/heap/test-array-buffer-tracker.cc
|
| diff --git a/test/cctest/heap/test-array-buffer-tracker.cc b/test/cctest/heap/test-array-buffer-tracker.cc
|
| index b331f6bf3a5a8a3eee261e14449ccf96a57a8ecc..d20798bdf31692a47d1f8a537a9d94f3ece3d77d 100644
|
| --- a/test/cctest/heap/test-array-buffer-tracker.cc
|
| +++ b/test/cctest/heap/test-array-buffer-tracker.cc
|
| @@ -314,5 +314,65 @@ UNINITIALIZED_TEST(ArrayBuffer_SemiSpaceCopyMultipleTasks) {
|
| }
|
| }
|
|
|
| +TEST(ArrayBuffer_RetainedCounterPromotion) {
|
| + // The test checks that retained counters on ArrayBufferTracker are consistent
|
| + // with where the buffers are on the heap.
|
| + CcTest::InitializeVM();
|
| + LocalContext env;
|
| + v8::Isolate* isolate = env->GetIsolate();
|
| + Heap* heap = reinterpret_cast<Isolate*>(isolate)->heap();
|
| + ArrayBufferTracker* tracker = heap->array_buffer_tracker();
|
| + {
|
| + v8::HandleScope handle_scope(isolate);
|
| + Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(isolate, 100);
|
| + Handle<JSArrayBuffer> buf = v8::Utils::OpenHandle(*ab);
|
| + CHECK(heap->InNewSpace(*buf));
|
| + CHECK_EQ(tracker->retained_from_new_space(), 100u);
|
| + CHECK_EQ(tracker->retained_from_old_space(), 0u);
|
| + heap::GcAndSweep(heap, OLD_SPACE);
|
| + CHECK(heap->InNewSpace(*buf));
|
| + CHECK_EQ(tracker->retained_from_new_space(), 100u);
|
| + CHECK_EQ(tracker->retained_from_old_space(), 0u);
|
| + heap::GcAndSweep(heap, OLD_SPACE);
|
| + CHECK(heap->InOldSpace(*buf));
|
| + CHECK_EQ(tracker->retained_from_new_space(), 0u);
|
| + CHECK_EQ(tracker->retained_from_old_space(), 100u);
|
| + }
|
| +}
|
| +
|
| +TEST(ArrayBuffer_RetainedCounterNewSpace) {
|
| + // The test checks that retained counters on ArrayBufferTracker are consistent
|
| + // with where the buffers are on the heap.
|
| + CcTest::InitializeVM();
|
| + LocalContext env;
|
| + v8::Isolate* isolate = env->GetIsolate();
|
| + Heap* heap = reinterpret_cast<Isolate*>(isolate)->heap();
|
| + ArrayBufferTracker* tracker = heap->array_buffer_tracker();
|
| + {
|
| + v8::HandleScope handle_scope(isolate);
|
| + {
|
| + v8::HandleScope tmp_scope(isolate);
|
| + Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(isolate, 100);
|
| + Handle<JSArrayBuffer> buf = v8::Utils::OpenHandle(*ab);
|
| + CHECK(heap->InNewSpace(*buf));
|
| + }
|
| + {
|
| + v8::HandleScope tmp_scope(isolate);
|
| + Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(isolate, 50);
|
| + Handle<JSArrayBuffer> buf = v8::Utils::OpenHandle(*ab);
|
| + CHECK(heap->InNewSpace(*buf));
|
| + CHECK_EQ(tracker->retained_from_new_space(), 150u);
|
| + CHECK_EQ(tracker->retained_from_old_space(), 0u);
|
| + heap::GcAndSweep(heap, NEW_SPACE);
|
| + CHECK(heap->InNewSpace(*buf));
|
| + CHECK_EQ(tracker->retained_from_new_space(), 50u);
|
| + CHECK_EQ(tracker->retained_from_old_space(), 0u);
|
| + }
|
| + heap::GcAndSweep(heap, NEW_SPACE);
|
| + CHECK_EQ(tracker->retained_from_new_space(), 0u);
|
| + CHECK_EQ(tracker->retained_from_old_space(), 0u);
|
| + }
|
| +}
|
| +
|
| } // namespace internal
|
| } // namespace v8
|
|
|