summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/heap/WeakBlock.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
commit32761a6cee1d0dee366b885b7b9c777e67885688 (patch)
treed6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/heap/WeakBlock.h
parenta4e969f4965059196ca948db781e52f7cfebf19e (diff)
downloadWebKitGtk-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.h40
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