aboutsummaryrefslogtreecommitdiff
path: root/src/javascript/jsc/bindings/BunGCOutputConstraint.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/javascript/jsc/bindings/BunGCOutputConstraint.cpp')
-rw-r--r--src/javascript/jsc/bindings/BunGCOutputConstraint.cpp216
1 files changed, 107 insertions, 109 deletions
diff --git a/src/javascript/jsc/bindings/BunGCOutputConstraint.cpp b/src/javascript/jsc/bindings/BunGCOutputConstraint.cpp
index 3954c7acf..169aecad2 100644
--- a/src/javascript/jsc/bindings/BunGCOutputConstraint.cpp
+++ b/src/javascript/jsc/bindings/BunGCOutputConstraint.cpp
@@ -24,123 +24,121 @@
*/
#include "config.h"
+
+#include "JavaScriptCore/WeakInlines.h"
+#include "JavaScriptCore/AbstractSlotVisitorInlines.h"
+
+#include "JavaScriptCore/VM.h"
+#include "JavaScriptCore/MarkingConstraint.h"
+
+namespace JSC {
+
+class VisitCounter {
+public:
+ VisitCounter() {}
+
+ VisitCounter(AbstractSlotVisitor& visitor)
+ : m_visitor(&visitor)
+ , m_initialVisitCount(visitor.visitCount())
+ {
+ }
+
+ AbstractSlotVisitor& visitor() const { return *m_visitor; }
+
+ size_t visitCount() const
+ {
+ return m_visitor->visitCount() - m_initialVisitCount;
+ }
+
+private:
+ AbstractSlotVisitor* m_visitor { nullptr };
+ size_t m_initialVisitCount { 0 };
+};
+
+static constexpr bool verboseMarkingConstraint = false;
+
+MarkingConstraint::MarkingConstraint(CString abbreviatedName, CString name, ConstraintVolatility volatility, ConstraintConcurrency concurrency, ConstraintParallelism parallelism)
+ : m_abbreviatedName(abbreviatedName)
+ , m_name(WTFMove(name))
+ , m_volatility(volatility)
+ , m_concurrency(concurrency)
+ , m_parallelism(parallelism)
+{
+}
+
+MarkingConstraint::~MarkingConstraint()
+{
+}
+
+void MarkingConstraint::resetStats()
+{
+ m_lastVisitCount = 0;
+}
+
+void MarkingConstraint::execute(SlotVisitor& visitor)
+{
+ ASSERT(!visitor.heap()->isMarkingForGCVerifier());
+ VisitCounter visitCounter(visitor);
+ executeImpl(visitor);
+ m_lastVisitCount += visitCounter.visitCount();
+ if (verboseMarkingConstraint && visitCounter.visitCount())
+ dataLog("(", abbreviatedName(), " visited ", visitCounter.visitCount(), " in execute)");
+}
+
+void MarkingConstraint::executeSynchronously(AbstractSlotVisitor& visitor)
+{
+ prepareToExecuteImpl(NoLockingNecessary, visitor);
+ executeImpl(visitor);
+}
+
+double MarkingConstraint::quickWorkEstimate(SlotVisitor&)
+{
+ return 0;
+}
+
+double MarkingConstraint::workEstimate(SlotVisitor& visitor)
+{
+ return lastVisitCount() + quickWorkEstimate(visitor);
+}
+
+void MarkingConstraint::prepareToExecute(const AbstractLocker& constraintSolvingLocker, SlotVisitor& visitor)
+{
+ ASSERT(!visitor.heap()->isMarkingForGCVerifier());
+ dataLogIf(Options::logGC(), abbreviatedName());
+ VisitCounter visitCounter(visitor);
+ prepareToExecuteImpl(constraintSolvingLocker, visitor);
+ m_lastVisitCount = visitCounter.visitCount();
+ if (verboseMarkingConstraint && visitCounter.visitCount())
+ dataLog("(", abbreviatedName(), " visited ", visitCounter.visitCount(), " in prepareToExecute)");
+}
+
+void MarkingConstraint::doParallelWork(SlotVisitor& visitor, SharedTask<void(SlotVisitor&)>& task)
+{
+ ASSERT(!visitor.heap()->isMarkingForGCVerifier());
+ VisitCounter visitCounter(visitor);
+ task.run(visitor);
+ if (verboseMarkingConstraint && visitCounter.visitCount())
+ dataLog("(", abbreviatedName(), " visited ", visitCounter.visitCount(), " in doParallelWork)");
+ {
+ Locker locker { m_lock };
+ m_lastVisitCount += visitCounter.visitCount();
+ }
+}
+
+void MarkingConstraint::prepareToExecuteImpl(const AbstractLocker&, AbstractSlotVisitor&)
+{
+}
+
+} // namespace JSC
+
#include "BunGCOutputConstraint.h"
-#include "JavaScriptCore/JSCInlines.h"
#include "WebCoreJSClientData.h"
#include "JavaScriptCore/BlockDirectoryInlines.h"
#include "JavaScriptCore/HeapInlines.h"
#include "JavaScriptCore/MarkedBlockInlines.h"
#include "JavaScriptCore/SubspaceInlines.h"
-// #include "JavaScriptCore/WeakInlines.h"
-// #include "JavaScriptCore/AbstractSlotVisitorInlines.h"
-
-// #include "JavaScriptCore/VM.h"
-// #include "JavaScriptCore/MarkingConstraint.h"
-
-// #include "JavaScriptCore/JSCInlines.h"
-
-// namespace JSC {
-
-// class VisitCounter {
-// public:
-// VisitCounter() {}
-
-// VisitCounter(AbstractSlotVisitor& visitor)
-// : m_visitor(&visitor)
-// , m_initialVisitCount(visitor.visitCount())
-// {
-// }
-
-// AbstractSlotVisitor& visitor() const { return *m_visitor; }
-
-// size_t visitCount() const
-// {
-// return m_visitor->visitCount() - m_initialVisitCount;
-// }
-
-// private:
-// AbstractSlotVisitor* m_visitor { nullptr };
-// size_t m_initialVisitCount { 0 };
-// };
-
-// static constexpr bool verboseMarkingConstraint = false;
-
-// MarkingConstraint::MarkingConstraint(CString abbreviatedName, CString name, ConstraintVolatility volatility, ConstraintConcurrency concurrency, ConstraintParallelism parallelism)
-// : m_abbreviatedName(abbreviatedName)
-// , m_name(WTFMove(name))
-// , m_volatility(volatility)
-// , m_concurrency(concurrency)
-// , m_parallelism(parallelism)
-// {
-// }
-
-// MarkingConstraint::~MarkingConstraint()
-// {
-// }
-
-// void MarkingConstraint::resetStats()
-// {
-// m_lastVisitCount = 0;
-// }
-
-// void MarkingConstraint::execute(SlotVisitor& visitor)
-// {
-// ASSERT(!visitor.heap()->isMarkingForGCVerifier());
-// VisitCounter visitCounter(visitor);
-// executeImpl(visitor);
-// m_lastVisitCount += visitCounter.visitCount();
-// if (verboseMarkingConstraint && visitCounter.visitCount())
-// dataLog("(", abbreviatedName(), " visited ", visitCounter.visitCount(), " in execute)");
-// }
-
-// void MarkingConstraint::executeSynchronously(AbstractSlotVisitor& visitor)
-// {
-// prepareToExecuteImpl(NoLockingNecessary, visitor);
-// executeImpl(visitor);
-// }
-
-// double MarkingConstraint::quickWorkEstimate(SlotVisitor&)
-// {
-// return 0;
-// }
-
-// double MarkingConstraint::workEstimate(SlotVisitor& visitor)
-// {
-// return lastVisitCount() + quickWorkEstimate(visitor);
-// }
-
-// void MarkingConstraint::prepareToExecute(const AbstractLocker& constraintSolvingLocker, SlotVisitor& visitor)
-// {
-// ASSERT(!visitor.heap()->isMarkingForGCVerifier());
-// dataLogIf(Options::logGC(), abbreviatedName());
-// VisitCounter visitCounter(visitor);
-// prepareToExecuteImpl(constraintSolvingLocker, visitor);
-// m_lastVisitCount = visitCounter.visitCount();
-// if (verboseMarkingConstraint && visitCounter.visitCount())
-// dataLog("(", abbreviatedName(), " visited ", visitCounter.visitCount(), " in prepareToExecute)");
-// }
-
-// void MarkingConstraint::doParallelWork(SlotVisitor& visitor, SharedTask<void(SlotVisitor&)>& task)
-// {
-// ASSERT(!visitor.heap()->isMarkingForGCVerifier());
-// VisitCounter visitCounter(visitor);
-// task.run(visitor);
-// if (verboseMarkingConstraint && visitCounter.visitCount())
-// dataLog("(", abbreviatedName(), " visited ", visitCounter.visitCount(), " in doParallelWork)");
-// {
-// Locker locker { m_lock };
-// m_lastVisitCount += visitCounter.visitCount();
-// }
-// }
-
-// void MarkingConstraint::prepareToExecuteImpl(const AbstractLocker&, AbstractSlotVisitor&)
-// {
-// }
-
-// } // namespace JSC
-
namespace WebCore {
using namespace JSC;