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