Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: a78127adb38a402b5d0fe6b17367aba32a38eb22
https://github.com/WebKit/WebKit/commit/a78127adb38a402b5d0fe6b17367aba32a38eb22
Author: Jer Noble <[email protected]>
Date: 2024-02-23 (Fri, 23 Feb 2024)
Changed paths:
M Source/WebCore/Headers.cmake
M Source/WebCore/Sources.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
A Source/WebCore/platform/audio/SharedAudioDestination.cpp
A Source/WebCore/platform/audio/SharedAudioDestination.h
M Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.cpp
M Source/WebCore/platform/graphics/MediaSourcePrivate.cpp
M Source/WebKit/WebProcess/GPU/media/WebMediaStrategy.cpp
Log Message:
-----------
[Cocoa] Audio distortion during media playback when many AudioContexts are
created
https://bugs.webkit.org/show_bug.cgi?id=269833
rdar://122590884
Reviewed by Chris Dumez.
In WebKit, each AudioContext created results in an additional thread serving
that context's
AudioDestination. (In WebKitLegacy, each AudioContext will result in an
additional
AudioOutputUnit running on a single high-priority audio thread.) When many
threads
(or AudioOutputUnits) are created, the overhead alone can cause underruns. And
when this
happens on the high-priority audio thread, it affects all audio playback within
that
process.
Rather than create new threads or AudioOutputUnits (that are all rendering on
the same
thread to the same buffer in the end) for each AudioContext, a shared
AudioDestination
can be used for multiple AudioContext's with the same number of channels and
sample rate.
For common scenarios, this means only one high-priority audio thread will be
created
and serviced by a single AudioDestination. Specifically for WebKit, it means a
single
RemoteAudioDestination/Proxy pair for each WebContent process.
* Source/WebCore/platform/audio/SharedAudioDestination.cpp: Added.
(WebCore::SharedAudioDestinationAdapter::framesPerBuffer const):
(WebCore::SharedAudioDestinationAdapter::sharedMap):
(WebCore::SharedAudioDestinationAdapter::ensureAdapter):
(WebCore::SharedAudioDestinationAdapter::SharedAudioDestinationAdapter):
(WebCore::m_configurationSemaphore):
(WebCore::SharedAudioDestinationAdapter::addRenderer):
(WebCore::SharedAudioDestinationAdapter::removeRenderer):
(WebCore::SharedAudioDestinationAdapter::configureRenderThread):
(WebCore::SharedAudioDestinationAdapter::render):
(WebCore::SharedAudioDestination::create):
(WebCore::SharedAudioDestination::SharedAudioDestination):
(WebCore::SharedAudioDestination::~SharedAudioDestination):
(WebCore::SharedAudioDestination::start):
(WebCore::SharedAudioDestination::stop):
(WebCore::SharedAudioDestination::framesPerBuffer const):
(WebCore::SharedAudioDestination::setIsPlaying):
* Source/WebCore/platform/audio/SharedAudioDestination.h: Added.
* Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.cpp:
(WebCore::AudioDestination::create):
* Source/WebKit/WebProcess/GPU/media/WebMediaStrategy.cpp:
(WebKit::WebMediaStrategy::createAudioDestination):
Canonical link: https://commits.webkit.org/275262@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes