Changeset 238388 in webkit
- Timestamp:
- Nov 19, 2018 6:16:31 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r238386 r238388 1 2018-11-19 Alex Christensen <achristensen@webkit.org> 2 3 Add SPI to disable JIT in a WKWebView 4 https://bugs.webkit.org/show_bug.cgi?id=191822 5 <rdar://problem/28119360> 6 7 Reviewed by Geoffrey Garen. 8 9 * jit/ExecutableAllocator.cpp: 10 (JSC::jitDisabled): 11 (JSC::allowJIT): 12 (JSC::ExecutableAllocator::setJITEnabled): 13 * jit/ExecutableAllocator.h: 14 (JSC::ExecutableAllocator::setJITEnabled): 15 1 16 2018-11-19 Fujii Hironori <Hironori.Fujii@sony.com> 2 17 -
trunk/Source/JavaScriptCore/jit/ExecutableAllocator.cpp
r237400 r238388 114 114 #endif 115 115 116 static bool allowJIT() 116 class FixedVMPoolExecutableAllocator; 117 static FixedVMPoolExecutableAllocator* allocator = nullptr; 118 static ExecutableAllocator* executableAllocator = nullptr; 119 120 static bool s_isJITEnabled = true; 121 static bool isJITEnabled() 117 122 { 118 123 #if PLATFORM(IOS_FAMILY) && (CPU(ARM64) || CPU(ARM)) 119 return processHasEntitlement("dynamic-codesigning") ;124 return processHasEntitlement("dynamic-codesigning") && s_isJITEnabled; 120 125 #else 121 return true; 126 return s_isJITEnabled; 127 #endif 128 } 129 130 void ExecutableAllocator::setJITEnabled(bool enabled) 131 { 132 ASSERT(!allocator); 133 if (s_isJITEnabled == enabled) 134 return; 135 136 s_isJITEnabled = enabled; 137 138 #if PLATFORM(IOS_FAMILY) && (CPU(ARM64) || CPU(ARM)) 139 if (!enabled) { 140 constexpr size_t size = 1; 141 constexpr int protection = PROT_READ | PROT_WRITE | PROT_EXEC; 142 constexpr int flags = MAP_PRIVATE | MAP_ANON | MAP_JIT; 143 constexpr int fd = OSAllocator::JSJITCodePages; 144 void* allocation = mmap(nullptr, size, protection, flags, fd, 0); 145 const void* executableMemoryAllocationFailure = reinterpret_cast<void*>(-1); 146 RELEASE_ASSERT_WITH_MESSAGE(allocation && allocation != executableMemoryAllocationFailure, "We should not have allocated executable memory before disabling the JIT."); 147 RELEASE_ASSERT_WITH_MESSAGE(!munmap(allocation, size), "Unmapping executable memory should succeed so we do not have any executable memory in the address space"); 148 RELEASE_ASSERT_WITH_MESSAGE(mmap(nullptr, size, protection, flags, fd, 0) == executableMemoryAllocationFailure, "Allocating executable memory should fail after setJITEnabled(false) is called."); 149 } 122 150 #endif 123 151 } … … 129 157 : MetaAllocator(jitAllocationGranule) // round up all allocations to 32 bytes 130 158 { 131 if (! allowJIT())159 if (!isJITEnabled()) 132 160 return; 133 161 … … 376 404 MacroAssemblerCodePtr<ExecutableMemoryPtrTag> m_memoryEnd; 377 405 }; 378 379 static FixedVMPoolExecutableAllocator* allocator;380 static ExecutableAllocator* executableAllocator;381 406 382 407 void ExecutableAllocator::initializeAllocator() -
trunk/Source/JavaScriptCore/jit/ExecutableAllocator.h
r237266 r238388 141 141 static void dumpProfile() { } 142 142 #endif 143 144 JS_EXPORT_PRIVATE static void setJITEnabled(bool); 143 145 144 146 RefPtr<ExecutableMemoryHandle> allocate(size_t sizeInBytes, void* ownerUID, JITCompilationEffort); … … 174 176 RefPtr<ExecutableMemoryHandle> allocate(size_t, void*, JITCompilationEffort) { return nullptr; } 175 177 178 static void setJITEnabled(bool) { }; 179 176 180 bool isValidExecutableMemory(const AbstractLocker&, void*) { return false; } 177 181 -
trunk/Source/WebKit/ChangeLog
r238387 r238388 1 2018-11-19 Alex Christensen <achristensen@webkit.org> 2 3 Add SPI to disable JIT in a WKWebView 4 https://bugs.webkit.org/show_bug.cgi?id=191822 5 <rdar://problem/28119360> 6 7 Reviewed by Geoffrey Garen. 8 9 * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h: 10 (WebKit::XPCServiceInitializer): 11 * UIProcess/API/APIProcessPoolConfiguration.h: 12 * UIProcess/API/Cocoa/WKWebView.mm: 13 (-[WKWebView _canUseJIT:]): 14 * UIProcess/API/Cocoa/WKWebViewPrivate.h: 15 * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h: 16 * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm: 17 (-[_WKProcessPoolConfiguration enableJIT]): 18 (-[_WKProcessPoolConfiguration setEnableJIT:]): 19 * UIProcess/Launcher/ProcessLauncher.h: 20 (WebKit::ProcessLauncher::Client::enableJIT const): 21 * UIProcess/Launcher/mac/ProcessLauncherMac.mm: 22 (WebKit::ProcessLauncher::launchProcess): 23 * UIProcess/WebPageProxy.cpp: 24 (WebKit::WebPageProxy::canUseJIT): 25 * UIProcess/WebPageProxy.h: 26 * UIProcess/WebProcessProxy.cpp: 27 (WebKit::WebProcessProxy::enableJIT const): 28 * UIProcess/WebProcessProxy.h: 29 (WebKit::WebProcessProxy::processPool const): 30 (WebKit::WebProcessProxy::processPool): Deleted. 31 * WebProcess/WebProcess.cpp: 32 (WebKit::WebProcess::canUseJIT): 33 * WebProcess/WebProcess.h: 34 * WebProcess/WebProcess.messages.in: 35 1 36 2018-11-19 Basuke Suzuki <basuke.suzuki@sony.com> 2 37 -
trunk/Source/WebKit/Scripts/webkit/messages.py
r238330 r238388 191 191 192 192 for message in receiver.messages: 193 if message.reply_parameters != None and message.has_attribute(DELAYED_ATTRIBUTE):193 if message.reply_parameters != None: 194 194 headers.add('<wtf/ThreadSafeRefCounted.h>') 195 195 types_by_namespace['IPC'].update([('class', 'Connection')]) -
trunk/Source/WebKit/Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h
r237703 r238388 24 24 */ 25 25 26 #ifndef XPCServiceEntryPoint_h 27 #define XPCServiceEntryPoint_h 26 #pragma once 28 27 29 28 #import "ChildProcess.h" 30 29 #import "WebKit2Initialize.h" 30 #import <JavaScriptCore/ExecutableAllocator.h> 31 31 #import <wtf/OSObjectPtr.h> 32 32 #import <wtf/spi/darwin/XPCSPI.h> … … 71 71 void XPCServiceInitializer(OSObjectPtr<xpc_connection_t> connection, xpc_object_t initializerMessage, xpc_object_t priorityBoostMessage) 72 72 { 73 if (initializerMessage && xpc_dictionary_get_bool(initializerMessage, "disable-jit")) 74 JSC::ExecutableAllocator::setJITEnabled(false); 75 73 76 XPCServiceInitializerDelegateType delegate(WTFMove(connection), initializerMessage); 74 77 … … 125 128 126 129 } // namespace WebKit 127 128 #endif // XPCServiceEntryPoint_h -
trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp
r238183 r238388 117 117 copy->m_shouldCaptureAudioInUIProcess = this->m_shouldCaptureAudioInUIProcess; 118 118 copy->m_shouldCaptureDisplayInUIProcess = this->m_shouldCaptureDisplayInUIProcess; 119 copy->m_isJITEnabled = this->m_isJITEnabled; 119 120 #if PLATFORM(IOS_FAMILY) 120 121 copy->m_ctDataConnectionServiceType = this->m_ctDataConnectionServiceType; -
trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h
r238294 r238388 148 148 void setShouldCaptureDisplayInUIProcess(bool shouldCaptureDisplayInUIProcess) { m_shouldCaptureDisplayInUIProcess = shouldCaptureDisplayInUIProcess; } 149 149 150 bool isJITEnabled() const { return m_isJITEnabled; } 151 void setJITEnabled(bool enabled) { m_isJITEnabled = enabled; } 152 150 153 #if PLATFORM(IOS_FAMILY) 151 154 const WTF::String& ctDataConnectionServiceType() const { return m_ctDataConnectionServiceType; } … … 221 224 std::optional<bool> m_isAutomaticProcessWarmingEnabledByClient; 222 225 WTF::String m_customWebContentServiceBundleIdentifier; 226 bool m_isJITEnabled { true }; 223 227 224 228 #if PLATFORM(IOS_FAMILY) -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
r238342 r238388 4769 4769 } 4770 4770 4771 - (void)_isJITEnabled:(void(^)(BOOL))completionHandler 4772 { 4773 _page->isJITEnabled([completionHandler = makeBlockPtr(completionHandler)] (bool enabled) { 4774 completionHandler(enabled); 4775 }); 4776 } 4777 4771 4778 - (void)_evaluateJavaScriptWithoutUserGesture:(NSString *)javaScriptString completionHandler:(void (^)(id, NSError *))completionHandler 4772 4779 { -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h
r238342 r238388 193 193 - (void)_showSafeBrowsingWarningWithTitle:(NSString *)title warning:(NSString *)warning details:(NSAttributedString *)details completionHandler:(void(^)(BOOL))completionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 194 194 195 - (void)_isJITEnabled:(void(^)(BOOL))completionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 195 196 - (IBAction)_alignCenter:(id)sender WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 196 197 - (IBAction)_alignJustified:(id)sender WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h
r235961 r238388 69 69 @property (nonatomic) BOOL pageCacheEnabled WK_API_AVAILABLE(macosx(10.14), ios(12.0)); 70 70 @property (nonatomic) BOOL suppressesConnectionTerminationOnSystemChange WK_API_AVAILABLE(macosx(10.14), ios(12.0)); 71 @property (nonatomic, getter=isJITEnabled) BOOL JITEnabled WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 71 72 72 73 @end -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm
r237266 r238388 299 299 } 300 300 301 - (BOOL)isJITEnabled 302 { 303 return _processPoolConfiguration->isJITEnabled(); 304 } 305 306 - (void)setJITEnabled:(BOOL)enabled 307 { 308 _processPoolConfiguration->setJITEnabled(enabled); 309 } 310 301 311 - (void)setSuppressesConnectionTerminationOnSystemChange:(BOOL)suppressesConnectionTerminationOnSystemChange 302 312 { -
trunk/Source/WebKit/UIProcess/Launcher/ProcessLauncher.h
r237154 r238388 49 49 50 50 virtual void didFinishLaunching(ProcessLauncher*, IPC::Connection::Identifier) = 0; 51 virtual bool isJITEnabled() const { return true; } 51 52 }; 52 53 -
trunk/Source/WebKit/UIProcess/Launcher/mac/ProcessLauncherMac.mm
r238341 r238388 174 174 // FIXME: Switch to xpc_connection_set_bootstrap once it's available everywhere we need. 175 175 auto bootstrapMessage = adoptOSObject(xpc_dictionary_create(nullptr, nullptr, 0)); 176 177 if (m_client && !m_client->isJITEnabled()) 178 xpc_dictionary_set_bool(bootstrapMessage.get(), "disable-jit", true); 179 176 180 xpc_dictionary_set_string(bootstrapMessage.get(), "message-name", "bootstrap"); 177 181 -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r238368 r238388 6534 6534 } 6535 6535 6536 void WebPageProxy::isJITEnabled(CompletionHandler<void(bool)>&& completionHandler) 6537 { 6538 m_process->connection()->sendWithAsyncReply(Messages::WebProcess::IsJITEnabled(), WTFMove(completionHandler)); 6539 } 6540 6536 6541 void WebPageProxy::enterAcceleratedCompositingMode(const LayerTreeContext& layerTreeContext) 6537 6542 { -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r238353 r238388 874 874 bool paginationLineGridEnabled() const { return m_paginationLineGridEnabled; } 875 875 unsigned pageCount() const { return m_pageCount; } 876 876 877 void isJITEnabled(CompletionHandler<void(bool)>&&); 878 877 879 #if PLATFORM(MAC) 878 880 void setUseSystemAppearance(bool); -
trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp
r238332 r238388 1222 1222 } 1223 1223 1224 bool WebProcessProxy::isJITEnabled() const 1225 { 1226 return processPool().configuration().isJITEnabled(); 1227 } 1228 1224 1229 void WebProcessProxy::didReceiveMainThreadPing() 1225 1230 { -
trunk/Source/WebKit/UIProcess/WebProcessProxy.h
r238335 r238388 111 111 WebConnection* webConnection() const { return m_webConnection.get(); } 112 112 113 WebProcessPool& processPool() { ASSERT(m_processPool); return *m_processPool.get(); }113 WebProcessPool& processPool() const { ASSERT(m_processPool); return *m_processPool.get(); } 114 114 115 115 // FIXME: WebsiteDataStores should be made per-WebPageProxy throughout WebKit2 … … 259 259 #endif 260 260 261 bool isJITEnabled() const final; 262 261 263 private: 262 264 // IPC message handlers. -
trunk/Source/WebKit/WebProcess/WebProcess.cpp
r238332 r238388 931 931 } 932 932 933 void WebProcess::isJITEnabled(CompletionHandler<void(bool)>&& completionHandler) 934 { 935 completionHandler(JSC::VM::canUseJIT()); 936 } 937 933 938 void WebProcess::clearPluginClientPolicies() 934 939 { -
trunk/Source/WebKit/WebProcess/WebProcess.h
r238332 r238388 205 205 void sendPrewarmInformation(const WebCore::URL&); 206 206 207 void isJITEnabled(CompletionHandler<void(bool)>&&); 208 207 209 #if PLATFORM(IOS_FAMILY) 208 210 void resetAllGeolocationPermissions(); -
trunk/Source/WebKit/WebProcess/WebProcess.messages.in
r238332 r238388 142 142 #endif 143 143 144 IsJITEnabled() -> (bool enabled) Async 145 144 146 #if PLATFORM(COCOA) 145 147 SetMediaMIMETypes(Vector<String> types) -
trunk/Tools/ChangeLog
r238387 r238388 1 2018-11-19 Alex Christensen <achristensen@webkit.org> 2 3 Add SPI to disable JIT in a WKWebView 4 https://bugs.webkit.org/show_bug.cgi?id=191822 5 <rdar://problem/28119360> 6 7 Reviewed by Geoffrey Garen. 8 9 * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: 10 * TestWebKitAPI/Tests/WebKitCocoa/DisableJIT.mm: Added. 11 (TEST): 12 1 13 2018-11-19 Basuke Suzuki <basuke.suzuki@sony.com> 2 14 -
trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
r238368 r238388 273 273 57F4AAA0208FAEF000A68E9E /* SSLKeyGenerator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 57F4AA9F208FA83D00A68E9E /* SSLKeyGenerator.mm */; }; 274 274 57F56A5C1C7F8CC100F31D7E /* IsNavigationActionTrusted.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 57F56A5B1C7F8A4000F31D7E /* IsNavigationActionTrusted.html */; }; 275 5C0160C121A132460077FA32 /* JITEnabled.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C0160C021A132320077FA32 /* JITEnabled.mm */; }; 275 276 5C0BF88D1DD5964D00B00328 /* MemoryPressureHandler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C0BF88C1DD5957400B00328 /* MemoryPressureHandler.mm */; }; 276 277 5C0BF8911DD599A900B00328 /* WebViewCanPasteZeroPng.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C0BF88F1DD5999B00B00328 /* WebViewCanPasteZeroPng.mm */; }; … … 1607 1608 57F4AA9F208FA83D00A68E9E /* SSLKeyGenerator.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SSLKeyGenerator.mm; sourceTree = "<group>"; }; 1608 1609 57F56A5B1C7F8A4000F31D7E /* IsNavigationActionTrusted.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = IsNavigationActionTrusted.html; sourceTree = "<group>"; }; 1610 5C0160C021A132320077FA32 /* JITEnabled.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = JITEnabled.mm; sourceTree = "<group>"; }; 1609 1611 5C0BF88C1DD5957400B00328 /* MemoryPressureHandler.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MemoryPressureHandler.mm; sourceTree = "<group>"; }; 1610 1612 5C0BF88F1DD5999B00B00328 /* WebViewCanPasteZeroPng.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebViewCanPasteZeroPng.mm; sourceTree = "<group>"; }; … … 2425 2427 2DB0232E1E4E871800707123 /* InteractionDeadlockAfterCrash.mm */, 2426 2428 5C69BDD41F82A7EB000F4F4B /* JavaScriptDuringNavigation.mm */, 2429 5C0160C021A132320077FA32 /* JITEnabled.mm */, 2427 2430 C25CCA051E51380B0026CB8A /* LineBreaking.mm */, 2428 2431 37D36ED61AF42ECD00BAF5D9 /* LoadAlternateHTMLString.mm */, … … 3953 3956 7CCE7EAD1A411A3400447C4C /* JavaScriptTest.cpp in Sources */, 3954 3957 7CCE7EA51A411A0800447C4C /* JavaScriptTestMac.mm in Sources */, 3958 5C0160C121A132460077FA32 /* JITEnabled.mm in Sources */, 3955 3959 7CCE7EC41A411A7E00447C4C /* JSWrapperForNodeInWebFrame.mm in Sources */, 3956 3960 F45E15732112CE2900307E82 /* KeyboardInputTestsIOS.mm in Sources */,
Note: See TracChangeset
for help on using the changeset viewer.