[JSC] Remove ArrayBufferNeuteringWatchpointSet
https://bugs.webkit.org/show_bug.cgi?id=205194
Reviewed by Saam Barati.
Source/JavaScriptCore:
This patch removes ArrayBufferNeuteringWatchpointSet, and instead putting InlineWatchpointSet directly into ArrayBuffer, since this is much simpler.
The main reason why we are using ArrayBufferNeuteringWatchpointSet is not to increase sizeof(ArrayBuffer). But this complicates the implementation.
So, not to increase sizeof(ArrayBuffer), we use PackedRefPtr in ArrayBuffer, which is RefPtr while the pointer is packed. This gives us 8 bytes which is
suitable for placing InlineWatchpointSet without increasing sizeof(ArrayBuffer). We also convert Function<> in ArrayBuffer to PackedRefPtr<SharedTask<>>,
and share Gigacage::free destructor by multiple ArrayBuffer. This is memory efficient since this is the common case, and we can pack this field easily.
(JSObjectMakeTypedArrayWithBytesNoCopy):
(JSObjectMakeArrayBufferWithBytesNoCopy):
- JavaScriptCore.xcodeproj/project.pbxproj:
- Sources.txt:
- dfg/DFGDesiredWatchpoints.cpp:
(JSC::DFG::ArrayBufferViewWatchpointAdaptor::add):
(JSC::DFG::Graph::tryGetFoldableView):
(JSC::ArrayBuffer::primitiveGigacageDestructor):
(JSC::SharedArrayBufferContents::~SharedArrayBufferContents):
(JSC::ArrayBufferContents::destroy):
(JSC::ArrayBufferContents::reset):
(JSC::ArrayBufferContents::tryAllocate):
(JSC::ArrayBufferContents::makeShared):
(JSC::ArrayBufferContents::shareWith):
(JSC::ArrayBuffer::createAdopted):
(JSC::ArrayBuffer::transferTo):
(JSC::ArrayBuffer::neuter):
(JSC::ArrayBuffer::notifyIncommingReferencesOfTransfer):
(JSC::ArrayBuffer::neuteringWatchpointSet):
- runtime/ArrayBufferNeuteringWatchpointSet.cpp: Removed.
- runtime/FileBasedFuzzerAgent.cpp:
(JSC::FileBasedFuzzerAgent::getPredictionInternal):
- runtime/FileBasedFuzzerAgentBase.cpp:
(JSC::FileBasedFuzzerAgentBase::createLookupKey):
- runtime/PredictionFileCreatingFuzzerAgent.cpp:
(JSC::PredictionFileCreatingFuzzerAgent::getPredictionInternal):
(JSC::VM::VM):
- runtime/VM.h:
- wasm/js/JSWebAssemblyMemory.cpp:
(JSC::JSWebAssemblyMemory::buffer):
Source/WebCore:
- bindings/js/SerializedScriptValue.h:
(WebCore::SerializedScriptValue::decode):
Source/WTF:
This patch adds PackedRef and PackedRefPtr. They are Ref and RefPtr, but its internal pointer is packed.
So we can represent them in 6 bytes with 1 byte alignment.
- WTF.xcodeproj/project.pbxproj:
- wtf/CMakeLists.txt:
- wtf/Packed.h:
(WTF::alignof):
- wtf/PackedRef.h: Copied from Source/JavaScriptCore/runtime/ArrayBufferNeuteringWatchpointSet.h.
- wtf/PackedRefPtr.h: Renamed from Source/JavaScriptCore/runtime/ArrayBufferNeuteringWatchpointSet.h.
- wtf/RefPtr.h:
(WTF::RefPtr::operator UnspecifiedBoolType const):
(WTF::RefPtr::unspecifiedBoolTypeInstance const):
Tools:
Add tests for PackedRef and PackedRefPtr.
- TestWebKitAPI/CMakeLists.txt:
- TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
- TestWebKitAPI/Tests/WTF/PackedRef.cpp: Added.
(TestWebKitAPI::TEST):
(TestWebKitAPI::passWithRef):
(TestWebKitAPI::PackedRefCheckingRefLogger::PackedRefCheckingRefLogger):
(TestWebKitAPI::PackedRefCheckingRefLogger::ref):
(TestWebKitAPI::PackedRefCheckingRefLogger::deref):
(TestWebKitAPI::DerivedPackedRefCheckingRefLogger::DerivedPackedRefCheckingRefLogger):
- TestWebKitAPI/Tests/WTF/PackedRefPtr.cpp: Copied from Tools/TestWebKitAPI/Tests/WTF/RefPtr.cpp.
(TestWebKitAPI::TEST):
(TestWebKitAPI::f1):
(TestWebKitAPI::ConstRefCounted::create):
(TestWebKitAPI::returnConstRefCountedRef):
(TestWebKitAPI::returnRefCountedRef):
(TestWebKitAPI::PackedRefPtrCheckingRefLogger::PackedRefPtrCheckingRefLogger):
(TestWebKitAPI::loggerName):
(TestWebKitAPI::PackedRefPtrCheckingRefLogger::ref):
(TestWebKitAPI::PackedRefPtrCheckingRefLogger::deref):
- TestWebKitAPI/Tests/WTF/RefPtr.cpp:
(TestWebKitAPI::f1):
(TestWebKitAPI::returnConstRefCountedRef):
(TestWebKitAPI::returnRefCountedRef):