aboutsummaryrefslogtreecommitdiff
path: root/src/javascript/jsc/bindings/BunGCOutputConstraint.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-31 05:07:18 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-31 05:07:18 -0700
commit4f1320854762ffa29c2b48755706000070ad1fb5 (patch)
tree181c0d9de00e5edcbf5f6b4229dabfe5833e4802 /src/javascript/jsc/bindings/BunGCOutputConstraint.cpp
parent5fa5df02f505a9b50c264625706af7280997d557 (diff)
downloadbun-4f1320854762ffa29c2b48755706000070ad1fb5.tar.gz
bun-4f1320854762ffa29c2b48755706000070ad1fb5.tar.zst
bun-4f1320854762ffa29c2b48755706000070ad1fb5.zip
Bugfixes to how we build WebCore code
Diffstat (limited to 'src/javascript/jsc/bindings/BunGCOutputConstraint.cpp')
-rw-r--r--src/javascript/jsc/bindings/BunGCOutputConstraint.cpp176
1 files changed, 155 insertions, 21 deletions
diff --git a/src/javascript/jsc/bindings/BunGCOutputConstraint.cpp b/src/javascript/jsc/bindings/BunGCOutputConstraint.cpp
index ef5bba244..3954c7acf 100644
--- a/src/javascript/jsc/bindings/BunGCOutputConstraint.cpp
+++ b/src/javascript/jsc/bindings/BunGCOutputConstraint.cpp
@@ -1,28 +1,164 @@
+/*
+ * Copyright (C) 2017-2022 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.
+ */
-
+#include "config.h"
#include "BunGCOutputConstraint.h"
-#include "BunClientData.h"
+#include "JavaScriptCore/JSCInlines.h"
+#include "WebCoreJSClientData.h"
#include "JavaScriptCore/BlockDirectoryInlines.h"
#include "JavaScriptCore/HeapInlines.h"
#include "JavaScriptCore/MarkedBlockInlines.h"
-#include "JavaScriptCore/MarkingConstraint.h"
#include "JavaScriptCore/SubspaceInlines.h"
-#include "JavaScriptCore/VM.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;
-BunGCOutputConstraint::BunGCOutputConstraint(VM& vm, WebCore::JSVMClientData& clientData)
+DOMGCOutputConstraint::DOMGCOutputConstraint(VM& vm, JSHeapData& heapData)
: MarkingConstraint("Domo", "DOM Output", ConstraintVolatility::SeldomGreyed, ConstraintConcurrency::Concurrent, ConstraintParallelism::Parallel)
, m_vm(vm)
- , m_clientData(clientData)
+ , m_heapData(heapData)
, m_lastExecutionVersion(vm.heap.mutatorExecutionVersion())
{
}
-template<typename Visitor> void BunGCOutputConstraint::executeImplImpl(Visitor& visitor)
+DOMGCOutputConstraint::~DOMGCOutputConstraint()
+{
+}
+
+template<typename Visitor>
+void DOMGCOutputConstraint::executeImplImpl(Visitor& visitor)
{
Heap& heap = m_vm.heap;
@@ -31,22 +167,20 @@ template<typename Visitor> void BunGCOutputConstraint::executeImplImpl(Visitor&
m_lastExecutionVersion = heap.mutatorExecutionVersion();
- m_clientData.forEachOutputConstraintSpace([&](Subspace& subspace) {
- auto func = [](Visitor& visitor, HeapCell* heapCell, HeapCell::Kind) {
- SetRootMarkReasonScope rootScope(visitor, RootMarkReason::DOMGCOutput);
- JSCell* cell = static_cast<JSCell*>(heapCell);
- cell->methodTable(visitor.vm())->visitOutputConstraints(cell, visitor);
- };
+ m_heapData.forEachOutputConstraintSpace(
+ [&](Subspace& subspace) {
+ auto func = [](Visitor& visitor, HeapCell* heapCell, HeapCell::Kind) {
+ SetRootMarkReasonScope rootScope(visitor, RootMarkReason::DOMGCOutput);
+ JSCell* cell = static_cast<JSCell*>(heapCell);
+ cell->methodTable(visitor.vm())->visitOutputConstraints(cell, visitor);
+ };
- RefPtr<SharedTask<void(Visitor&)>> task = subspace.template forEachMarkedCellInParallel<Visitor>(func);
- visitor.addParallelConstraintTask(task);
- });
+ RefPtr<SharedTask<void(Visitor&)>> task = subspace.template forEachMarkedCellInParallel<Visitor>(func);
+ visitor.addParallelConstraintTask(task);
+ });
}
-void BunGCOutputConstraint::executeImpl(AbstractSlotVisitor& visitor)
-{
- executeImplImpl(visitor);
-}
-void BunGCOutputConstraint::executeImpl(SlotVisitor& visitor) { executeImplImpl(visitor); }
+void DOMGCOutputConstraint::executeImpl(AbstractSlotVisitor& visitor) { executeImplImpl(visitor); }
+void DOMGCOutputConstraint::executeImpl(SlotVisitor& visitor) { executeImplImpl(visitor); }
} // namespace WebCore