[webkit-changes] [WebKit/WebKit] 02ffbc: WebAudio: Limit the number of realtime audio threa...

Jer Noble noreply at github.com
Thu Oct 12 18:53:35 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 02ffbc50d8a6ce4d67e41c7137f58f0ff1f883ec
      https://github.com/WebKit/WebKit/commit/02ffbc50d8a6ce4d67e41c7137f58f0ff1f883ec
  Author: Jer Noble <jer.noble at apple.com>
  Date:   2023-10-12 (Thu, 12 Oct 2023)

  Changed paths:
    M Source/WTF/wtf/PlatformHave.h
    M Source/WTF/wtf/Threading.h
    M Source/WTF/wtf/posix/ThreadingPOSIX.cpp
    M Source/WebKit/WebProcess/GPU/media/RemoteAudioDestinationProxy.cpp
    M Source/WebKit/WebProcess/GPU/media/RemoteAudioDestinationProxy.h

  Log Message:
  -----------
  WebAudio: Limit the number of realtime audio threads, and constrain their runtime
https://bugs.webkit.org/show_bug.cgi?id=263074
rdar://116864442

Reviewed by Chris Dumez.

In 268047 at main, RemoteAudioDestinationProxy threads were made to run in realtime mode, thereby
avoiding audible stutters and dropouts in periods of high thread contention. However realtime
threads come at a cost, and creating too many realtime threads is problematic from a kernel
scheduling perspective.

Limit the number of concurrent realtime audio threads that can be created to 3. This should allow
well behaved sites to use a small number of concurrent AudioContexts (e.g., with different
latencies and sample rates), while still mitigating the impact of degenerate sites making tens or
even hundreds of AudioContexts.

Additionally, adopt threading APIs (on Darwin OSs, for now) to constrain the runtime characteristics
of these threads. These time constraints will inform the kernel scheduler what the predicted
periodicty and runtime duration of these realtime threads are, and these limits are derivable from
the size of the WebAudio rendering quantum size and its sample rate. When these limits are
exceeded, the scheduler will de-prioritize the realtime thread, reverting it to a standard QOS
thread.

Together, these two limits will mitigate the impact of creating many realtime threads, as well as
mitigating the impact of a small number of poorly behaving realtime threads.

* Source/WTF/wtf/PlatformHave.h:
* Source/WTF/wtf/Threading.h:
* Source/WTF/wtf/posix/ThreadingPOSIX.cpp:
(WTF::Thread::setThreadTimeConstraints):
* Source/WebKit/WebProcess/GPU/media/RemoteAudioDestinationProxy.cpp:
(WebKit::RemoteAudioDestinationProxy::startRenderingThread):
(WebKit::RemoteAudioDestinationProxy::stopRenderingThread):
* Source/WebKit/WebProcess/GPU/media/RemoteAudioDestinationProxy.h:

Canonical link: https://commits.webkit.org/269291@main




More information about the webkit-changes mailing list