diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
commit | 32761a6cee1d0dee366b885b7b9c777e67885688 (patch) | |
tree | d6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/heap/WeakBlock.h | |
parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
download | WebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz |
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Source/JavaScriptCore/heap/WeakBlock.h')
-rw-r--r-- | Source/JavaScriptCore/heap/WeakBlock.h | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/Source/JavaScriptCore/heap/WeakBlock.h b/Source/JavaScriptCore/heap/WeakBlock.h index f5fbfdc87..b6b631e27 100644 --- a/Source/JavaScriptCore/heap/WeakBlock.h +++ b/Source/JavaScriptCore/heap/WeakBlock.h @@ -26,40 +26,41 @@ #ifndef WeakBlock_h #define WeakBlock_h +#include "HeapBlock.h" +#include "WeakHandleOwner.h" #include "WeakImpl.h" #include <wtf/DoublyLinkedList.h> #include <wtf/StdLibExtras.h> namespace JSC { -class Heap; +class DeadBlock; class HeapRootVisitor; -class MarkedBlock; +class JSValue; +class WeakHandleOwner; -class WeakBlock : public DoublyLinkedListNode<WeakBlock> { +class WeakBlock : public HeapBlock<WeakBlock> { public: friend class WTF::DoublyLinkedListNode<WeakBlock>; - static const size_t blockSize = 1 * KB; // 1/16 of MarkedBlock size + static const size_t blockSize = 4 * KB; // 5% of MarkedBlock size struct FreeCell { FreeCell* next; }; struct SweepResult { + SweepResult(); bool isNull() const; - bool blockIsFree { true }; - bool blockIsLogicallyEmpty { true }; - FreeCell* freeList { nullptr }; + bool blockIsFree; + FreeCell* freeList; }; - static WeakBlock* create(Heap&, MarkedBlock&); - static void destroy(Heap&, WeakBlock*); + static WeakBlock* create(DeadBlock*); static WeakImpl* asWeakImpl(FreeCell*); bool isEmpty(); - bool isLogicallyEmptyButNotFree() const; void sweep(); SweepResult takeSweepResult(); @@ -68,23 +69,27 @@ public: void reap(); void lastChanceToFinalize(); - void disconnectMarkedBlock() { m_markedBlock = nullptr; } private: static FreeCell* asFreeCell(WeakImpl*); - explicit WeakBlock(MarkedBlock&); + WeakBlock(Region*); + WeakImpl* firstWeakImpl(); void finalize(WeakImpl*); WeakImpl* weakImpls(); size_t weakImplCount(); void addToFreeList(FreeCell**, WeakImpl*); - MarkedBlock* m_markedBlock; - WeakBlock* m_prev; - WeakBlock* m_next; SweepResult m_sweepResult; }; +inline WeakBlock::SweepResult::SweepResult() + : blockIsFree(true) + , freeList(0) +{ + ASSERT(isNull()); +} + inline bool WeakBlock::SweepResult::isNull() const { return blockIsFree && !freeList; // This state is impossible, so we can use it to mean null. @@ -133,11 +138,6 @@ inline bool WeakBlock::isEmpty() return !m_sweepResult.isNull() && m_sweepResult.blockIsFree; } -inline bool WeakBlock::isLogicallyEmptyButNotFree() const -{ - return !m_sweepResult.isNull() && !m_sweepResult.blockIsFree && m_sweepResult.blockIsLogicallyEmpty; -} - } // namespace JSC #endif // WeakBlock_h |