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 1937 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1948 result.storedValue->value.add(reinterpret_cast<uintptr_t>(objectPoin
ter)); | 1948 result.storedValue->value.add(reinterpret_cast<uintptr_t>(objectPoin
ter)); |
1949 } | 1949 } |
1950 ObjectGraph::AddResult result = objectGraph().add(reinterpret_cast<uintp
tr_t>(objectPointer), std::make_pair(reinterpret_cast<uintptr_t>(m_hostObject),
m_hostName)); | 1950 ObjectGraph::AddResult result = objectGraph().add(reinterpret_cast<uintp
tr_t>(objectPointer), std::make_pair(reinterpret_cast<uintptr_t>(m_hostObject),
m_hostName)); |
1951 ASSERT(result.isNewEntry); | 1951 ASSERT(result.isNewEntry); |
1952 // fprintf(stderr, "%s[%p] -> %s[%p]\n", m_hostName.ascii().data(), m_ho
stObject, className.ascii().data(), objectPointer); | 1952 // fprintf(stderr, "%s[%p] -> %s[%p]\n", m_hostName.ascii().data(), m_ho
stObject, className.ascii().data(), objectPointer); |
1953 #endif | 1953 #endif |
1954 if (callback) | 1954 if (callback) |
1955 Heap::pushTraceCallback(m_markingStack, const_cast<void*>(objectPoin
ter), callback); | 1955 Heap::pushTraceCallback(m_markingStack, const_cast<void*>(objectPoin
ter), callback); |
1956 } | 1956 } |
1957 | 1957 |
1958 virtual void mark(HeapObjectHeader* header, TraceCallback callback) OVERRIDE | 1958 virtual void mark(HeapObjectHeader* header, TraceCallback callback) override |
1959 { | 1959 { |
1960 // We need both the HeapObjectHeader and FinalizedHeapObjectHeader | 1960 // We need both the HeapObjectHeader and FinalizedHeapObjectHeader |
1961 // version to correctly find the payload. | 1961 // version to correctly find the payload. |
1962 visitHeader(header, header->payload(), callback); | 1962 visitHeader(header, header->payload(), callback); |
1963 } | 1963 } |
1964 | 1964 |
1965 virtual void mark(FinalizedHeapObjectHeader* header, TraceCallback callback)
OVERRIDE | 1965 virtual void mark(FinalizedHeapObjectHeader* header, TraceCallback callback)
override |
1966 { | 1966 { |
1967 // We need both the HeapObjectHeader and FinalizedHeapObjectHeader | 1967 // We need both the HeapObjectHeader and FinalizedHeapObjectHeader |
1968 // version to correctly find the payload. | 1968 // version to correctly find the payload. |
1969 visitHeader(header, header->payload(), callback); | 1969 visitHeader(header, header->payload(), callback); |
1970 } | 1970 } |
1971 | 1971 |
1972 virtual void mark(const void* objectPointer, TraceCallback callback) OVERRID
E | 1972 virtual void mark(const void* objectPointer, TraceCallback callback) overrid
e |
1973 { | 1973 { |
1974 if (!objectPointer) | 1974 if (!objectPointer) |
1975 return; | 1975 return; |
1976 FinalizedHeapObjectHeader* header = FinalizedHeapObjectHeader::fromPaylo
ad(objectPointer); | 1976 FinalizedHeapObjectHeader* header = FinalizedHeapObjectHeader::fromPaylo
ad(objectPointer); |
1977 visitHeader(header, header->payload(), callback); | 1977 visitHeader(header, header->payload(), callback); |
1978 } | 1978 } |
1979 | 1979 |
1980 virtual void registerDelayedMarkNoTracing(const void* object) OVERRIDE | 1980 virtual void registerDelayedMarkNoTracing(const void* object) override |
1981 { | 1981 { |
1982 Heap::pushPostMarkingCallback(const_cast<void*>(object), markNoTracingCa
llback); | 1982 Heap::pushPostMarkingCallback(const_cast<void*>(object), markNoTracingCa
llback); |
1983 } | 1983 } |
1984 | 1984 |
1985 virtual void registerWeakMembers(const void* closure, const void* containing
Object, WeakPointerCallback callback) OVERRIDE | 1985 virtual void registerWeakMembers(const void* closure, const void* containing
Object, WeakPointerCallback callback) override |
1986 { | 1986 { |
1987 Heap::pushWeakObjectPointerCallback(const_cast<void*>(closure), const_ca
st<void*>(containingObject), callback); | 1987 Heap::pushWeakObjectPointerCallback(const_cast<void*>(closure), const_ca
st<void*>(containingObject), callback); |
1988 } | 1988 } |
1989 | 1989 |
1990 virtual void registerWeakTable(const void* closure, EphemeronCallback iterat
ionCallback, EphemeronCallback iterationDoneCallback) | 1990 virtual void registerWeakTable(const void* closure, EphemeronCallback iterat
ionCallback, EphemeronCallback iterationDoneCallback) |
1991 { | 1991 { |
1992 Heap::registerWeakTable(const_cast<void*>(closure), iterationCallback, i
terationDoneCallback); | 1992 Heap::registerWeakTable(const_cast<void*>(closure), iterationCallback, i
terationDoneCallback); |
1993 } | 1993 } |
1994 | 1994 |
1995 #if ENABLE(ASSERT) | 1995 #if ENABLE(ASSERT) |
1996 virtual bool weakTableRegistered(const void* closure) | 1996 virtual bool weakTableRegistered(const void* closure) |
1997 { | 1997 { |
1998 return Heap::weakTableRegistered(closure); | 1998 return Heap::weakTableRegistered(closure); |
1999 } | 1999 } |
2000 #endif | 2000 #endif |
2001 | 2001 |
2002 virtual bool isMarked(const void* objectPointer) OVERRIDE | 2002 virtual bool isMarked(const void* objectPointer) override |
2003 { | 2003 { |
2004 return FinalizedHeapObjectHeader::fromPayload(objectPointer)->isMarked()
; | 2004 return FinalizedHeapObjectHeader::fromPayload(objectPointer)->isMarked()
; |
2005 } | 2005 } |
2006 | 2006 |
2007 // This macro defines the necessary visitor methods for typed heaps | 2007 // This macro defines the necessary visitor methods for typed heaps |
2008 #define DEFINE_VISITOR_METHODS(Type)
\ | 2008 #define DEFINE_VISITOR_METHODS(Type)
\ |
2009 virtual void mark(const Type* objectPointer, TraceCallback callback) OVERRID
E \ | 2009 virtual void mark(const Type* objectPointer, TraceCallback callback) overrid
e \ |
2010 {
\ | 2010 {
\ |
2011 if (!objectPointer)
\ | 2011 if (!objectPointer)
\ |
2012 return;
\ | 2012 return;
\ |
2013 HeapObjectHeader* header =
\ | 2013 HeapObjectHeader* header =
\ |
2014 HeapObjectHeader::fromPayload(objectPointer);
\ | 2014 HeapObjectHeader::fromPayload(objectPointer);
\ |
2015 visitHeader(header, header->payload(), callback);
\ | 2015 visitHeader(header, header->payload(), callback);
\ |
2016 }
\ | 2016 }
\ |
2017 virtual bool isMarked(const Type* objectPointer) OVERRIDE
\ | 2017 virtual bool isMarked(const Type* objectPointer) override
\ |
2018 {
\ | 2018 {
\ |
2019 return HeapObjectHeader::fromPayload(objectPointer)->isMarked();
\ | 2019 return HeapObjectHeader::fromPayload(objectPointer)->isMarked();
\ |
2020 } | 2020 } |
2021 | 2021 |
2022 FOR_EACH_TYPED_HEAP(DEFINE_VISITOR_METHODS) | 2022 FOR_EACH_TYPED_HEAP(DEFINE_VISITOR_METHODS) |
2023 #undef DEFINE_VISITOR_METHODS | 2023 #undef DEFINE_VISITOR_METHODS |
2024 | 2024 |
2025 #if ENABLE(GC_PROFILE_MARKING) | 2025 #if ENABLE(GC_PROFILE_MARKING) |
2026 void reportStats() | 2026 void reportStats() |
2027 { | 2027 { |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2112 } | 2112 } |
2113 | 2113 |
2114 static HashSet<uintptr_t>& objectsToFindPath() | 2114 static HashSet<uintptr_t>& objectsToFindPath() |
2115 { | 2115 { |
2116 DEFINE_STATIC_LOCAL(HashSet<uintptr_t>, set, ()); | 2116 DEFINE_STATIC_LOCAL(HashSet<uintptr_t>, set, ()); |
2117 return set; | 2117 return set; |
2118 } | 2118 } |
2119 #endif | 2119 #endif |
2120 | 2120 |
2121 protected: | 2121 protected: |
2122 virtual void registerWeakCell(void** cell, WeakPointerCallback callback) OVE
RRIDE | 2122 virtual void registerWeakCell(void** cell, WeakPointerCallback callback) ove
rride |
2123 { | 2123 { |
2124 Heap::pushWeakCellPointerCallback(cell, callback); | 2124 Heap::pushWeakCellPointerCallback(cell, callback); |
2125 } | 2125 } |
2126 | 2126 |
2127 private: | 2127 private: |
2128 CallbackStack* m_markingStack; | 2128 CallbackStack* m_markingStack; |
2129 }; | 2129 }; |
2130 | 2130 |
2131 void Heap::init() | 2131 void Heap::init() |
2132 { | 2132 { |
(...skipping 760 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2893 CallbackStack* Heap::s_weakCallbackStack; | 2893 CallbackStack* Heap::s_weakCallbackStack; |
2894 CallbackStack* Heap::s_ephemeronStack; | 2894 CallbackStack* Heap::s_ephemeronStack; |
2895 HeapDoesNotContainCache* Heap::s_heapDoesNotContainCache; | 2895 HeapDoesNotContainCache* Heap::s_heapDoesNotContainCache; |
2896 bool Heap::s_shutdownCalled = false; | 2896 bool Heap::s_shutdownCalled = false; |
2897 bool Heap::s_lastGCWasConservative = false; | 2897 bool Heap::s_lastGCWasConservative = false; |
2898 FreePagePool* Heap::s_freePagePool; | 2898 FreePagePool* Heap::s_freePagePool; |
2899 OrphanedPagePool* Heap::s_orphanedPagePool; | 2899 OrphanedPagePool* Heap::s_orphanedPagePool; |
2900 Heap::RegionTree* Heap::s_regionTree = 0; | 2900 Heap::RegionTree* Heap::s_regionTree = 0; |
2901 | 2901 |
2902 } | 2902 } |
OLD | NEW |