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

Side by Side Diff: Source/platform/heap/Heap.cpp

Issue 1149943003: Oilpan: Rename weak callback related methods (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 7 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 | Annotate | Revision Log
OLDNEW
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 1595 matching lines...) Expand 10 before | Expand all | Expand 10 after
1606 void Heap::flushHeapDoesNotContainCache() 1606 void Heap::flushHeapDoesNotContainCache()
1607 { 1607 {
1608 s_heapDoesNotContainCache->flush(); 1608 s_heapDoesNotContainCache->flush();
1609 } 1609 }
1610 1610
1611 void Heap::init() 1611 void Heap::init()
1612 { 1612 {
1613 ThreadState::init(); 1613 ThreadState::init();
1614 s_markingStack = new CallbackStack(); 1614 s_markingStack = new CallbackStack();
1615 s_postMarkingCallbackStack = new CallbackStack(); 1615 s_postMarkingCallbackStack = new CallbackStack();
1616 s_weakCallbackStack = new CallbackStack(); 1616 s_globalWeakCallbackStack = new CallbackStack();
1617 s_ephemeronStack = new CallbackStack(); 1617 s_ephemeronStack = new CallbackStack();
1618 s_heapDoesNotContainCache = new HeapDoesNotContainCache(); 1618 s_heapDoesNotContainCache = new HeapDoesNotContainCache();
1619 s_markingVisitor = new MarkingVisitor<Visitor::GlobalMarking>(); 1619 s_markingVisitor = new MarkingVisitor<Visitor::GlobalMarking>();
1620 s_freePagePool = new FreePagePool(); 1620 s_freePagePool = new FreePagePool();
1621 s_orphanedPagePool = new OrphanedPagePool(); 1621 s_orphanedPagePool = new OrphanedPagePool();
1622 s_allocatedObjectSize = 0; 1622 s_allocatedObjectSize = 0;
1623 s_allocatedSpace = 0; 1623 s_allocatedSpace = 0;
1624 s_markedObjectSize = 0; 1624 s_markedObjectSize = 0;
1625 s_estimatedMarkingTimePerByte = 0.0; 1625 s_estimatedMarkingTimePerByte = 0.0;
1626 1626
(...skipping 14 matching lines...) Expand all
1641 1641
1642 ASSERT(!ThreadState::attachedThreads().size()); 1642 ASSERT(!ThreadState::attachedThreads().size());
1643 delete s_markingVisitor; 1643 delete s_markingVisitor;
1644 s_markingVisitor = nullptr; 1644 s_markingVisitor = nullptr;
1645 delete s_heapDoesNotContainCache; 1645 delete s_heapDoesNotContainCache;
1646 s_heapDoesNotContainCache = nullptr; 1646 s_heapDoesNotContainCache = nullptr;
1647 delete s_freePagePool; 1647 delete s_freePagePool;
1648 s_freePagePool = nullptr; 1648 s_freePagePool = nullptr;
1649 delete s_orphanedPagePool; 1649 delete s_orphanedPagePool;
1650 s_orphanedPagePool = nullptr; 1650 s_orphanedPagePool = nullptr;
1651 delete s_weakCallbackStack; 1651 delete s_globalWeakCallbackStack;
1652 s_weakCallbackStack = nullptr; 1652 s_globalWeakCallbackStack = nullptr;
1653 delete s_postMarkingCallbackStack; 1653 delete s_postMarkingCallbackStack;
1654 s_postMarkingCallbackStack = nullptr; 1654 s_postMarkingCallbackStack = nullptr;
1655 delete s_markingStack; 1655 delete s_markingStack;
1656 s_markingStack = nullptr; 1656 s_markingStack = nullptr;
1657 delete s_ephemeronStack; 1657 delete s_ephemeronStack;
1658 s_ephemeronStack = nullptr; 1658 s_ephemeronStack = nullptr;
1659 delete s_regionTree; 1659 delete s_regionTree;
1660 s_regionTree = nullptr; 1660 s_regionTree = nullptr;
1661 GCInfoTable::shutdown(); 1661 GCInfoTable::shutdown();
1662 ThreadState::shutdown(); 1662 ThreadState::shutdown();
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1787 1787
1788 bool Heap::popAndInvokePostMarkingCallback(Visitor* visitor) 1788 bool Heap::popAndInvokePostMarkingCallback(Visitor* visitor)
1789 { 1789 {
1790 if (CallbackStack::Item* item = s_postMarkingCallbackStack->pop()) { 1790 if (CallbackStack::Item* item = s_postMarkingCallbackStack->pop()) {
1791 item->call(visitor); 1791 item->call(visitor);
1792 return true; 1792 return true;
1793 } 1793 }
1794 return false; 1794 return false;
1795 } 1795 }
1796 1796
1797 void Heap::pushWeakCellPointerCallback(void** cell, WeakPointerCallback callback ) 1797 void Heap::pushGlobalWeakCallback(void** cell, WeakPointerCallback callback)
1798 { 1798 {
1799 ASSERT(!Heap::orphanedPagePool()->contains(cell)); 1799 ASSERT(!Heap::orphanedPagePool()->contains(cell));
1800 CallbackStack::Item* slot = s_weakCallbackStack->allocateEntry(); 1800 CallbackStack::Item* slot = s_globalWeakCallbackStack->allocateEntry();
1801 *slot = CallbackStack::Item(cell, callback); 1801 *slot = CallbackStack::Item(cell, callback);
1802 } 1802 }
1803 1803
1804 void Heap::pushWeakPointerCallback(void* closure, void* object, WeakPointerCallb ack callback) 1804 void Heap::pushThreadLocalWeakCallback(void* closure, void* object, WeakPointerC allback callback)
1805 { 1805 {
1806 BasePage* page = pageFromObject(object); 1806 BasePage* page = pageFromObject(object);
1807 ASSERT(!page->orphaned()); 1807 ASSERT(!page->orphaned());
1808 ThreadState* state = page->heap()->threadState(); 1808 ThreadState* state = page->heap()->threadState();
1809 state->pushWeakPointerCallback(closure, callback); 1809 state->pushThreadLocalWeakCallback(closure, callback);
1810 } 1810 }
1811 1811
1812 bool Heap::popAndInvokeWeakPointerCallback(Visitor* visitor) 1812 bool Heap::popAndInvokeGlobalWeakCallback(Visitor* visitor)
1813 { 1813 {
1814 // For weak processing we should never reach orphaned pages since orphaned 1814 // For weak processing we should never reach orphaned pages since orphaned
1815 // pages are not traced and thus objects on those pages are never be 1815 // pages are not traced and thus objects on those pages are never be
1816 // registered as objects on orphaned pages. We cannot assert this here 1816 // registered as objects on orphaned pages. We cannot assert this here
1817 // since we might have an off-heap collection. We assert it in 1817 // since we might have an off-heap collection. We assert it in
1818 // Heap::pushWeakPointerCallback. 1818 // Heap::pushWeakPointerCallback.
1819 if (CallbackStack::Item* item = s_weakCallbackStack->pop()) { 1819 if (CallbackStack::Item* item = s_globalWeakCallbackStack->pop()) {
1820 item->call(visitor); 1820 item->call(visitor);
1821 return true; 1821 return true;
1822 } 1822 }
1823 return false; 1823 return false;
1824 } 1824 }
1825 1825
1826 void Heap::registerWeakTable(void* table, EphemeronCallback iterationCallback, E phemeronCallback iterationDoneCallback) 1826 void Heap::registerWeakTable(void* table, EphemeronCallback iterationCallback, E phemeronCallback iterationDoneCallback)
1827 { 1827 {
1828 { 1828 {
1829 // Check that the ephemeron table being pushed onto the stack is not on 1829 // Check that the ephemeron table being pushed onto the stack is not on
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
2033 // Post-marking callbacks should not trace any objects and 2033 // Post-marking callbacks should not trace any objects and
2034 // therefore the marking stack should be empty after the 2034 // therefore the marking stack should be empty after the
2035 // post-marking callbacks. 2035 // post-marking callbacks.
2036 ASSERT(s_markingStack->isEmpty()); 2036 ASSERT(s_markingStack->isEmpty());
2037 } 2037 }
2038 2038
2039 void Heap::globalWeakProcessing(Visitor* markingVisitor) 2039 void Heap::globalWeakProcessing(Visitor* markingVisitor)
2040 { 2040 {
2041 TRACE_EVENT0("blink_gc", "Heap::globalWeakProcessing"); 2041 TRACE_EVENT0("blink_gc", "Heap::globalWeakProcessing");
2042 // Call weak callbacks on objects that may now be pointing to dead objects. 2042 // Call weak callbacks on objects that may now be pointing to dead objects.
2043 while (popAndInvokeWeakPointerCallback(markingVisitor)) { } 2043 while (popAndInvokeGlobalWeakCallback(markingVisitor)) { }
2044 2044
2045 // It is not permitted to trace pointers of live objects in the weak 2045 // It is not permitted to trace pointers of live objects in the weak
2046 // callback phase, so the marking stack should still be empty here. 2046 // callback phase, so the marking stack should still be empty here.
2047 ASSERT(s_markingStack->isEmpty()); 2047 ASSERT(s_markingStack->isEmpty());
2048 } 2048 }
2049 2049
2050 void Heap::collectAllGarbage() 2050 void Heap::collectAllGarbage()
2051 { 2051 {
2052 // FIXME: Oilpan: we should perform a single GC and everything 2052 // FIXME: Oilpan: we should perform a single GC and everything
2053 // should die. Unfortunately it is not the case for all objects 2053 // should die. Unfortunately it is not the case for all objects
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
2209 ASSERT(ThreadState::current()->isInGC()); 2209 ASSERT(ThreadState::current()->isInGC());
2210 2210
2211 s_allocatedObjectSize = 0; 2211 s_allocatedObjectSize = 0;
2212 s_markedObjectSize = 0; 2212 s_markedObjectSize = 0;
2213 s_externalObjectSizeAtLastGC = WTF::Partitions::totalSizeOfCommittedPages(); 2213 s_externalObjectSizeAtLastGC = WTF::Partitions::totalSizeOfCommittedPages();
2214 } 2214 }
2215 2215
2216 Visitor* Heap::s_markingVisitor; 2216 Visitor* Heap::s_markingVisitor;
2217 CallbackStack* Heap::s_markingStack; 2217 CallbackStack* Heap::s_markingStack;
2218 CallbackStack* Heap::s_postMarkingCallbackStack; 2218 CallbackStack* Heap::s_postMarkingCallbackStack;
2219 CallbackStack* Heap::s_weakCallbackStack; 2219 CallbackStack* Heap::s_globalWeakCallbackStack;
2220 CallbackStack* Heap::s_ephemeronStack; 2220 CallbackStack* Heap::s_ephemeronStack;
2221 HeapDoesNotContainCache* Heap::s_heapDoesNotContainCache; 2221 HeapDoesNotContainCache* Heap::s_heapDoesNotContainCache;
2222 bool Heap::s_shutdownCalled = false; 2222 bool Heap::s_shutdownCalled = false;
2223 bool Heap::s_lastGCWasConservative = false; 2223 bool Heap::s_lastGCWasConservative = false;
2224 FreePagePool* Heap::s_freePagePool; 2224 FreePagePool* Heap::s_freePagePool;
2225 OrphanedPagePool* Heap::s_orphanedPagePool; 2225 OrphanedPagePool* Heap::s_orphanedPagePool;
2226 Heap::RegionTree* Heap::s_regionTree = nullptr; 2226 Heap::RegionTree* Heap::s_regionTree = nullptr;
2227 size_t Heap::s_allocatedObjectSize = 0; 2227 size_t Heap::s_allocatedObjectSize = 0;
2228 size_t Heap::s_allocatedSpace = 0; 2228 size_t Heap::s_allocatedSpace = 0;
2229 size_t Heap::s_markedObjectSize = 0; 2229 size_t Heap::s_markedObjectSize = 0;
2230 // We don't want to use 0 KB for the initial value because it may end up 2230 // We don't want to use 0 KB for the initial value because it may end up
2231 // triggering the first GC of some thread too prematurely. 2231 // triggering the first GC of some thread too prematurely.
2232 size_t Heap::s_estimatedLiveObjectSize = 512 * 1024; 2232 size_t Heap::s_estimatedLiveObjectSize = 512 * 1024;
2233 size_t Heap::s_externalObjectSizeAtLastGC = 0; 2233 size_t Heap::s_externalObjectSizeAtLastGC = 0;
2234 double Heap::s_estimatedMarkingTimePerByte = 0.0; 2234 double Heap::s_estimatedMarkingTimePerByte = 0.0;
2235 2235
2236 } // namespace blink 2236 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698