| 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 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 443 } | 443 } |
| 444 } | 444 } |
| 445 | 445 |
| 446 private: | 446 private: |
| 447 ThreadState* m_state; | 447 ThreadState* m_state; |
| 448 ThreadState::SafePointScope m_safePointScope; | 448 ThreadState::SafePointScope m_safePointScope; |
| 449 bool m_parkedAllThreads; // False if we fail to park all threads | 449 bool m_parkedAllThreads; // False if we fail to park all threads |
| 450 }; | 450 }; |
| 451 | 451 |
| 452 NO_SANITIZE_ADDRESS inline | 452 NO_SANITIZE_ADDRESS inline |
| 453 bool HeapObjectHeader::isMarked() const | |
| 454 { | |
| 455 checkHeader(); | |
| 456 return m_size & markBitMask; | |
| 457 } | |
| 458 | |
| 459 NO_SANITIZE_ADDRESS inline | |
| 460 void HeapObjectHeader::mark() | |
| 461 { | |
| 462 checkHeader(); | |
| 463 ASSERT(!isMarked()); | |
| 464 m_size = m_size | markBitMask; | |
| 465 } | |
| 466 | |
| 467 NO_SANITIZE_ADDRESS inline | |
| 468 void HeapObjectHeader::unmark() | 453 void HeapObjectHeader::unmark() |
| 469 { | 454 { |
| 470 checkHeader(); | 455 checkHeader(); |
| 471 ASSERT(isMarked()); | 456 ASSERT(isMarked()); |
| 472 m_size &= ~markBitMask; | 457 m_size &= ~markBitMask; |
| 473 } | 458 } |
| 474 | 459 |
| 475 NO_SANITIZE_ADDRESS inline | 460 NO_SANITIZE_ADDRESS inline |
| 476 bool HeapObjectHeader::isDead() const | 461 bool HeapObjectHeader::isDead() const |
| 477 { | 462 { |
| (...skipping 1542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2020 result.storedValue->value.add(reinterpret_cast<uintptr_t>(objectPoin
ter)); | 2005 result.storedValue->value.add(reinterpret_cast<uintptr_t>(objectPoin
ter)); |
| 2021 } | 2006 } |
| 2022 ObjectGraph::AddResult result = objectGraph().add(reinterpret_cast<uintp
tr_t>(objectPointer), std::make_pair(reinterpret_cast<uintptr_t>(m_hostObject),
m_hostName)); | 2007 ObjectGraph::AddResult result = objectGraph().add(reinterpret_cast<uintp
tr_t>(objectPointer), std::make_pair(reinterpret_cast<uintptr_t>(m_hostObject),
m_hostName)); |
| 2023 ASSERT(result.isNewEntry); | 2008 ASSERT(result.isNewEntry); |
| 2024 // fprintf(stderr, "%s[%p] -> %s[%p]\n", m_hostName.ascii().data(), m_ho
stObject, className.ascii().data(), objectPointer); | 2009 // fprintf(stderr, "%s[%p] -> %s[%p]\n", m_hostName.ascii().data(), m_ho
stObject, className.ascii().data(), objectPointer); |
| 2025 #endif | 2010 #endif |
| 2026 if (callback) | 2011 if (callback) |
| 2027 Heap::pushTraceCallback(m_markingStack, const_cast<void*>(objectPoin
ter), callback); | 2012 Heap::pushTraceCallback(m_markingStack, const_cast<void*>(objectPoin
ter), callback); |
| 2028 } | 2013 } |
| 2029 | 2014 |
| 2015 virtual void pushTraceCallback(void* objectPointer, TraceCallback callback) |
| 2016 { |
| 2017 ASSERT(callback); |
| 2018 Heap::pushTraceCallback(m_markingStack, objectPointer, callback); |
| 2019 } |
| 2020 |
| 2030 // We need both HeapObjectHeader and GeneralHeapObjectHeader versions to | 2021 // We need both HeapObjectHeader and GeneralHeapObjectHeader versions to |
| 2031 // correctly find the payload. | 2022 // correctly find the payload. |
| 2032 virtual void mark(HeapObjectHeader* header, TraceCallback callback) override | 2023 virtual void mark(HeapObjectHeader* header, TraceCallback callback) override |
| 2033 { | 2024 { |
| 2034 visitHeader(header, header->payload(), callback); | 2025 visitHeader(header, header->payload(), callback); |
| 2035 } | 2026 } |
| 2036 | 2027 |
| 2037 virtual void mark(GeneralHeapObjectHeader* header, TraceCallback callback) o
verride | 2028 virtual void mark(GeneralHeapObjectHeader* header, TraceCallback callback) o
verride |
| 2038 { | 2029 { |
| 2039 visitHeader(header, header->payload(), callback); | 2030 visitHeader(header, header->payload(), callback); |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2246 static inline bool objectInTerminatingThreadHeap(const void* objectPointer) | 2237 static inline bool objectInTerminatingThreadHeap(const void* objectPointer) |
| 2247 { | 2238 { |
| 2248 BaseHeapPage* page = pageFromObject(objectPointer); | 2239 BaseHeapPage* page = pageFromObject(objectPointer); |
| 2249 ASSERT(!page->orphaned()); | 2240 ASSERT(!page->orphaned()); |
| 2250 // When doing a thread local GC, the marker checks if | 2241 // When doing a thread local GC, the marker checks if |
| 2251 // the object resides in another thread's heap. The | 2242 // the object resides in another thread's heap. The |
| 2252 // object should not be traced, if it does. | 2243 // object should not be traced, if it does. |
| 2253 return page->terminating(); | 2244 return page->terminating(); |
| 2254 } | 2245 } |
| 2255 | 2246 |
| 2247 virtual bool isGlobalMarkingVisitor() override { return Mode == GlobalMarkin
g; } |
| 2248 |
| 2256 protected: | 2249 protected: |
| 2257 virtual void registerWeakCell(void** cell, WeakPointerCallback callback) ove
rride | 2250 virtual void registerWeakCell(void** cell, WeakPointerCallback callback) ove
rride |
| 2258 { | 2251 { |
| 2259 Heap::pushWeakCellPointerCallback(cell, callback); | 2252 Heap::pushWeakCellPointerCallback(cell, callback); |
| 2260 } | 2253 } |
| 2261 | 2254 |
| 2262 private: | 2255 private: |
| 2263 CallbackStack* m_markingStack; | 2256 CallbackStack* m_markingStack; |
| 2264 }; | 2257 }; |
| 2265 | 2258 |
| (...skipping 676 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2942 bool Heap::s_shutdownCalled = false; | 2935 bool Heap::s_shutdownCalled = false; |
| 2943 bool Heap::s_lastGCWasConservative = false; | 2936 bool Heap::s_lastGCWasConservative = false; |
| 2944 FreePagePool* Heap::s_freePagePool; | 2937 FreePagePool* Heap::s_freePagePool; |
| 2945 OrphanedPagePool* Heap::s_orphanedPagePool; | 2938 OrphanedPagePool* Heap::s_orphanedPagePool; |
| 2946 Heap::RegionTree* Heap::s_regionTree = nullptr; | 2939 Heap::RegionTree* Heap::s_regionTree = nullptr; |
| 2947 size_t Heap::s_allocatedObjectSize = 0; | 2940 size_t Heap::s_allocatedObjectSize = 0; |
| 2948 size_t Heap::s_allocatedSpace = 0; | 2941 size_t Heap::s_allocatedSpace = 0; |
| 2949 size_t Heap::s_markedObjectSize = 0; | 2942 size_t Heap::s_markedObjectSize = 0; |
| 2950 | 2943 |
| 2951 } // namespace blink | 2944 } // namespace blink |
| OLD | NEW |