Diff
Modified: tags/Safari-607.2.4.1/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (244347 => 244348)
--- tags/Safari-607.2.4.1/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2019-04-16 18:27:36 UTC (rev 244347)
+++ tags/Safari-607.2.4.1/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2019-04-16 18:32:19 UTC (rev 244348)
@@ -1077,7 +1077,6 @@
5DBB151B131D0B310056AD36 /* testapi.js in Copy Support Script */ = {isa = PBXBuildFile; fileRef = 14D857740A4696C80032146C /* testapi.js */; };
5DBB1525131D0BD70056AD36 /* minidom.js in Copy Support Script */ = {isa = PBXBuildFile; fileRef = 1412110D0A48788700480255 /* minidom.js */; };
5DE6E5B30E1728EC00180407 /* create_hash_table in Headers */ = {isa = PBXBuildFile; fileRef = F692A8540255597D01FF60F7 /* create_hash_table */; settings = {ATTRIBUTES = (); }; };
- 5E158AC350BC4EC7877DC0F4 /* ObjectPrototypeInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D0CC9E1CBC149AB8F403434 /* ObjectPrototypeInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
623A37EC1B87A7C000754209 /* RegisterMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 623A37EB1B87A7BD00754209 /* RegisterMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
627673241B680C1E00FD9F2E /* CallMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 627673221B680C1E00FD9F2E /* CallMode.h */; settings = {ATTRIBUTES = (Private, ); }; };
62D2D3901ADF103F000206C1 /* FunctionRareData.h in Headers */ = {isa = PBXBuildFile; fileRef = 62D2D38E1ADF103F000206C1 /* FunctionRareData.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -3331,6 +3330,7 @@
526AC4B41E977C5D003500E1 /* WasmCodeBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WasmCodeBlock.cpp; sourceTree = "<group>"; };
526AC4B51E977C5D003500E1 /* WasmCodeBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WasmCodeBlock.h; sourceTree = "<group>"; };
527773DD1AAF83AC00BDE7E8 /* RuntimeType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RuntimeType.cpp; sourceTree = "<group>"; };
+ 528D8EBC226156FD00E75699 /* CPU.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CPU.cpp; sourceTree = "<group>"; };
52B310FA1974AE610080857C /* FunctionHasExecutedCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FunctionHasExecutedCache.h; sourceTree = "<group>"; };
52B310FC1974AE870080857C /* FunctionHasExecutedCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FunctionHasExecutedCache.cpp; sourceTree = "<group>"; };
52B310FE1975B4240080857C /* TypeLocationCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TypeLocationCache.cpp; sourceTree = "<group>"; };
@@ -3650,7 +3650,6 @@
6A38CFA81E32B58B0060206F /* AsyncStackTrace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsyncStackTrace.h; sourceTree = "<group>"; };
6AD2CB4C19B9140100065719 /* DebuggerEvalEnabler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebuggerEvalEnabler.h; sourceTree = "<group>"; };
6BA93C9590484C5BAD9316EA /* JSScriptFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSScriptFetcher.h; sourceTree = "<group>"; };
- 6D0CC9E1CBC149AB8F403434 /* ObjectPrototypeInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjectPrototypeInlines.h; sourceTree = "<group>"; };
70113D491A8DB093003848C4 /* IteratorOperations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IteratorOperations.cpp; sourceTree = "<group>"; };
70113D4A1A8DB093003848C4 /* IteratorOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IteratorOperations.h; sourceTree = "<group>"; };
7013CA891B491A9400CAE613 /* JSMicrotask.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMicrotask.cpp; sourceTree = "<group>"; };
@@ -7610,6 +7609,7 @@
43C392AA1C3BEB0000241F53 /* AssemblerCommon.h */,
86E116B00FE75AC800B512BC /* CodeLocation.h */,
0F30D7BF1D95D62F0053089D /* CPU.h */,
+ 528D8EBC226156FD00E75699 /* CPU.cpp */,
0F37308E1C0CD68500052BFA /* DisallowMacroScratchRegisterUsage.h */,
0FF4275615914A20004CB9FF /* LinkBuffer.cpp */,
86D3B3C110159D7F002865E7 /* LinkBuffer.h */,
Modified: tags/Safari-607.2.4.1/Source/_javascript_Core/Sources.txt (244347 => 244348)
--- tags/Safari-607.2.4.1/Source/_javascript_Core/Sources.txt 2019-04-16 18:27:36 UTC (rev 244347)
+++ tags/Safari-607.2.4.1/Source/_javascript_Core/Sources.txt 2019-04-16 18:32:19 UTC (rev 244348)
@@ -42,6 +42,7 @@
API/OpaqueJSString.cpp
assembler/AbstractMacroAssembler.cpp
+assembler/CPU.cpp
assembler/LinkBuffer.cpp
assembler/MacroAssembler.cpp
assembler/MacroAssemblerARM64.cpp
Added: tags/Safari-607.2.4.1/Source/_javascript_Core/assembler/CPU.cpp (0 => 244348)
--- tags/Safari-607.2.4.1/Source/_javascript_Core/assembler/CPU.cpp (rev 0)
+++ tags/Safari-607.2.4.1/Source/_javascript_Core/assembler/CPU.cpp 2019-04-16 18:32:19 UTC (rev 244348)
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2019 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.
+ */
+
+#include "config.h"
+#include "CPU.h"
+
+#if (CPU(X86) || CPU(X86_64)) && OS(DARWIN)
+#include <mutex>
+#include <sys/sysctl.h>
+#endif
+
+namespace JSC {
+
+#if (CPU(X86) || CPU(X86_64)) && OS(DARWIN)
+bool isKernTCSMAvailable()
+{
+ uint32_t val = 0;
+ size_t valSize = sizeof(val);
+ int rc = sysctlbyname("kern.tcsm_available", &val, &valSize, NULL, 0);
+ if (rc < 0)
+ return false;
+ return !!val;
+}
+
+bool enableKernTCSM()
+{
+ uint32_t val = 1;
+ int rc = sysctlbyname("kern.tcsm_enable", NULL, 0, &val, sizeof(val));
+ if (rc < 0)
+ return false;
+ return true;
+}
+
+int kernTCSMAwareNumberOfProcessorCores()
+{
+ static std::once_flag onceFlag;
+ static int result;
+ std::call_once(onceFlag, [] {
+ result = WTF::numberOfProcessorCores();
+ if (result <= 1)
+ return;
+ if (isKernTCSMAvailable())
+ --result;
+ });
+ return result;
+}
+#endif // #if (CPU(X86) || CPU(X86_64)) && OS(DARWIN)
+
+} // namespace JSC
Modified: tags/Safari-607.2.4.1/Source/_javascript_Core/assembler/CPU.h (244347 => 244348)
--- tags/Safari-607.2.4.1/Source/_javascript_Core/assembler/CPU.h 2019-04-16 18:27:36 UTC (rev 244347)
+++ tags/Safari-607.2.4.1/Source/_javascript_Core/assembler/CPU.h 2019-04-16 18:32:19 UTC (rev 244348)
@@ -26,6 +26,7 @@
#pragma once
#include "Options.h"
+#include <wtf/NumberOfCores.h>
namespace JSC {
@@ -131,5 +132,15 @@
return optimizeForX86();
}
+#if (CPU(X86) || CPU(X86_64)) && OS(DARWIN)
+bool isKernTCSMAvailable();
+bool enableKernTCSM();
+int kernTCSMAwareNumberOfProcessorCores();
+#else
+ALWAYS_INLINE bool isKernTCSMAvailable() { return false; }
+ALWAYS_INLINE bool enableKernTCSM() { return false; }
+ALWAYS_INLINE int kernTCSMAwareNumberOfProcessorCores() { return WTF::numberOfProcessorCores(); }
+#endif
+
} // namespace JSC
Modified: tags/Safari-607.2.4.1/Source/_javascript_Core/heap/MachineStackMarker.h (244347 => 244348)
--- tags/Safari-607.2.4.1/Source/_javascript_Core/heap/MachineStackMarker.h 2019-04-16 18:27:36 UTC (rev 244347)
+++ tags/Safari-607.2.4.1/Source/_javascript_Core/heap/MachineStackMarker.h 2019-04-16 18:32:19 UTC (rev 244348)
@@ -48,7 +48,7 @@
void gatherConservativeRoots(ConservativeRoots&, JITStubRoutineSet&, CodeBlockSet&, CurrentThreadState*, Thread*);
// Only needs to be called by clients that can use the same heap from multiple threads.
- void addCurrentThread() { m_threadGroup->addCurrentThread(); }
+ bool addCurrentThread() { return m_threadGroup->addCurrentThread() == ThreadGroupAddResult::NewlyAdded; }
WordLock& getLock() { return m_threadGroup->getLock(); }
const ListHashSet<Ref<Thread>>& threads(const AbstractLocker& locker) const { return m_threadGroup->threads(locker); }
Modified: tags/Safari-607.2.4.1/Source/_javascript_Core/runtime/JSLock.cpp (244347 => 244348)
--- tags/Safari-607.2.4.1/Source/_javascript_Core/runtime/JSLock.cpp 2019-04-16 18:27:36 UTC (rev 244347)
+++ tags/Safari-607.2.4.1/Source/_javascript_Core/runtime/JSLock.cpp 2019-04-16 18:32:19 UTC (rev 244348)
@@ -147,7 +147,11 @@
void* p = currentStackPointer();
m_vm->setStackPointerAtVMEntry(p);
- m_vm->heap.machineThreads().addCurrentThread();
+ if (m_vm->heap.machineThreads().addCurrentThread()) {
+ if (isKernTCSMAvailable())
+ enableKernTCSM();
+ }
+
#if ENABLE(WEBASSEMBLY)
Wasm::startTrackingCurrentThread();
#endif
Modified: tags/Safari-607.2.4.1/Source/_javascript_Core/runtime/Options.cpp (244347 => 244348)
--- tags/Safari-607.2.4.1/Source/_javascript_Core/runtime/Options.cpp 2019-04-16 18:27:36 UTC (rev 244347)
+++ tags/Safari-607.2.4.1/Source/_javascript_Core/runtime/Options.cpp 2019-04-16 18:32:19 UTC (rev 244348)
@@ -27,6 +27,7 @@
#include "Options.h"
#include "AssemblerCommon.h"
+#include "CPU.h"
#include "LLIntCommon.h"
#include "MinimumReservedZoneSize.h"
#include "SigillCrashAnalyzer.h"
@@ -204,7 +205,7 @@
static unsigned computeNumberOfWorkerThreads(int maxNumberOfWorkerThreads, int minimum = 1)
{
- int cpusToUse = std::min(WTF::numberOfProcessorCores(), maxNumberOfWorkerThreads);
+ int cpusToUse = std::min(kernTCSMAwareNumberOfProcessorCores(), maxNumberOfWorkerThreads);
// Be paranoid, it is the OS we're dealing with, after all.
ASSERT(cpusToUse >= 1);
@@ -213,7 +214,7 @@
static int32_t computePriorityDeltaOfWorkerThreads(int32_t twoCorePriorityDelta, int32_t multiCorePriorityDelta)
{
- if (WTF::numberOfProcessorCores() <= 2)
+ if (kernTCSMAwareNumberOfProcessorCores() <= 2)
return twoCorePriorityDelta;
return multiCorePriorityDelta;
Modified: tags/Safari-607.2.4.1/Source/_javascript_Core/wasm/WasmWorklist.cpp (244347 => 244348)
--- tags/Safari-607.2.4.1/Source/_javascript_Core/wasm/WasmWorklist.cpp 2019-04-16 18:27:36 UTC (rev 244347)
+++ tags/Safari-607.2.4.1/Source/_javascript_Core/wasm/WasmWorklist.cpp 2019-04-16 18:32:19 UTC (rev 244348)
@@ -28,10 +28,9 @@
#if ENABLE(WEBASSEMBLY)
+#include "CPU.h"
#include "WasmPlan.h"
-#include <wtf/NumberOfCores.h>
-
namespace JSC { namespace Wasm {
namespace WasmWorklistInternal {
@@ -207,7 +206,7 @@
: m_lock(Box<Lock>::create())
, m_planEnqueued(AutomaticThreadCondition::create())
{
- unsigned numberOfCompilationThreads = Options::useConcurrentJIT() ? WTF::numberOfProcessorCores() : 1;
+ unsigned numberOfCompilationThreads = Options::useConcurrentJIT() ? kernTCSMAwareNumberOfProcessorCores() : 1;
m_threads.reserveCapacity(numberOfCompilationThreads);
LockHolder locker(*m_lock);
for (unsigned i = 0; i < numberOfCompilationThreads; i++)
Modified: tags/Safari-607.2.4.1/Source/WebKit/WebProcess/com.apple.WebProcess.sb.in (244347 => 244348)
--- tags/Safari-607.2.4.1/Source/WebKit/WebProcess/com.apple.WebProcess.sb.in 2019-04-16 18:27:36 UTC (rev 244347)
+++ tags/Safari-607.2.4.1/Source/WebKit/WebProcess/com.apple.WebProcess.sb.in 2019-04-16 18:32:19 UTC (rev 244348)
@@ -171,6 +171,8 @@
"kern.version"
"machdep.cpu.brand_string"
"security.mac.sandbox.sentinel"
+ "kern.tcsm_enable"
+ "kern.tcsm_available"
"vm.footprint_suspend")
(sysctl-name-regex #"^hw.(active|avail)cpu")
(sysctl-name-regex #"^hw.(busfrequency|cachelinesize|cpufrequency(|_max)|pagesize|tbfrequency)(|_compat)")
@@ -181,6 +183,10 @@
(sysctl-name-regex #"^net.routetable")
)
+(allow sysctl-write
+ (sysctl-name
+ "kern.tcsm_enable"))
+
(deny iokit-get-properties)
(allow iokit-get-properties
(iokit-property "AGCInfo")