| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 2761 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2772 | 2772 |
| 2773 HEAP_TEST(GCFlags) { | 2773 HEAP_TEST(GCFlags) { |
| 2774 CcTest::InitializeVM(); | 2774 CcTest::InitializeVM(); |
| 2775 Heap* heap = CcTest::heap(); | 2775 Heap* heap = CcTest::heap(); |
| 2776 | 2776 |
| 2777 heap->set_current_gc_flags(Heap::kNoGCFlags); | 2777 heap->set_current_gc_flags(Heap::kNoGCFlags); |
| 2778 CHECK_EQ(Heap::kNoGCFlags, heap->current_gc_flags_); | 2778 CHECK_EQ(Heap::kNoGCFlags, heap->current_gc_flags_); |
| 2779 | 2779 |
| 2780 // Set the flags to check whether we appropriately resets them after the GC. | 2780 // Set the flags to check whether we appropriately resets them after the GC. |
| 2781 heap->set_current_gc_flags(Heap::kAbortIncrementalMarkingMask); | 2781 heap->set_current_gc_flags(Heap::kAbortIncrementalMarkingMask); |
| 2782 heap->CollectAllGarbage(Heap::kReduceMemoryFootprintMask); | 2782 heap->CollectAllGarbage("GCFlags", Heap::kReduceMemoryFootprintMask); |
| 2783 CHECK_EQ(Heap::kNoGCFlags, heap->current_gc_flags_); | 2783 CHECK_EQ(Heap::kNoGCFlags, heap->current_gc_flags_); |
| 2784 | 2784 |
| 2785 MarkCompactCollector* collector = heap->mark_compact_collector(); | 2785 MarkCompactCollector* collector = heap->mark_compact_collector(); |
| 2786 if (collector->sweeping_in_progress()) { | 2786 if (collector->sweeping_in_progress()) { |
| 2787 collector->EnsureSweepingCompleted(); | 2787 collector->EnsureSweepingCompleted(); |
| 2788 } | 2788 } |
| 2789 | 2789 |
| 2790 IncrementalMarking* marking = heap->incremental_marking(); | 2790 IncrementalMarking* marking = heap->incremental_marking(); |
| 2791 marking->Stop(); | 2791 marking->Stop(); |
| 2792 heap->StartIncrementalMarking(Heap::kReduceMemoryFootprintMask); | 2792 heap->StartIncrementalMarking(Heap::kReduceMemoryFootprintMask); |
| 2793 CHECK_NE(0, heap->current_gc_flags_ & Heap::kReduceMemoryFootprintMask); | 2793 CHECK_NE(0, heap->current_gc_flags_ & Heap::kReduceMemoryFootprintMask); |
| 2794 | 2794 |
| 2795 heap->CollectGarbage(NEW_SPACE); | 2795 heap->CollectGarbage(NEW_SPACE); |
| 2796 // NewSpace scavenges should not overwrite the flags. | 2796 // NewSpace scavenges should not overwrite the flags. |
| 2797 CHECK_NE(0, heap->current_gc_flags_ & Heap::kReduceMemoryFootprintMask); | 2797 CHECK_NE(0, heap->current_gc_flags_ & Heap::kReduceMemoryFootprintMask); |
| 2798 | 2798 |
| 2799 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); | 2799 heap->CollectAllGarbage("GCFlags", Heap::kAbortIncrementalMarkingMask); |
| 2800 CHECK_EQ(Heap::kNoGCFlags, heap->current_gc_flags_); | 2800 CHECK_EQ(Heap::kNoGCFlags, heap->current_gc_flags_); |
| 2801 } | 2801 } |
| 2802 | 2802 |
| 2803 | 2803 |
| 2804 TEST(IdleNotificationFinishMarking) { | 2804 TEST(IdleNotificationFinishMarking) { |
| 2805 i::FLAG_allow_natives_syntax = true; | 2805 i::FLAG_allow_natives_syntax = true; |
| 2806 CcTest::InitializeVM(); | 2806 CcTest::InitializeVM(); |
| 2807 SimulateFullSpace(CcTest::heap()->old_space()); | 2807 SimulateFullSpace(CcTest::heap()->old_space()); |
| 2808 IncrementalMarking* marking = CcTest::heap()->incremental_marking(); | 2808 IncrementalMarking* marking = CcTest::heap()->incremental_marking(); |
| 2809 marking->Stop(); | 2809 marking->Stop(); |
| (...skipping 865 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3675 CHECK_EQ(1, old_space->CountTotalPages()); | 3675 CHECK_EQ(1, old_space->CountTotalPages()); |
| 3676 for (int i = 0; i < number_of_test_pages; i++) { | 3676 for (int i = 0; i < number_of_test_pages; i++) { |
| 3677 AlwaysAllocateScope always_allocate(isolate); | 3677 AlwaysAllocateScope always_allocate(isolate); |
| 3678 SimulateFullSpace(old_space); | 3678 SimulateFullSpace(old_space); |
| 3679 factory->NewFixedArray(1, TENURED); | 3679 factory->NewFixedArray(1, TENURED); |
| 3680 } | 3680 } |
| 3681 CHECK_EQ(number_of_test_pages + 1, old_space->CountTotalPages()); | 3681 CHECK_EQ(number_of_test_pages + 1, old_space->CountTotalPages()); |
| 3682 | 3682 |
| 3683 // Triggering one GC will cause a lot of garbage to be discovered but | 3683 // Triggering one GC will cause a lot of garbage to be discovered but |
| 3684 // even spread across all allocated pages. | 3684 // even spread across all allocated pages. |
| 3685 heap->CollectAllGarbage(Heap::kFinalizeIncrementalMarkingMask, | 3685 heap->CollectAllGarbage("triggered for preparation", |
| 3686 "triggered for preparation"); | 3686 Heap::kFinalizeIncrementalMarkingMask); |
| 3687 CHECK_GE(number_of_test_pages + 1, old_space->CountTotalPages()); | 3687 CHECK_GE(number_of_test_pages + 1, old_space->CountTotalPages()); |
| 3688 | 3688 |
| 3689 // Triggering subsequent GCs should cause at least half of the pages | 3689 // Triggering subsequent GCs should cause at least half of the pages |
| 3690 // to be released to the OS after at most two cycles. | 3690 // to be released to the OS after at most two cycles. |
| 3691 heap->CollectAllGarbage(Heap::kFinalizeIncrementalMarkingMask, | 3691 heap->CollectAllGarbage("triggered by test 1", |
| 3692 "triggered by test 1"); | 3692 Heap::kFinalizeIncrementalMarkingMask); |
| 3693 ; |
| 3693 CHECK_GE(number_of_test_pages + 1, old_space->CountTotalPages()); | 3694 CHECK_GE(number_of_test_pages + 1, old_space->CountTotalPages()); |
| 3694 heap->CollectAllGarbage(Heap::kFinalizeIncrementalMarkingMask, | 3695 heap->CollectAllGarbage("triggered by test 2", |
| 3695 "triggered by test 2"); | 3696 Heap::kFinalizeIncrementalMarkingMask); |
| 3696 CHECK_GE(number_of_test_pages + 1, old_space->CountTotalPages() * 2); | 3697 CHECK_GE(number_of_test_pages + 1, old_space->CountTotalPages() * 2); |
| 3697 | 3698 |
| 3698 // Triggering a last-resort GC should cause all pages to be released to the | 3699 // Triggering a last-resort GC should cause all pages to be released to the |
| 3699 // OS so that other processes can seize the memory. If we get a failure here | 3700 // OS so that other processes can seize the memory. If we get a failure here |
| 3700 // where there are 2 pages left instead of 1, then we should increase the | 3701 // where there are 2 pages left instead of 1, then we should increase the |
| 3701 // size of the first page a little in SizeOfFirstPage in spaces.cc. The | 3702 // size of the first page a little in SizeOfFirstPage in spaces.cc. The |
| 3702 // first page should be small in order to reduce memory used when the VM | 3703 // first page should be small in order to reduce memory used when the VM |
| 3703 // boots, but if the 20 small arrays don't fit on the first page then that's | 3704 // boots, but if the 20 small arrays don't fit on the first page then that's |
| 3704 // an indication that it is too small. | 3705 // an indication that it is too small. |
| 3705 heap->CollectAllAvailableGarbage("triggered really hard"); | 3706 heap->CollectAllAvailableGarbage("triggered really hard"); |
| (...skipping 2819 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6525 { | 6526 { |
| 6526 SharedFunctionInfo::Iterator iterator(isolate); | 6527 SharedFunctionInfo::Iterator iterator(isolate); |
| 6527 while (iterator.Next()) sfi_count--; | 6528 while (iterator.Next()) sfi_count--; |
| 6528 } | 6529 } |
| 6529 | 6530 |
| 6530 CHECK_EQ(0, sfi_count); | 6531 CHECK_EQ(0, sfi_count); |
| 6531 } | 6532 } |
| 6532 | 6533 |
| 6533 } // namespace internal | 6534 } // namespace internal |
| 6534 } // namespace v8 | 6535 } // namespace v8 |
| OLD | NEW |