Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 80b7b85c4493d6cdc616efd9b10e2ba1914a0b17 https://github.com/WebKit/WebKit/commit/80b7b85c4493d6cdc616efd9b10e2ba1914a0b17 Author: Elliott Williams <e...@apple.com> Date: 2023-10-30 (Mon, 30 Oct 2023)
Changed paths: M Source/WTF/Scripts/GeneratePreferences.rb M Source/WTF/wtf/PlatformEnable.h M Source/WebKit/Scripts/PreferencesTemplates/WebPreferencesDefinitions.h.erb M Source/WebKit/UIProcess/API/APIFeature.cpp M Source/WebKit/UIProcess/API/APIFeature.h M Source/WebKit/UIProcess/API/APIFeatureStatus.h Log Message: ----------- Check feature flag default values at compile time https://bugs.webkit.org/show_bug.cgi?id=258041 rdar://104759188 Reviewed by Darin Adler. Feature flags which have a constant default value (true or false, not determined at runtime) can be checked statically to ensure that their default value corresponds with their feature status's implied default. First, the preferences generator emits a std::bool_constant for boolean literals when generating WebKit's feature default values. It also emits the feature's status as a constant type. Then, a new template overload to APIFeature::create() accepts a feature status constant and a std::bool_constant default value, and static-asserts that the default values match. Assertion failures contain a template instation note, so it's easy to see which feature caused the failure: In file included from /Volumes/Data/OpenSource/WebKitBuild/Debug/DerivedSources/WebKit/WebPreferencesFeatures.cpp:29: In file included from /Volumes/Data/OpenSource/Source/WebKit/UIProcess/WebPreferences.h:28: /Volumes/Data/OpenSource/Source/WebKit/UIProcess/API/APIFeature.h:48:13: error: static assertion failed due to requirement '!defaultValue': Feature's status implies it should be off by default static_assert(!defaultValue, "Feature's status implies it should be off by default"); ^ ~~~~~~~~~~~~~ /Volumes/Data/OpenSource/WebKitBuild/Debug/DerivedSources/WebKit/WebPreferencesFeatures.cpp:688:23: note: in instantiation of function template specialization 'API::Feature::create<API::FeatureStatus::Developer, true>' requested here API::Feature::create("Prefer Page Rendering Updates near 60fps"""_s, "PreferPageRenderingUpdatesNear60FPSEnabled"_s, API::FeatureConstant<API::FeatureStatus::Developer>{}, API::FeatureCategory::DOM, "Prefer page rendering updates near 60 frames per second rather than using the display's refresh rate"""_s, DEFAULT_VALUE_FOR_PreferPageRenderingUpdatesNear60FPSEnabled, false), ^ 1 error generated. This mechanism is controlled by a ENABLE(FEATURE_DEFAULT_VALIDATION) flag, which is currently only enabled on PLATFORM(MAC). * Source/WTF/Scripts/GeneratePreferences.rb: * Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml: Change the status of two features whose defaults are not aligned: - PreferPageRenderingUpdatesNear60FPSEnabled, developer -> stable: It's on by default everywhere except visionOS. - MediaSourceInlinePaintingEnabled, unstable -> stable: It's on for all Apple platforms since last year. * Source/WebKit/Scripts/PreferencesTemplates/WebPreferencesDefinitions.h.erb: * Source/WebKit/UIProcess/API/APIFeature.cpp: (API::Feature::uncheckedCreate): (API::Feature::create): Deleted. * Source/WebKit/UIProcess/API/APIFeature.h: * Source/WebKit/UIProcess/API/APIFeatureStatus.h: (API::defaultValueForFeatureStatus): Canonical link: https://commits.webkit.org/269988@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes