diff options
author | Oswald Buddenhagen <oswald.buddenhagen@qt.io> | 2017-05-30 12:48:17 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@qt.io> | 2017-05-30 12:48:17 +0200 |
commit | 881da28418d380042aa95a97f0cbd42560a64f7c (patch) | |
tree | a794dff3274695e99c651902dde93d934ea7a5af /Source/JavaScriptCore/heap/MarkStack.h | |
parent | 7e104c57a70fdf551bb3d22a5d637cdcbc69dbea (diff) | |
parent | 0fcedcd17cc00d3dd44c718b3cb36c1033319671 (diff) | |
download | qtwebkit-881da28418d380042aa95a97f0cbd42560a64f7c.tar.gz |
Merge 'wip/next' into dev
Change-Id: Iff9ee5e23bb326c4371ec8ed81d56f2f05d680e9
Diffstat (limited to 'Source/JavaScriptCore/heap/MarkStack.h')
-rw-r--r-- | Source/JavaScriptCore/heap/MarkStack.h | 90 |
1 files changed, 3 insertions, 87 deletions
diff --git a/Source/JavaScriptCore/heap/MarkStack.h b/Source/JavaScriptCore/heap/MarkStack.h index c97b6a735..04f19c62c 100644 --- a/Source/JavaScriptCore/heap/MarkStack.h +++ b/Source/JavaScriptCore/heap/MarkStack.h @@ -26,102 +26,18 @@ #ifndef MarkStack_h #define MarkStack_h -#if ENABLE(OBJECT_MARK_LOGGING) -#define MARK_LOG_MESSAGE0(message) dataLogF(message) -#define MARK_LOG_MESSAGE1(message, arg1) dataLogF(message, arg1) -#define MARK_LOG_MESSAGE2(message, arg1, arg2) dataLogF(message, arg1, arg2) -#define MARK_LOG_ROOT(visitor, rootName) \ - dataLogF("\n%s: ", rootName); \ - (visitor).resetChildCount() -#define MARK_LOG_PARENT(visitor, parent) \ - dataLogF("\n%p (%s): ", parent, parent->className() ? parent->className() : "unknown"); \ - (visitor).resetChildCount() -#define MARK_LOG_CHILD(visitor, child) \ - if ((visitor).childCount()) \ - dataLogFString(", "); \ - dataLogF("%p", child); \ - (visitor).incrementChildCount() -#else -#define MARK_LOG_MESSAGE0(message) do { } while (false) -#define MARK_LOG_MESSAGE1(message, arg1) do { } while (false) -#define MARK_LOG_MESSAGE2(message, arg1, arg2) do { } while (false) -#define MARK_LOG_ROOT(visitor, rootName) do { } while (false) -#define MARK_LOG_PARENT(visitor, parent) do { } while (false) -#define MARK_LOG_CHILD(visitor, child) do { } while (false) -#endif - -#include "HeapBlock.h" -#include <wtf/StdLibExtras.h> +#include "GCSegmentedArrayInlines.h" namespace JSC { -class BlockAllocator; -class DeadBlock; class JSCell; -class MarkStackSegment : public HeapBlock<MarkStackSegment> { +class MarkStackArray : public GCSegmentedArray<const JSCell*> { public: - MarkStackSegment(Region* region) - : HeapBlock<MarkStackSegment>(region) -#if !ASSERT_DISABLED - , m_top(0) -#endif - { - } - - static MarkStackSegment* create(DeadBlock*); - - const JSCell** data() - { - return bitwise_cast<const JSCell**>(this + 1); - } - - static const size_t blockSize = 4 * KB; - -#if !ASSERT_DISABLED - size_t m_top; -#endif -}; + MarkStackArray(); -class MarkStackArray { -public: - MarkStackArray(BlockAllocator&); - ~MarkStackArray(); - - void append(const JSCell*); - - bool canRemoveLast(); - const JSCell* removeLast(); - bool refill(); - void donateSomeCellsTo(MarkStackArray& other); void stealSomeCellsFrom(MarkStackArray& other, size_t idleThreadCount); - - size_t size(); - bool isEmpty(); - -private: - template <size_t size> struct CapacityFromSize { - static const size_t value = (size - sizeof(MarkStackSegment)) / sizeof(const JSCell*); - }; - - JS_EXPORT_PRIVATE void expand(); - - size_t postIncTop(); - size_t preDecTop(); - void setTopForFullSegment(); - void setTopForEmptySegment(); - size_t top(); - - void validatePrevious(); - - DoublyLinkedList<MarkStackSegment> m_segments; - BlockAllocator& m_blockAllocator; - - JS_EXPORT_PRIVATE static const size_t s_segmentCapacity = CapacityFromSize<MarkStackSegment::blockSize>::value; - size_t m_top; - size_t m_numberOfSegments; - }; } // namespace JSC |