/* * 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 "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& 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 "WebCoreJSClientData.h" #include "JavaScriptCore/BlockDirectoryInlines.h" #include "JavaScriptCore/HeapInlines.h" #include "JavaScriptCore/MarkedBlockInlines.h" #include "JavaScriptCore/SubspaceInlines.h" namespace WebCore { using namespace JSC; DOMGCOutputConstraint::DOMGCOutputConstraint(VM& vm, JSHeapData& heapData) : MarkingConstraint("Domo", "DOM Output", ConstraintVolatility::SeldomGreyed, ConstraintConcurrency::Concurrent, ConstraintParallelism::Parallel) , m_vm(vm) , m_heapData(heapData) , m_lastExecutionVersion(vm.heap.mutatorExecutionVersion()) { } DOMGCOutputConstraint::~DOMGCOutputConstraint() { } template void DOMGCOutputConstraint::executeImplImpl(Visitor& visitor) { Heap& heap = m_vm.heap; if (heap.mutatorExecutionVersion() == m_lastExecutionVersion) return; m_lastExecutionVersion = heap.mutatorExecutionVersion(); m_heapData.forEachOutputConstraintSpace( [&](Subspace& subspace) { auto func = [](Visitor& visitor, HeapCell* heapCell, HeapCell::Kind) { SetRootMarkReasonScope rootScope(visitor, RootMarkReason::DOMGCOutput); JSCell* cell = static_cast(heapCell); cell->methodTable()->visitOutputConstraints(cell, visitor); }; RefPtr> task = subspace.template forEachMarkedCellInParallel(func); visitor.addParallelConstraintTask(task); }); } void DOMGCOutputConstraint::executeImpl(AbstractSlotVisitor& visitor) { executeImplImpl(visitor); } void DOMGCOutputConstraint::executeImpl(SlotVisitor& visitor) { executeImplImpl(visitor); } } // namespace WebCore rred/cleanup-error'>jarred/cleanup-error Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-10-05analytics is good enough for nowGravatar Jarred Sumner 14-145/+440
2021-10-05Async analytics works nowGravatar Jarred Sumner 5-25/+51
Requests are ~60 bytes and the thread mostly sleeps, so it should be pretty low overhead overall.
2021-10-05[fetch] Fix bug with HTTP request bodiesGravatar Jarred Sumner 1-5/+13
2021-10-05Add `BUN_DISABLE_ANALYTICS` flag to disable analytics and automatically ↵Gravatar Jarred Sumner 6-1896/+2048
disable analytics when running inside `hyperfine`
2021-10-05Simple analyticsGravatar Jarred Sumner 8-1/+1070
2021-10-04Statically link libicu on Linux so it doesn't require installing icu separately.Gravatar Jarred SUmner 2-2/+7
this doubles the binary size :(
2021-10-04memfd experiment did not yield perf gains on Linuxjarred/fix-bunbun-on-wslGravatar Jarred SUmner 2-5/+4
I suspect the reason why is because we were already using tmpfs. So it was already writing to an in-memory file. O_TMPFILE doesn't seem to do anything for us either here.
2021-10-04Don't pass O_EXCLGravatar Jarred Sumner 1-2/+2
2021-10-04O_TMPFILEGravatar Jarred Sumner 1-4/+2
2021-10-04memfd_create does not actually make it fasterGravatar Jarred Sumner 2-31/+8
2021-10-04Attempt to optimize `bun bun` on Linux by using memfd_create and copying the ↵Gravatar Jarred Sumner 3-18/+135
resulting file via sendfile()
2021-10-04Fix moving files across mount pointsGravatar Jarred Sumner 2-1/+29
2021-10-04BumpGravatar Jarred Sumner 3-3/+3
2021-10-04Bumpbun-v0.0.31Gravatar Jarred Sumner 3-3/+3
2021-10-04Bumpbun-v0.0.30bun-v0.0.29Gravatar Jarred Sumner 1-1/+1
2021-10-04Improve Bun's performance by 5%Gravatar Jarred Sumner 7-58/+46
By making E.Identifier not a pointer, we improve performance by 5%. Heap allocations are bad
2021-10-03Use covid19 exampleGravatar Jarred SUmner 1-2/+2
2021-10-03BumpGravatar Jarred SUmner 2-1/+1
2021-10-03Update MakefileGravatar Jarred Sumner 1-6/+8
2021-10-03Update MakefileGravatar Jarred Sumner 1-0/+2
2021-10-03Update MakefileGravatar Jarred Sumner 1-2/+2
2021-10-03Update MakefileGravatar Jarred Sumner 1-8/+13
2021-10-03Update MakefileGravatar Jarred Sumner 1-5/+5
2021-10-03Update MakefileGravatar Jarred Sumner 1-2/+4
2021-10-03Fix tmpdir on linuxGravatar Jarred Sumner 1-8/+10
2021-10-03Update linux build instructionsGravatar Jarred Sumner 30-113/+180
2021-10-03Create separate profile binary and strip debug symbolsbun-v0.0.28Gravatar Jarred Sumner 5-1/+21
2021-10-03llvm-stripGravatar Jarred Sumner 1-1/+7
2021-10-03Fix makefile issueGravatar Jarred Sumner 1-4/+7
2021-10-03Fix various macOS-specific compile errors and run `zig fmt`Gravatar Jarred Sumner 13-2118/+3310
2021-10-031% perf improvements on Linuxjarred/linuxGravatar Jarred SUmner 28-118/+170
2021-10-03Add Three.js benchmarkGravatar Jarred SUmner 5-14/+33
2021-10-02Linux works now.Gravatar Jarred SUmner 21-100/+320
2021-10-01Add support for INotify-based filesystem watcherGravatar Jarred Sumner 6-93/+287
2021-10-01Build stuffGravatar Jarred SUmner 9-1371/+71
2021-10-01Bump webkitGravatar Jarred Sumner 1-0/+0
2021-10-01Split out the macOS specific partsGravatar Jarred Sumner 4-207/+238
2021-09-30Update README.mdGravatar Jarred Sumner 1-1/+1
2021-09-30Update README.mdGravatar Jarred Sumner 1-1/+1
2021-09-30Update README.mdGravatar Jarred Sumner 1-1/+1
2021-09-30Update README.mdGravatar Jarred Sumner 1-5/+5
2021-09-30Fix up readmeGravatar Jarred Sumner 2-9/+24
2021-09-30Bump versionGravatar Jarred Sumner 3-3/+3
2021-09-30Add a readmeGravatar Jarred Sumner 3-3/+119
2021-09-30Bump build-idbun-v0.0.27jarred/relayGravatar Jarred Sumner 1-1/+1
2021-09-30runtime.versionGravatar Jarred Sumner 1-1/+1
2021-09-30SnapshotsGravatar Jarred Sumner 9-36/+63