Title: [292870] trunk
Revision
292870
Author
justin_mich...@apple.com
Date
2022-04-14 08:56:44 -0700 (Thu, 14 Apr 2022)

Log Message

[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:

Source/_javascript_Core:

* Configurations/_javascript_Core.xcconfig:
* runtime/VM.cpp:
(JSC::VM::VM):

Source/WebCore:

* Configurations/WebCore.xcconfig:
* Configurations/WebCoreTestSupport.xcconfig:
* page/Frame.cpp:
(WebCore::Frame::Frame):

Source/WebKit:

* 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):

Source/WTF:

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:

Tools:

* Scripts/check-for-weak-vtables-and-externals:
* Scripts/webkitdirs.pm:
(XcodeOptions):
* Scripts/webkitperl/FeatureList.pm:

Modified Paths

Added Paths

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 },
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to