Diff
Modified: trunk/ChangeLog (292869 => 292870)
--- trunk/ChangeLog 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/ChangeLog 2022-04-14 15:56:44 UTC (rev 292870)
@@ -1,3 +1,13 @@
+2022-04-14 Justin Michaud <justin_mich...@apple.com>
+
+ [PGO] We should be able to build WebKit to collect PGO profiles easily
+ https://bugs.webkit.org/show_bug.cgi?id=238776
+
+ Reviewed by Wenson Hsieh.
+
+ * Makefile.shared:
+ * Source/cmake/WebKitFeatures.cmake:
+
2022-04-14 Zan Dobersek <zdober...@igalia.com>
[GTK][WPE] Make the ENABLE_GPU_PROCESS CMake option depend on USE_ANGLE_WEBGL
Modified: trunk/Makefile.shared (292869 => 292870)
--- trunk/Makefile.shared 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Makefile.shared 2022-04-14 15:56:44 UTC (rev 292870)
@@ -1,6 +1,9 @@
SCRIPTS_PATH ?= ../Tools/Scripts
XCODE_OPTIONS = `perl -I$(SCRIPTS_PATH) -Mwebkitdirs -e 'print XcodeOptionString()' -- $(BUILD_WEBKIT_OPTIONS)` $${COLOR_DIAGNOSTICS_ARG} $(ARGS)
+ifeq (ON,$(ENABLE_LLVM_PROFILE_GENERATION))
+ XCODE_OPTIONS += ENABLE_LLVM_PROFILE_GENERATION=ENABLE_LLVM_PROFILE_GENERATION
+endif
ifeq ($(USE_WORKSPACE),YES)
SCHEME ?= $(notdir $(CURDIR))
Modified: trunk/Source/_javascript_Core/ChangeLog (292869 => 292870)
--- trunk/Source/_javascript_Core/ChangeLog 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/_javascript_Core/ChangeLog 2022-04-14 15:56:44 UTC (rev 292870)
@@ -1,3 +1,14 @@
+2022-04-14 Justin Michaud <justin_mich...@apple.com>
+
+ [PGO] We should be able to build WebKit to collect PGO profiles easily
+ https://bugs.webkit.org/show_bug.cgi?id=238776
+
+ Reviewed by Wenson Hsieh.
+
+ * Configurations/_javascript_Core.xcconfig:
+ * runtime/VM.cpp:
+ (JSC::VM::VM):
+
2022-04-13 Chris Dumez <cdu...@apple.com>
Replace calls to substring(0, x) with the more concise left(x)
Modified: trunk/Source/_javascript_Core/Configurations/_javascript_Core.xcconfig (292869 => 292870)
--- trunk/Source/_javascript_Core/Configurations/_javascript_Core.xcconfig 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/_javascript_Core/Configurations/_javascript_Core.xcconfig 2022-04-14 15:56:44 UTC (rev 292870)
@@ -31,7 +31,7 @@
OTHER_LDFLAGS_BASE = $(OTHER_LDFLAGS_HIDE_SYMBOLS) -force_load "$(WTF_ARCHIVE)" $(SOURCE_VERSION_LDFLAGS);
OTHER_LDFLAGS[sdk=embedded*] = $(inherited) $(OTHER_LDFLAGS_BASE);
-OTHER_LDFLAGS[sdk=macosx*] = $(inherited) $(OTHER_LDFLAGS_BASE) -framework CoreServices;
+OTHER_LDFLAGS[sdk=macosx*] = $(inherited) $(OTHER_LDFLAGS_BASE) -framework CoreServices $(PROFILE_GENERATE_OR_USE_LDFLAGS);
WTF_ARCHIVE = $(BUILT_PRODUCTS_DIR)/libWTF.a;
WTF_ARCHIVE[config=Production] = $(SDK_DIR)$(WK_ALTERNATE_WEBKIT_SDK_PATH)/usr/local/lib/libWTF.a;
@@ -40,6 +40,8 @@
SECTORDER_FLAGS_Production[sdk=iphoneos*] = -Wl,-order_file,$(SDKROOT)/AppleInternal/OrderFiles/_javascript_Core.order;
SECTORDER_FLAGS_Production[sdk=macosx*] = -Wl,-order_file,_javascript_Core.order;
+PROFILE_DATA_FLAGS_ENABLED = -fprofile-instr-use=$(BUILT_PRODUCTS_DIR)/DerivedSources/_javascript_Core/_javascript_Core.profdata;
+
PROFILE_DATA_FLAGS = $(PROFILE_DATA_FLAGS_$(CONFIGURATION)_$(WK_PLATFORM_NAME));
PROFILE_DATA_FLAGS_Release_macosx = $(PROFILE_DATA_FLAGS_Release_macosx$(WK_MACOS_1200));
PROFILE_DATA_FLAGS_Release_macosx_MACOS_SINCE_1200 = $(PROFILE_DATA_FLAGS_ENABLED);
@@ -47,12 +49,17 @@
PROFILE_DATA_FLAGS_Production_macosx = $(PROFILE_DATA_FLAGS_Production_macosx$(WK_MACOS_1200));
PROFILE_DATA_FLAGS_Production_macosx_MACOS_SINCE_1200 = $(PROFILE_DATA_FLAGS_ENABLED);
PROFILE_DATA_FLAGS_Production_iphoneos = $(PROFILE_DATA_FLAGS_ENABLED);
-PROFILE_DATA_FLAGS_ENABLED = -fprofile-instr-use=$(BUILT_PRODUCTS_DIR)/DerivedSources/_javascript_Core/_javascript_Core.profdata;
+PROFILE_GENERATE_OR_USE_CFLAGS_ENABLE_LLVM_PROFILE_GENERATION = -fprofile-instr-generate -DENABLE_LLVM_PROFILE_GENERATION=1;
+PROFILE_GENERATE_OR_USE_CFLAGS_ = $(PROFILE_DATA_FLAGS);
+PROFILE_GENERATE_OR_USE_CFLAGS = $(PROFILE_GENERATE_OR_USE_CFLAGS_$(ENABLE_LLVM_PROFILE_GENERATION));
+PROFILE_GENERATE_OR_USE_LDFLAGS_ENABLE_LLVM_PROFILE_GENERATION = -fprofile-instr-generate -DENABLE_LLVM_PROFILE_GENERATION=1;
+PROFILE_GENERATE_OR_USE_LDFLAGS = $(PROFILE_GENERATE_OR_USE_LDFLAGS_$(ENABLE_LLVM_PROFILE_GENERATION));
+
GCC_PREFIX_HEADER = _javascript_CorePrefix.h;
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
-OTHER_CFLAGS = $(inherited) -fno-slp-vectorize --system-header-prefix=unicode/ -D__STDC_WANT_LIB_EXT1__=1 $(PROFILE_DATA_FLAGS);
-OTHER_CPLUSPLUSFLAGS = $(inherited) -fno-slp-vectorize --system-header-prefix=unicode/ $(PROFILE_DATA_FLAGS);
+OTHER_CFLAGS = $(inherited) -fno-slp-vectorize --system-header-prefix=unicode/ -D__STDC_WANT_LIB_EXT1__=1 $(PROFILE_GENERATE_OR_USE_CFLAGS);
+OTHER_CPLUSPLUSFLAGS = $(inherited) -fno-slp-vectorize --system-header-prefix=unicode/ $(PROFILE_GENERATE_OR_USE_CFLAGS);
HEADER_SEARCH_PATHS = "${BUILT_PRODUCTS_DIR}/DerivedSources/_javascript_Core" $(HEADER_SEARCH_PATHS);
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = $(INSTALL_PATH_PREFIX)$(_javascript_CORE_FRAMEWORKS_DIR);
Modified: trunk/Source/_javascript_Core/runtime/InitializeThreading.cpp (292869 => 292870)
--- trunk/Source/_javascript_Core/runtime/InitializeThreading.cpp 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/_javascript_Core/runtime/InitializeThreading.cpp 2022-04-14 15:56:44 UTC (rev 292870)
@@ -44,6 +44,7 @@
#include "WasmFaultSignalHandler.h"
#include "WasmThunks.h"
#include <mutex>
+#include <wtf/GenerateProfiles.h>
#include <wtf/Threading.h>
#include <wtf/threads/Signals.h>
@@ -51,6 +52,8 @@
static_assert(sizeof(bool) == 1, "LLInt and JIT assume sizeof(bool) is always 1 when touching it directly from assembly code.");
+enum class JSCProfileTag { };
+
void initialize()
{
static std::once_flag onceFlag;
@@ -115,6 +118,8 @@
WTF::compilerFence();
RELEASE_ASSERT(!g_jscConfig.initializeHasBeenCalled);
g_jscConfig.initializeHasBeenCalled = true;
+
+ WTF::registerProfileGenerationCallback<JSCProfileTag>("_javascript_Core");
});
}
Modified: trunk/Source/WTF/ChangeLog (292869 => 292870)
--- trunk/Source/WTF/ChangeLog 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WTF/ChangeLog 2022-04-14 15:56:44 UTC (rev 292870)
@@ -1,3 +1,25 @@
+2022-04-14 Justin Michaud <justin_mich...@apple.com>
+
+ [PGO] We should be able to build WebKit to collect PGO profiles easily
+ https://bugs.webkit.org/show_bug.cgi?id=238776
+
+ Reviewed by Wenson Hsieh.
+
+ Build WebKit as follows: make release WK_LTO_MODE=thin ENABLE_LLVM_PROFILE_GENERATION=ON
+ Then, follow the directions in the log output at runtime to collect your raw PGO profiles!
+
+ We add a new compile flag plus WTF::registerProfileGenerationCallback, allowing llvm profiles
+ to be collected by sending a notifyutil signal. The files are written to the temp directory,
+ and it seems like the sandbox permits this by default. You may need to disable the sandbox if
+ you encounter issues, either by editing the *.sb files or by using an inserted dylib to interpose
+ the sandbox initialization calls.
+
+ * WTF.xcodeproj/project.pbxproj:
+ * wtf/CMakeLists.txt:
+ * wtf/GenerateProfiles.h: Added.
+ (WTF::registerProfileGenerationCallback):
+ * wtf/PlatformEnable.h:
+
2022-04-14 Zan Dobersek <zdober...@igalia.com>
[WK2] Enable more efficient encoding of synchronous-message reply arguments
Modified: trunk/Source/WTF/WTF.xcodeproj/project.pbxproj (292869 => 292870)
--- trunk/Source/WTF/WTF.xcodeproj/project.pbxproj 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WTF/WTF.xcodeproj/project.pbxproj 2022-04-14 15:56:44 UTC (rev 292870)
@@ -81,6 +81,7 @@
5CC0EE892162BC2200A1A842 /* URLCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CC0EE862162BC2200A1A842 /* URLCocoa.mm */; };
5CC0EE8A2162BC2200A1A842 /* NSURLExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CC0EE882162BC2200A1A842 /* NSURLExtras.mm */; };
5FAD3AE221B9636600BEE178 /* URLHelpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5FAD3AE121B9636600BEE178 /* URLHelpers.cpp */; };
+ 641C2E5B27FBAAA5002E0814 /* GenerateProfiles.h in Headers */ = {isa = PBXBuildFile; fileRef = 641C2E5A27FBAAA5002E0814 /* GenerateProfiles.h */; settings = {ATTRIBUTES = (Private, ); }; };
70A993FE1AD7151300FA615B /* SymbolRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70A993FC1AD7151300FA615B /* SymbolRegistry.cpp */; };
70ECA60D1B02426800449739 /* AtomStringImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70ECA60A1B02426800449739 /* AtomStringImpl.cpp */; };
7A05093F1FB9DCC500B33FB8 /* JSONValues.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A05093E1FB9DCC500B33FB8 /* JSONValues.cpp */; };
@@ -1137,6 +1138,7 @@
5D247B7314689C4700E78B76 /* WTF.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = WTF.xcconfig; sourceTree = "<group>"; };
5FAD3AE021B9636600BEE178 /* URLHelpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = URLHelpers.h; sourceTree = "<group>"; };
5FAD3AE121B9636600BEE178 /* URLHelpers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = URLHelpers.cpp; sourceTree = "<group>"; };
+ 641C2E5A27FBAAA5002E0814 /* GenerateProfiles.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GenerateProfiles.h; sourceTree = "<group>"; };
70A993FC1AD7151300FA615B /* SymbolRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SymbolRegistry.cpp; sourceTree = "<group>"; };
70A993FD1AD7151300FA615B /* SymbolRegistry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SymbolRegistry.h; sourceTree = "<group>"; };
70ECA60A1B02426800449739 /* AtomStringImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AtomStringImpl.cpp; sourceTree = "<group>"; };
@@ -1994,6 +1996,7 @@
1A1D8B9D1731879800141DA4 /* FunctionDispatcher.cpp */,
1A1D8B9B173186CE00141DA4 /* FunctionDispatcher.h */,
53F1D98620477B9800EBC6BF /* FunctionTraits.h */,
+ 641C2E5A27FBAAA5002E0814 /* GenerateProfiles.h */,
E3FD6D6627A1F6AD00935000 /* GenericHashKey.h */,
E3831F922703101A00EF5EB3 /* GenericTimeMixin.h */,
A8A472A8151A825A004123FF /* GetPtr.h */,
@@ -2920,6 +2923,7 @@
DD3DC94E27A4BF8E007E5B61 /* FunctionTraits.h in Headers */,
DDF3080227C08A77006A526F /* generate-unified-source-bundles.rb in Headers */,
DDF3080327C08A77006A526F /* GeneratePreferences.rb in Headers */,
+ 641C2E5B27FBAAA5002E0814 /* GenerateProfiles.h in Headers */,
DDCAF31D27B1E7C500C45308 /* GenericHashKey.h in Headers */,
DD3DC93127A4BF8E007E5B61 /* GenericTimeMixin.h in Headers */,
DD3DC94727A4BF8E007E5B61 /* GetPtr.h in Headers */,
Modified: trunk/Source/WTF/wtf/CMakeLists.txt (292869 => 292870)
--- trunk/Source/WTF/wtf/CMakeLists.txt 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WTF/wtf/CMakeLists.txt 2022-04-14 15:56:44 UTC (rev 292870)
@@ -82,6 +82,7 @@
Function.h
FunctionDispatcher.h
FunctionTraits.h
+ GenerateProfiles.h
GenericHashKey.h
GenericTimeMixin.h
GetPtr.h
Added: trunk/Source/WTF/wtf/GenerateProfiles.h (0 => 292870)
--- trunk/Source/WTF/wtf/GenerateProfiles.h (rev 0)
+++ trunk/Source/WTF/wtf/GenerateProfiles.h 2022-04-14 15:56:44 UTC (rev 292870)
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2022 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(LLVM_PROFILE_GENERATION)
+#include "FileSystem.h"
+#include "MonotonicTime.h"
+#include "text/WTFString.h"
+#include <notify.h>
+#include <unistd.h>
+
+extern "C" uint64_t __llvm_profile_get_size_for_buffer();
+extern "C" int __llvm_profile_write_buffer(char *);
+extern "C" void __llvm_profile_reset_counters(void);
+
+#endif
+
+namespace WTF {
+
+template<typename OnceFlagDiversifier>
+ALWAYS_INLINE void registerProfileGenerationCallback(const char* name)
+{
+#if ENABLE(LLVM_PROFILE_GENERATION)
+ static std::once_flag registerFlag;
+ std::call_once(registerFlag, [name] {
+ WTFLogAlways("<WEBKIT_LLVM_PROFILE><%s><%d><0>: Registering callback for profile data.", name, getpid());
+ WTFLogAlways("<WEBKIT_LLVM_PROFILE> To collect a profile: `notifyutil -p com.apple.WebKit.profiledata`");
+ WTFLogAlways("<WEBKIT_LLVM_PROFILE> To copy the output: `"
+ R"HERE(log stream --style json --color none | perl -mFile::Basename -mFile::Copy -nle 'if (m/<WEBKIT_LLVM_PROFILE>.*<BEGIN>(.*)<END>/) { (my $l = $1) =~ s/\\\//\//g; my $b = File::Basename::basename($l); my $d = "./profiles/$b"; print "Moving $l to $d"; File::Copy::move($l, $d); }')HERE"
+ "`.");
+ WTFLogAlways("<WEBKIT_LLVM_PROFILE> To sanity-check the output: `for f in ./profiles/*; do echo $f; xcrun -sdk macosx.internal llvm-profdata show $f; done;`.");
+ int token;
+ notify_register_dispatch("com.apple.WebKit.profiledata", &token, dispatch_get_main_queue(), ^(int) {
+ int pid = getpid();
+ int64_t time = MonotonicTime::now().secondsSinceEpoch().milliseconds();
+
+ auto bufferSize = __llvm_profile_get_size_for_buffer();
+ WTFLogAlways("<WEBKIT_LLVM_PROFILE><%s><%d><%lld>: LLVM collected %llu bytes of profile data.",
+ name, pid, time, bufferSize);
+
+ auto* buffer = static_cast<char*>(calloc(sizeof(char), bufferSize));
+ __llvm_profile_write_buffer(buffer);
+
+ String fileName(String::fromUTF8(name) + "-" + pid + "-" + time + "-");
+
+ FileSystem::PlatformFileHandle fileHandle;
+ auto filePath = FileSystem::openTemporaryFile(fileName, fileHandle, ".profraw");
+ size_t bytesWritten = FileSystem::writeToFile(fileHandle, reinterpret_cast<const void*>(buffer), bufferSize);
+
+ WTFLogAlways("<WEBKIT_LLVM_PROFILE><%s><%d><%lld>: Wrote %zu bytes to file <BEGIN>%s<END>.",
+ name, pid, time, bytesWritten, filePath.utf8().data());
+
+ FileSystem::closeFile(fileHandle);
+ free(buffer);
+ __llvm_profile_reset_counters();
+ });
+ });
+#else
+ UNUSED_PARAM(name);
+#endif
+}
+
+} // namespace WTF
Modified: trunk/Source/WTF/wtf/PlatformEnable.h (292869 => 292870)
--- trunk/Source/WTF/wtf/PlatformEnable.h 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WTF/wtf/PlatformEnable.h 2022-04-14 15:56:44 UTC (rev 292870)
@@ -351,6 +351,10 @@
#define ENABLE_LAYOUT_FORMATTING_CONTEXT 0
#endif
+#if !defined(ENABLE_LLVM_PROFILE_GENERATION)
+#define ENABLE_LLVM_PROFILE_GENERATION 0
+#endif
+
#if !defined(ENABLE_MATHML)
#define ENABLE_MATHML 1
#endif
Modified: trunk/Source/WebCore/ChangeLog (292869 => 292870)
--- trunk/Source/WebCore/ChangeLog 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebCore/ChangeLog 2022-04-14 15:56:44 UTC (rev 292870)
@@ -1,3 +1,15 @@
+2022-04-14 Justin Michaud <justin_mich...@apple.com>
+
+ [PGO] We should be able to build WebKit to collect PGO profiles easily
+ https://bugs.webkit.org/show_bug.cgi?id=238776
+
+ Reviewed by Wenson Hsieh.
+
+ * Configurations/WebCore.xcconfig:
+ * Configurations/WebCoreTestSupport.xcconfig:
+ * page/Frame.cpp:
+ (WebCore::Frame::Frame):
+
2022-04-14 Kate Cheney <katherine_che...@apple.com>
WKWebView: navigator.serviceWorker.register method fails for a new version of an already registered service worker.
Modified: trunk/Source/WebCore/Configurations/WebCore.xcconfig (292869 => 292870)
--- trunk/Source/WebCore/Configurations/WebCore.xcconfig 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebCore/Configurations/WebCore.xcconfig 2022-04-14 15:56:44 UTC (rev 292870)
@@ -29,6 +29,8 @@
GCC_PREFIX_HEADER = WebCorePrefix.h;
GCC_PREPROCESSOR_DEFINITIONS = $(DEBUG_DEFINES) BUILDING_WEBKIT GL_SILENCE_DEPRECATION=1 GLES_SILENCE_DEPRECATION=1 $(inherited);
+PROFILE_DATA_FLAGS_ENABLED = -fprofile-instr-use=$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/WebCore.profdata;
+
PROFILE_DATA_FLAGS = $(PROFILE_DATA_FLAGS_$(CONFIGURATION)_$(WK_PLATFORM_NAME));
PROFILE_DATA_FLAGS_Release_macosx = $(PROFILE_DATA_FLAGS_Release_macosx$(WK_MACOS_1200));
PROFILE_DATA_FLAGS_Release_macosx_MACOS_SINCE_1200 = $(PROFILE_DATA_FLAGS_ENABLED);
@@ -36,10 +38,15 @@
PROFILE_DATA_FLAGS_Production_macosx = $(PROFILE_DATA_FLAGS_Production_macosx$(WK_MACOS_1200));
PROFILE_DATA_FLAGS_Production_macosx_MACOS_SINCE_1200 = $(PROFILE_DATA_FLAGS_ENABLED);
PROFILE_DATA_FLAGS_Production_iphoneos = $(PROFILE_DATA_FLAGS_ENABLED);
-PROFILE_DATA_FLAGS_ENABLED = -fprofile-instr-use=$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/WebCore.profdata;
-OTHER_CFLAGS = $(inherited) $(PROFILE_DATA_FLAGS);
+PROFILE_GENERATE_OR_USE_CFLAGS_ENABLE_LLVM_PROFILE_GENERATION = -fprofile-instr-generate -DENABLE_LLVM_PROFILE_GENERATION=1;
+PROFILE_GENERATE_OR_USE_CFLAGS_ = $(PROFILE_DATA_FLAGS);
+PROFILE_GENERATE_OR_USE_CFLAGS = $(PROFILE_GENERATE_OR_USE_CFLAGS_$(ENABLE_LLVM_PROFILE_GENERATION));
+PROFILE_GENERATE_OR_USE_LDFLAGS_ENABLE_LLVM_PROFILE_GENERATION = -fprofile-instr-generate -DENABLE_LLVM_PROFILE_GENERATION=1;
+PROFILE_GENERATE_OR_USE_LDFLAGS = $(PROFILE_GENERATE_OR_USE_LDFLAGS_$(ENABLE_LLVM_PROFILE_GENERATION));
+OTHER_CFLAGS = $(inherited) $(PROFILE_GENERATE_OR_USE_CFLAGS);
+
WK_PRIVATE_FRAMEWORKS_DIR = $(WK_PRIVATE_FRAMEWORKS_DIR_$(USE_INTERNAL_SDK));
WK_PRIVATE_FRAMEWORKS_DIR_[sdk=macos*] = $(PROJECT_DIR)/../../WebKitLibraries/WebKitPrivateFrameworkStubs/Mac/$(TARGET_MAC_OS_X_VERSION_MAJOR);
WK_PRIVATE_FRAMEWORKS_DIR_[sdk=iphone*] = $(PROJECT_DIR)/../../WebKitLibraries/WebKitPrivateFrameworkStubs/iOS/$(WK_TARGET_IOS_VERSION_MAJOR);
@@ -171,10 +178,10 @@
WK_SCENEKIT_LDFLAGS_macosx = -weak_framework SceneKit;
// FIXME: Reduce the number of allowable_clients <rdar://problem/31823969>
-OTHER_LDFLAGS = $(inherited) $(WK_RELOCATABLE_FRAMEWORK_LDFLAGS) -lsqlite3 -lobjc -allowable_client WebCoreTestSupport -allowable_client WebKitLegacy -force_load $(BUILT_PRODUCTS_DIR)/libPAL.a -framework CFNetwork -framework CoreAudio -framework CoreGraphics -framework CoreText -framework Foundation -framework IOSurface -framework ImageIO -framework Metal $(OTHER_LDFLAGS_PLATFORM_$(WK_COCOA_TOUCH)) $(OTHER_LDFLAGS_PLATFORM_$(WK_PLATFORM_NAME)) $(WK_ANGLE_LDFLAGS) $(WK_WEBGPU_LDFLAGS) $(WK_APPKIT_LDFLAGS) $(WK_APPSUPPORT_LDFLAGS) $(WK_AUDIO_UNIT_LDFLAGS) $(WK_CARBON_LDFLAGS) $(WK_CORE_UI_LDFLAGS) $(WK_DATA_DETECTORS_CORE_LDFLAGS) $(WK_GRAPHICS_SERVICES_LDFLAGS) $(WK_IOSURFACE_ACCELERATOR_LDFLAGS) $(WK_LIBWEBRTC_LDFLAGS) $(WK_MOBILE_CORE_SERVICES_LDFLAGS) $(WK_MOBILE_GESTALT_LDFLAGS) $(WK_NETWORK_EXTENSION_LDFLAGS) $(WK_SYSTEM_CONFIGURATION_LDFLAGS) $(WK_CORE_IMAGE_LDFLAGS) $(WK_URL_FORMATTING_LDFLAGS) $(WK_SCENEKIT_LDFLAGS) $(SOURCE_VERSION_LDFLAGS);
+OTHER_LDFLAGS = $(inherited) $(WK_RELOCATABLE_FRAMEWORK_LDFLAGS) -lsqlite3 -lobjc -allowable_client WebCoreTestSupport -allowable_client WebKitLegacy -force_load $(BUILT_PRODUCTS_DIR)/libPAL.a -framework CFNetwork -framework CoreAudio -framework CoreGraphics -framework CoreText -framework Foundation -framework IOSurface -framework ImageIO -framework Metal $(OTHER_LDFLAGS_PLATFORM_$(WK_COCOA_TOUCH)) $(OTHER_LDFLAGS_PLATFORM_$(WK_PLATFORM_NAME)) $(WK_ANGLE_LDFLAGS) $(WK_WEBGPU_LDFLAGS) $(WK_APPKIT_LDFLAGS) $(WK_APPSUPPORT_LDFLAGS) $(WK_AUDIO_UNIT_LDFLAGS) $(WK_CARBON_LDFLAGS) $(WK_CORE_UI_LDFLAGS) $(WK_DATA_DETECTORS_CORE_LDFLAGS) $(WK_GRAPHICS_SERVICES_LDFLAGS) $(WK_IOSURFACE_ACCELERATOR_LDFLAGS) $(WK_LIBWEBRTC_LDFLAGS) $(WK_MOBILE_CORE_SERVICES_LDFLAGS) $(WK_MOBILE_GESTALT_LDFLAGS) $(WK_NETWORK_EXTENSION_LDFLAGS) $(WK_SYSTEM_CONFIGURATION_LDFLAGS) $(WK_CORE_IMAGE_LDFLAGS) $(WK_URL_FORMATTING_LDFLAGS) $(WK_SCENEKIT_LDFLAGS) $(SOURCE_VERSION_LDFLAGS) $(PROFILE_GENERATE_OR_U
SE_LDFLAGS);
OTHER_LDFLAGS_PLATFORM_cocoatouch = -allowable_client WebKit -allowable_client iTunesU -allowable_client Casablanca -allowable_client Remote -allowable_client TVBooks -allowable_client DumpRenderTree -allowable_client WebKitTestRunner -allowable_client TestWebKitAPI;
-OTHER_LDFLAGS_PLATFORM_macosx = -sub_library libobjc -umbrella WebKit;
+OTHER_LDFLAGS_PLATFORM_macosx = -sub_library libobjc -umbrella WebKit $(PROFILE_GENERATE_OR_USE_LDFLAGS);
SECTORDER_FLAGS = $(SECTORDER_FLAGS_$(CONFIGURATION));
SECTORDER_FLAGS_Production[sdk=iphoneos*] = -Wl,-order_file,$(SDKROOT)/AppleInternal/OrderFiles/WebCore.order;
Modified: trunk/Source/WebCore/Configurations/WebCoreTestSupport.xcconfig (292869 => 292870)
--- trunk/Source/WebCore/Configurations/WebCoreTestSupport.xcconfig 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebCore/Configurations/WebCoreTestSupport.xcconfig 2022-04-14 15:56:44 UTC (rev 292870)
@@ -64,6 +64,7 @@
OTHER_LDFLAGS = $(ASAN_OTHER_LDFLAGS) $(ANGLE_LDFLAGS) -framework Metal $(SOURCE_VERSION_LDFLAGS);
OTHER_LDFLAGS[sdk=macos*] = $(ASAN_OTHER_LDFLAGS) -framework AppKit -framework Metal $(ANGLE_LDFLAGS) $(LIBWEBRTC_LDFLAGS) $(SOURCE_VERSION_LDFLAGS);
+PROFILE_GENERATE_OR_USE_CFLAGS_ENABLE_LLVM_PROFILE_GENERATION = ; // Disable PGO profile generation
OTHER_LDFLAGS[sdk=iphone*] = $(ASAN_OTHER_LDFLAGS) -lAccessibility -framework CoreText -framework Metal $(ANGLE_LDFLAGS) $(LIBWEBRTC_LDFLAGS) $(SOURCE_VERSION_LDFLAGS);
SECT_ORDER_FLAGS = ;
Modified: trunk/Source/WebCore/bindings/js/ScriptController.cpp (292869 => 292870)
--- trunk/Source/WebCore/bindings/js/ScriptController.cpp 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebCore/bindings/js/ScriptController.cpp 2022-04-14 15:56:44 UTC (rev 292870)
@@ -74,6 +74,7 @@
#include <_javascript_Core/StrongInlines.h>
#include <_javascript_Core/WeakGCMapInlines.h>
#include <_javascript_Core/WebAssemblyModuleRecord.h>
+#include <wtf/GenerateProfiles.h>
#include <wtf/SetForScope.h>
#include <wtf/SharedTask.h>
#include <wtf/Threading.h>
@@ -84,6 +85,8 @@
namespace WebCore {
using namespace JSC;
+enum class WebCoreProfileTag { };
+
void ScriptController::initializeMainThread()
{
#if !PLATFORM(IOS_FAMILY)
@@ -91,6 +94,7 @@
WTF::initializeMainThread();
WebCore::populateJITOperations();
#endif
+ WTF::registerProfileGenerationCallback<WebCoreProfileTag>("WebCore");
}
ScriptController::ScriptController(Frame& frame)
Modified: trunk/Source/WebKit/ChangeLog (292869 => 292870)
--- trunk/Source/WebKit/ChangeLog 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebKit/ChangeLog 2022-04-14 15:56:44 UTC (rev 292870)
@@ -1,3 +1,19 @@
+2022-04-14 Justin Michaud <justin_mich...@apple.com>
+
+ [PGO] We should be able to build WebKit to collect PGO profiles easily
+ https://bugs.webkit.org/show_bug.cgi?id=238776
+
+ Reviewed by Wenson Hsieh.
+
+ * Configurations/BaseTarget.xcconfig:
+ * Configurations/WebKit.xcconfig:
+ * GPUProcess/mac/GPUProcessMac.mm:
+ (WebKit::GPUProcess::initializeProcess):
+ * NetworkProcess/mac/NetworkProcessMac.mm:
+ (WebKit::NetworkProcess::initializeProcess):
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::m_appHighlightsVisible):
+
2022-04-14 Youenn Fablet <you...@apple.com>
REGRESSION (249029@main): http/wpt/cache-storage/cache-storage-networkprocess-crash.html is a flaky CRASH with ASSERTION FAILED: m_pageMap.isEmpty()
Modified: trunk/Source/WebKit/Configurations/BaseTarget.xcconfig (292869 => 292870)
--- trunk/Source/WebKit/Configurations/BaseTarget.xcconfig 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebKit/Configurations/BaseTarget.xcconfig 2022-04-14 15:56:44 UTC (rev 292870)
@@ -50,6 +50,8 @@
HEADER_SEARCH_PATHS = $(ALTERNATE_HEADER_SEARCH_PATHS) $(BUILT_PRODUCTS_DIR)/usr/local/include "$(WEBCORE_PRIVATE_HEADERS_DIR)/ForwardingHeaders" $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit $(WEBGPU_HEADER_SEARCH_PATHS) $(WEBKITADDITIONS_HEADER_SEARCH_PATHS) $(LIBWEBRTC_HEADER_SEARCH_PATHS) $(SRCROOT) $(HEADER_SEARCH_PATHS);
+PROFILE_DATA_FLAGS_ENABLED = -fprofile-instr-use=$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebKit.profdata;
+
PROFILE_DATA_FLAGS = $(PROFILE_DATA_FLAGS_$(CONFIGURATION)_$(WK_PLATFORM_NAME));
PROFILE_DATA_FLAGS_Release_macosx = $(PROFILE_DATA_FLAGS_Release_macosx$(WK_MACOS_1200));
PROFILE_DATA_FLAGS_Release_macosx_MACOS_SINCE_1200 = $(PROFILE_DATA_FLAGS_ENABLED);
@@ -57,10 +59,15 @@
PROFILE_DATA_FLAGS_Production_macosx = $(PROFILE_DATA_FLAGS_Production_macosx$(WK_MACOS_1200));
PROFILE_DATA_FLAGS_Production_macosx_MACOS_SINCE_1200 = $(PROFILE_DATA_FLAGS_ENABLED);
PROFILE_DATA_FLAGS_Production_iphoneos = $(PROFILE_DATA_FLAGS_ENABLED);
-PROFILE_DATA_FLAGS_ENABLED = -fprofile-instr-use=$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebKit.profdata;
-OTHER_CFLAGS = $(inherited) -iframework $(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks -D__STDC_WANT_LIB_EXT1__=1 $(PROFILE_DATA_FLAGS);
+PROFILE_GENERATE_OR_USE_CFLAGS_ENABLE_LLVM_PROFILE_GENERATION = -fprofile-instr-generate -DENABLE_LLVM_PROFILE_GENERATION=1;
+PROFILE_GENERATE_OR_USE_CFLAGS_ = $(PROFILE_DATA_FLAGS);
+PROFILE_GENERATE_OR_USE_CFLAGS = $(PROFILE_GENERATE_OR_USE_CFLAGS_$(ENABLE_LLVM_PROFILE_GENERATION));
+PROFILE_GENERATE_OR_USE_LDFLAGS_ENABLE_LLVM_PROFILE_GENERATION = -fprofile-instr-generate -DENABLE_LLVM_PROFILE_GENERATION=1;
+PROFILE_GENERATE_OR_USE_LDFLAGS = $(PROFILE_GENERATE_OR_USE_LDFLAGS_$(ENABLE_LLVM_PROFILE_GENERATION));
+OTHER_CFLAGS = $(inherited) -iframework $(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks -D__STDC_WANT_LIB_EXT1__=1 $(PROFILE_GENERATE_OR_USE_CFLAGS);
+
NORMAL_WEBCORE_FRAMEWORKS_DIR = $(NORMAL_WEBCORE_FRAMEWORKS_DIR_COCOA_TOUCH_$(WK_IS_COCOA_TOUCH));
NORMAL_WEBCORE_FRAMEWORKS_DIR_COCOA_TOUCH_YES = $(PRODUCTION_FRAMEWORKS_DIR);
NORMAL_WEBCORE_FRAMEWORKS_DIR_COCOA_TOUCH_NO = $(SYSTEM_LIBRARY_DIR)/Frameworks/WebKit.framework/Versions/A/Frameworks;
Modified: trunk/Source/WebKit/Configurations/GPUService.xcconfig (292869 => 292870)
--- trunk/Source/WebKit/Configurations/GPUService.xcconfig 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebKit/Configurations/GPUService.xcconfig 2022-04-14 15:56:44 UTC (rev 292870)
@@ -28,7 +28,7 @@
INFOPLIST_FILE[sdk=embedded*] = GPUProcess/EntryPoint/Cocoa/XPCService/GPUService/Info-iOS.plist;
INFOPLIST_FILE[sdk=macosx*] = GPUProcess/EntryPoint/Cocoa/XPCService/GPUService/Info-OSX.plist;
-OTHER_LDFLAGS = $(inherited) $(OTHER_LDFLAGS_VERSIONED_FRAMEWORK_PATH) $(WK_RELOCATABLE_FRAMEWORKS_LDFLAGS) $(SOURCE_VERSION_LDFLAGS);
+OTHER_LDFLAGS = $(inherited) $(OTHER_LDFLAGS_VERSIONED_FRAMEWORK_PATH) $(WK_RELOCATABLE_FRAMEWORKS_LDFLAGS) $(SOURCE_VERSION_LDFLAGS) $(PROFILE_GENERATE_OR_USE_LDFLAGS);
ENTITLEMENTS_REQUIRED = $(ENTITLEMENTS_REQUIRED_USE_INTERNAL_SDK_$(USE_INTERNAL_SDK))
ENTITLEMENTS_REQUIRED_USE_INTERNAL_SDK_ = NO;
Modified: trunk/Source/WebKit/Configurations/MediaFormatReader.xcconfig (292869 => 292870)
--- trunk/Source/WebKit/Configurations/MediaFormatReader.xcconfig 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebKit/Configurations/MediaFormatReader.xcconfig 2022-04-14 15:56:44 UTC (rev 292870)
@@ -25,6 +25,7 @@
EXCLUDED_SOURCE_FILE_NAMES[sdk=embedded*] = *;
INFOPLIST_FILE = MediaFormatReaderPlugIn/Info.plist;
+PROFILE_GENERATE_OR_USE_CFLAGS_ENABLE_LLVM_PROFILE_GENERATION = ; // Disable PGO profile generation
OTHER_LDFLAGS = $(inherited) -allowable_client MediaToolbox;
PRODUCT_BUNDLE_IDENTIFIER = com.apple.$(PRODUCT_NAME:rfc1034identifier);
PRODUCT_NAME = $(TARGET_NAME);
Modified: trunk/Source/WebKit/Configurations/NetworkService.xcconfig (292869 => 292870)
--- trunk/Source/WebKit/Configurations/NetworkService.xcconfig 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebKit/Configurations/NetworkService.xcconfig 2022-04-14 15:56:44 UTC (rev 292870)
@@ -28,7 +28,7 @@
INFOPLIST_FILE[sdk=embedded*] = NetworkProcess/EntryPoint/Cocoa/XPCService/NetworkService/Info-iOS.plist;
INFOPLIST_FILE[sdk=macosx*] = NetworkProcess/EntryPoint/Cocoa/XPCService/NetworkService/Info-OSX.plist;
-OTHER_LDFLAGS = $(inherited) $(OTHER_LDFLAGS_VERSIONED_FRAMEWORK_PATH) $(WK_RELOCATABLE_FRAMEWORKS_LDFLAGS) $(SOURCE_VERSION_LDFLAGS);
+OTHER_LDFLAGS = $(inherited) $(OTHER_LDFLAGS_VERSIONED_FRAMEWORK_PATH) $(WK_RELOCATABLE_FRAMEWORKS_LDFLAGS) $(SOURCE_VERSION_LDFLAGS) $(PROFILE_GENERATE_OR_USE_LDFLAGS);
OTHER_LDFLAGS[sdk=macosx*] = $(inherited) $(SOURCE_VERSION_LDFLAGS);
ENTITLEMENTS_REQUIRED = $(ENTITLEMENTS_REQUIRED_USE_INTERNAL_SDK_$(USE_INTERNAL_SDK))
Modified: trunk/Source/WebKit/Configurations/WebAuthnService.xcconfig (292869 => 292870)
--- trunk/Source/WebKit/Configurations/WebAuthnService.xcconfig 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebKit/Configurations/WebAuthnService.xcconfig 2022-04-14 15:56:44 UTC (rev 292870)
@@ -28,6 +28,7 @@
INFOPLIST_FILE[sdk=embedded*] = WebAuthnProcess/EntryPoint/Cocoa/XPCService/WebAuthnService/Info-iOS.plist;
INFOPLIST_FILE[sdk=macosx*] = WebAuthnProcess/EntryPoint/Cocoa/XPCService/WebAuthnService/Info-OSX.plist;
+PROFILE_GENERATE_OR_USE_CFLAGS_ENABLE_LLVM_PROFILE_GENERATION = ; // Disable PGO profile generation
OTHER_LDFLAGS = $(inherited) $(OTHER_LDFLAGS_VERSIONED_FRAMEWORK_PATH) $(WK_RELOCATABLE_FRAMEWORKS_LDFLAGS) $(SOURCE_VERSION_LDFLAGS);
ENTITLEMENTS_REQUIRED = $(ENTITLEMENTS_REQUIRED_USE_INTERNAL_SDK_$(USE_INTERNAL_SDK))
Modified: trunk/Source/WebKit/Configurations/WebContentService.xcconfig (292869 => 292870)
--- trunk/Source/WebKit/Configurations/WebContentService.xcconfig 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebKit/Configurations/WebContentService.xcconfig 2022-04-14 15:56:44 UTC (rev 292870)
@@ -36,6 +36,7 @@
WK_APPKIT_LDFLAGS = $(WK_APPKIT_LDFLAGS_$(WK_PLATFORM_NAME));
WK_APPKIT_LDFLAGS_macosx = -framework AppKit;
+PROFILE_GENERATE_OR_USE_CFLAGS_ENABLE_LLVM_PROFILE_GENERATION = ; // Disable PGO profile generation
OTHER_LDFLAGS = $(inherited) $(OTHER_LDFLAGS_VERSIONED_FRAMEWORK_PATH_$(WK_WEBCONTENT_SERVICE_NEEDS_VERSIONED_FRAMEWORK_PATH_LDFLAG)) $(WK_APPKIT_LDFLAGS) $(OTHER_LDFLAGS_PLATFORM) $(WK_RELOCATABLE_FRAMEWORKS_LDFLAGS) $(SOURCE_VERSION_LDFLAGS);
WK_WEBCONTENT_SERVICE_NEEDS_XPC_DOMAIN_EXTENSION_ENTITLEMENT = $(WK_WEBCONTENT_SERVICE_NEEDS_XPC_DOMAIN_EXTENSION_ENTITLEMENT_$(WK_EMPTY_$(WK_WEBCONTENT_SERVICE_NEEDS_XPC_DOMAIN_EXTENSION_ENTITLEMENT)));
Modified: trunk/Source/WebKit/Configurations/WebKit.xcconfig (292869 => 292870)
--- trunk/Source/WebKit/Configurations/WebKit.xcconfig 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebKit/Configurations/WebKit.xcconfig 2022-04-14 15:56:44 UTC (rev 292870)
@@ -175,7 +175,7 @@
LIBWEBRTC_LIBRARY_DIR_USE_OVERRIDE_FRAMEWORKS_DIR_NO = $(WEBCORE_FRAMEWORKS_DIR)/WebCore.framework/Versions/A/Frameworks;
LIBWEBRTC_LIBRARY_DIR_USE_OVERRIDE_FRAMEWORKS_DIR_YES = $(WK_OVERRIDE_FRAMEWORKS_DIR);
-OTHER_LDFLAGS = $(inherited) -iframework"$(SDK_DIR)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks" $(UNEXPORTED_SYMBOL_LDFLAGS) $(ASAN_OTHER_LDFLAGS) $(FRAMEWORK_AND_LIBRARY_LDFLAGS) $(WK_RELOCATABLE_FRAMEWORK_LDFLAGS) $(SOURCE_VERSION_LDFLAGS);
+OTHER_LDFLAGS = $(inherited) -iframework"$(SDK_DIR)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks" $(UNEXPORTED_SYMBOL_LDFLAGS) $(ASAN_OTHER_LDFLAGS) $(FRAMEWORK_AND_LIBRARY_LDFLAGS) $(WK_RELOCATABLE_FRAMEWORK_LDFLAGS) $(SOURCE_VERSION_LDFLAGS) $(PROFILE_GENERATE_OR_USE_LDFLAGS);
REEXPORTED_FRAMEWORK_NAMES = WebKitLegacy;
REEXPORTED_FRAMEWORK_NAMES[sdk=macosx*] = $(inherited) WebCore;
Modified: trunk/Source/WebKit/Configurations/WebKitSwift.xcconfig (292869 => 292870)
--- trunk/Source/WebKit/Configurations/WebKitSwift.xcconfig 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebKit/Configurations/WebKitSwift.xcconfig 2022-04-14 15:56:44 UTC (rev 292870)
@@ -45,4 +45,5 @@
SWIFT_INSTALL_OBJC_HEADER = NO
SWIFT_VERSION = 5.0;
+PROFILE_GENERATE_OR_USE_CFLAGS_ENABLE_LLVM_PROFILE_GENERATION = ; // Disable PGO profile generation
OTHER_LDFLAGS = $(inherited) $(SOURCE_VERSION_LDFLAGS);
Modified: trunk/Source/WebKit/Configurations/adattributiond.xcconfig (292869 => 292870)
--- trunk/Source/WebKit/Configurations/adattributiond.xcconfig 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebKit/Configurations/adattributiond.xcconfig 2022-04-14 15:56:44 UTC (rev 292870)
@@ -25,6 +25,7 @@
PRODUCT_NAME = adattributiond;
+PROFILE_GENERATE_OR_USE_CFLAGS_ENABLE_LLVM_PROFILE_GENERATION = ; // Disable PGO profile generation
OTHER_LDFLAGS = -framework WebKit $(SOURCE_VERSION_LDFLAGS);
FRAMEWORK_SEARCH_PATHS = $(BUILT_PRODUCTS_DIR);
Modified: trunk/Source/WebKit/Configurations/webpushd.xcconfig (292869 => 292870)
--- trunk/Source/WebKit/Configurations/webpushd.xcconfig 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebKit/Configurations/webpushd.xcconfig 2022-04-14 15:56:44 UTC (rev 292870)
@@ -25,6 +25,7 @@
PRODUCT_NAME = webpushd;
+PROFILE_GENERATE_OR_USE_CFLAGS_ENABLE_LLVM_PROFILE_GENERATION = ; // Disable PGO profile generation
OTHER_LDFLAGS = -framework WebKit $(SOURCE_VERSION_LDFLAGS);
LIBRARY_SEARCH_PATHS = $(BUILT_PRODUCTS_DIR);
Modified: trunk/Source/WebKit/Configurations/webpushtool.xcconfig (292869 => 292870)
--- trunk/Source/WebKit/Configurations/webpushtool.xcconfig 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebKit/Configurations/webpushtool.xcconfig 2022-04-14 15:56:44 UTC (rev 292870)
@@ -37,6 +37,7 @@
WK_APPSERVERSUPPORT_LDFLAGS_iphonesimulator = $(WK_APPSERVERSUPPORT_LDFLAGS$(WK_IOS_15));
WK_APPSERVERSUPPORT_LDFLAGS_IOS_SINCE_15 = -framework AppServerSupport;
+PROFILE_GENERATE_OR_USE_CFLAGS_ENABLE_LLVM_PROFILE_GENERATION = ; // Disable PGO profile generation
OTHER_LDFLAGS = -framework Foundation -framework CoreFoundation -framework WebKit -framework _javascript_Core $(WK_APPSERVERSUPPORT_LDFLAGS) $(SOURCE_VERSION_LDFLAGS);
LIBRARY_SEARCH_PATHS = $(BUILT_PRODUCTS_DIR);
Modified: trunk/Source/WebKit/Shared/Cocoa/WebKit2InitializeCocoa.mm (292869 => 292870)
--- trunk/Source/WebKit/Shared/Cocoa/WebKit2InitializeCocoa.mm 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebKit/Shared/Cocoa/WebKit2InitializeCocoa.mm 2022-04-14 15:56:44 UTC (rev 292870)
@@ -29,6 +29,7 @@
#import <_javascript_Core/InitializeThreading.h>
#import <WebCore/WebCoreJITOperations.h>
#import <mutex>
+#import <wtf/GenerateProfiles.h>
#import <wtf/MainThread.h>
#import <wtf/RefCounted.h>
#import <wtf/WorkQueue.h>
@@ -42,6 +43,8 @@
static std::once_flag flag;
+enum class WebKitProfileTag { };
+
static void runInitializationCode(void* = nullptr)
{
RELEASE_ASSERT_WITH_MESSAGE([NSThread isMainThread], "InitializeWebKit2 should be called on the main thread");
@@ -57,6 +60,8 @@
WTF::RefCountedBase::enableThreadingChecksGlobally();
WebCore::populateJITOperations();
+
+ WTF::registerProfileGenerationCallback<WebKitProfileTag>("WebKit");
}
void InitializeWebKit2()
Modified: trunk/Source/WebKit/Shared/WebKit2Initialize.cpp (292869 => 292870)
--- trunk/Source/WebKit/Shared/WebKit2Initialize.cpp 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebKit/Shared/WebKit2Initialize.cpp 2022-04-14 15:56:44 UTC (rev 292870)
@@ -30,6 +30,7 @@
#include <_javascript_Core/InitializeThreading.h>
#include <WebCore/LogInitialization.h>
#include <WebCore/WebCoreJITOperations.h>
+#include <wtf/GenerateProfiles.h>
#include <wtf/LogInitialization.h>
#include <wtf/MainThread.h>
#include <wtf/RefCounted.h>
Modified: trunk/Source/WebKit/SwiftOverlay/Configurations/WebKitSwiftOverlay.xcconfig (292869 => 292870)
--- trunk/Source/WebKit/SwiftOverlay/Configurations/WebKitSwiftOverlay.xcconfig 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/WebKit/SwiftOverlay/Configurations/WebKitSwiftOverlay.xcconfig 2022-04-14 15:56:44 UTC (rev 292870)
@@ -26,6 +26,7 @@
EXECUTABLE_PREFIX = libswift;
GENERATE_TEXT_BASED_STUBS = YES;
IS_ZIPPERED = NO;
+PROFILE_GENERATE_OR_USE_CFLAGS_ENABLE_LLVM_PROFILE_GENERATION = ; // Disable PGO profile generation
OTHER_LDFLAGS = $(inherited) -weak_framework WebKit;
PRODUCT_NAME = WebKit;
STRIP_SWIFT_SYMBOLS = NO;
Modified: trunk/Source/cmake/WebKitFeatures.cmake (292869 => 292870)
--- trunk/Source/cmake/WebKitFeatures.cmake 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Source/cmake/WebKitFeatures.cmake 2022-04-14 15:56:44 UTC (rev 292870)
@@ -161,6 +161,7 @@
WEBKIT_OPTION_DEFINE(ENABLE_JIT "Toggle JustInTime _javascript_ support" PRIVATE ${ENABLE_JIT_DEFAULT})
WEBKIT_OPTION_DEFINE(ENABLE_LAYER_BASED_SVG_ENGINE "Toggle Layer Based SVG Engine support" PRIVATE OFF)
WEBKIT_OPTION_DEFINE(ENABLE_LAYOUT_FORMATTING_CONTEXT "Toggle Layout Formatting Context support" PRIVATE OFF)
+ WEBKIT_OPTION_DEFINE(ENABLE_LLVM_PROFILE_GENERATION "Include LLVM's instrumentation to generate profiles for PGO" PRIVATE OFF)
WEBKIT_OPTION_DEFINE(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER "Toggle legacy protocol manager support" PRIVATE OFF)
WEBKIT_OPTION_DEFINE(ENABLE_LEGACY_ENCRYPTED_MEDIA "Toggle Legacy EME V2 support" PRIVATE OFF)
WEBKIT_OPTION_DEFINE(ENABLE_LETTERPRESS "Toggle letterpress support" PRIVATE OFF)
Modified: trunk/Tools/ChangeLog (292869 => 292870)
--- trunk/Tools/ChangeLog 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Tools/ChangeLog 2022-04-14 15:56:44 UTC (rev 292870)
@@ -1,3 +1,15 @@
+2022-04-14 Justin Michaud <justin_mich...@apple.com>
+
+ [PGO] We should be able to build WebKit to collect PGO profiles easily
+ https://bugs.webkit.org/show_bug.cgi?id=238776
+
+ Reviewed by Wenson Hsieh.
+
+ * Scripts/check-for-weak-vtables-and-externals:
+ * Scripts/webkitdirs.pm:
+ (XcodeOptions):
+ * Scripts/webkitperl/FeatureList.pm:
+
2022-04-14 Youenn Fablet <you...@apple.com>
Enable ExitsUnderMemoryPressureWebRTCCase and disable ExitsUnderMemoryPressureGetUserMediaAudioCase on iOS simulator
Modified: trunk/Tools/Scripts/check-for-weak-vtables-and-externals (292869 => 292870)
--- trunk/Tools/Scripts/check-for-weak-vtables-and-externals 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Tools/Scripts/check-for-weak-vtables-and-externals 2022-04-14 15:56:44 UTC (rev 292870)
@@ -60,6 +60,7 @@
}
my @weakVTableClasses = ();
my @weakExternalSymbols = ();
+ my $skipProfileSymbols = coverageIsEnabled() || $ENV{'ENABLE_LLVM_PROFILE_GENERATION'} == "ON" || $ENV{'ENABLE_LLVM_PROFILE_GENERATION'} == "ENABLE_LLVM_PROFILE_GENERATION";
while (<NM>) {
if (/^STDOUT:/) {
# Ignore undefined, RTTI and typeinfo symbols.
@@ -69,7 +70,7 @@
next if /\b___asan/;
# Ignore weak symbols present when compiling with coverage enabled.
- next if /\b(___llvm_profile_filename|___llvm_profile_raw_version|_lprofDirMode)/ && coverageIsEnabled();
+ next if /\b(___llvm_profile_filename|___llvm_profile_raw_version|_lprofDirMode|__llvm_profile_reset_counters)/ && $skipProfileSymbols;
if (/weak external vtable for (.*)$/) {
push @weakVTableClasses, $1;
Modified: trunk/Tools/Scripts/webkitperl/FeatureList.pm (292869 => 292870)
--- trunk/Tools/Scripts/webkitperl/FeatureList.pm 2022-04-14 15:48:20 UTC (rev 292869)
+++ trunk/Tools/Scripts/webkitperl/FeatureList.pm 2022-04-14 15:56:44 UTC (rev 292870)
@@ -108,6 +108,7 @@
$jitSupport,
$layerBasedSVGEngineSupport,
$layoutFormattingContextSupport,
+ $llvmProfileGenerationSupport,
$legacyCustomProtocolManagerSupport,
$legacyEncryptedMediaSupport,
$letterpressSupport,
@@ -355,6 +356,9 @@
{ option => "layout-formatting-context", desc => "Toggle Layout Formatting Context support",
define => "ENABLE_LAYOUT_FORMATTING_CONTEXT", value => \$layoutFormattingContextSupport },
+ { option => "llvm-profile-generation", desc => "Include LLVM's instrumentation to generate profiles for PGO",
+ define => "ENABLE_LLVM_PROFILE_GENERATION", value => \$llvmProfileGenerationSupport },
+
{ option => "legacy-custom-protocol-manager", desc => "Toggle legacy protocol manager support",
define => "ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER", value => \$legacyCustomProtocolManagerSupport },