summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/heap/GCThreadSharedData.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/heap/GCThreadSharedData.h')
-rw-r--r--Source/JavaScriptCore/heap/GCThreadSharedData.h45
1 files changed, 7 insertions, 38 deletions
diff --git a/Source/JavaScriptCore/heap/GCThreadSharedData.h b/Source/JavaScriptCore/heap/GCThreadSharedData.h
index bd48d9263..3f09a2820 100644
--- a/Source/JavaScriptCore/heap/GCThreadSharedData.h
+++ b/Source/JavaScriptCore/heap/GCThreadSharedData.h
@@ -28,27 +28,16 @@
#include "ListableHandler.h"
#include "MarkStack.h"
-#include "MarkedBlock.h"
#include "UnconditionalFinalizer.h"
#include "WeakReferenceHarvester.h"
#include <wtf/HashSet.h>
-#include <wtf/TCSpinLock.h>
#include <wtf/Threading.h>
#include <wtf/Vector.h>
namespace JSC {
-class GCThread;
class JSGlobalData;
class CopiedSpace;
-class CopyVisitor;
-
-enum GCPhase {
- NoPhase,
- Mark,
- Copy,
- Exit
-};
class GCThreadSharedData {
public:
@@ -57,11 +46,6 @@ public:
void reset();
- void didStartMarking();
- void didFinishMarking();
- void didStartCopying();
- void didFinishCopying();
-
#if ENABLE(PARALLEL_GC)
void resetChildren();
size_t childVisitCount();
@@ -69,11 +53,12 @@ public:
#endif
private:
- friend class GCThread;
friend class SlotVisitor;
- friend class CopyVisitor;
- void getNextBlocksToCopy(size_t&, size_t&);
+#if ENABLE(PARALLEL_GC)
+ void markingThreadMain(SlotVisitor*);
+ static void markingThreadStartFunc(void* heap);
+#endif
JSGlobalData* m_globalData;
CopiedSpace* m_copiedSpace;
@@ -82,8 +67,9 @@ private:
bool m_shouldHashConst;
- Vector<GCThread*> m_gcThreads;
-
+ Vector<ThreadIdentifier> m_markingThreads;
+ Vector<SlotVisitor*> m_markingThreadsMarkStack;
+
Mutex m_markingLock;
ThreadCondition m_markingCondition;
MarkStackArray m_sharedMarkStack;
@@ -93,27 +79,10 @@ private:
Mutex m_opaqueRootsLock;
HashSet<void*> m_opaqueRoots;
- SpinLock m_copyLock;
- Vector<MarkedBlock*>& m_blocksToCopy;
- size_t m_copyIndex;
- static const size_t s_blockFragmentLength = 32;
-
- Mutex m_phaseLock;
- ThreadCondition m_phaseCondition;
- GCPhase m_currentPhase;
-
ListableHandler<WeakReferenceHarvester>::List m_weakReferenceHarvesters;
ListableHandler<UnconditionalFinalizer>::List m_unconditionalFinalizers;
};
-inline void GCThreadSharedData::getNextBlocksToCopy(size_t& start, size_t& end)
-{
- SpinLockHolder locker(&m_copyLock);
- start = m_copyIndex;
- end = std::min(m_blocksToCopy.size(), m_copyIndex + s_blockFragmentLength);
- m_copyIndex = end;
-}
-
} // namespace JSC
#endif