summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/heap/CopiedBlock.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/heap/CopiedBlock.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/JavaScriptCore/heap/CopiedBlock.h')
-rw-r--r--Source/JavaScriptCore/heap/CopiedBlock.h288
1 files changed, 0 insertions, 288 deletions
diff --git a/Source/JavaScriptCore/heap/CopiedBlock.h b/Source/JavaScriptCore/heap/CopiedBlock.h
deleted file mode 100644
index 6d59aa6bc..000000000
--- a/Source/JavaScriptCore/heap/CopiedBlock.h
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * Copyright (C) 2011 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef CopiedBlock_h
-#define CopiedBlock_h
-
-#include "BlockAllocator.h"
-#include "CopyWorkList.h"
-#include "HeapBlock.h"
-#include "JSCJSValue.h"
-#include "Options.h"
-#include <wtf/Atomics.h>
-#include <wtf/OwnPtr.h>
-#include <wtf/PassOwnPtr.h>
-
-namespace JSC {
-
-class CopiedSpace;
-
-class CopiedBlock : public HeapBlock<CopiedBlock> {
- friend class CopiedSpace;
- friend class CopiedAllocator;
-public:
- static CopiedBlock* create(DeadBlock*);
- static CopiedBlock* createNoZeroFill(DeadBlock*);
-
- void pin();
- bool isPinned();
-
- bool isOld();
- bool isOversize();
- void didPromote();
-
- unsigned liveBytes();
- bool shouldReportLiveBytes(SpinLockHolder&, JSCell* owner);
- void reportLiveBytes(SpinLockHolder&, JSCell*, CopyToken, unsigned);
- void reportLiveBytesDuringCopying(unsigned);
- void didSurviveGC();
- void didEvacuateBytes(unsigned);
- bool shouldEvacuate();
- bool canBeRecycled();
-
- // The payload is the region of the block that is usable for allocations.
- char* payload();
- char* payloadEnd();
- size_t payloadCapacity();
-
- // The data is the region of the block that has been used for allocations.
- char* data();
- char* dataEnd();
- size_t dataSize();
-
- // The wilderness is the region of the block that is usable for allocations
- // but has not been so used.
- char* wilderness();
- char* wildernessEnd();
- size_t wildernessSize();
-
- size_t size();
- size_t capacity();
-
- static const size_t blockSize = 32 * KB;
-
- bool hasWorkList();
- CopyWorkList& workList();
- SpinLock& workListLock() { return m_workListLock; }
-
-private:
- CopiedBlock(Region*);
- void zeroFillWilderness(); // Can be called at any time to zero-fill to the end of the block.
-
- void checkConsistency();
-
- SpinLock m_workListLock;
- OwnPtr<CopyWorkList> m_workList;
-
- size_t m_remaining;
- bool m_isPinned : 1;
- bool m_isOld : 1;
- unsigned m_liveBytes;
-#ifndef NDEBUG
- unsigned m_liveObjects;
-#endif
-};
-
-inline CopiedBlock* CopiedBlock::createNoZeroFill(DeadBlock* block)
-{
- Region* region = block->region();
- return new(NotNull, block) CopiedBlock(region);
-}
-
-inline CopiedBlock* CopiedBlock::create(DeadBlock* block)
-{
- CopiedBlock* newBlock = createNoZeroFill(block);
- newBlock->zeroFillWilderness();
- return newBlock;
-}
-
-inline void CopiedBlock::zeroFillWilderness()
-{
-#if USE(JSVALUE64)
- memset(wilderness(), 0, wildernessSize());
-#else
- JSValue emptyValue;
- JSValue* limit = reinterpret_cast_ptr<JSValue*>(wildernessEnd());
- for (JSValue* currentValue = reinterpret_cast_ptr<JSValue*>(wilderness()); currentValue < limit; currentValue++)
- *currentValue = emptyValue;
-#endif
-}
-
-inline CopiedBlock::CopiedBlock(Region* region)
- : HeapBlock<CopiedBlock>(region)
- , m_remaining(payloadCapacity())
- , m_isPinned(false)
- , m_isOld(false)
- , m_liveBytes(0)
-#ifndef NDEBUG
- , m_liveObjects(0)
-#endif
-{
- m_workListLock.Init();
- ASSERT(is8ByteAligned(reinterpret_cast<void*>(m_remaining)));
-}
-
-inline void CopiedBlock::didSurviveGC()
-{
- checkConsistency();
- m_liveBytes = 0;
-#ifndef NDEBUG
- m_liveObjects = 0;
-#endif
- m_isPinned = false;
- if (m_workList)
- m_workList.clear();
-}
-
-inline void CopiedBlock::didEvacuateBytes(unsigned bytes)
-{
- ASSERT(m_liveBytes >= bytes);
- ASSERT(m_liveObjects);
- checkConsistency();
- m_liveBytes -= bytes;
-#ifndef NDEBUG
- m_liveObjects--;
-#endif
- checkConsistency();
-}
-
-inline bool CopiedBlock::canBeRecycled()
-{
- checkConsistency();
- return !m_liveBytes;
-}
-
-inline bool CopiedBlock::shouldEvacuate()
-{
- checkConsistency();
- return static_cast<double>(m_liveBytes) / static_cast<double>(payloadCapacity()) <= Options::minCopiedBlockUtilization();
-}
-
-inline void CopiedBlock::pin()
-{
- m_isPinned = true;
- if (m_workList)
- m_workList.clear();
-}
-
-inline bool CopiedBlock::isPinned()
-{
- return m_isPinned;
-}
-
-inline bool CopiedBlock::isOld()
-{
- return m_isOld;
-}
-
-inline void CopiedBlock::didPromote()
-{
- m_isOld = true;
-}
-
-inline bool CopiedBlock::isOversize()
-{
- return region()->isCustomSize();
-}
-
-inline unsigned CopiedBlock::liveBytes()
-{
- checkConsistency();
- return m_liveBytes;
-}
-
-inline char* CopiedBlock::payload()
-{
- return reinterpret_cast<char*>(this) + ((sizeof(CopiedBlock) + 7) & ~7);
-}
-
-inline char* CopiedBlock::payloadEnd()
-{
- return reinterpret_cast<char*>(this) + region()->blockSize();
-}
-
-inline size_t CopiedBlock::payloadCapacity()
-{
- return payloadEnd() - payload();
-}
-
-inline char* CopiedBlock::data()
-{
- return payload();
-}
-
-inline char* CopiedBlock::dataEnd()
-{
- return payloadEnd() - m_remaining;
-}
-
-inline size_t CopiedBlock::dataSize()
-{
- return dataEnd() - data();
-}
-
-inline char* CopiedBlock::wilderness()
-{
- return dataEnd();
-}
-
-inline char* CopiedBlock::wildernessEnd()
-{
- return payloadEnd();
-}
-
-inline size_t CopiedBlock::wildernessSize()
-{
- return wildernessEnd() - wilderness();
-}
-
-inline size_t CopiedBlock::size()
-{
- return dataSize();
-}
-
-inline size_t CopiedBlock::capacity()
-{
- return region()->blockSize();
-}
-
-inline bool CopiedBlock::hasWorkList()
-{
- return !!m_workList;
-}
-
-inline CopyWorkList& CopiedBlock::workList()
-{
- return *m_workList;
-}
-
-inline void CopiedBlock::checkConsistency()
-{
- ASSERT(!!m_liveBytes == !!m_liveObjects);
-}
-
-} // namespace JSC
-
-#endif