Changeset 282707 in webkit
- Timestamp:
- Sep 17, 2021 4:17:23 PM (10 months ago)
- Location:
- trunk
- Files:
-
- 1 added
- 15 edited
-
JSTests/ChangeLog (modified) (1 diff)
-
JSTests/stress/json-stringify-object-modify.js (added)
-
Source/JavaScriptCore/ChangeLog (modified) (1 diff)
-
Source/JavaScriptCore/heap/Heap.cpp (modified) (1 diff)
-
Source/JavaScriptCore/heap/Heap.h (modified) (3 diffs)
-
Source/JavaScriptCore/heap/HeapInlines.h (modified) (1 diff)
-
Source/JavaScriptCore/runtime/ArgList.cpp (modified) (6 diffs)
-
Source/JavaScriptCore/runtime/ArgList.h (modified) (5 diffs)
-
Source/JavaScriptCore/runtime/JSONObject.cpp (modified) (9 diffs)
-
Source/JavaScriptCore/runtime/ObjectConstructorInlines.h (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/Modules/webaudio/AudioWorkletProcessor.cpp (modified) (1 diff)
-
Source/WebCore/Modules/webaudio/AudioWorkletProcessor.h (modified) (2 diffs)
-
Source/WebKitLegacy/mac/ChangeLog (modified) (1 diff)
-
Source/WebKitLegacy/mac/Plugins/Hosted/NetscapePluginInstanceProxy.h (modified) (1 diff)
-
Source/WebKitLegacy/mac/Plugins/Hosted/NetscapePluginInstanceProxy.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/JSTests/ChangeLog
r282468 r282707 1 2021-09-17 Yusuke Suzuki <ysuzuki@apple.com> 2 3 [JSC] Add fast property enumeration mode for JSON.stringify 4 https://bugs.webkit.org/show_bug.cgi?id=230393 5 6 Reviewed by Mark Lam. 7 8 * stress/json-stringify-object-modify.js: Added. 9 (shouldBe): 10 (throw.new.Error.let.object.hello.get inner): 11 (throw.new.Error): 12 (shouldBe.let.object.hello.get inner): 13 1 14 2021-09-15 Yusuke Suzuki <ysuzuki@apple.com> 2 15 -
trunk/Source/JavaScriptCore/ChangeLog
r282701 r282707 1 2021-09-17 Yusuke Suzuki <ysuzuki@apple.com> 2 3 [JSC] Add fast property enumeration mode for JSON.stringify 4 https://bugs.webkit.org/show_bug.cgi?id=230393 5 6 Reviewed by Mark Lam. 7 8 We collected profiles and found several subtests are using JSON.stringify enough. And generated strings are many serialized leaf objects. 9 10 This patch adds fast object property enumeration. When we know that source object meets some conditions, we can say that, 11 as long as structure is not changed, we can continue using property names and offset collected from the structure. 12 This way removes non observable [[Get]] operations to accelerate JSON.stringify performance for major object iteration cases. 13 14 We also extend MarkedArgumentBuffer: introducing MarkedArgumentBufferWithSize which can take default inline capacity as a template 15 parameter. This is used in JSON.stringify to increase the buffer because now we also need to record structures in MarkedArgumentBuffer. 16 17 This offers 0.4% improvement in Speedometer2 (EmberJS-TodoMVC, Vanilla-XXX, EmberJS-Debug-TodoMVC, they have enough amount of JSON.stringify 18 time). 19 20 ---------------------------------------------------------------------------------------------------------------------------------- 21 | subtest | ms | ms | b / a | pValue (significance using False Discovery Rate) | 22 ---------------------------------------------------------------------------------------------------------------------------------- 23 | Elm-TodoMVC |117.710000 |117.751667 |1.000354 | 0.883246 | 24 | VueJS-TodoMVC |24.500000 |24.311667 |0.992313 | 0.365130 | 25 | EmberJS-TodoMVC |126.646667 |125.738333 |0.992828 | 0.002587 (significant) | 26 | BackboneJS-TodoMVC |47.873333 |47.911667 |1.000801 | 0.762509 | 27 | Preact-TodoMVC |17.020000 |17.070000 |1.002938 | 0.786799 | 28 | AngularJS-TodoMVC |129.856667 |129.353333 |0.996124 | 0.177632 | 29 | Vanilla-ES2015-TodoMVC |61.698333 |61.120000 |0.990626 | 0.000003 (significant) | 30 | Inferno-TodoMVC |62.840000 |62.496667 |0.994536 | 0.312340 | 31 | Flight-TodoMVC |77.095000 |76.936667 |0.997946 | 0.702724 | 32 | Angular2-TypeScript-TodoMVC |39.740000 |39.191667 |0.986202 | 0.053485 | 33 | VanillaJS-TodoMVC |49.008333 |48.346667 |0.986499 | 0.000638 (significant) | 34 | jQuery-TodoMVC |216.785000 |217.188333 |1.001861 | 0.270747 | 35 | EmberJS-Debug-TodoMVC |344.230000 |342.993333 |0.996407 | 0.012262 (significant) | 36 | React-TodoMVC |85.461667 |85.411667 |0.999415 | 0.758049 | 37 | React-Redux-TodoMVC |140.681667 |140.640000 |0.999704 | 0.871277 | 38 | Vanilla-ES2015-Babel-Webpack-TodoMVC |59.928333 |59.351667 |0.990377 | 0.000000 (significant) | 39 ---------------------------------------------------------------------------------------------------------------------------------- 40 a mean = 264.40650 41 b mean = 265.51533 42 pValue = 0.0005567357 43 (Bigger means are better.) 44 1.004 times better 45 Results ARE significant 46 47 * heap/Heap.cpp: 48 (JSC::Heap::addCoreConstraints): 49 * heap/Heap.h: 50 * heap/HeapInlines.h: 51 * runtime/ArgList.cpp: 52 (JSC::MarkedArgumentBufferBase::addMarkSet): 53 (JSC::MarkedArgumentBufferBase::markLists): 54 (JSC::MarkedArgumentBufferBase::slowEnsureCapacity): 55 (JSC::MarkedArgumentBufferBase::expandCapacity): 56 (JSC::MarkedArgumentBufferBase::slowAppend): 57 (JSC::MarkedArgumentBuffer::addMarkSet): Deleted. 58 (JSC::MarkedArgumentBuffer::markLists): Deleted. 59 (JSC::MarkedArgumentBuffer::slowEnsureCapacity): Deleted. 60 (JSC::MarkedArgumentBuffer::expandCapacity): Deleted. 61 (JSC::MarkedArgumentBuffer::slowAppend): Deleted. 62 * runtime/ArgList.h: 63 (JSC::MarkedArgumentBufferWithSize::MarkedArgumentBufferWithSize): 64 (JSC::MarkedArgumentBuffer::MarkedArgumentBuffer): Deleted. 65 (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer): Deleted. 66 (JSC::MarkedArgumentBuffer::size const): Deleted. 67 (JSC::MarkedArgumentBuffer::isEmpty const): Deleted. 68 (JSC::MarkedArgumentBuffer::at const): Deleted. 69 (JSC::MarkedArgumentBuffer::clear): Deleted. 70 (JSC::MarkedArgumentBuffer::appendWithAction): Deleted. 71 (JSC::MarkedArgumentBuffer::append): Deleted. 72 (JSC::MarkedArgumentBuffer::appendWithCrashOnOverflow): Deleted. 73 (JSC::MarkedArgumentBuffer::removeLast): Deleted. 74 (JSC::MarkedArgumentBuffer::last): Deleted. 75 (JSC::MarkedArgumentBuffer::takeLast): Deleted. 76 (JSC::MarkedArgumentBuffer::ensureCapacity): Deleted. 77 (JSC::MarkedArgumentBuffer::hasOverflowed): Deleted. 78 (JSC::MarkedArgumentBuffer::overflowCheckNotNeeded): Deleted. 79 (JSC::MarkedArgumentBuffer::fill): Deleted. 80 (JSC::MarkedArgumentBuffer::slotFor const): Deleted. 81 (JSC::MarkedArgumentBuffer::mallocBase): Deleted. 82 (JSC::MarkedArgumentBuffer::setNeedsOverflowCheck): Deleted. 83 (JSC::MarkedArgumentBuffer::clearNeedsOverflowCheck): Deleted. 84 * runtime/JSONObject.cpp: 85 (JSC::Stringifier::Holder::hasFastObjectProperties const): 86 (JSC::Stringifier::appendStringifiedValue): 87 (JSC::Stringifier::Holder::Holder): 88 (JSC::Stringifier::Holder::appendNextProperty): 89 * runtime/ObjectConstructorInlines.h: 90 (JSC::canPerformFastPropertyEnumerationForJSONStringify): 91 1 92 2021-09-17 Ross Kirsling <ross.kirsling@sony.com> 2 93 -
trunk/Source/JavaScriptCore/heap/Heap.cpp
r282565 r282707 2768 2768 if (m_markListSet && m_markListSet->size()) { 2769 2769 SetRootMarkReasonScope rootScope(visitor, RootMarkReason::ConservativeScan); 2770 MarkedArgumentBuffer ::markLists(visitor, *m_markListSet);2770 MarkedArgumentBufferBase::markLists(visitor, *m_markListSet); 2771 2771 } 2772 2772 -
trunk/Source/JavaScriptCore/heap/Heap.h
r279861 r282707 78 78 class MarkedJSValueRefArray; 79 79 class BlockDirectory; 80 class MarkedArgumentBuffer ;80 class MarkedArgumentBufferBase; 81 81 class MarkingConstraint; 82 82 class MarkingConstraintSet; … … 246 246 JS_EXPORT_PRIVATE std::unique_ptr<TypeCountSet> objectTypeCounts(); 247 247 248 HashSet<MarkedArgumentBuffer *>& markListSet();248 HashSet<MarkedArgumentBufferBase*>& markListSet(); 249 249 void addMarkedJSValueRefArray(MarkedJSValueRefArray*); 250 250 … … 625 625 626 626 ProtectCountSet m_protectedValues; 627 std::unique_ptr<HashSet<MarkedArgumentBuffer *>> m_markListSet;627 std::unique_ptr<HashSet<MarkedArgumentBufferBase*>> m_markListSet; 628 628 SentinelLinkedList<MarkedJSValueRefArray, BasicRawSentinelNode<MarkedJSValueRefArray>> m_markedJSValueRefArrays; 629 629 -
trunk/Source/JavaScriptCore/heap/HeapInlines.h
r279861 r282707 216 216 } 217 217 218 inline HashSet<MarkedArgumentBuffer *>& Heap::markListSet()218 inline HashSet<MarkedArgumentBufferBase*>& Heap::markListSet() 219 219 { 220 220 if (!m_markListSet) 221 m_markListSet = makeUnique<HashSet<MarkedArgumentBuffer *>>();221 m_markListSet = makeUnique<HashSet<MarkedArgumentBufferBase*>>(); 222 222 return *m_markListSet; 223 223 } -
trunk/Source/JavaScriptCore/runtime/ArgList.cpp
r278338 r282707 28 28 namespace JSC { 29 29 30 void MarkedArgumentBuffer ::addMarkSet(JSValue v)30 void MarkedArgumentBufferBase::addMarkSet(JSValue v) 31 31 { 32 32 if (m_markSet) … … 53 53 54 54 template<typename Visitor> 55 void MarkedArgumentBuffer ::markLists(Visitor& visitor, ListSet& markSet)55 void MarkedArgumentBufferBase::markLists(Visitor& visitor, ListSet& markSet) 56 56 { 57 57 ListSet::iterator end = markSet.end(); 58 58 for (ListSet::iterator it = markSet.begin(); it != end; ++it) { 59 MarkedArgumentBuffer * list = *it;59 MarkedArgumentBufferBase* list = *it; 60 60 for (int i = 0; i < list->m_size; ++i) 61 61 visitor.appendUnbarriered(JSValue::decode(list->slotFor(i))); … … 63 63 } 64 64 65 template void MarkedArgumentBuffer ::markLists(AbstractSlotVisitor&, ListSet&);66 template void MarkedArgumentBuffer ::markLists(SlotVisitor&, ListSet&);65 template void MarkedArgumentBufferBase::markLists(AbstractSlotVisitor&, ListSet&); 66 template void MarkedArgumentBufferBase::markLists(SlotVisitor&, ListSet&); 67 67 68 void MarkedArgumentBuffer ::slowEnsureCapacity(size_t requestedCapacity)68 void MarkedArgumentBufferBase::slowEnsureCapacity(size_t requestedCapacity) 69 69 { 70 70 setNeedsOverflowCheck(); … … 75 75 } 76 76 77 void MarkedArgumentBuffer ::expandCapacity()77 void MarkedArgumentBufferBase::expandCapacity() 78 78 { 79 79 setNeedsOverflowCheck(); … … 84 84 } 85 85 86 void MarkedArgumentBuffer ::expandCapacity(int newCapacity)86 void MarkedArgumentBufferBase::expandCapacity(int newCapacity) 87 87 { 88 88 setNeedsOverflowCheck(); … … 106 106 } 107 107 108 void MarkedArgumentBuffer ::slowAppend(JSValue v)108 void MarkedArgumentBufferBase::slowAppend(JSValue v) 109 109 { 110 110 ASSERT(m_size <= m_capacity); -
trunk/Source/JavaScriptCore/runtime/ArgList.h
r273138 r282707 29 29 namespace JSC { 30 30 31 class MarkedArgumentBuffer: public RecordOverflow {32 WTF_MAKE_NONCOPYABLE(MarkedArgumentBuffer );33 WTF_MAKE_NONMOVABLE(MarkedArgumentBuffer );31 class alignas(alignof(EncodedJSValue)) MarkedArgumentBufferBase : public RecordOverflow { 32 WTF_MAKE_NONCOPYABLE(MarkedArgumentBufferBase); 33 WTF_MAKE_NONMOVABLE(MarkedArgumentBufferBase); 34 34 WTF_FORBID_HEAP_ALLOCATION; 35 35 friend class VM; … … 38 38 public: 39 39 using Base = RecordOverflow; 40 static constexpr size_t inlineCapacity = 8; 41 typedef HashSet<MarkedArgumentBuffer*> ListSet; 42 43 // Constructor for a read-write list, to which you may append values. 44 // FIXME: Remove all clients of this API, then remove this API. 45 MarkedArgumentBuffer() 46 : m_size(0) 47 , m_capacity(inlineCapacity) 48 , m_buffer(m_inlineBuffer) 49 , m_markSet(nullptr) 50 { 51 } 52 53 ~MarkedArgumentBuffer() 40 typedef HashSet<MarkedArgumentBufferBase*> ListSet; 41 42 ~MarkedArgumentBufferBase() 54 43 { 55 44 ASSERT(!m_needsOverflowCheck); … … 146 135 } 147 136 137 protected: 138 // Constructor for a read-write list, to which you may append values. 139 // FIXME: Remove all clients of this API, then remove this API. 140 MarkedArgumentBufferBase(size_t capacity) 141 : m_size(0) 142 , m_capacity(capacity) 143 , m_buffer(inlineBuffer()) 144 , m_markSet(nullptr) 145 { 146 } 147 148 EncodedJSValue* inlineBuffer() 149 { 150 return bitwise_cast<EncodedJSValue*>(bitwise_cast<uint8_t*>(this) + sizeof(MarkedArgumentBufferBase)); 151 } 152 148 153 private: 149 154 void expandCapacity(); … … 162 167 EncodedJSValue* mallocBase() 163 168 { 164 if (m_buffer == m_inlineBuffer)169 if (m_buffer == inlineBuffer()) 165 170 return nullptr; 166 171 return &slotFor(0); … … 178 183 int m_size; 179 184 int m_capacity; 180 EncodedJSValue m_inlineBuffer[inlineCapacity];181 185 EncodedJSValue* m_buffer; 182 186 ListSet* m_markSet; 183 187 }; 188 189 template<size_t passedInlineCapacity = 8> 190 class MarkedArgumentBufferWithSize : public MarkedArgumentBufferBase { 191 public: 192 static constexpr size_t inlineCapacity = passedInlineCapacity; 193 194 MarkedArgumentBufferWithSize() 195 : MarkedArgumentBufferBase(inlineCapacity) 196 { 197 ASSERT(inlineBuffer() == m_inlineBuffer); 198 } 199 200 private: 201 EncodedJSValue m_inlineBuffer[inlineCapacity] { }; 202 }; 203 204 using MarkedArgumentBuffer = MarkedArgumentBufferWithSize<>; 184 205 185 206 class ArgList { -
trunk/Source/JavaScriptCore/runtime/JSONObject.cpp
r281790 r282707 34 34 #include "JSCInlines.h" 35 35 #include "LiteralParser.h" 36 #include "ObjectConstructor .h"36 #include "ObjectConstructorInlines.h" 37 37 #include "PropertyNameArray.h" 38 38 #include "VMInlines.h" … … 89 89 public: 90 90 enum RootHolderTag { RootHolder }; 91 Holder(JSGlobalObject*, JSObject* );91 Holder(JSGlobalObject*, JSObject*, Structure*); 92 92 Holder(RootHolderTag, JSObject*); 93 93 94 94 JSObject* object() const { return m_object; } 95 95 bool isArray() const { return m_isArray; } 96 bool hasFastObjectProperties() const { return m_hasFastObjectProperties; } 96 97 97 98 bool appendNextProperty(Stringifier&, StringBuilder&); 98 99 99 100 private: 100 JSObject* m_object; 101 const bool m_isJSArray; 102 const bool m_isArray; 101 JSObject* m_object { nullptr }; 102 Structure* m_structure { nullptr }; 103 const bool m_isJSArray { false }; 104 const bool m_isArray { false }; 105 bool m_hasFastObjectProperties { false }; 103 106 unsigned m_index { 0 }; 104 107 unsigned m_size { 0 }; 105 108 RefPtr<PropertyNameArrayData> m_propertyNames; 109 Vector<std::tuple<Identifier, unsigned>, 8> m_propertiesAndOffsets; 106 110 }; 107 111 … … 126 130 String m_gap; 127 131 128 MarkedArgumentBuffer m_objectStack;132 MarkedArgumentBufferWithSize<16> m_objectStack; 129 133 Vector<Holder, 16, UnsafeVectorOverflow> m_holderStack; 130 134 String m_repeatedGap; … … 409 413 410 414 bool holderStackWasEmpty = m_holderStack.isEmpty(); 411 m_holderStack.append(Holder(m_globalObject, object)); 415 Structure* structure = object->structure(vm); 416 m_holderStack.append(Holder(m_globalObject, object, structure)); 412 417 m_objectStack.appendWithCrashOnOverflow(object); 418 m_objectStack.appendWithCrashOnOverflow(structure); 413 419 RETURN_IF_EXCEPTION(scope, StringifyFailed); 414 420 if (!holderStackWasEmpty) … … 423 429 m_holderStack.removeLast(); 424 430 m_objectStack.removeLast(); 431 m_objectStack.removeLast(); 425 432 } while (!m_holderStack.isEmpty()); 426 433 return StringifySucceeded; … … 456 463 } 457 464 458 inline Stringifier::Holder::Holder(JSGlobalObject* globalObject, JSObject* object )465 inline Stringifier::Holder::Holder(JSGlobalObject* globalObject, JSObject* object, Structure* structure) 459 466 : m_object(object) 467 , m_structure(structure) 460 468 , m_isJSArray(isJSArray(object)) 461 469 , m_isArray(JSC::isArray(globalObject, object)) … … 465 473 inline Stringifier::Holder::Holder(RootHolderTag, JSObject* object) 466 474 : m_object(object) 467 , m_isJSArray(false)468 , m_isArray(false)469 475 { 470 476 } … … 491 497 builder.append('['); 492 498 } else { 493 if (stringifier.m_usingArrayReplacer) 499 if (stringifier.m_usingArrayReplacer) { 494 500 m_propertyNames = stringifier.m_arrayReplacerPropertyNames.data(); 495 else { 501 m_size = m_propertyNames->propertyNameVector().size(); 502 } else if (m_structure && m_object->structureID() == m_structure->id() && canPerformFastPropertyEnumerationForJSONStringify(m_structure)) { 503 m_structure->forEachProperty(vm, [&](const PropertyMapEntry& entry) -> bool { 504 if (entry.attributes & PropertyAttribute::DontEnum) 505 return true; 506 507 PropertyName propertyName(entry.key); 508 if (propertyName.isSymbol()) 509 return true; 510 m_propertiesAndOffsets.constructAndAppend(Identifier::fromUid(vm, entry.key), entry.offset); 511 return true; 512 }); 513 m_hasFastObjectProperties = true; 514 m_size = m_propertiesAndOffsets.size(); 515 } else { 496 516 PropertyNameArray objectPropertyNames(vm, PropertyNameMode::Strings, PrivateSymbolMode::Exclude); 497 517 m_object->methodTable(vm)->getOwnPropertyNames(m_object, globalObject, objectPropertyNames, DontEnumPropertiesMode::Exclude); 498 518 RETURN_IF_EXCEPTION(scope, false); 499 519 m_propertyNames = objectPropertyNames.releaseData(); 520 m_size = m_propertyNames->propertyNameVector().size(); 500 521 } 501 m_size = m_propertyNames->propertyNameVector().size();502 522 builder.append('{'); 503 523 } … … 539 559 ASSERT(stringifyResult != StringifyFailedDueToUndefinedOrSymbolValue); 540 560 } else { 541 // Get the value. 542 Identifier& propertyName = m_propertyNames->propertyNameVector()[index]; 543 JSValue value = m_object->get(globalObject, propertyName); 544 RETURN_IF_EXCEPTION(scope, false); 561 Identifier propertyName; 562 JSValue value; 563 if (m_hasFastObjectProperties) { 564 propertyName = std::get<0>(m_propertiesAndOffsets[index]); 565 if (m_object->structureID() == m_structure->id()) { 566 unsigned offset = std::get<1>(m_propertiesAndOffsets[index]); 567 value = m_object->getDirect(offset); 568 } else { 569 value = m_object->get(globalObject, propertyName); 570 RETURN_IF_EXCEPTION(scope, false); 571 } 572 } else { 573 propertyName = m_propertyNames->propertyNameVector()[index]; 574 value = m_object->get(globalObject, propertyName); 575 RETURN_IF_EXCEPTION(scope, false); 576 } 545 577 546 578 rollBackPoint = builder.length(); -
trunk/Source/JavaScriptCore/runtime/ObjectConstructorInlines.h
r279690 r282707 54 54 } 55 55 56 ALWAYS_INLINE bool canPerformFastPropertyEnumerationForJSONStringify(Structure* structure) 57 { 58 return canPerformFastPropertyEnumerationForObjectAssign(structure); 59 } 60 56 61 ALWAYS_INLINE void objectAssignFast(VM& vm, JSObject* target, JSObject* source, Vector<RefPtr<UniquedStringImpl>, 8>& properties, MarkedArgumentBuffer& values) 57 62 { -
trunk/Source/WebCore/ChangeLog
r282706 r282707 1 2021-09-17 Yusuke Suzuki <ysuzuki@apple.com> 2 3 [JSC] Add fast property enumeration mode for JSON.stringify 4 https://bugs.webkit.org/show_bug.cgi?id=230393 5 6 Reviewed by Mark Lam. 7 8 * Modules/webaudio/AudioWorkletProcessor.cpp: 9 (WebCore::AudioWorkletProcessor::buildJSArguments): 10 * Modules/webaudio/AudioWorkletProcessor.h: 11 1 12 2021-09-17 Johnson Zhou <qiaosong_zhou@apple.com> 2 13 -
trunk/Source/WebCore/Modules/webaudio/AudioWorkletProcessor.cpp
r274989 r282707 214 214 } 215 215 216 void AudioWorkletProcessor::buildJSArguments(VM& vm, JSGlobalObject& globalObject, MarkedArgumentBuffer & args, const Vector<RefPtr<AudioBus>>& inputs, Vector<Ref<AudioBus>>& outputs, const HashMap<String, std::unique_ptr<AudioFloatArray>>& paramValuesMap)216 void AudioWorkletProcessor::buildJSArguments(VM& vm, JSGlobalObject& globalObject, MarkedArgumentBufferBase& args, const Vector<RefPtr<AudioBus>>& inputs, Vector<Ref<AudioBus>>& outputs, const HashMap<String, std::unique_ptr<AudioFloatArray>>& paramValuesMap) 217 217 { 218 218 // For performance reasons, we cache the arrays passed to JS and reconstruct them only when the topology changes. -
trunk/Source/WebCore/Modules/webaudio/AudioWorkletProcessor.h
r268560 r282707 39 39 namespace JSC { 40 40 class JSArray; 41 class MarkedArgumentBuffer ;41 class MarkedArgumentBufferBase; 42 42 } 43 43 … … 68 68 private: 69 69 explicit AudioWorkletProcessor(const AudioWorkletProcessorConstructionData&); 70 void buildJSArguments(JSC::VM&, JSC::JSGlobalObject&, JSC::MarkedArgumentBuffer &, const Vector<RefPtr<AudioBus>>& inputs, Vector<Ref<AudioBus>>& outputs, const HashMap<String, std::unique_ptr<AudioFloatArray>>& paramValuesMap);70 void buildJSArguments(JSC::VM&, JSC::JSGlobalObject&, JSC::MarkedArgumentBufferBase&, const Vector<RefPtr<AudioBus>>& inputs, Vector<Ref<AudioBus>>& outputs, const HashMap<String, std::unique_ptr<AudioFloatArray>>& paramValuesMap); 71 71 72 72 String m_name; -
trunk/Source/WebKitLegacy/mac/ChangeLog
r282393 r282707 1 2021-09-17 Yusuke Suzuki <ysuzuki@apple.com> 2 3 [JSC] Add fast property enumeration mode for JSON.stringify 4 https://bugs.webkit.org/show_bug.cgi?id=230393 5 6 Reviewed by Mark Lam. 7 8 * Plugins/Hosted/NetscapePluginInstanceProxy.h: 9 * Plugins/Hosted/NetscapePluginInstanceProxy.mm: 10 (WebKit::NetscapePluginInstanceProxy::demarshalValues): 11 1 12 2021-09-14 Chris Dumez <cdumez@apple.com> 2 13 -
trunk/Source/WebKitLegacy/mac/Plugins/Hosted/NetscapePluginInstanceProxy.h
r251425 r282707 311 311 312 312 bool demarshalValueFromArray(JSC::JSGlobalObject*, NSArray *array, NSUInteger& index, JSC::JSValue& result); 313 void demarshalValues(JSC::JSGlobalObject*, data_t valuesData, mach_msg_type_number_t valuesLength, JSC::MarkedArgumentBuffer & result);313 void demarshalValues(JSC::JSGlobalObject*, data_t valuesData, mach_msg_type_number_t valuesLength, JSC::MarkedArgumentBufferBase& result); 314 314 315 315 class LocalObjectMap { -
trunk/Source/WebKitLegacy/mac/Plugins/Hosted/NetscapePluginInstanceProxy.mm
r278516 r282707 1434 1434 } 1435 1435 1436 void NetscapePluginInstanceProxy::demarshalValues(JSGlobalObject* lexicalGlobalObject, data_t valuesData, mach_msg_type_number_t valuesLength, MarkedArgumentBuffer & result)1436 void NetscapePluginInstanceProxy::demarshalValues(JSGlobalObject* lexicalGlobalObject, data_t valuesData, mach_msg_type_number_t valuesLength, MarkedArgumentBufferBase& result) 1437 1437 { 1438 1438 RetainPtr<NSData> data = adoptNS([[NSData alloc] initWithBytesNoCopy:valuesData length:valuesLength freeWhenDone:NO]);
Note: See TracChangeset
for help on using the changeset viewer.