<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[200705] trunk/Source/JavaScriptCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/200705">200705</a></dd>
<dt>Author</dt> <dd>fpizlo@apple.com</dd>
<dt>Date</dt> <dd>2016-05-11 14:41:03 -0700 (Wed, 11 May 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Beef up JSC profiler event log
https://bugs.webkit.org/show_bug.cgi?id=157584

Reviewed by Saam Barati.
        
Also log more about compilation.

* bytecode/ExecutionCounter.cpp: Changed the meaning of codeBlock to be the codeBlock that is doing the profiling. This will now get the baseline version if it needs it. This is needed for logging the threshold checking event.
(JSC::applyMemoryUsageHeuristics):
(JSC::ExecutionCounter&lt;countingVariant&gt;::hasCrossedThreshold):
* dfg/DFGJITCode.cpp: Pass the right codeBlock.
(JSC::DFG::JITCode::checkIfOptimizationThresholdReached):
(JSC::DFG::JITCode::optimizeNextInvocation):
(JSC::DFG::JITCode::dontOptimizeAnytimeSoon):
(JSC::DFG::JITCode::optimizeSoon):
(JSC::DFG::JITCode::forceOptimizationSlowPathConcurrently):
* dfg/DFGPlan.cpp: Log things about compile times and whether the compiler succeeded or failed.
(JSC::DFG::Plan::computeCompileTimes):
(JSC::DFG::Plan::reportCompileTimes):
(JSC::DFG::Plan::compileInThread):
(JSC::DFG::Plan::finalizeWithoutNotifyingCallback):
* jit/ExecutableAllocatorFixedVMPool.cpp: Make it possible to look at memory usage, though separately from the log, for now.
(JSC::ExecutableAllocator::allocate):
* runtime/Options.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeExecutionCountercpp">trunk/Source/JavaScriptCore/bytecode/ExecutionCounter.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGJITCodecpp">trunk/Source/JavaScriptCore/dfg/DFGJITCode.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGPlancpp">trunk/Source/JavaScriptCore/dfg/DFGPlan.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitExecutableAllocatorFixedVMPoolcpp">trunk/Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeOptionsh">trunk/Source/JavaScriptCore/runtime/Options.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (200704 => 200705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-05-11 21:15:41 UTC (rev 200704)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-05-11 21:41:03 UTC (rev 200705)
</span><span class="lines">@@ -1,3 +1,30 @@
</span><ins>+2016-05-11  Filip Pizlo  &lt;fpizlo@apple.com&gt;
+
+        Beef up JSC profiler event log
+        https://bugs.webkit.org/show_bug.cgi?id=157584
+
+        Reviewed by Saam Barati.
+        
+        Also log more about compilation.
+
+        * bytecode/ExecutionCounter.cpp: Changed the meaning of codeBlock to be the codeBlock that is doing the profiling. This will now get the baseline version if it needs it. This is needed for logging the threshold checking event.
+        (JSC::applyMemoryUsageHeuristics):
+        (JSC::ExecutionCounter&lt;countingVariant&gt;::hasCrossedThreshold):
+        * dfg/DFGJITCode.cpp: Pass the right codeBlock.
+        (JSC::DFG::JITCode::checkIfOptimizationThresholdReached):
+        (JSC::DFG::JITCode::optimizeNextInvocation):
+        (JSC::DFG::JITCode::dontOptimizeAnytimeSoon):
+        (JSC::DFG::JITCode::optimizeSoon):
+        (JSC::DFG::JITCode::forceOptimizationSlowPathConcurrently):
+        * dfg/DFGPlan.cpp: Log things about compile times and whether the compiler succeeded or failed.
+        (JSC::DFG::Plan::computeCompileTimes):
+        (JSC::DFG::Plan::reportCompileTimes):
+        (JSC::DFG::Plan::compileInThread):
+        (JSC::DFG::Plan::finalizeWithoutNotifyingCallback):
+        * jit/ExecutableAllocatorFixedVMPool.cpp: Make it possible to look at memory usage, though separately from the log, for now.
+        (JSC::ExecutableAllocator::allocate):
+        * runtime/Options.h:
+
</ins><span class="cx"> 2016-05-11  Saam barati  &lt;sbarati@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Air may decide to put the result register of an arithmetic snippet in the tag register
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeExecutionCountercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/ExecutionCounter.cpp (200704 => 200705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/ExecutionCounter.cpp        2016-05-11 21:15:41 UTC (rev 200704)
+++ trunk/Source/JavaScriptCore/bytecode/ExecutionCounter.cpp        2016-05-11 21:41:03 UTC (rev 200705)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2012, 2014 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2012, 2014, 2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #include &quot;CodeBlock.h&quot;
</span><span class="cx"> #include &quot;ExecutableAllocator.h&quot;
</span><span class="cx"> #include &quot;JSCInlines.h&quot;
</span><ins>+#include &quot;VMInlines.h&quot;
</ins><span class="cx"> #include &lt;wtf/StringExtras.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="lines">@@ -78,7 +79,7 @@
</span><span class="cx"> #if ENABLE(JIT)
</span><span class="cx">     double multiplier =
</span><span class="cx">         ExecutableAllocator::memoryPressureMultiplier(
</span><del>-            codeBlock-&gt;predictedMachineCodeSize());
</del><ins>+            codeBlock-&gt;baselineAlternative()-&gt;predictedMachineCodeSize());
</ins><span class="cx"> #else
</span><span class="cx">     // This code path will probably not be taken, but if it is, we fake it.
</span><span class="cx">     double multiplier = 1.0;
</span><span class="lines">@@ -123,9 +124,15 @@
</span><span class="cx">     
</span><span class="cx">     double modifiedThreshold = applyMemoryUsageHeuristics(m_activeThreshold, codeBlock);
</span><span class="cx">     
</span><del>-    return static_cast&lt;double&gt;(m_totalCount) + m_counter &gt;=
-        modifiedThreshold - static_cast&lt;double&gt;(
-            std::min(m_activeThreshold, maximumExecutionCountsBetweenCheckpoints())) / 2;
</del><ins>+    double actualCount = static_cast&lt;double&gt;(m_totalCount) + m_counter;
+    double desiredCount = modifiedThreshold - static_cast&lt;double&gt;(
+        std::min(m_activeThreshold, maximumExecutionCountsBetweenCheckpoints())) / 2;
+    
+    bool result = actualCount &gt;= desiredCount;
+    
+    CODEBLOCK_LOG_EVENT(codeBlock, &quot;thresholdCheck&quot;, (&quot;activeThreshold = &quot;, m_activeThreshold, &quot;, modifiedThreshold = &quot;, modifiedThreshold, &quot;, actualCount = &quot;, actualCount, &quot;, desiredCount = &quot;, desiredCount));
+    
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;CountingVariant countingVariant&gt;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGJITCodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGJITCode.cpp (200704 => 200705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGJITCode.cpp        2016-05-11 21:15:41 UTC (rev 200704)
+++ trunk/Source/JavaScriptCore/dfg/DFGJITCode.cpp        2016-05-11 21:41:03 UTC (rev 200705)
</span><span class="lines">@@ -123,7 +123,7 @@
</span><span class="cx"> bool JITCode::checkIfOptimizationThresholdReached(CodeBlock* codeBlock)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(codeBlock-&gt;jitType() == JITCode::DFGJIT);
</span><del>-    return tierUpCounter.checkIfThresholdCrossedAndSet(codeBlock-&gt;baselineVersion());
</del><ins>+    return tierUpCounter.checkIfThresholdCrossedAndSet(codeBlock);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JITCode::optimizeNextInvocation(CodeBlock* codeBlock)
</span><span class="lines">@@ -131,7 +131,7 @@
</span><span class="cx">     ASSERT(codeBlock-&gt;jitType() == JITCode::DFGJIT);
</span><span class="cx">     if (Options::verboseOSR())
</span><span class="cx">         dataLog(*codeBlock, &quot;: FTL-optimizing next invocation.\n&quot;);
</span><del>-    tierUpCounter.setNewThreshold(0, codeBlock-&gt;baselineVersion());
</del><ins>+    tierUpCounter.setNewThreshold(0, codeBlock);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JITCode::dontOptimizeAnytimeSoon(CodeBlock* codeBlock)
</span><span class="lines">@@ -161,7 +161,7 @@
</span><span class="cx">     CodeBlock* baseline = codeBlock-&gt;baselineVersion();
</span><span class="cx">     tierUpCounter.setNewThreshold(
</span><span class="cx">         baseline-&gt;adjustedCounterValue(Options::thresholdForFTLOptimizeSoon()),
</span><del>-        baseline);
</del><ins>+        codeBlock);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JITCode::forceOptimizationSlowPathConcurrently(CodeBlock* codeBlock)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGPlancpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGPlan.cpp (200704 => 200705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGPlan.cpp        2016-05-11 21:15:41 UTC (rev 200704)
+++ trunk/Source/JavaScriptCore/dfg/DFGPlan.cpp        2016-05-11 21:41:03 UTC (rev 200705)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2013-2015 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -79,6 +79,7 @@
</span><span class="cx"> #include &quot;OperandsInlines.h&quot;
</span><span class="cx"> #include &quot;ProfilerDatabase.h&quot;
</span><span class="cx"> #include &quot;TrackedReferences.h&quot;
</span><ins>+#include &quot;VMInlines.h&quot;
</ins><span class="cx"> #include &lt;wtf/CurrentTime.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(FTL_JIT)
</span><span class="lines">@@ -158,7 +159,8 @@
</span><span class="cx"> bool Plan::computeCompileTimes() const
</span><span class="cx"> {
</span><span class="cx">     return reportCompileTimes()
</span><del>-        || Options::reportTotalCompileTimes();
</del><ins>+        || Options::reportTotalCompileTimes()
+        || vm.m_perBytecodeProfiler;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool Plan::reportCompileTimes() const
</span><span class="lines">@@ -202,28 +204,31 @@
</span><span class="cx">                 totalDFGCompileTime += after - before;
</span><span class="cx">         }
</span><span class="cx">     }
</span><ins>+    const char* pathName = nullptr;
+    switch (path) {
+    case FailPath:
+        pathName = &quot;N/A (fail)&quot;;
+        break;
+    case DFGPath:
+        pathName = &quot;DFG&quot;;
+        break;
+    case FTLPath:
+        pathName = &quot;FTL&quot;;
+        break;
+    case CancelPath:
+        pathName = &quot;Cancelled&quot;;
+        break;
+    default:
+        RELEASE_ASSERT_NOT_REACHED();
+        break;
+    }
+    if (codeBlock) { // codeBlock will be null if the compilation was cancelled.
+        if (path == FTLPath)
+            CODEBLOCK_LOG_EVENT(codeBlock, &quot;ftlCompile&quot;, (&quot;took &quot;, after - before, &quot; ms (DFG: &quot;, m_timeBeforeFTL - before, &quot;, B3: &quot;, after - m_timeBeforeFTL, &quot;) with &quot;, pathName));
+        else
+            CODEBLOCK_LOG_EVENT(codeBlock, &quot;dfgCompile&quot;, (&quot;took &quot;, after - before, &quot; ms with &quot;, pathName));
+    }
</ins><span class="cx">     if (UNLIKELY(reportCompileTimes())) {
</span><del>-        const char* pathName;
-        switch (path) {
-        case FailPath:
-            pathName = &quot;N/A (fail)&quot;;
-            break;
-        case DFGPath:
-            pathName = &quot;DFG&quot;;
-            break;
-        case FTLPath:
-            pathName = &quot;FTL&quot;;
-            break;
-        case CancelPath:
-            pathName = &quot;Cancelled&quot;;
-            break;
-        default:
-            RELEASE_ASSERT_NOT_REACHED();
-#if COMPILER_QUIRK(CONSIDERS_UNREACHABLE_CODE)
-            pathName = &quot;&quot;;
-#endif
-            break;
-        }
</del><span class="cx">         dataLog(&quot;Optimized &quot;, codeBlockName, &quot; using &quot;, mode, &quot; with &quot;, pathName, &quot; into &quot;, finalizer ? finalizer-&gt;codeSize() : 0, &quot; bytes in &quot;, after - before, &quot; ms&quot;);
</span><span class="cx">         if (path == FTLPath)
</span><span class="cx">             dataLog(&quot; (DFG: &quot;, m_timeBeforeFTL - before, &quot;, B3: &quot;, after - m_timeBeforeFTL, &quot;)&quot;);
</span><span class="lines">@@ -558,8 +563,10 @@
</span><span class="cx">     // We will establish new references from the code block to things. So, we need a barrier.
</span><span class="cx">     vm.heap.writeBarrier(codeBlock);
</span><span class="cx">     
</span><del>-    if (!isStillValid())
</del><ins>+    if (!isStillValid()) {
+        CODEBLOCK_LOG_EVENT(codeBlock, &quot;dfgFinalize&quot;, (&quot;invalidated&quot;));
</ins><span class="cx">         return CompilationInvalidated;
</span><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     bool result;
</span><span class="cx">     if (codeBlock-&gt;codeType() == FunctionCode)
</span><span class="lines">@@ -567,8 +574,10 @@
</span><span class="cx">     else
</span><span class="cx">         result = finalizer-&gt;finalize();
</span><span class="cx">     
</span><del>-    if (!result)
</del><ins>+    if (!result) {
+        CODEBLOCK_LOG_EVENT(codeBlock, &quot;dfgFinalize&quot;, (&quot;failed&quot;));
</ins><span class="cx">         return CompilationFailed;
</span><ins>+    }
</ins><span class="cx">     
</span><span class="cx">     reallyAdd(codeBlock-&gt;jitCode()-&gt;dfgCommon());
</span><span class="cx">     
</span><span class="lines">@@ -587,6 +596,7 @@
</span><span class="cx">         codeBlock-&gt;jitCode()-&gt;validateReferences(trackedReferences);
</span><span class="cx">     }
</span><span class="cx">     
</span><ins>+    CODEBLOCK_LOG_EVENT(codeBlock, &quot;dfgFinalize&quot;, (&quot;succeeded&quot;));
</ins><span class="cx">     return CompilationSuccessful;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitExecutableAllocatorFixedVMPoolcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp (200704 => 200705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp        2016-05-11 21:15:41 UTC (rev 200704)
+++ trunk/Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp        2016-05-11 21:41:03 UTC (rev 200705)
</span><span class="lines">@@ -362,6 +362,11 @@
</span><span class="cx"> 
</span><span class="cx"> RefPtr&lt;ExecutableMemoryHandle&gt; ExecutableAllocator::allocate(VM&amp;, size_t sizeInBytes, void* ownerUID, JITCompilationEffort effort)
</span><span class="cx"> {
</span><ins>+    if (Options::logExecutableAllocation()) {
+        MetaAllocator::Statistics stats = allocator-&gt;currentStatistics();
+        dataLog(&quot;Allocating &quot;, sizeInBytes, &quot; bytes of executable memory with &quot;, stats.bytesAllocated, &quot; bytes allocated, &quot;, stats.bytesReserved, &quot; bytes reserved, and &quot;, stats.bytesCommitted, &quot; committed.\n&quot;);
+    }
+    
</ins><span class="cx">     if (effort != JITCompilationCanFail &amp;&amp; Options::reportMustSucceedExecutableAllocations()) {
</span><span class="cx">         dataLog(&quot;Allocating &quot;, sizeInBytes, &quot; bytes of executable memory with JITCompilationMustSucceed.\n&quot;);
</span><span class="cx">         WTFReportBacktrace();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeOptionsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Options.h (200704 => 200705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Options.h        2016-05-11 21:15:41 UTC (rev 200704)
+++ trunk/Source/JavaScriptCore/runtime/Options.h        2016-05-11 21:41:03 UTC (rev 200705)
</span><span class="lines">@@ -211,6 +211,7 @@
</span><span class="cx">     v(bool, useMovHintRemoval, true, Normal, nullptr) \
</span><span class="cx">     v(bool, usePutStackSinking, true, Normal, nullptr) \
</span><span class="cx">     v(bool, useObjectAllocationSinking, true, Normal, nullptr) \
</span><ins>+    v(bool, logExecutableAllocation, false, Normal, nullptr) \
</ins><span class="cx">     \
</span><span class="cx">     v(bool, useConcurrentJIT, true, Normal, &quot;allows the DFG / FTL compilation in threads other than the executing JS thread&quot;) \
</span><span class="cx">     v(unsigned, numberOfDFGCompilerThreads, computeNumberOfWorkerThreads(2, 2) - 1, Normal, nullptr) \
</span></span></pre>
</div>
</div>

</body>
</html>