| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 3767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3778 // This is a low-level test where we call checkAndMarkPointer. This method | 3778 // This is a low-level test where we call checkAndMarkPointer. This method |
| 3779 // causes the object start bitmap to be computed which requires the heap | 3779 // causes the object start bitmap to be computed which requires the heap |
| 3780 // to be in a consistent state (e.g. the free allocation area must be put | 3780 // to be in a consistent state (e.g. the free allocation area must be put |
| 3781 // into a free list header). However when we call makeConsistentForGC it | 3781 // into a free list header). However when we call makeConsistentForGC it |
| 3782 // also clears out the freelists so we have to rebuild those before trying | 3782 // also clears out the freelists so we have to rebuild those before trying |
| 3783 // to allocate anything again. We do this by forcing a GC after doing the | 3783 // to allocate anything again. We do this by forcing a GC after doing the |
| 3784 // checkAndMarkPointer tests. | 3784 // checkAndMarkPointer tests. |
| 3785 { | 3785 { |
| 3786 TestGCScope scope(BlinkGC::HeapPointersOnStack); | 3786 TestGCScope scope(BlinkGC::HeapPointersOnStack); |
| 3787 ThreadState::GCForbiddenScope gcScope(ThreadState::current()); | 3787 ThreadState::GCForbiddenScope gcScope(ThreadState::current()); |
| 3788 Visitor visitor(ThreadState::current(), VisitorMarkingMode::GlobalMarking); | 3788 Visitor visitor(ThreadState::current(), Visitor::GlobalMarking); |
| 3789 EXPECT_TRUE(scope.allThreadsParked()); // Fail the test if we could not | 3789 EXPECT_TRUE(scope.allThreadsParked()); // Fail the test if we could not |
| 3790 // park all threads. | 3790 // park all threads. |
| 3791 heap.flushHeapDoesNotContainCache(); | 3791 heap.flushHeapDoesNotContainCache(); |
| 3792 for (size_t i = 0; i < objectAddresses.size(); i++) { | 3792 for (size_t i = 0; i < objectAddresses.size(); i++) { |
| 3793 EXPECT_TRUE(heap.checkAndMarkPointer(&visitor, objectAddresses[i], | 3793 EXPECT_TRUE(heap.checkAndMarkPointer(&visitor, objectAddresses[i], |
| 3794 reportMarkedPointer)); | 3794 reportMarkedPointer)); |
| 3795 EXPECT_TRUE(heap.checkAndMarkPointer(&visitor, endAddresses[i], | 3795 EXPECT_TRUE(heap.checkAndMarkPointer(&visitor, endAddresses[i], |
| 3796 reportMarkedPointer)); | 3796 reportMarkedPointer)); |
| 3797 } | 3797 } |
| 3798 EXPECT_EQ(objectAddresses.size() * 2, s_checkMarkCount); | 3798 EXPECT_EQ(objectAddresses.size() * 2, s_checkMarkCount); |
| 3799 s_checkMarkCount = 0; | 3799 s_checkMarkCount = 0; |
| 3800 EXPECT_TRUE(heap.checkAndMarkPointer(&visitor, largeObjectAddress, | 3800 EXPECT_TRUE(heap.checkAndMarkPointer(&visitor, largeObjectAddress, |
| 3801 reportMarkedPointer)); | 3801 reportMarkedPointer)); |
| 3802 EXPECT_TRUE(heap.checkAndMarkPointer(&visitor, largeObjectEndAddress, | 3802 EXPECT_TRUE(heap.checkAndMarkPointer(&visitor, largeObjectEndAddress, |
| 3803 reportMarkedPointer)); | 3803 reportMarkedPointer)); |
| 3804 EXPECT_EQ(2ul, s_checkMarkCount); | 3804 EXPECT_EQ(2ul, s_checkMarkCount); |
| 3805 s_checkMarkCount = 0ul; | 3805 s_checkMarkCount = 0ul; |
| 3806 } | 3806 } |
| 3807 // This forces a GC without stack scanning which results in the objects | 3807 // This forces a GC without stack scanning which results in the objects |
| 3808 // being collected. This will also rebuild the above mentioned freelists, | 3808 // being collected. This will also rebuild the above mentioned freelists, |
| 3809 // however we don't rely on that below since we don't have any allocations. | 3809 // however we don't rely on that below since we don't have any allocations. |
| 3810 clearOutOldGarbage(); | 3810 clearOutOldGarbage(); |
| 3811 { | 3811 { |
| 3812 TestGCScope scope(BlinkGC::HeapPointersOnStack); | 3812 TestGCScope scope(BlinkGC::HeapPointersOnStack); |
| 3813 ThreadState::GCForbiddenScope gcScope(ThreadState::current()); | 3813 ThreadState::GCForbiddenScope gcScope(ThreadState::current()); |
| 3814 Visitor visitor(ThreadState::current(), VisitorMarkingMode::GlobalMarking); | 3814 Visitor visitor(ThreadState::current(), Visitor::GlobalMarking); |
| 3815 EXPECT_TRUE(scope.allThreadsParked()); | 3815 EXPECT_TRUE(scope.allThreadsParked()); |
| 3816 heap.flushHeapDoesNotContainCache(); | 3816 heap.flushHeapDoesNotContainCache(); |
| 3817 for (size_t i = 0; i < objectAddresses.size(); i++) { | 3817 for (size_t i = 0; i < objectAddresses.size(); i++) { |
| 3818 // We would like to assert that checkAndMarkPointer returned false | 3818 // We would like to assert that checkAndMarkPointer returned false |
| 3819 // here because the pointers no longer point into a valid object | 3819 // here because the pointers no longer point into a valid object |
| 3820 // (it's been freed by the GCs. But checkAndMarkPointer will return | 3820 // (it's been freed by the GCs. But checkAndMarkPointer will return |
| 3821 // true for any pointer that points into a heap page, regardless of | 3821 // true for any pointer that points into a heap page, regardless of |
| 3822 // whether it points at a valid object (this ensures the | 3822 // whether it points at a valid object (this ensures the |
| 3823 // correctness of the page-based on-heap address caches), so we | 3823 // correctness of the page-based on-heap address caches), so we |
| 3824 // can't make that assert. | 3824 // can't make that assert. |
| (...skipping 2552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6377 "HeapVector"); | 6377 "HeapVector"); |
| 6378 static_assert( | 6378 static_assert( |
| 6379 WTF::IsGarbageCollectedType<HeapDeque<Member<IntWrapper>>>::value, | 6379 WTF::IsGarbageCollectedType<HeapDeque<Member<IntWrapper>>>::value, |
| 6380 "HeapDeque"); | 6380 "HeapDeque"); |
| 6381 static_assert(WTF::IsGarbageCollectedType< | 6381 static_assert(WTF::IsGarbageCollectedType< |
| 6382 HeapTerminatedArray<Member<IntWrapper>>>::value, | 6382 HeapTerminatedArray<Member<IntWrapper>>>::value, |
| 6383 "HeapTerminatedArray"); | 6383 "HeapTerminatedArray"); |
| 6384 } | 6384 } |
| 6385 | 6385 |
| 6386 } // namespace blink | 6386 } // namespace blink |
| OLD | NEW |