Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Side by Side Diff: runtime/vm/heap_test.cc

Issue 2930943002: Debug garbage collector does not correctly remove cross-gen garbage (Closed)
Patch Set: Removes an extra space introduced in the last set. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "platform/globals.h" 5 #include "platform/globals.h"
6 6
7 #include "platform/assert.h" 7 #include "platform/assert.h"
8 #include "vm/become.h" 8 #include "vm/become.h"
9 #include "vm/dart_api_impl.h" 9 #include "vm/dart_api_impl.h"
10 #include "vm/globals.h" 10 #include "vm/globals.h"
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 355
356 Become::ElementsForwardIdentity(before, after); 356 Become::ElementsForwardIdentity(before, after);
357 357
358 EXPECT(before_obj.raw() == after_obj.raw()); 358 EXPECT(before_obj.raw() == after_obj.raw());
359 EXPECT(!after_obj.raw()->IsRemembered()); 359 EXPECT(!after_obj.raw()->IsRemembered());
360 360
361 heap->CollectAllGarbage(); 361 heap->CollectAllGarbage();
362 362
363 EXPECT(before_obj.raw() == after_obj.raw()); 363 EXPECT(before_obj.raw() == after_obj.raw());
364 } 364 }
365 365
rmacnak 2017/06/19 19:29:00 Two lines between functions in cc files.
366 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_DeadOldToNew) {
367 Isolate* isolate = Isolate::Current();
368 Heap* heap = isolate->heap();
369
370 heap->CollectAllGarbage();
371 intptr_t size_before =
372 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
373
374 Array& old = Array::Handle(Array::New(1, Heap::kOld));
375 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
376 old.SetAt(0, neu);
377 old = Array::null();
378 neu = Array::null();
379
380 heap->CollectAllGarbage();
381
382 intptr_t size_after =
383 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
384
385 EXPECT(size_before == size_after);
386 }
387
388 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_DeadNewToOld) {
389 Isolate* isolate = Isolate::Current();
390 Heap* heap = isolate->heap();
391
392 heap->CollectAllGarbage();
393 intptr_t size_before =
394 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
395
396 Array& old = Array::Handle(Array::New(1, Heap::kOld));
397 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
398 neu.SetAt(0, old);
399 old = Array::null();
400 neu = Array::null();
401
402 heap->CollectAllGarbage();
403
404 intptr_t size_after =
405 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
406
407 EXPECT(size_before == size_after);
408 }
409
410 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_DeadGenCycle) {
411 Isolate* isolate = Isolate::Current();
412 Heap* heap = isolate->heap();
413
414 heap->CollectAllGarbage();
415 intptr_t size_before =
416 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
417
418 Array& old = Array::Handle(Array::New(1, Heap::kOld));
419 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
420 neu.SetAt(0, old);
421 old.SetAt(0, neu);
422 old = Array::null();
423 neu = Array::null();
424
425 heap->CollectAllGarbage();
426
427 intptr_t size_after =
428 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
429
430 EXPECT(size_before == size_after);
431 }
432
433 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveNewToOld) {
434 Isolate* isolate = Isolate::Current();
435 Heap* heap = isolate->heap();
436
437 heap->CollectAllGarbage();
438 intptr_t size_before =
439 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
440
441 Array& old = Array::Handle(Array::New(1, Heap::kOld));
442 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
443 neu.SetAt(0, old);
444 old = Array::null();
445
446 heap->CollectAllGarbage();
447
448 intptr_t size_after =
449 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
450
451 EXPECT(size_before < size_after);
452 }
453
454 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveOldToNew) {
455 Isolate* isolate = Isolate::Current();
456 Heap* heap = isolate->heap();
457
458 heap->CollectAllGarbage();
459 intptr_t size_before =
460 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
461
462 Array& old = Array::Handle(Array::New(1, Heap::kOld));
463 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
464 old.SetAt(0, neu);
465 neu = Array::null();
466
467 heap->CollectAllGarbage();
468
469 intptr_t size_after =
470 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
471
472 EXPECT(size_before < size_after);
473 }
474
475 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveOldDeadNew) {
476 Isolate* isolate = Isolate::Current();
477 Heap* heap = isolate->heap();
478
479 heap->CollectAllGarbage();
480 intptr_t size_before =
481 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
482
483 Array& old = Array::Handle(Array::New(1, Heap::kOld));
484 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
485 neu = Array::null();
486 old.SetAt(0, old);
487
488 heap->CollectAllGarbage();
489
490 intptr_t size_after =
491 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
492
493 EXPECT(size_before < size_after);
494 }
495
496 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveNewDeadOld) {
497 Isolate* isolate = Isolate::Current();
498 Heap* heap = isolate->heap();
499
500 heap->CollectAllGarbage();
501 intptr_t size_before =
502 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
503
504 Array& old = Array::Handle(Array::New(1, Heap::kOld));
505 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
506 old = Array::null();
507 neu.SetAt(0, neu);
508
509 heap->CollectAllGarbage();
510
511 intptr_t size_after =
512 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
513
514 EXPECT(size_before < size_after);
515 }
516
517 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveNewToOldChain) {
518 Isolate* isolate = Isolate::Current();
519 Heap* heap = isolate->heap();
520
521 heap->CollectAllGarbage();
522 intptr_t size_before =
523 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
524
525 Array& old = Array::Handle(Array::New(1, Heap::kOld));
526 Array& old2 = Array::Handle(Array::New(1, Heap::kOld));
527 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
528 old.SetAt(0, old2);
529 neu.SetAt(0, old);
530 old = Array::null();
531 old2 = Array::null();
532
533 heap->CollectAllGarbage();
534
535 intptr_t size_after =
536 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
537
538 EXPECT(size_before < size_after);
539 }
540
541 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveOldToNewChain) {
542 Isolate* isolate = Isolate::Current();
543 Heap* heap = isolate->heap();
544
545 heap->CollectAllGarbage();
546 intptr_t size_before =
547 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
548
549 Array& old = Array::Handle(Array::New(1, Heap::kOld));
550 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
551 Array& neu2 = Array::Handle(Array::New(1, Heap::kOld));
552 neu.SetAt(0, neu2);
553 old.SetAt(0, neu);
554 neu = Array::null();
555 neu2 = Array::null();
556
557 heap->CollectAllGarbage();
558
559 intptr_t size_after =
560 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
561
562 EXPECT(size_before < size_after);
563 }
564
366 } // namespace dart 565 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698