Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 877c1eacc4bb0fcb250707f9912a3db08e5ce639
      
https://github.com/WebKit/WebKit/commit/877c1eacc4bb0fcb250707f9912a3db08e5ce639
  Author: Jean-Yves Avenard <[email protected]>
  Date:   2026-03-26 (Thu, 26 Mar 2026)

  Changed paths:
    M Source/WebCore/Modules/mediasource/MediaSource.cpp
    M Source/WebCore/Sources.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    A Source/WebCore/platform/graphics/MediaSourceTypeSupportedCache.cpp
    A Source/WebCore/platform/graphics/MediaSourceTypeSupportedCache.h
    M Source/WebKit/Shared/WebProcessCreationParameters.h
    M Source/WebKit/Shared/WebProcessCreationParameters.serialization.in
    M Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm
    M Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm
    M Source/WebKit/UIProcess/WebProcessPool.h
    M Source/WebKit/UIProcess/WebProcessProxy.h
    M Source/WebKit/UIProcess/WebProcessProxy.messages.in
    M Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm
    M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
    A Tools/TestWebKitAPI/Tests/WebKit/is-type-supported-perf.html
    A Tools/TestWebKitAPI/Tests/WebKitCocoa/MSEIsTypeSupportedCaching.mm

  Log Message:
  -----------
  MediaSource should actually cache the response
https://bugs.webkit.org/show_bug.cgi?id=310616
rdar://173224564

Reviewed by Youenn Fablet.

Add thread-safe MediaSourceTypeSupportedCache for MediaSource.isTypeSupported

MediaSource.isTypeSupported() requires a synchronous dispatch to the main
thread when invoked from Worker threads via callOnMainThreadAndWait. This
patch introduces a thread-safe cache that eliminates redundant type-support
queries across threads and processes. On a cache hit, the result is returned
immediately without dispatching to the main thread.

Cache contents are mirrored to the UI process following the existing
setCacheMIMETypesCallback/setMediaMIMETypes pattern: when a WebContent
process discovers a new result, it notifies the UI process via
CacheMediaSourceTypeSupported IPC. The cache is only distributed to
new content process.
New WebContent processes receive the full cache through
WebProcessCreationParameters::mediaSourceTypesSupported.

Add API Tests:
Tools/TestWebKitAPI/Tests/WebKit/is-type-supported-perf.html
Tools/TestWebKitAPI/Tests/WebKitCocoa/MSEIsTypeSupportedCaching.mm
Following this change:
Pre-cache process 1 (PID 19401): cold=22.00 ms, warm=3.00 ms
Pre-cache process 2 (PID 19428): cold=17.00 ms, warm=0.00 ms
Pre-cache process 3 (PID 19435): cold=17.00 ms, warm=2.00 ms
Post-cache process 1 (PID 19438): cold=0.00 ms, warm=1.00 ms
Post-cache process 2 (PID 19440): cold=0.00 ms, warm=1.00 ms
Post-cache process 3 (PID 19445): cold=0.00 ms, warm=1.00 ms
=== IsTypeSupported MP4 Performance Summary ===
  Pre-cache avg cold:  18.67 ms (3 processes)
  Post-cache avg cold: 0.00 ms (3 processes)

* Source/WebCore/Modules/mediasource/MediaSource.cpp:
(WebCore::MediaSource::isTypeSupported):
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/platform/graphics/MediaSourceTypeSupportedCache.cpp: Added.
(WebCore::MediaSourceTypeSupportedCache::singleton):
(WebCore::MediaSourceTypeSupportedCache::lookup const):
(WebCore::MediaSourceTypeSupportedCache::store):
(WebCore::MediaSourceTypeSupportedCache::initialize):
(WebCore::MediaSourceTypeSupportedCache::setCacheUpdateCallback):
* Source/WebCore/platform/graphics/MediaSourceTypeSupportedCache.h: Added.
* Source/WebKit/Shared/WebProcessCreationParameters.h:
* Source/WebKit/Shared/WebProcessCreationParameters.serialization.in:
* Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::WebProcessPool::cacheMediaSourceTypeSupported):
(WebKit::WebProcessPool::platformInitializeWebProcess):
* Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm:
(WebKit::WebProcessProxy::mediaMIMETypes):
(WebKit::WebProcessProxy::cacheMediaSourceTypeSupported):
(WebKit::WebProcessProxy::mediaMIMETypes const): Deleted.
* Source/WebKit/UIProcess/WebProcessPool.h:
* Source/WebKit/UIProcess/WebProcessProxy.h:
* Source/WebKit/UIProcess/WebProcessProxy.messages.in:
* Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::accessibilityFocusedUIElement):
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebKit/is-type-supported-perf.html: Added.
* Tools/TestWebKitAPI/Tests/WebKitCocoa/MSEIsTypeSupportedCaching.mm: Added.
(TestWebKitAPI::createWebViewWithSeparateProcess):
(TestWebKitAPI::runMeasurement):
(TestWebKitAPI::TEST(MediaSource, IsTypeSupportedCachingAcrossProcesses)):
(TestWebKitAPI::TEST(MediaSource, IsTypeSupportedConsistencyAcrossProcesses)):

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to