[webkit-changes] [WebKit/WebKit] f8b48e: Add a mechanism to filter IPC messages by feature ...
Ryosuke Niwa
noreply at github.com
Thu Jul 25 13:09:00 PDT 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: f8b48e173616feeff41c1015c5d9406dac9c2f83
https://github.com/WebKit/WebKit/commit/f8b48e173616feeff41c1015c5d9406dac9c2f83
Author: Ryosuke Niwa <rniwa at webkit.org>
Date: 2024-07-25 (Thu, 25 Jul 2024)
Changed paths:
M Source/WTF/Scripts/GeneratePreferences.rb
M Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
M Source/WebKit/CMakeLists.txt
M Source/WebKit/DerivedSources-input.xcfilelist
M Source/WebKit/DerivedSources-output.xcfilelist
M Source/WebKit/DerivedSources.make
M Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp
M Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h
M Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in
M Source/WebKit/GPUProcess/GPUProcess.cpp
M Source/WebKit/GPUProcess/GPUProcess.h
M Source/WebKit/GPUProcess/GPUProcess.messages.in
A Source/WebKit/Scripts/PreferencesTemplates/SharedPreferencesForWebProcess.cpp.erb
A Source/WebKit/Scripts/PreferencesTemplates/SharedPreferencesForWebProcess.h.erb
A Source/WebKit/Scripts/PreferencesTemplates/SharedPreferencesForWebProcess.serialization.in.erb
M Source/WebKit/Scripts/webkit/parser.py
M Source/WebKit/Shared/GPUProcessConnectionParameters.h
M Source/WebKit/Shared/GPUProcessConnectionParameters.serialization.in
R Source/WebKit/Shared/GPUProcessPreferencesForWebProcess.h
R Source/WebKit/Shared/GPUProcessPreferencesForWebProcess.serialization.in
M Source/WebKit/UIProcess/API/APIPageConfiguration.cpp
M Source/WebKit/UIProcess/API/APIPageConfiguration.h
M Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
M Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp
M Source/WebKit/UIProcess/GPU/GPUProcessProxy.h
M Source/WebKit/UIProcess/WebPageProxy.cpp
M Source/WebKit/UIProcess/WebPageProxy.h
M Source/WebKit/UIProcess/WebProcessProxy.cpp
M Source/WebKit/UIProcess/WebProcessProxy.h
M Source/WebKit/UIProcess/WebProcessProxy.messages.in
M Source/WebKit/WebKit.xcodeproj/project.pbxproj
M Source/WebKit/WebProcess/WebPage/WebPage.cpp
M Source/WebKit/WebProcess/WebPage/WebPage.h
M Source/WebKit/WebProcess/WebPage/WebPage.messages.in
Log Message:
-----------
Add a mechanism to filter IPC messages by feature flags
https://bugs.webkit.org/show_bug.cgi?id=276415
Reviewed by Chris Dumez.
This PR adds a filtering mechanism for IPC messages based on which features are enabled at runtime.
To do this, this PR adds the code to generate SharedPreferencesForWebProcess.h/cpp/serialization.in,
which consists of a simple struct with a bunch of booleans indicating which preference is enabled
in a given WebContent process. UnifiedWebPreferences.yaml is now annotated with
"sharedPreferenceForWebProcess" flag per preference, and messages.in files now support "EnabledBy=X"
attribute which filters IPC messages by the preferences.
The set of preferences for a given WebContent process is synchronized at the time of constructing
GPUConnectionToWebProcess as a part of GPUProcessConnectionParameters, and updated via
GPUProcessProxy::filteringDidChangeForWebProcess. Because multiple WebPageProxy can share a single
WebContent process, the set is the union of all preferences enabled across those pages.
When a preference is updated, WebPageProxy::preferencesDidChange calls WebProcessProxy's
updateSharedPreferencesForWebProcess, which in turn determines if the shared preferences for this
WebProcessProxy has changed or not. If it did, it returns the updated SharedPreferencesForWebProcess,
which is then relayed to the GPU process via GPUProcess::sharedPreferencesForWebProcessDidChange.
Finally, WebPage::preferencesDidChange in WebProcess synchronously waits for
SharedPreferencesForWebProcess to be propagated to the GPU process. For this purpose,
each SharedPreferencesForWebProcessDidChange contains a uint64_t version, which gets incremented
whenever the preferences is updated.
* Source/WTF/Scripts/GeneratePreferences.rb:
* Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml:
* Source/WebKit/CMakeLists.txt:
* Source/WebKit/DerivedSources-input.xcfilelist:
* Source/WebKit/DerivedSources-output.xcfilelist:
* Source/WebKit/DerivedSources.make:
* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp:
(WebKit::m_sharedPreferencesForWebProcess):
(WebKit::GPUConnectionToWebProcess::allowsExitUnderMemoryPressure const):
(WebKit::GPUConnectionToWebProcess::createGPU):
(WebKit::m_preferences): Deleted.
* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h:
(WebKit::GPUConnectionToWebProcess::sharedPreferencesForWebProcess const):
(WebKit::GPUConnectionToWebProcess::updateSharedPreferencesForWebProcess):
(WebKit::GPUConnectionToWebProcess::isWebXREnabled const):
(WebKit::GPUConnectionToWebProcess::isDynamicContentScalingEnabled const):
(WebKit::GPUConnectionToWebProcess::isWebGPUEnabled const): Deleted.
(WebKit::GPUConnectionToWebProcess::isWebGLEnabled const): Deleted.
* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in:
* Source/WebKit/GPUProcess/GPUProcess.cpp:
(WebKit::GPUProcess::sharedPreferencesForWebProcessDidChange):
* Source/WebKit/GPUProcess/GPUProcess.h:
* Source/WebKit/GPUProcess/GPUProcess.messages.in:
* Source/WebKit/Scripts/PreferencesTemplates/SharedPreferencesForWebProcess.cpp.erb: Added.
* Source/WebKit/Scripts/PreferencesTemplates/SharedPreferencesForWebProcess.h.erb: Added.
* Source/WebKit/Scripts/PreferencesTemplates/SharedPreferencesForWebProcess.serialization.in.erb: Added.
* Source/WebKit/Scripts/webkit/parser.py:
(parse):
* Source/WebKit/Shared/GPUProcessConnectionParameters.h:
* Source/WebKit/Shared/GPUProcessConnectionParameters.serialization.in:
* Source/WebKit/Shared/GPUProcessPreferencesForWebProcess.serialization.in: Removed.
* Source/WebKit/UIProcess/API/APIPageConfiguration.cpp:
(API::PageConfiguration::preferencesForGPUProcess const): Deleted.
* Source/WebKit/UIProcess/API/APIPageConfiguration.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _setupPageConfiguration:]):
* Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp:
(WebKit::GPUProcessProxy::sharedPreferencesForWebProcessDidChange):
* Source/WebKit/UIProcess/GPU/GPUProcessProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::hasSameGPUAndNetworkProcessPreferencesAs const):
(WebKit::WebPageProxy::preferencesDidChange):
(WebKit::WebPageProxy::preferencesForGPUProcess const): Deleted.
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::~WebProcessProxy):
(WebKit::WebProcessProxy::initializePreferencesForGPUAndNetworkProcesses):
(WebKit::WebProcessProxy::hasSameGPUAndNetworkProcessPreferencesAs const):
(WebKit::WebProcessProxy::createGPUProcessConnection):
(WebKit::WebProcessProxy::updateSharedPreferencesForWebProcess):
(WebKit::WebProcessProxy::didSyncSharedPreferencesForWebProcess):
(WebKit::WebProcessProxy::waitForSharedPreferencesForWebProcessToSync):
* Source/WebKit/UIProcess/WebProcessProxy.h:
(WebKit::WebProcessProxy::sharedPreferencesForWebProcess const):
(WebKit::WebProcessProxy::preferencesForGPUProcess const): Deleted.
* Source/WebKit/UIProcess/WebProcessProxy.messages.in:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::preferencesDidChange):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
(WebKit::WebPage::preferencesDidChangeDuringDOMPrintOperation):
* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:
Canonical link: https://commits.webkit.org/281360@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list