Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 3468951fe890ae71911f72a444617be38c39c14f
https://github.com/WebKit/WebKit/commit/3468951fe890ae71911f72a444617be38c39c14f
Author: Jer Noble <[email protected]>
Date: 2023-09-15 (Fri, 15 Sep 2023)
Changed paths:
M Source/WTF/wtf/PlatformHave.h
M Source/WTF/wtf/Threading.cpp
M Source/WTF/wtf/Threading.h
M Source/WTF/wtf/posix/ThreadingPOSIX.cpp
M Source/WTF/wtf/win/ThreadingWin.cpp
M Source/WebKit/WebProcess/GPU/media/RemoteAudioDestinationProxy.cpp
Log Message:
-----------
[Cocoa] RemoteAudioDestinationProxy threads are created with too low a
priority for realtime audio
https://bugs.webkit.org/show_bug.cgi?id=261619
rdar://115513480
Reviewed by Chris Dumez.
On macOS and iOS, when a thread is configured for a QOS, it can be
de-prioritized
by the scheduler when workloads are heavy, and will then be pre-empted by
higher-priority
threads. When a RemoteAudioDestinationProxy render thread is pre-empted, this
manifests
as an audible "stutter" or "skip" in the resulting WebAudio output.
The CoreAudio Audio IO thread is configured to run as a Realtime thread, which
opts out of
the QOS de-prioritization logic. It also runs at a very high priority level, 97.
Configure the RemoteAudioDestinationProxy render thread similarly to the
CoreAudio IO thread.
This requires adding a "SchedulingPolicy" enum to Thread.h and implementing
that policy in
ThreadingPOSIX.cpp. (The Windows Threading implementation already ignores QOS;
it will
further ignore SchedulingPolicy). The Linux (POSIX) port has its own
implementation of
scheduling policy, which treats UserInteractive as Realtime. Retain this logic,
and only apply
a specific scheduling policy when it's explicitly set.
* Source/WTF/wtf/PlatformHave.h:
* Source/WTF/wtf/Threading.cpp:
(WTF::Thread::create):
* Source/WTF/wtf/Threading.h:
* Source/WTF/wtf/posix/ThreadingPOSIX.cpp:
(WTF::schedPolicy):
(WTF::Thread::establishHandle):
* Source/WTF/wtf/win/ThreadingWin.cpp:
(WTF::Thread::establishHandle):
* Source/WebKit/WebProcess/GPU/media/RemoteAudioDestinationProxy.cpp:
(WebKit::RemoteAudioDestinationProxy::startRenderingThread):
Canonical link: https://commits.webkit.org/268047@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes