OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/heap/array-buffer-tracker.h" | 5 #include "src/heap/array-buffer-tracker.h" |
6 #include "test/cctest/cctest.h" | 6 #include "test/cctest/cctest.h" |
7 #include "test/cctest/heap/heap-utils.h" | 7 #include "test/cctest/heap/heap-utils.h" |
8 | 8 |
9 namespace { | 9 namespace { |
10 | 10 |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 Handle<JSArrayBuffer> buf1 = v8::Utils::OpenHandle(*ab1); | 307 Handle<JSArrayBuffer> buf1 = v8::Utils::OpenHandle(*ab1); |
308 heap::FillCurrentPage(heap->new_space()); | 308 heap::FillCurrentPage(heap->new_space()); |
309 Local<v8::ArrayBuffer> ab2 = v8::ArrayBuffer::New(isolate, 100); | 309 Local<v8::ArrayBuffer> ab2 = v8::ArrayBuffer::New(isolate, 100); |
310 Handle<JSArrayBuffer> buf2 = v8::Utils::OpenHandle(*ab2); | 310 Handle<JSArrayBuffer> buf2 = v8::Utils::OpenHandle(*ab2); |
311 CHECK_NE(Page::FromAddress(buf1->address()), | 311 CHECK_NE(Page::FromAddress(buf1->address()), |
312 Page::FromAddress(buf2->address())); | 312 Page::FromAddress(buf2->address())); |
313 heap::GcAndSweep(heap, OLD_SPACE); | 313 heap::GcAndSweep(heap, OLD_SPACE); |
314 } | 314 } |
315 } | 315 } |
316 | 316 |
| 317 TEST(ArrayBuffer_RetainedCounterPromotion) { |
| 318 // The test checks that retained counters on ArrayBufferTracker are consistent |
| 319 // with where the buffers are on the heap. |
| 320 CcTest::InitializeVM(); |
| 321 LocalContext env; |
| 322 v8::Isolate* isolate = env->GetIsolate(); |
| 323 Heap* heap = reinterpret_cast<Isolate*>(isolate)->heap(); |
| 324 ArrayBufferTracker* tracker = heap->array_buffer_tracker(); |
| 325 { |
| 326 v8::HandleScope handle_scope(isolate); |
| 327 Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(isolate, 100); |
| 328 Handle<JSArrayBuffer> buf = v8::Utils::OpenHandle(*ab); |
| 329 CHECK(heap->InNewSpace(*buf)); |
| 330 CHECK_EQ(tracker->retained_from_new_space(), 100u); |
| 331 CHECK_EQ(tracker->retained_from_old_space(), 0u); |
| 332 heap::GcAndSweep(heap, OLD_SPACE); |
| 333 CHECK(heap->InNewSpace(*buf)); |
| 334 CHECK_EQ(tracker->retained_from_new_space(), 100u); |
| 335 CHECK_EQ(tracker->retained_from_old_space(), 0u); |
| 336 heap::GcAndSweep(heap, OLD_SPACE); |
| 337 CHECK(heap->InOldSpace(*buf)); |
| 338 CHECK_EQ(tracker->retained_from_new_space(), 0u); |
| 339 CHECK_EQ(tracker->retained_from_old_space(), 100u); |
| 340 } |
| 341 } |
| 342 |
| 343 TEST(ArrayBuffer_RetainedCounterNewSpace) { |
| 344 // The test checks that retained counters on ArrayBufferTracker are consistent |
| 345 // with where the buffers are on the heap. |
| 346 CcTest::InitializeVM(); |
| 347 LocalContext env; |
| 348 v8::Isolate* isolate = env->GetIsolate(); |
| 349 Heap* heap = reinterpret_cast<Isolate*>(isolate)->heap(); |
| 350 ArrayBufferTracker* tracker = heap->array_buffer_tracker(); |
| 351 { |
| 352 v8::HandleScope handle_scope(isolate); |
| 353 { |
| 354 v8::HandleScope tmp_scope(isolate); |
| 355 Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(isolate, 100); |
| 356 Handle<JSArrayBuffer> buf = v8::Utils::OpenHandle(*ab); |
| 357 CHECK(heap->InNewSpace(*buf)); |
| 358 } |
| 359 { |
| 360 v8::HandleScope tmp_scope(isolate); |
| 361 Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(isolate, 50); |
| 362 Handle<JSArrayBuffer> buf = v8::Utils::OpenHandle(*ab); |
| 363 CHECK(heap->InNewSpace(*buf)); |
| 364 CHECK_EQ(tracker->retained_from_new_space(), 150u); |
| 365 CHECK_EQ(tracker->retained_from_old_space(), 0u); |
| 366 heap::GcAndSweep(heap, NEW_SPACE); |
| 367 CHECK(heap->InNewSpace(*buf)); |
| 368 CHECK_EQ(tracker->retained_from_new_space(), 50u); |
| 369 CHECK_EQ(tracker->retained_from_old_space(), 0u); |
| 370 } |
| 371 heap::GcAndSweep(heap, NEW_SPACE); |
| 372 CHECK_EQ(tracker->retained_from_new_space(), 0u); |
| 373 CHECK_EQ(tracker->retained_from_old_space(), 0u); |
| 374 } |
| 375 } |
| 376 |
317 } // namespace internal | 377 } // namespace internal |
318 } // namespace v8 | 378 } // namespace v8 |
OLD | NEW |