diff options
author | 2022-03-31 05:07:18 -0700 | |
---|---|---|
committer | 2022-03-31 05:07:18 -0700 | |
commit | 4f1320854762ffa29c2b48755706000070ad1fb5 (patch) | |
tree | 181c0d9de00e5edcbf5f6b4229dabfe5833e4802 /src/javascript/jsc/bindings/BunGCOutputConstraint.cpp | |
parent | 5fa5df02f505a9b50c264625706af7280997d557 (diff) | |
download | bun-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.cpp | 176 |
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 |