Changeset 283402 in webkit
- Timestamp:
- Oct 1, 2021, 2:24:36 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 6 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/webaudio/AudioBufferSource/audiobuffersource-buffer-gc-expected.txt (added)
-
LayoutTests/webaudio/AudioBufferSource/audiobuffersource-buffer-gc.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/Modules/webaudio/AudioBuffer.idl (modified) (1 diff)
-
Source/WebCore/Modules/webaudio/AudioBufferSourceNode.h (modified) (1 diff)
-
Source/WebCore/Modules/webaudio/AudioBufferSourceNode.idl (modified) (1 diff)
-
Source/WebCore/Sources.txt (modified) (1 diff)
-
Source/WebCore/bindings/js/JSAudioBufferSourceNodeCustom.cpp (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r283401 r283402 1 2021-10-01 Chris Dumez <cdumez@apple.com> 2 3 GC may not know about memory used by AudioBufferSourceNode's buffer 4 https://bugs.webkit.org/show_bug.cgi?id=230966 5 6 Reviewed by Darin Adler. 7 8 Add layout test coverage. 9 10 * webaudio/AudioBufferSource/audiobuffersource-buffer-gc-expected.txt: Added. 11 * webaudio/AudioBufferSource/audiobuffersource-buffer-gc.html: Added. 12 1 13 2021-10-01 Ayumi Kojima <ayumi_kojima@apple.com> 2 14 -
trunk/Source/WebCore/ChangeLog
r283398 r283402 1 2021-10-01 Chris Dumez <cdumez@apple.com> 2 3 GC may not know about memory used by AudioBufferSourceNode's buffer 4 https://bugs.webkit.org/show_bug.cgi?id=230966 5 6 Reviewed by Darin Adler. 7 8 AudioBufferSourceNode has a 'buffer' attribute settable by JavaScript of type AudioBuffer. 9 An AudioBuffer may use a significant amount of memory and AudioBuffer.idl contains [ReportExtraMemoryCost] 10 extended attribute to report this memory to the GC. However, there is an issue if JS constructs a large 11 AudioBuffer, then sets it on an AudioBufferSourceNode and then the JSAudioBuffer wrapper gets garbage 12 collected. At this point, GC thinks it recovered the extra memory reported by the JSAudioBuffer but this 13 is not true since that AudioBuffer (and its internal memory) are still kept alive by AudioBufferSourceNode / 14 JSAudioBufferSourceNode. To address this issue, the proposal in this patch is to have JSAudioBufferSourceNode 15 mark its buffer when visiting childen during GC. As a result, the JSAudioBuffer wrapper will stay alive (and 16 report extra memory use) as long as its associated JSAudioBufferSourceNode wrapper is still alive. 17 18 Test: webaudio/AudioBufferSource/audiobuffersource-buffer-gc.html 19 20 * Modules/webaudio/AudioBuffer.idl: 21 * Modules/webaudio/AudioBufferSourceNode.h: 22 * Modules/webaudio/AudioBufferSourceNode.idl: 23 * Sources.txt: 24 * bindings/js/JSAudioBufferSourceNodeCustom.cpp: Added. 25 (WebCore::JSAudioBufferSourceNode::visitAdditionalChildren): 26 1 27 2021-10-01 Myles C. Maxfield <mmaxfield@apple.com> 2 28 -
trunk/Source/WebCore/Modules/webaudio/AudioBuffer.idl
r276715 r283402 29 29 [ 30 30 Conditional=WEB_AUDIO, 31 GenerateIsReachable=Impl, 31 32 ImplementationLacksVTable, 32 33 JSCustomMarkFunction, -
trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.h
r278287 r283402 52 52 // setBufferForBindings() is called on the main thread. This is the buffer we use for playback. 53 53 ExceptionOr<void> setBufferForBindings(RefPtr<AudioBuffer>&&); 54 55 AudioBuffer* buffer() WTF_REQUIRES_LOCK(m_processLock) { return m_buffer.get(); } 56 Lock& processLock() WTF_RETURNS_LOCK(m_processLock) { return m_processLock; } 54 57 55 58 // This function does not lock before accessing the buffer and should therefore only be called on the main thread. -
trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.idl
r278287 r283402 27 27 [ 28 28 Conditional=WEB_AUDIO, 29 JSCustomMarkFunction, 29 30 JSGenerateToJSObject, 30 31 Exposed=Window -
trunk/Source/WebCore/Sources.txt
r283377 r283402 443 443 bindings/js/JSAttrCustom.cpp 444 444 bindings/js/JSAudioBufferCustom.cpp 445 bindings/js/JSAudioBufferSourceNodeCustom.cpp 445 446 bindings/js/JSAudioNodeCustom.cpp 446 447 bindings/js/JSAudioWorkletProcessorCustom.cpp
Note:
See TracChangeset
for help on using the changeset viewer.