<!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>[172820] trunk/Source</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/172820">172820</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2014-08-20 18:03:20 -0700 (Wed, 20 Aug 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>Rename HighFidelityTypeProfiling variables for more clarity
https://bugs.webkit.org/show_bug.cgi?id=135899
Patch by Saam Barati <sbarati@apple.com> on 2014-08-20
Reviewed by Geoffrey Garen.
Source/JavaScriptCore:
Many names that are used in the type profiling infrastructure
prefix themselves with "HighFidelity" or include the words "high"
and/or "fidelity" in some way. But the words "high" and "fidelity" don't
add anything descriptive to the names surrounding type profiling.
So this patch removes all uses of "HighFidelity" and its variants.
Most renamings change "HighFidelity*" to "TypeProfiler*" or simply
drop the prefix "HighFidelity" all together. Now, almost all names
in relation to type profiling contain in them "TypeProfiler" or
"TypeProfiling" or some combination of the words "type" and "profile".
This patch also changes how we check if type profiling is enabled:
We no longer call vm::isProfilingTypesWithHighFidelity. We now just
check that vm::typeProfiler is not null.
This patch also changes all calls to TypeProfilerLog::processLogEntries
to use ASCIILiteral to form WTFStrings instead of vanilla C string literals.
* CMakeLists.txt:
* JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
* JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
* JavaScriptCore.xcodeproj/project.pbxproj:
* bytecode/BytecodeList.json:
* bytecode/BytecodeUseDef.h:
(JSC::computeUsesForBytecodeOffset):
(JSC::computeDefsForBytecodeOffset):
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::dumpBytecode):
(JSC::CodeBlock::CodeBlock):
* bytecode/TypeLocation.h:
* bytecode/UnlinkedCodeBlock.cpp:
(JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
(JSC::UnlinkedCodeBlock::typeProfilerExpressionInfoForBytecodeOffset):
(JSC::UnlinkedCodeBlock::addTypeProfilerExpressionInfo):
(JSC::UnlinkedCodeBlock::highFidelityTypeProfileExpressionInfoForBytecodeOffset): Deleted.
(JSC::UnlinkedCodeBlock::addHighFidelityTypeProfileExpressionInfo): Deleted.
* bytecode/UnlinkedCodeBlock.h:
(JSC::UnlinkedFunctionExecutable::typeProfilingStartOffset):
(JSC::UnlinkedFunctionExecutable::typeProfilingEndOffset):
(JSC::UnlinkedFunctionExecutable::highFidelityTypeProfilingStartOffset): Deleted.
(JSC::UnlinkedFunctionExecutable::highFidelityTypeProfilingEndOffset): Deleted.
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::generate):
(JSC::BytecodeGenerator::BytecodeGenerator):
(JSC::BytecodeGenerator::emitMove):
(JSC::BytecodeGenerator::emitTypeProfilerExpressionInfo):
(JSC::BytecodeGenerator::emitProfileType):
(JSC::BytecodeGenerator::emitHighFidelityTypeProfilingExpressionInfo): Deleted.
(JSC::BytecodeGenerator::emitProfileTypesWithHighFidelity): Deleted.
* bytecompiler/BytecodeGenerator.h:
(JSC::BytecodeGenerator::isProfilingTypesWithHighFidelity): Deleted.
* bytecompiler/NodesCodegen.cpp:
(JSC::ThisNode::emitBytecode):
(JSC::ResolveNode::emitBytecode):
(JSC::BracketAccessorNode::emitBytecode):
(JSC::DotAccessorNode::emitBytecode):
(JSC::FunctionCallValueNode::emitBytecode):
(JSC::FunctionCallResolveNode::emitBytecode):
(JSC::FunctionCallBracketNode::emitBytecode):
(JSC::FunctionCallDotNode::emitBytecode):
(JSC::CallFunctionCallDotNode::emitBytecode):
(JSC::ApplyFunctionCallDotNode::emitBytecode):
(JSC::PostfixNode::emitResolve):
(JSC::PostfixNode::emitBracket):
(JSC::PostfixNode::emitDot):
(JSC::PrefixNode::emitResolve):
(JSC::PrefixNode::emitBracket):
(JSC::PrefixNode::emitDot):
(JSC::ReadModifyResolveNode::emitBytecode):
(JSC::AssignResolveNode::emitBytecode):
(JSC::AssignDotNode::emitBytecode):
(JSC::ReadModifyDotNode::emitBytecode):
(JSC::AssignBracketNode::emitBytecode):
(JSC::ReadModifyBracketNode::emitBytecode):
(JSC::ConstDeclNode::emitCodeSingle):
(JSC::EmptyVarExpression::emitBytecode):
(JSC::ReturnNode::emitBytecode):
(JSC::FunctionBodyNode::emitBytecode):
* heap/Heap.cpp:
(JSC::Heap::collect):
* inspector/agents/InspectorRuntimeAgent.cpp:
(Inspector::InspectorRuntimeAgent::getRuntimeTypesForVariablesAtOffsets):
(Inspector::recompileAllJSFunctionsForTypeProfiling):
(Inspector::InspectorRuntimeAgent::willDestroyFrontendAndBackend):
(Inspector::InspectorRuntimeAgent::enableTypeProfiler):
(Inspector::InspectorRuntimeAgent::disableTypeProfiler):
(Inspector::InspectorRuntimeAgent::setTypeProfilerEnabledState):
(Inspector::InspectorRuntimeAgent::enableHighFidelityTypeProfiling): Deleted.
(Inspector::InspectorRuntimeAgent::disableHighFidelityTypeProfiling): Deleted.
(Inspector::InspectorRuntimeAgent::setHighFidelityTypeProfilingEnabledState): Deleted.
* inspector/agents/InspectorRuntimeAgent.h:
* inspector/protocol/Runtime.json:
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass):
(JSC::JIT::privateCompile):
* jit/JIT.h:
* jit/JITOpcodes.cpp:
(JSC::JIT::emit_op_profile_type):
(JSC::JIT::emit_op_profile_types_with_high_fidelity): Deleted.
* jit/JITOpcodes32_64.cpp:
(JSC::JIT::emit_op_profile_type):
(JSC::JIT::emit_op_profile_types_with_high_fidelity): Deleted.
* jit/JITOperations.cpp:
* jsc.cpp:
(functionDumpTypesForAllVariables):
* llint/LLIntSlowPaths.cpp:
* llint/LowLevelInterpreter.asm:
* runtime/CodeCache.cpp:
(JSC::CodeCache::getGlobalCodeBlock):
* runtime/CommonSlowPaths.cpp:
(JSC::SLOW_PATH_DECL):
* runtime/CommonSlowPaths.h:
* runtime/Executable.cpp:
(JSC::ScriptExecutable::ScriptExecutable):
(JSC::ProgramExecutable::ProgramExecutable):
(JSC::FunctionExecutable::FunctionExecutable):
(JSC::ProgramExecutable::initializeGlobalProperties):
* runtime/Executable.h:
(JSC::ScriptExecutable::typeProfilingStartOffset):
(JSC::ScriptExecutable::typeProfilingEndOffset):
(JSC::ScriptExecutable::highFidelityTypeProfilingStartOffset): Deleted.
(JSC::ScriptExecutable::highFidelityTypeProfilingEndOffset): Deleted.
* runtime/HighFidelityLog.cpp: Removed.
* runtime/HighFidelityLog.h: Removed.
* runtime/HighFidelityTypeProfiler.cpp: Removed.
* runtime/HighFidelityTypeProfiler.h: Removed.
* runtime/Options.h:
* runtime/SymbolTable.cpp:
(JSC::SymbolTable::prepareForTypeProfiling):
(JSC::SymbolTable::uniqueIDForVariable):
(JSC::SymbolTable::uniqueIDForRegister):
(JSC::SymbolTable::prepareForHighFidelityTypeProfiling): Deleted.
* runtime/SymbolTable.h:
* runtime/TypeProfiler.cpp: Added.
(JSC::TypeProfiler::logTypesForTypeLocation):
(JSC::TypeProfiler::insertNewLocation):
(JSC::TypeProfiler::getTypesForVariableAtOffsetForInspector):
(JSC::descriptorMatchesTypeLocation):
(JSC::TypeProfiler::findLocation):
* runtime/TypeProfiler.h: Added.
(JSC::QueryKey::QueryKey):
(JSC::QueryKey::isHashTableDeletedValue):
(JSC::QueryKey::operator==):
(JSC::QueryKey::hash):
(JSC::QueryKeyHash::hash):
(JSC::QueryKeyHash::equal):
(JSC::TypeProfiler::functionHasExecutedCache):
(JSC::TypeProfiler::typeLocationCache):
* runtime/TypeProfilerLog.cpp: Added.
(JSC::TypeProfilerLog::initializeLog):
(JSC::TypeProfilerLog::~TypeProfilerLog):
(JSC::TypeProfilerLog::processLogEntries):
* runtime/TypeProfilerLog.h: Added.
(JSC::TypeProfilerLog::LogEntry::structureIDOffset):
(JSC::TypeProfilerLog::LogEntry::valueOffset):
(JSC::TypeProfilerLog::LogEntry::locationOffset):
(JSC::TypeProfilerLog::TypeProfilerLog):
(JSC::TypeProfilerLog::recordTypeInformationForLocation):
(JSC::TypeProfilerLog::logEndPtr):
(JSC::TypeProfilerLog::logStartOffset):
(JSC::TypeProfilerLog::currentLogEntryOffset):
* runtime/VM.cpp:
(JSC::VM::VM):
(JSC::VM::enableTypeProfiler):
(JSC::VM::disableTypeProfiler):
(JSC::VM::dumpTypeProfilerData):
(JSC::VM::enableHighFidelityTypeProfiling): Deleted.
(JSC::VM::disableHighFidelityTypeProfiling): Deleted.
(JSC::VM::dumpHighFidelityProfilingTypes): Deleted.
* runtime/VM.h:
(JSC::VM::typeProfilerLog):
(JSC::VM::typeProfiler):
(JSC::VM::isProfilingTypesWithHighFidelity): Deleted.
(JSC::VM::highFidelityLog): Deleted.
(JSC::VM::highFidelityTypeProfiler): Deleted.
Source/WebInspectorUI:
Change a reference in a comment to a JavaScriptCore file to its
newly renamed variant.
* UserInterface/Models/ScriptSyntaxTree.js:</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreCMakeListstxt">trunk/Source/JavaScriptCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxproj">trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxprojfilters">trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj">trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeBytecodeListjson">trunk/Source/JavaScriptCore/bytecode/BytecodeList.json</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeBytecodeUseDefh">trunk/Source/JavaScriptCore/bytecode/BytecodeUseDef.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeCodeBlockcpp">trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeTypeLocationh">trunk/Source/JavaScriptCore/bytecode/TypeLocation.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockcpp">trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockh">trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorcpp">trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorh">trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecompilerNodesCodegencpp">trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapHeapcpp">trunk/Source/JavaScriptCore/heap/Heap.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectoragentsInspectorRuntimeAgentcpp">trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectoragentsInspectorRuntimeAgenth">trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorprotocolRuntimejson">trunk/Source/JavaScriptCore/inspector/protocol/Runtime.json</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITcpp">trunk/Source/JavaScriptCore/jit/JIT.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITh">trunk/Source/JavaScriptCore/jit/JIT.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOpcodescpp">trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOpcodes32_64cpp">trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOperationscpp">trunk/Source/JavaScriptCore/jit/JITOperations.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejsccpp">trunk/Source/JavaScriptCore/jsc.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntSlowPathscpp">trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLowLevelInterpreterasm">trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCodeCachecpp">trunk/Source/JavaScriptCore/runtime/CodeCache.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCommonSlowPathscpp">trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCommonSlowPathsh">trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeExecutablecpp">trunk/Source/JavaScriptCore/runtime/Executable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeExecutableh">trunk/Source/JavaScriptCore/runtime/Executable.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeOptionsh">trunk/Source/JavaScriptCore/runtime/Options.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeSymbolTablecpp">trunk/Source/JavaScriptCore/runtime/SymbolTable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeSymbolTableh">trunk/Source/JavaScriptCore/runtime/SymbolTable.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeVMcpp">trunk/Source/JavaScriptCore/runtime/VM.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeVMh">trunk/Source/JavaScriptCore/runtime/VM.h</a></li>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceModelsScriptSyntaxTreejs">trunk/Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreruntimeTypeProfilercpp">trunk/Source/JavaScriptCore/runtime/TypeProfiler.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeTypeProfilerh">trunk/Source/JavaScriptCore/runtime/TypeProfiler.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeTypeProfilerLogcpp">trunk/Source/JavaScriptCore/runtime/TypeProfilerLog.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeTypeProfilerLogh">trunk/Source/JavaScriptCore/runtime/TypeProfilerLog.h</a></li>
</ul>
<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreruntimeHighFidelityLogcpp">trunk/Source/JavaScriptCore/runtime/HighFidelityLog.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeHighFidelityLogh">trunk/Source/JavaScriptCore/runtime/HighFidelityLog.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeHighFidelityTypeProfilercpp">trunk/Source/JavaScriptCore/runtime/HighFidelityTypeProfiler.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeHighFidelityTypeProfilerh">trunk/Source/JavaScriptCore/runtime/HighFidelityTypeProfiler.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/CMakeLists.txt (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/CMakeLists.txt        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/CMakeLists.txt        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -416,8 +416,6 @@
</span><span class="cx"> runtime/FunctionHasExecutedCache.cpp
</span><span class="cx"> runtime/FunctionPrototype.cpp
</span><span class="cx"> runtime/GetterSetter.cpp
</span><del>- runtime/HighFidelityLog.cpp
- runtime/HighFidelityTypeProfiler.cpp
</del><span class="cx"> runtime/Identifier.cpp
</span><span class="cx"> runtime/IndexingType.cpp
</span><span class="cx"> runtime/InitializeThreading.cpp
</span><span class="lines">@@ -525,6 +523,8 @@
</span><span class="cx"> runtime/SymbolTable.cpp
</span><span class="cx"> runtime/TestRunnerUtils.cpp
</span><span class="cx"> runtime/TypeLocationCache.cpp
</span><ins>+ runtime/TypeProfiler.cpp
+ runtime/TypeProfilerLog.cpp
</ins><span class="cx"> runtime/TypeSet.cpp
</span><span class="cx"> runtime/TypedArrayController.cpp
</span><span class="cx"> runtime/TypedArrayType.cpp
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -1,3 +1,186 @@
</span><ins>+2014-08-20 Saam Barati <sbarati@apple.com>
+
+ Rename HighFidelityTypeProfiling variables for more clarity
+ https://bugs.webkit.org/show_bug.cgi?id=135899
+
+ Reviewed by Geoffrey Garen.
+
+ Many names that are used in the type profiling infrastructure
+ prefix themselves with "HighFidelity" or include the words "high"
+ and/or "fidelity" in some way. But the words "high" and "fidelity" don't
+ add anything descriptive to the names surrounding type profiling.
+ So this patch removes all uses of "HighFidelity" and its variants.
+
+ Most renamings change "HighFidelity*" to "TypeProfiler*" or simply
+ drop the prefix "HighFidelity" all together. Now, almost all names
+ in relation to type profiling contain in them "TypeProfiler" or
+ "TypeProfiling" or some combination of the words "type" and "profile".
+
+ This patch also changes how we check if type profiling is enabled:
+ We no longer call vm::isProfilingTypesWithHighFidelity. We now just
+ check that vm::typeProfiler is not null.
+
+ This patch also changes all calls to TypeProfilerLog::processLogEntries
+ to use ASCIILiteral to form WTFStrings instead of vanilla C string literals.
+
+ * CMakeLists.txt:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/BytecodeList.json:
+ * bytecode/BytecodeUseDef.h:
+ (JSC::computeUsesForBytecodeOffset):
+ (JSC::computeDefsForBytecodeOffset):
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dumpBytecode):
+ (JSC::CodeBlock::CodeBlock):
+ * bytecode/TypeLocation.h:
+ * bytecode/UnlinkedCodeBlock.cpp:
+ (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
+ (JSC::UnlinkedCodeBlock::typeProfilerExpressionInfoForBytecodeOffset):
+ (JSC::UnlinkedCodeBlock::addTypeProfilerExpressionInfo):
+ (JSC::UnlinkedCodeBlock::highFidelityTypeProfileExpressionInfoForBytecodeOffset): Deleted.
+ (JSC::UnlinkedCodeBlock::addHighFidelityTypeProfileExpressionInfo): Deleted.
+ * bytecode/UnlinkedCodeBlock.h:
+ (JSC::UnlinkedFunctionExecutable::typeProfilingStartOffset):
+ (JSC::UnlinkedFunctionExecutable::typeProfilingEndOffset):
+ (JSC::UnlinkedFunctionExecutable::highFidelityTypeProfilingStartOffset): Deleted.
+ (JSC::UnlinkedFunctionExecutable::highFidelityTypeProfilingEndOffset): Deleted.
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::generate):
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitMove):
+ (JSC::BytecodeGenerator::emitTypeProfilerExpressionInfo):
+ (JSC::BytecodeGenerator::emitProfileType):
+ (JSC::BytecodeGenerator::emitHighFidelityTypeProfilingExpressionInfo): Deleted.
+ (JSC::BytecodeGenerator::emitProfileTypesWithHighFidelity): Deleted.
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::isProfilingTypesWithHighFidelity): Deleted.
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::ThisNode::emitBytecode):
+ (JSC::ResolveNode::emitBytecode):
+ (JSC::BracketAccessorNode::emitBytecode):
+ (JSC::DotAccessorNode::emitBytecode):
+ (JSC::FunctionCallValueNode::emitBytecode):
+ (JSC::FunctionCallResolveNode::emitBytecode):
+ (JSC::FunctionCallBracketNode::emitBytecode):
+ (JSC::FunctionCallDotNode::emitBytecode):
+ (JSC::CallFunctionCallDotNode::emitBytecode):
+ (JSC::ApplyFunctionCallDotNode::emitBytecode):
+ (JSC::PostfixNode::emitResolve):
+ (JSC::PostfixNode::emitBracket):
+ (JSC::PostfixNode::emitDot):
+ (JSC::PrefixNode::emitResolve):
+ (JSC::PrefixNode::emitBracket):
+ (JSC::PrefixNode::emitDot):
+ (JSC::ReadModifyResolveNode::emitBytecode):
+ (JSC::AssignResolveNode::emitBytecode):
+ (JSC::AssignDotNode::emitBytecode):
+ (JSC::ReadModifyDotNode::emitBytecode):
+ (JSC::AssignBracketNode::emitBytecode):
+ (JSC::ReadModifyBracketNode::emitBytecode):
+ (JSC::ConstDeclNode::emitCodeSingle):
+ (JSC::EmptyVarExpression::emitBytecode):
+ (JSC::ReturnNode::emitBytecode):
+ (JSC::FunctionBodyNode::emitBytecode):
+ * heap/Heap.cpp:
+ (JSC::Heap::collect):
+ * inspector/agents/InspectorRuntimeAgent.cpp:
+ (Inspector::InspectorRuntimeAgent::getRuntimeTypesForVariablesAtOffsets):
+ (Inspector::recompileAllJSFunctionsForTypeProfiling):
+ (Inspector::InspectorRuntimeAgent::willDestroyFrontendAndBackend):
+ (Inspector::InspectorRuntimeAgent::enableTypeProfiler):
+ (Inspector::InspectorRuntimeAgent::disableTypeProfiler):
+ (Inspector::InspectorRuntimeAgent::setTypeProfilerEnabledState):
+ (Inspector::InspectorRuntimeAgent::enableHighFidelityTypeProfiling): Deleted.
+ (Inspector::InspectorRuntimeAgent::disableHighFidelityTypeProfiling): Deleted.
+ (Inspector::InspectorRuntimeAgent::setHighFidelityTypeProfilingEnabledState): Deleted.
+ * inspector/agents/InspectorRuntimeAgent.h:
+ * inspector/protocol/Runtime.json:
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompile):
+ * jit/JIT.h:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_profile_type):
+ (JSC::JIT::emit_op_profile_types_with_high_fidelity): Deleted.
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_profile_type):
+ (JSC::JIT::emit_op_profile_types_with_high_fidelity): Deleted.
+ * jit/JITOperations.cpp:
+ * jsc.cpp:
+ (functionDumpTypesForAllVariables):
+ * llint/LLIntSlowPaths.cpp:
+ * llint/LowLevelInterpreter.asm:
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCache::getGlobalCodeBlock):
+ * runtime/CommonSlowPaths.cpp:
+ (JSC::SLOW_PATH_DECL):
+ * runtime/CommonSlowPaths.h:
+ * runtime/Executable.cpp:
+ (JSC::ScriptExecutable::ScriptExecutable):
+ (JSC::ProgramExecutable::ProgramExecutable):
+ (JSC::FunctionExecutable::FunctionExecutable):
+ (JSC::ProgramExecutable::initializeGlobalProperties):
+ * runtime/Executable.h:
+ (JSC::ScriptExecutable::typeProfilingStartOffset):
+ (JSC::ScriptExecutable::typeProfilingEndOffset):
+ (JSC::ScriptExecutable::highFidelityTypeProfilingStartOffset): Deleted.
+ (JSC::ScriptExecutable::highFidelityTypeProfilingEndOffset): Deleted.
+ * runtime/HighFidelityLog.cpp: Removed.
+ * runtime/HighFidelityLog.h: Removed.
+ * runtime/HighFidelityTypeProfiler.cpp: Removed.
+ * runtime/HighFidelityTypeProfiler.h: Removed.
+ * runtime/Options.h:
+ * runtime/SymbolTable.cpp:
+ (JSC::SymbolTable::prepareForTypeProfiling):
+ (JSC::SymbolTable::uniqueIDForVariable):
+ (JSC::SymbolTable::uniqueIDForRegister):
+ (JSC::SymbolTable::prepareForHighFidelityTypeProfiling): Deleted.
+ * runtime/SymbolTable.h:
+ * runtime/TypeProfiler.cpp: Added.
+ (JSC::TypeProfiler::logTypesForTypeLocation):
+ (JSC::TypeProfiler::insertNewLocation):
+ (JSC::TypeProfiler::getTypesForVariableAtOffsetForInspector):
+ (JSC::descriptorMatchesTypeLocation):
+ (JSC::TypeProfiler::findLocation):
+ * runtime/TypeProfiler.h: Added.
+ (JSC::QueryKey::QueryKey):
+ (JSC::QueryKey::isHashTableDeletedValue):
+ (JSC::QueryKey::operator==):
+ (JSC::QueryKey::hash):
+ (JSC::QueryKeyHash::hash):
+ (JSC::QueryKeyHash::equal):
+ (JSC::TypeProfiler::functionHasExecutedCache):
+ (JSC::TypeProfiler::typeLocationCache):
+ * runtime/TypeProfilerLog.cpp: Added.
+ (JSC::TypeProfilerLog::initializeLog):
+ (JSC::TypeProfilerLog::~TypeProfilerLog):
+ (JSC::TypeProfilerLog::processLogEntries):
+ * runtime/TypeProfilerLog.h: Added.
+ (JSC::TypeProfilerLog::LogEntry::structureIDOffset):
+ (JSC::TypeProfilerLog::LogEntry::valueOffset):
+ (JSC::TypeProfilerLog::LogEntry::locationOffset):
+ (JSC::TypeProfilerLog::TypeProfilerLog):
+ (JSC::TypeProfilerLog::recordTypeInformationForLocation):
+ (JSC::TypeProfilerLog::logEndPtr):
+ (JSC::TypeProfilerLog::logStartOffset):
+ (JSC::TypeProfilerLog::currentLogEntryOffset):
+ * runtime/VM.cpp:
+ (JSC::VM::VM):
+ (JSC::VM::enableTypeProfiler):
+ (JSC::VM::disableTypeProfiler):
+ (JSC::VM::dumpTypeProfilerData):
+ (JSC::VM::enableHighFidelityTypeProfiling): Deleted.
+ (JSC::VM::disableHighFidelityTypeProfiling): Deleted.
+ (JSC::VM::dumpHighFidelityProfilingTypes): Deleted.
+ * runtime/VM.h:
+ (JSC::VM::typeProfilerLog):
+ (JSC::VM::typeProfiler):
+ (JSC::VM::isProfilingTypesWithHighFidelity): Deleted.
+ (JSC::VM::highFidelityLog): Deleted.
+ (JSC::VM::highFidelityTypeProfiler): Deleted.
+
</ins><span class="cx"> 2014-08-20 Csaba Osztrogonác <ossy@webkit.org>
</span><span class="cx">
</span><span class="cx"> URTBF after r172799.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -689,8 +689,6 @@
</span><span class="cx"> <ClCompile Include="..\runtime\FunctionHasExecutedCache.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\FunctionPrototype.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\GetterSetter.cpp" />
</span><del>- <ClCompile Include="..\runtime\HighFidelityLog.cpp" />
- <ClCompile Include="..\runtime\HighFidelityTypeProfiler.cpp" />
</del><span class="cx"> <ClCompile Include="..\runtime\Identifier.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\IndexingType.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\InitializeThreading.cpp" />
</span><span class="lines">@@ -799,6 +797,8 @@
</span><span class="cx"> <ClCompile Include="..\runtime\TypedArrayController.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\TypedArrayType.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\TypeLocationCache.cpp" />
</span><ins>+ <ClCompile Include="..\runtime\TypeProfiler.cpp" />
+ <ClCompile Include="..\runtime\TypeProfilerLog.cpp" />
</ins><span class="cx"> <ClCompile Include="..\runtime\TypeSet.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\VM.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\VMEntryScope.cpp" />
</span><span class="lines">@@ -1425,8 +1425,6 @@
</span><span class="cx"> <ClInclude Include="..\runtime\GenericTypedArrayView.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\GenericTypedArrayViewInlines.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\GetterSetter.h" />
</span><del>- <ClInclude Include="..\runtime\HighFidelityLog.h" />
- <ClInclude Include="..\runtime\HighFidelityTypeProfiler.h" />
</del><span class="cx"> <ClInclude Include="..\runtime\Identifier.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\IndexingHeader.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\IndexingHeaderInlines.h" />
</span><span class="lines">@@ -1584,6 +1582,8 @@
</span><span class="cx"> <ClInclude Include="..\runtime\TypedArrayInlines.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\TypedArrayType.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\TypeLocationCache.h" />
</span><ins>+ <ClInclude Include="..\runtime\TypeProfiler.h" />
+ <ClInclude Include="..\runtime\TypeProfilerLog.h" />
</ins><span class="cx"> <ClInclude Include="..\runtime\TypeSet.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\TypedArrays.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\Uint16Array.h" />
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxprojfilters"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -612,12 +612,6 @@
</span><span class="cx"> <ClCompile Include="..\runtime\GetterSetter.cpp">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClCompile>
</span><del>- <ClCompile Include="..\runtime\HighFidelityLog.cpp">
- <Filter>runtime</Filter>
- </ClCompile>
- <ClCompile Include="..\runtime\HighFidelityTypeProfiler.cpp">
- <Filter>runtime</Filter>
- </ClCompile>
</del><span class="cx"> <ClCompile Include="..\runtime\Identifier.cpp">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClCompile>
</span><span class="lines">@@ -855,6 +849,12 @@
</span><span class="cx"> <ClCompile Include="..\runtime\TypeLocationCache.cpp">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClCompile>
</span><ins>+ <ClCompile Include="..\runtime\TypeProfiler.cpp">
+ <Filter>runtime</Filter>
+ </ClCompile>
+ <ClCompile Include="..\runtime\TypeProfilerLog.cpp">
+ <Filter>runtime</Filter>
+ </ClCompile>
</ins><span class="cx"> <ClCompile Include="..\runtime\TypeSet.cpp">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClCompile>
</span><span class="lines">@@ -2558,12 +2558,6 @@
</span><span class="cx"> <ClInclude Include="..\runtime\GetterSetter.h">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClInclude>
</span><del>- <ClInclude Include="..\runtime\HighFidelityLog.h">
- <Filter>runtime</Filter>
- </ClInclude>
- <ClInclude Include="..\runtime\HighFidelityTypeProfiler.h">
- <Filter>runtime</Filter>
- </ClInclude>
</del><span class="cx"> <ClInclude Include="..\runtime\Identifier.h">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClInclude>
</span><span class="lines">@@ -2834,6 +2828,12 @@
</span><span class="cx"> <ClInclude Include="..\runtime\TypeLocationCache.h">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClInclude>
</span><ins>+ <ClInclude Include="..\runtime\TypeProfiler.h">
+ <Filter>runtime</Filter>
+ </ClInclude>
+ <ClInclude Include="..\runtime\TypeProfilerLog.h">
+ <Filter>runtime</Filter>
+ </ClInclude>
</ins><span class="cx"> <ClInclude Include="..\runtime\TypeSet.h">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClInclude>
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -228,10 +228,8 @@
</span><span class="cx">                 0F2D4DE819832DAC007D4B19 /* ToThisStatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2D4DE519832DAC007D4B19 /* ToThisStatus.cpp */; };
</span><span class="cx">                 0F2D4DE919832DAC007D4B19 /* ToThisStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2D4DE619832DAC007D4B19 /* ToThisStatus.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 0F2D4DEA19832DAC007D4B19 /* TypeLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2D4DE719832DAC007D4B19 /* TypeLocation.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-                0F2D4DEB19832DC4007D4B19 /* HighFidelityLog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2D4DDF19832D91007D4B19 /* HighFidelityLog.cpp */; };
-                0F2D4DEC19832DC4007D4B19 /* HighFidelityLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2D4DE019832D91007D4B19 /* HighFidelityLog.h */; settings = {ATTRIBUTES = (Private, ); }; };
-                0F2D4DED19832DC4007D4B19 /* HighFidelityTypeProfiler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2D4DE119832D91007D4B19 /* HighFidelityTypeProfiler.cpp */; };
-                0F2D4DEE19832DC4007D4B19 /* HighFidelityTypeProfiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2D4DE219832D91007D4B19 /* HighFidelityTypeProfiler.h */; settings = {ATTRIBUTES = (Private, ); }; };
</del><ins>+                0F2D4DEB19832DC4007D4B19 /* TypeProfilerLog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2D4DDF19832D91007D4B19 /* TypeProfilerLog.cpp */; };
+                0F2D4DEC19832DC4007D4B19 /* TypeProfilerLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2D4DE019832D91007D4B19 /* TypeProfilerLog.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 0F2D4DEF19832DD3007D4B19 /* TypeSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2D4DE319832D91007D4B19 /* TypeSet.cpp */; };
</span><span class="cx">                 0F2D4DF019832DD6007D4B19 /* TypeSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2D4DE419832D91007D4B19 /* TypeSet.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 0F2E892C16D028AD009E4FD2 /* UnusedPointer.h in Headers */ = {isa = PBXBuildFile; fileRef = 65987F2F16828A7E003C2F8D /* UnusedPointer.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -867,6 +865,8 @@
</span><span class="cx">                 52B310FD1974AE870080857C /* FunctionHasExecutedCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 52B310FC1974AE870080857C /* FunctionHasExecutedCache.cpp */; };
</span><span class="cx">                 52B310FF1975B4240080857C /* TypeLocationCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 52B310FE1975B4240080857C /* TypeLocationCache.cpp */; };
</span><span class="cx">                 52B311011975B4670080857C /* TypeLocationCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 52B311001975B4670080857C /* TypeLocationCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                52C952B719A289850069B386 /* TypeProfiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 52C952B619A289850069B386 /* TypeProfiler.h */; settings = {ATTRIBUTES = (Private, ); }; };
+                52C952B919A28A1C0069B386 /* TypeProfiler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 52C952B819A28A1C0069B386 /* TypeProfiler.cpp */; };
</ins><span class="cx">                 5510502618EB827500001F3E /* JSCallbackFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = 1440F88F0A508B100005F061 /* JSCallbackFunction.h */; };
</span><span class="cx">                 552EA70C1908704800A66F2F /* JSDataViewPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66BF17B6B5AB00A7AE3F /* JSDataViewPrototype.cpp */; };
</span><span class="cx">                 5540757218DA58AD00EFF7F2 /* ArgList.h in Headers */ = {isa = PBXBuildFile; fileRef = BCF605120E203EF800B9A64D /* ArgList.h */; };
</span><span class="lines">@@ -2131,10 +2131,8 @@
</span><span class="cx">                 0F2BDC5015228FFA00CD8910 /* DFGVariableEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGVariableEvent.cpp; path = dfg/DFGVariableEvent.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 0F2D4DDB19832D34007D4B19 /* DebuggerScope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DebuggerScope.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 0F2D4DDC19832D34007D4B19 /* DebuggerScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebuggerScope.h; sourceTree = "<group>"; };
</span><del>-                0F2D4DDF19832D91007D4B19 /* HighFidelityLog.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HighFidelityLog.cpp; sourceTree = "<group>"; };
-                0F2D4DE019832D91007D4B19 /* HighFidelityLog.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HighFidelityLog.h; sourceTree = "<group>"; };
-                0F2D4DE119832D91007D4B19 /* HighFidelityTypeProfiler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HighFidelityTypeProfiler.cpp; sourceTree = "<group>"; };
-                0F2D4DE219832D91007D4B19 /* HighFidelityTypeProfiler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HighFidelityTypeProfiler.h; sourceTree = "<group>"; };
</del><ins>+                0F2D4DDF19832D91007D4B19 /* TypeProfilerLog.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TypeProfilerLog.cpp; sourceTree = "<group>"; };
+                0F2D4DE019832D91007D4B19 /* TypeProfilerLog.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TypeProfilerLog.h; sourceTree = "<group>"; };
</ins><span class="cx">                 0F2D4DE319832D91007D4B19 /* TypeSet.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TypeSet.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 0F2D4DE419832D91007D4B19 /* TypeSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TypeSet.h; sourceTree = "<group>"; };
</span><span class="cx">                 0F2D4DE519832DAC007D4B19 /* ToThisStatus.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ToThisStatus.cpp; sourceTree = "<group>"; };
</span><span class="lines">@@ -2740,6 +2738,8 @@
</span><span class="cx">                 52B310FC1974AE870080857C /* FunctionHasExecutedCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FunctionHasExecutedCache.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 52B310FE1975B4240080857C /* TypeLocationCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TypeLocationCache.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 52B311001975B4670080857C /* TypeLocationCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TypeLocationCache.h; sourceTree = "<group>"; };
</span><ins>+                52C952B619A289850069B386 /* TypeProfiler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TypeProfiler.h; sourceTree = "<group>"; };
+                52C952B819A28A1C0069B386 /* TypeProfiler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TypeProfiler.cpp; sourceTree = "<group>"; };
</ins><span class="cx">                 5540758418F4A37500602A5D /* CompileRuntimeToLLVMIR.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = CompileRuntimeToLLVMIR.xcconfig; sourceTree = "<group>"; };
</span><span class="cx">                 55407AC818DA58AD00EFF7F2 /* libCompileRuntimeToLLVMIR.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libCompileRuntimeToLLVMIR.a; sourceTree = BUILT_PRODUCTS_DIR; };
</span><span class="cx">                 5D53726D0E1C546B0021E549 /* Tracing.d */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Tracing.d; sourceTree = "<group>"; };
</span><span class="lines">@@ -4399,6 +4399,7 @@
</span><span class="cx">                                 BCD203480E17135E002C7E82 /* DatePrototype.h */,
</span><span class="cx">                                 A70447EB17A0BD7000F5898E /* DumpContext.cpp */,
</span><span class="cx">                                 A70447EC17A0BD7000F5898E /* DumpContext.h */,
</span><ins>+                                2AD2EDFA19799E38004D6478 /* EnumerationMode.h */,
</ins><span class="cx">                                 BC337BEA0E1B00CB0076918A /* Error.cpp */,
</span><span class="cx">                                 BC3046060E1F497F003232CF /* Error.h */,
</span><span class="cx">                                 BC02E9040E1839DB000F9297 /* ErrorConstructor.cpp */,
</span><span class="lines">@@ -4421,18 +4422,14 @@
</span><span class="cx">                                 BC2680C10E16D4E900A06E92 /* FunctionConstructor.h */,
</span><span class="cx">                                 0FB4B52116B6278D003F696B /* FunctionExecutableDump.cpp */,
</span><span class="cx">                                 0FB4B52216B6278D003F696B /* FunctionExecutableDump.h */,
</span><ins>+                                52B310FC1974AE870080857C /* FunctionHasExecutedCache.cpp */,
</ins><span class="cx">                                 52B310FA1974AE610080857C /* FunctionHasExecutedCache.h */,
</span><del>-                                52B310FC1974AE870080857C /* FunctionHasExecutedCache.cpp */,
</del><span class="cx">                                 F692A85C0255597D01FF60F7 /* FunctionPrototype.cpp */,
</span><span class="cx">                                 F692A85D0255597D01FF60F7 /* FunctionPrototype.h */,
</span><span class="cx">                                 0F2B66B217B6B5AB00A7AE3F /* GenericTypedArrayView.h */,
</span><span class="cx">                                 0F2B66B317B6B5AB00A7AE3F /* GenericTypedArrayViewInlines.h */,
</span><span class="cx">                                 BC02E9B80E184545000F9297 /* GetterSetter.cpp */,
</span><span class="cx">                                 BC337BDE0E1AF0B80076918A /* GetterSetter.h */,
</span><del>-                                0F2D4DDF19832D91007D4B19 /* HighFidelityLog.cpp */,
-                                0F2D4DE019832D91007D4B19 /* HighFidelityLog.h */,
-                                0F2D4DE119832D91007D4B19 /* HighFidelityTypeProfiler.cpp */,
-                                0F2D4DE219832D91007D4B19 /* HighFidelityTypeProfiler.h */,
</del><span class="cx">                                 933A349D038AE80F008635CE /* Identifier.cpp */,
</span><span class="cx">                                 933A349A038AE7C6008635CE /* Identifier.h */,
</span><span class="cx">                                 8606DDE918DA44AB00A383D0 /* IdentifierInlines.h */,
</span><span class="lines">@@ -4442,9 +4439,9 @@
</span><span class="cx">                                 0FB7F38F15ED8E3800F167B2 /* IndexingType.h */,
</span><span class="cx">                                 E178636C0D9BEEC300D74E75 /* InitializeThreading.cpp */,
</span><span class="cx">                                 E178633F0D9BEC0000D74E75 /* InitializeThreading.h */,
</span><ins>+                                A7A8AF2B17ADB5F3005AB174 /* Int8Array.h */,
</ins><span class="cx">                                 A7A8AF2C17ADB5F3005AB174 /* Int16Array.h */,
</span><span class="cx">                                 A7A8AF2D17ADB5F3005AB174 /* Int32Array.h */,
</span><del>-                                A7A8AF2B17ADB5F3005AB174 /* Int8Array.h */,
</del><span class="cx">                                 A78853F717972629001440E4 /* IntendedStructureChain.cpp */,
</span><span class="cx">                                 A78853F817972629001440E4 /* IntendedStructureChain.h */,
</span><span class="cx">                                 BC9BB95B0E19680600DF8855 /* InternalFunction.cpp */,
</span><span class="lines">@@ -4503,9 +4500,9 @@
</span><span class="cx">                                 A59455911824744700CC3843 /* JSGlobalObjectDebuggable.h */,
</span><span class="cx">                                 BC756FC60E2031B200DE7D12 /* JSGlobalObjectFunctions.cpp */,
</span><span class="cx">                                 BC756FC70E2031B200DE7D12 /* JSGlobalObjectFunctions.h */,
</span><ins>+                                0F2B66C917B6B5AB00A7AE3F /* JSInt8Array.h */,
</ins><span class="cx">                                 0F2B66CA17B6B5AB00A7AE3F /* JSInt16Array.h */,
</span><span class="cx">                                 0F2B66CB17B6B5AB00A7AE3F /* JSInt32Array.h */,
</span><del>-                                0F2B66C917B6B5AB00A7AE3F /* JSInt8Array.h */,
</del><span class="cx">                                 65EA4C99092AF9E20093D800 /* JSLock.cpp */,
</span><span class="cx">                                 65EA4C9A092AF9E20093D800 /* JSLock.h */,
</span><span class="cx">                                 A700873F17CBE8EB00C3E643 /* JSMap.cpp */,
</span><span class="lines">@@ -4532,6 +4529,8 @@
</span><span class="cx">                                 7C184E1D17BEE22E007CB63A /* JSPromisePrototype.h */,
</span><span class="cx">                                 7C008CDC1871258D00955C24 /* JSPromiseReaction.cpp */,
</span><span class="cx">                                 7C008CDD1871258D00955C24 /* JSPromiseReaction.h */,
</span><ins>+                                2A05ABD31961DF2400341750 /* JSPropertyNameEnumerator.cpp */,
+                                2A05ABD41961DF2400341750 /* JSPropertyNameEnumerator.h */,
</ins><span class="cx">                                 862553CE16136AA5009F17D0 /* JSProxy.cpp */,
</span><span class="cx">                                 862553CF16136AA5009F17D0 /* JSProxy.h */,
</span><span class="cx">                                 14874AE115EBDE4A002E3587 /* JSScope.cpp */,
</span><span class="lines">@@ -4557,10 +4556,10 @@
</span><span class="cx">                                 0F2B66D017B6B5AB00A7AE3F /* JSTypedArrays.cpp */,
</span><span class="cx">                                 0F2B66D117B6B5AB00A7AE3F /* JSTypedArrays.h */,
</span><span class="cx">                                 6507D2970E871E4A00D7D896 /* JSTypeInfo.h */,
</span><ins>+                                0F2B66D217B6B5AB00A7AE3F /* JSUint8Array.h */,
+                                0F2B66D317B6B5AB00A7AE3F /* JSUint8ClampedArray.h */,
</ins><span class="cx">                                 0F2B66D417B6B5AB00A7AE3F /* JSUint16Array.h */,
</span><span class="cx">                                 0F2B66D517B6B5AB00A7AE3F /* JSUint32Array.h */,
</span><del>-                                0F2B66D217B6B5AB00A7AE3F /* JSUint8Array.h */,
-                                0F2B66D317B6B5AB00A7AE3F /* JSUint8ClampedArray.h */,
</del><span class="cx">                                 BC22A39A0E16E14800AF21C8 /* JSVariableObject.cpp */,
</span><span class="cx">                                 14F252560D08DD8D004ECFFF /* JSVariableObject.h */,
</span><span class="cx">                                 A7CA3AE117DA41AE006538AF /* JSWeakMap.cpp */,
</span><span class="lines">@@ -4702,15 +4701,19 @@
</span><span class="cx">                                 0F2B66DB17B6B5AB00A7AE3F /* TypedArrays.h */,
</span><span class="cx">                                 0F2B66DC17B6B5AB00A7AE3F /* TypedArrayType.cpp */,
</span><span class="cx">                                 0F2B66DD17B6B5AB00A7AE3F /* TypedArrayType.h */,
</span><ins>+                                52B310FE1975B4240080857C /* TypeLocationCache.cpp */,
</ins><span class="cx">                                 52B311001975B4670080857C /* TypeLocationCache.h */,
</span><del>-                                52B310FE1975B4240080857C /* TypeLocationCache.cpp */,
</del><ins>+                                52C952B819A28A1C0069B386 /* TypeProfiler.cpp */,
+                                52C952B619A289850069B386 /* TypeProfiler.h */,
+                                0F2D4DDF19832D91007D4B19 /* TypeProfilerLog.cpp */,
+                                0F2D4DE019832D91007D4B19 /* TypeProfilerLog.h */,
</ins><span class="cx">                                 0F2D4DE319832D91007D4B19 /* TypeSet.cpp */,
</span><span class="cx">                                 0F2D4DE419832D91007D4B19 /* TypeSet.h */,
</span><ins>+                                A7A8AF3017ADB5F3005AB174 /* Uint8Array.h */,
+                                A7A8AF3117ADB5F3005AB174 /* Uint8ClampedArray.h */,
</ins><span class="cx">                                 A7A8AF3217ADB5F3005AB174 /* Uint16Array.h */,
</span><span class="cx">                                 866739D113BFDE710023D87C /* Uint16WithFraction.h */,
</span><span class="cx">                                 A7A8AF3317ADB5F3005AB174 /* Uint32Array.h */,
</span><del>-                                A7A8AF3017ADB5F3005AB174 /* Uint8Array.h */,
-                                A7A8AF3117ADB5F3005AB174 /* Uint8ClampedArray.h */,
</del><span class="cx">                                 E18E3A570DF9278C00D90B34 /* VM.cpp */,
</span><span class="cx">                                 E18E3A560DF9278C00D90B34 /* VM.h */,
</span><span class="cx">                                 FE5932A5183C5A2600A1ECCC /* VMEntryScope.cpp */,
</span><span class="lines">@@ -4728,9 +4731,6 @@
</span><span class="cx">                                 1420BE7A10AA6DDB00F455D2 /* WeakRandom.h */,
</span><span class="cx">                                 A7DCB77912E3D90500911940 /* WriteBarrier.h */,
</span><span class="cx">                                 C2B6D75218A33793004A9301 /* WriteBarrierInlines.h */,
</span><del>-                                2A05ABD31961DF2400341750 /* JSPropertyNameEnumerator.cpp */,
-                                2A05ABD41961DF2400341750 /* JSPropertyNameEnumerator.h */,
-                                2AD2EDFA19799E38004D6478 /* EnumerationMode.h */,
</del><span class="cx">                         );
</span><span class="cx">                         path = runtime;
</span><span class="cx">                         sourceTree = "<group>";
</span><span class="lines">@@ -6075,7 +6075,7 @@
</span><span class="cx">                                 C283190016FE4B7D00157BFD /* HandleBlock.h in Headers */,
</span><span class="cx">                                 C283190216FE533E00157BFD /* HandleBlockInlines.h in Headers */,
</span><span class="cx">                                 0F0B83A914BCF56200885B4F /* HandlerInfo.h in Headers */,
</span><del>-                                0F2D4DEC19832DC4007D4B19 /* HighFidelityLog.h in Headers */,
</del><ins>+                                0F2D4DEC19832DC4007D4B19 /* TypeProfilerLog.h in Headers */,
</ins><span class="cx">                                 142E3136134FF0A600AFADB5 /* HandleSet.h in Headers */,
</span><span class="cx">                                 142E3138134FF0A600AFADB5 /* HandleStack.h in Headers */,
</span><span class="cx">                                 1478297B1379E8A800A7C2A3 /* HandleTypes.h in Headers */,
</span><span class="lines">@@ -6116,7 +6116,6 @@
</span><span class="cx">                                 A53243981856A489002ED692 /* InspectorJS.json in Headers */,
</span><span class="cx">                                 A532438818568335002ED692 /* InspectorJSBackendDispatchers.h in Headers */,
</span><span class="cx">                                 A532438A18568335002ED692 /* InspectorJSFrontendDispatchers.h in Headers */,
</span><del>-                                0F2D4DEE19832DC4007D4B19 /* HighFidelityTypeProfiler.h in Headers */,
</del><span class="cx">                                 8606DDEA18DA44AB00A383D0 /* IdentifierInlines.h in Headers */,
</span><span class="cx">                                 A532438C18568335002ED692 /* InspectorJSTypeBuilders.h in Headers */,
</span><span class="cx">                                 A50E4B6218809DD50068A46D /* InspectorRuntimeAgent.h in Headers */,
</span><span class="lines">@@ -6391,6 +6390,7 @@
</span><span class="cx">                                 52B311011975B4670080857C /* TypeLocationCache.h in Headers */,
</span><span class="cx">                                 0FF729BE166AD360000F5BA3 /* ProfilerExecutionCounter.h in Headers */,
</span><span class="cx">                                 0F190CAD189D82F6000AE5F0 /* ProfilerJettisonReason.h in Headers */,
</span><ins>+                                52C952B719A289850069B386 /* TypeProfiler.h in Headers */,
</ins><span class="cx">                                 0FF729BF166AD360000F5BA3 /* ProfilerOrigin.h in Headers */,
</span><span class="cx">                                 0FF729C0166AD360000F5BA3 /* ProfilerOriginStack.h in Headers */,
</span><span class="cx">                                 0FB1058C1675483300F8AB6E /* ProfilerOSRExit.h in Headers */,
</span><span class="lines">@@ -7104,9 +7104,9 @@
</span><span class="cx">                         isa = PBXSourcesBuildPhase;
</span><span class="cx">                         buildActionMask = 2147483647;
</span><span class="cx">                         files = (
</span><del>-                                52B310FF1975B4240080857C /* TypeLocationCache.cpp in Sources */,
</del><span class="cx">                                 9EA5C7A2190F088700508EBE /* InitializeLLVMMac.cpp in Sources */,
</span><span class="cx">                                 9EA5C7A1190F084200508EBE /* BundlePath.mm in Sources */,
</span><ins>+                                52B310FF1975B4240080857C /* TypeLocationCache.cpp in Sources */,
</ins><span class="cx">                                 9E729408190F021E001A91B5 /* InitializeLLVMPOSIX.cpp in Sources */,
</span><span class="cx">                                 9E729407190F01A5001A91B5 /* InitializeThreading.cpp in Sources */,
</span><span class="cx">                                 0FFA549716B8835000B3A982 /* A64DOpcode.cpp in Sources */,
</span><span class="lines">@@ -7185,7 +7185,6 @@
</span><span class="cx">                                 0F485321187750560083B687 /* DFGArithMode.cpp in Sources */,
</span><span class="cx">                                 0F2D4DDD19832D34007D4B19 /* DebuggerScope.cpp in Sources */,
</span><span class="cx">                                 0F63948415E48118006A597C /* DFGArrayMode.cpp in Sources */,
</span><del>-                                0F2D4DED19832DC4007D4B19 /* HighFidelityTypeProfiler.cpp in Sources */,
</del><span class="cx">                                 A7D9A29417A0BC7400EE2618 /* DFGAtTailAbstractState.cpp in Sources */,
</span><span class="cx">                                 0F666EC61835672B00D017F1 /* DFGAvailability.cpp in Sources */,
</span><span class="cx">                                 0F714CA416EA92F000F3EBEB /* DFGBackwardsPropagationPhase.cpp in Sources */,
</span><span class="lines">@@ -7308,7 +7307,7 @@
</span><span class="cx">                                 A7B48F490EE8936F00DCBDB6 /* ExecutableAllocator.cpp in Sources */,
</span><span class="cx">                                 86DB64640F95C6FC00D7D921 /* ExecutableAllocatorFixedVMPool.cpp in Sources */,
</span><span class="cx">                                 0F56A1D515001CF4002992B1 /* ExecutionCounter.cpp in Sources */,
</span><del>-                                0F2D4DEB19832DC4007D4B19 /* HighFidelityLog.cpp in Sources */,
</del><ins>+                                0F2D4DEB19832DC4007D4B19 /* TypeProfilerLog.cpp in Sources */,
</ins><span class="cx">                                 0F0332C018ADFAE1005F979A /* ExitingJITType.cpp in Sources */,
</span><span class="cx">                                 0FB105851675480F00F8AB6E /* ExitKind.cpp in Sources */,
</span><span class="cx">                                 0FEA0A1C1708B00700BB722C /* FTLAbstractHeap.cpp in Sources */,
</span><span class="lines">@@ -7642,6 +7641,7 @@
</span><span class="cx">                                 A7386555118697B400540279 /* ThunkGenerators.cpp in Sources */,
</span><span class="cx">                                 0F2B670717B6B5AB00A7AE3F /* TypedArrayController.cpp in Sources */,
</span><span class="cx">                                 0F2B670A17B6B5AB00A7AE3F /* TypedArrayType.cpp in Sources */,
</span><ins>+                                52C952B919A28A1C0069B386 /* TypeProfiler.cpp in Sources */,
</ins><span class="cx">                                 0FF4274A158EBE91004CB9FF /* udis86.c in Sources */,
</span><span class="cx">                                 0FF42740158EBE8B004CB9FF /* udis86_decode.c in Sources */,
</span><span class="cx">                                 0FF42743158EBE91004CB9FF /* udis86_input.c in Sources */,
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeBytecodeListjson"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/BytecodeList.json (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/BytecodeList.json        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/bytecode/BytecodeList.json        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -120,7 +120,7 @@
</span><span class="cx"> { "name" : "op_profile_will_call", "length" : 2 },
</span><span class="cx"> { "name" : "op_profile_did_call", "length" : 2 },
</span><span class="cx"> { "name" : "op_end", "length" : 2 },
</span><del>- { "name" : "op_profile_types_with_high_fidelity", "length" : 6 },
</del><ins>+ { "name" : "op_profile_type", "length" : 6 },
</ins><span class="cx"> { "name" : "op_get_enumerable_length", "length" : 3 },
</span><span class="cx"> { "name" : "op_has_indexed_property", "length" : 5 },
</span><span class="cx"> { "name" : "op_has_structure_property", "length" : 5 },
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeBytecodeUseDefh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/BytecodeUseDef.h (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/BytecodeUseDef.h        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/bytecode/BytecodeUseDef.h        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx"> case op_tear_off_activation:
</span><span class="cx"> case op_profile_will_call:
</span><span class="cx"> case op_profile_did_call:
</span><del>- case op_profile_types_with_high_fidelity:
</del><ins>+ case op_profile_type:
</ins><span class="cx"> case op_throw:
</span><span class="cx"> case op_push_with_scope:
</span><span class="cx"> case op_end:
</span><span class="lines">@@ -287,7 +287,7 @@
</span><span class="cx"> case op_put_by_val_direct:
</span><span class="cx"> case op_put_by_index:
</span><span class="cx"> case op_tear_off_arguments:
</span><del>- case op_profile_types_with_high_fidelity:
</del><ins>+ case op_profile_type:
</ins><span class="cx"> case op_touch_entry:
</span><span class="cx"> #define LLINT_HELPER_OPCODES(opcode, length) case opcode:
</span><span class="cx"> FOR_EACH_LLINT_OPCODE_EXTENSION(LLINT_HELPER_OPCODES);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeCodeBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -40,7 +40,6 @@
</span><span class="cx"> #include "DFGWorklist.h"
</span><span class="cx"> #include "Debugger.h"
</span><span class="cx"> #include "FunctionExecutableDump.h"
</span><del>-#include "HighFidelityTypeProfiler.h"
</del><span class="cx"> #include "Interpreter.h"
</span><span class="cx"> #include "JIT.h"
</span><span class="cx"> #include "JITStubs.h"
</span><span class="lines">@@ -49,7 +48,6 @@
</span><span class="cx"> #include "JSFunction.h"
</span><span class="cx"> #include "JSNameScope.h"
</span><span class="cx"> #include "LLIntEntrypoint.h"
</span><del>-#include "TypeLocationCache.h"
</del><span class="cx"> #include "LowLevelInterpreter.h"
</span><span class="cx"> #include "JSCInlines.h"
</span><span class="cx"> #include "PolymorphicGetByIdList.h"
</span><span class="lines">@@ -60,6 +58,8 @@
</span><span class="cx"> #include "RepatchBuffer.h"
</span><span class="cx"> #include "SlotVisitorInlines.h"
</span><span class="cx"> #include "StackVisitor.h"
</span><ins>+#include "TypeLocationCache.h"
+#include "TypeProfiler.h"
</ins><span class="cx"> #include "UnlinkedInstructionStream.h"
</span><span class="cx"> #include <wtf/BagToHashMap.h>
</span><span class="cx"> #include <wtf/CommaPrinter.h>
</span><span class="lines">@@ -839,11 +839,11 @@
</span><span class="cx"> ++it;
</span><span class="cx"> break;
</span><span class="cx"> }
</span><del>- case op_profile_types_with_high_fidelity: {
</del><ins>+ case op_profile_type: {
</ins><span class="cx"> int r0 = (++it)->u.operand;
</span><span class="cx"> ++it;
</span><span class="cx"> ++it;
</span><del>- printLocationAndOp(out, exec, location, it, "op_profile_types_with_high_fidelity");
</del><ins>+ printLocationAndOp(out, exec, location, it, "op_profile_type");
</ins><span class="cx"> out.printf("%s", registerName(r0).data());
</span><span class="cx"> break;
</span><span class="cx"> }
</span><span class="lines">@@ -1714,9 +1714,9 @@
</span><span class="cx"> bool didCloneSymbolTable = false;
</span><span class="cx">
</span><span class="cx"> if (SymbolTable* symbolTable = unlinkedCodeBlock->symbolTable()) {
</span><del>- if (m_vm->isProfilingTypesWithHighFidelity()) {
</del><ins>+ if (m_vm->typeProfiler()) {
</ins><span class="cx"> ConcurrentJITLocker locker(symbolTable->m_lock);
</span><del>- symbolTable->prepareForHighFidelityTypeProfiling(locker);
</del><ins>+ symbolTable->prepareForTypeProfiling(locker);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (codeType() == FunctionCode && symbolTable->captureCount()) {
</span><span class="lines">@@ -1729,8 +1729,8 @@
</span><span class="cx"> ASSERT(m_source);
</span><span class="cx"> setNumParameters(unlinkedCodeBlock->numParameters());
</span><span class="cx">
</span><del>- if (vm()->isProfilingTypesWithHighFidelity())
- vm()->highFidelityTypeProfiler()->functionHasExecutedCache()->removeUnexecutedRange(m_ownerExecutable->sourceID(), m_ownerExecutable->highFidelityTypeProfilingStartOffset(), m_ownerExecutable->highFidelityTypeProfilingEndOffset());
</del><ins>+ if (vm()->typeProfiler())
+ vm()->typeProfiler()->functionHasExecutedCache()->removeUnexecutedRange(m_ownerExecutable->sourceID(), m_ownerExecutable->typeProfilingStartOffset(), m_ownerExecutable->typeProfilingEndOffset());
</ins><span class="cx">
</span><span class="cx"> setConstantRegisters(unlinkedCodeBlock->constantRegisters());
</span><span class="cx"> if (unlinkedCodeBlock->usesGlobalObject())
</span><span class="lines">@@ -1738,8 +1738,8 @@
</span><span class="cx"> m_functionDecls.resizeToFit(unlinkedCodeBlock->numberOfFunctionDecls());
</span><span class="cx"> for (size_t count = unlinkedCodeBlock->numberOfFunctionDecls(), i = 0; i < count; ++i) {
</span><span class="cx"> UnlinkedFunctionExecutable* unlinkedExecutable = unlinkedCodeBlock->functionDecl(i);
</span><del>- if (vm()->isProfilingTypesWithHighFidelity())
- vm()->highFidelityTypeProfiler()->functionHasExecutedCache()->insertUnexecutedRange(m_ownerExecutable->sourceID(), unlinkedExecutable->highFidelityTypeProfilingStartOffset(), unlinkedExecutable->highFidelityTypeProfilingEndOffset());
</del><ins>+ if (vm()->typeProfiler())
+ vm()->typeProfiler()->functionHasExecutedCache()->insertUnexecutedRange(m_ownerExecutable->sourceID(), unlinkedExecutable->typeProfilingStartOffset(), unlinkedExecutable->typeProfilingEndOffset());
</ins><span class="cx"> unsigned lineCount = unlinkedExecutable->lineCount();
</span><span class="cx"> unsigned firstLine = ownerExecutable->lineNo() + unlinkedExecutable->firstLineOffset();
</span><span class="cx"> bool startColumnIsOnOwnerStartLine = !unlinkedExecutable->firstLineOffset();
</span><span class="lines">@@ -1756,8 +1756,8 @@
</span><span class="cx"> m_functionExprs.resizeToFit(unlinkedCodeBlock->numberOfFunctionExprs());
</span><span class="cx"> for (size_t count = unlinkedCodeBlock->numberOfFunctionExprs(), i = 0; i < count; ++i) {
</span><span class="cx"> UnlinkedFunctionExecutable* unlinkedExecutable = unlinkedCodeBlock->functionExpr(i);
</span><del>- if (vm()->isProfilingTypesWithHighFidelity())
- vm()->highFidelityTypeProfiler()->functionHasExecutedCache()->insertUnexecutedRange(m_ownerExecutable->sourceID(), unlinkedExecutable->highFidelityTypeProfilingStartOffset(), unlinkedExecutable->highFidelityTypeProfilingEndOffset());
</del><ins>+ if (vm()->typeProfiler())
+ vm()->typeProfiler()->functionHasExecutedCache()->insertUnexecutedRange(m_ownerExecutable->sourceID(), unlinkedExecutable->typeProfilingStartOffset(), unlinkedExecutable->typeProfilingEndOffset());
</ins><span class="cx"> unsigned lineCount = unlinkedExecutable->lineCount();
</span><span class="cx"> unsigned firstLine = ownerExecutable->lineNo() + unlinkedExecutable->firstLineOffset();
</span><span class="cx"> bool startColumnIsOnOwnerStartLine = !unlinkedExecutable->firstLineOffset();
</span><span class="lines">@@ -1992,23 +1992,23 @@
</span><span class="cx"> break;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- case op_profile_types_with_high_fidelity: {
- // The format of this instruction is: op_profile_types_with_high_fidelity regToProfile, TypeLocation*, flag, identifier?, resolveType?
</del><ins>+ case op_profile_type: {
+ // The format of this instruction is: op_profile_type regToProfile, TypeLocation*, flag, identifier?, resolveType?
</ins><span class="cx"> size_t instructionOffset = i + opLength - 1;
</span><span class="cx"> unsigned divotStart, divotEnd;
</span><span class="cx"> GlobalVariableID globalVariableID;
</span><span class="cx"> RefPtr<TypeSet> globalTypeSet;
</span><del>- bool shouldAnalyze = m_unlinkedCode->highFidelityTypeProfileExpressionInfoForBytecodeOffset(instructionOffset, divotStart, divotEnd);
</del><ins>+ bool shouldAnalyze = m_unlinkedCode->typeProfilerExpressionInfoForBytecodeOffset(instructionOffset, divotStart, divotEnd);
</ins><span class="cx"> VirtualRegister profileRegister(pc[1].u.operand);
</span><del>- ProfileTypesWithHighFidelityBytecodeFlag flag = static_cast<ProfileTypesWithHighFidelityBytecodeFlag>(pc[3].u.operand);
</del><ins>+ ProfileTypeBytecodeFlag flag = static_cast<ProfileTypeBytecodeFlag>(pc[3].u.operand);
</ins><span class="cx"> SymbolTable* symbolTable = nullptr;
</span><span class="cx">
</span><span class="cx"> switch (flag) {
</span><del>- case ProfileTypesBytecodePutToScope:
- case ProfileTypesBytecodeGetFromScope: {
</del><ins>+ case ProfileTypeBytecodePutToScope:
+ case ProfileTypeBytecodeGetFromScope: {
</ins><span class="cx"> const Identifier& ident = identifier(pc[4].u.operand);
</span><span class="cx"> ResolveType type = static_cast<ResolveType>(pc[5].u.operand);
</span><del>- ResolveOp op = JSScope::abstractResolve(m_globalObject->globalExec(), needsActivation(), scope, ident, (flag == ProfileTypesBytecodeGetFromScope ? Get : Put), type);
</del><ins>+ ResolveOp op = JSScope::abstractResolve(m_globalObject->globalExec(), needsActivation(), scope, ident, (flag == ProfileTypeBytecodeGetFromScope ? Get : Put), type);
</ins><span class="cx">
</span><span class="cx"> // FIXME: handle other values for op.type here, and also consider what to do when we can't statically determine the globalID
</span><span class="cx"> // https://bugs.webkit.org/show_bug.cgi?id=135184
</span><span class="lines">@@ -2020,29 +2020,29 @@
</span><span class="cx"> if (symbolTable) {
</span><span class="cx"> ConcurrentJITLocker locker(symbolTable->m_lock);
</span><span class="cx"> // If our parent scope was created while profiling was disabled, it will not have prepared for profiling yet.
</span><del>- symbolTable->prepareForHighFidelityTypeProfiling(locker);
</del><ins>+ symbolTable->prepareForTypeProfiling(locker);
</ins><span class="cx"> globalVariableID = symbolTable->uniqueIDForVariable(locker, ident.impl(), *vm());
</span><span class="cx"> globalTypeSet = symbolTable->globalTypeSetForVariable(locker, ident.impl(), *vm());
</span><span class="cx"> } else
</span><del>- globalVariableID = HighFidelityNoGlobalIDExists;
</del><ins>+ globalVariableID = TypeProfilerNoGlobalIDExists;
</ins><span class="cx">
</span><span class="cx"> break;
</span><span class="cx"> }
</span><del>- case ProfileTypesBytecodeHasGlobalID: {
</del><ins>+ case ProfileTypeBytecodeHasGlobalID: {
</ins><span class="cx"> symbolTable = m_symbolTable.get();
</span><span class="cx"> ConcurrentJITLocker locker(symbolTable->m_lock);
</span><span class="cx"> globalVariableID = symbolTable->uniqueIDForRegister(locker, profileRegister.offset(), *vm());
</span><span class="cx"> globalTypeSet = symbolTable->globalTypeSetForRegister(locker, profileRegister.offset(), *vm());
</span><span class="cx"> break;
</span><span class="cx"> }
</span><del>- case ProfileTypesBytecodeDoesNotHaveGlobalID:
- case ProfileTypesBytecodeFunctionArgument: {
- globalVariableID = HighFidelityNoGlobalIDExists;
</del><ins>+ case ProfileTypeBytecodeDoesNotHaveGlobalID:
+ case ProfileTypeBytecodeFunctionArgument: {
+ globalVariableID = TypeProfilerNoGlobalIDExists;
</ins><span class="cx"> break;
</span><span class="cx"> }
</span><del>- case ProfileTypesBytecodeFunctionReturnStatement: {
</del><ins>+ case ProfileTypeBytecodeFunctionReturnStatement: {
</ins><span class="cx"> globalTypeSet = returnStatementTypeSet();
</span><del>- globalVariableID = HighFidelityReturnStatement;
</del><ins>+ globalVariableID = TypeProfilerReturnStatement;
</ins><span class="cx"> if (!shouldAnalyze) {
</span><span class="cx"> // Because some return statements are added implicitly (to return undefined at the end of a function), and these nodes don't emit expression ranges, give them some range.
</span><span class="cx"> // Currently, this divot is on the open brace of the function.
</span><span class="lines">@@ -2053,16 +2053,16 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>- std::pair<TypeLocation*, bool> locationPair = vm()->highFidelityTypeProfiler()->typeLocationCache()->getTypeLocation(globalVariableID,
</del><ins>+ std::pair<TypeLocation*, bool> locationPair = vm()->typeProfiler()->typeLocationCache()->getTypeLocation(globalVariableID,
</ins><span class="cx"> m_ownerExecutable->sourceID(), divotStart, divotEnd, globalTypeSet, vm());
</span><span class="cx"> TypeLocation* location = locationPair.first;
</span><span class="cx"> bool isNewLocation = locationPair.second;
</span><span class="cx">
</span><del>- if (ProfileTypesBytecodeFunctionReturnStatement)
</del><ins>+ if (ProfileTypeBytecodeFunctionReturnStatement)
</ins><span class="cx"> location->m_divotForFunctionOffsetIfReturnStatement = m_sourceOffset;
</span><span class="cx">
</span><span class="cx"> if (shouldAnalyze && isNewLocation)
</span><del>- vm()->highFidelityTypeProfiler()->insertNewLocation(location);
</del><ins>+ vm()->typeProfiler()->insertNewLocation(location);
</ins><span class="cx">
</span><span class="cx"> instructions[i + 2].u.location = location;
</span><span class="cx"> break;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeTypeLocationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/TypeLocation.h (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/TypeLocation.h        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/bytecode/TypeLocation.h        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -30,10 +30,10 @@
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span><span class="cx">
</span><del>-enum HighFidelityGlobalIDFlags {
- HighFidelityNeedsUniqueIDGeneration = -1,
- HighFidelityNoGlobalIDExists = -2,
- HighFidelityReturnStatement = -3
</del><ins>+enum TypeProfilerGlobalIDFlags {
+ TypeProfilerNeedsUniqueIDGeneration = -1,
+ TypeProfilerNoGlobalIDExists = -2,
+ TypeProfilerReturnStatement = -3
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> typedef intptr_t GlobalVariableID;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -99,8 +99,8 @@
</span><span class="cx"> , m_unlinkedBodyEndColumn(m_lineCount ? node->endColumn() : node->endColumn() - node->startColumn())
</span><span class="cx"> , m_startOffset(node->source().startOffset() - source.startOffset())
</span><span class="cx"> , m_sourceLength(node->source().length())
</span><del>- , m_highFidelityTypeProfilingStartOffset(node->functionNameStart())
- , m_highFidelityTypeProfilingEndOffset(node->startStartOffset() + node->source().length() - 1)
</del><ins>+ , m_typeProfilingStartOffset(node->functionNameStart())
+ , m_typeProfilingEndOffset(node->startStartOffset() + node->source().length() - 1)
</ins><span class="cx"> , m_features(node->features())
</span><span class="cx"> , m_functionMode(node->functionMode())
</span><span class="cx"> {
</span><span class="lines">@@ -402,11 +402,11 @@
</span><span class="cx"> m_expressionInfo.append(info);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool UnlinkedCodeBlock::highFidelityTypeProfileExpressionInfoForBytecodeOffset(unsigned bytecodeOffset, unsigned& startDivot, unsigned& endDivot)
</del><ins>+bool UnlinkedCodeBlock::typeProfilerExpressionInfoForBytecodeOffset(unsigned bytecodeOffset, unsigned& startDivot, unsigned& endDivot)
</ins><span class="cx"> {
</span><span class="cx"> static const bool verbose = false;
</span><del>- auto iter = m_highFidelityTypeProfileInfoMap.find(bytecodeOffset);
- if (iter == m_highFidelityTypeProfileInfoMap.end()) {
</del><ins>+ auto iter = m_typeProfilerInfoMap.find(bytecodeOffset);
+ if (iter == m_typeProfilerInfoMap.end()) {
</ins><span class="cx"> if (verbose)
</span><span class="cx"> dataLogF("Don't have assignment info for offset:%u\n", bytecodeOffset);
</span><span class="cx"> startDivot = UINT_MAX;
</span><span class="lines">@@ -414,18 +414,18 @@
</span><span class="cx"> return false;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- HighFidelityTypeProfileExpressionRange& range = iter->value;
</del><ins>+ TypeProfilerExpressionRange& range = iter->value;
</ins><span class="cx"> startDivot = range.m_startDivot;
</span><span class="cx"> endDivot = range.m_endDivot;
</span><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void UnlinkedCodeBlock::addHighFidelityTypeProfileExpressionInfo(unsigned instructionOffset, unsigned startDivot, unsigned endDivot)
</del><ins>+void UnlinkedCodeBlock::addTypeProfilerExpressionInfo(unsigned instructionOffset, unsigned startDivot, unsigned endDivot)
</ins><span class="cx"> {
</span><del>- HighFidelityTypeProfileExpressionRange range;
</del><ins>+ TypeProfilerExpressionRange range;
</ins><span class="cx"> range.m_startDivot = startDivot;
</span><span class="cx"> range.m_endDivot = endDivot;
</span><del>- m_highFidelityTypeProfileInfoMap.set(instructionOffset, range);
</del><ins>+ m_typeProfilerInfoMap.set(instructionOffset, range);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void UnlinkedProgramCodeBlock::visitChildren(JSCell* cell, SlotVisitor& visitor)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -125,8 +125,8 @@
</span><span class="cx"> unsigned unlinkedBodyEndColumn() const { return m_unlinkedBodyEndColumn; }
</span><span class="cx"> unsigned startOffset() const { return m_startOffset; }
</span><span class="cx"> unsigned sourceLength() { return m_sourceLength; }
</span><del>- unsigned highFidelityTypeProfilingStartOffset() const { return m_highFidelityTypeProfilingStartOffset; }
- unsigned highFidelityTypeProfilingEndOffset() const { return m_highFidelityTypeProfilingEndOffset; }
</del><ins>+ unsigned typeProfilingStartOffset() const { return m_typeProfilingStartOffset; }
+ unsigned typeProfilingEndOffset() const { return m_typeProfilingEndOffset; }
</ins><span class="cx">
</span><span class="cx"> String paramString() const;
</span><span class="cx">
</span><span class="lines">@@ -187,8 +187,8 @@
</span><span class="cx"> unsigned m_unlinkedBodyEndColumn;
</span><span class="cx"> unsigned m_startOffset;
</span><span class="cx"> unsigned m_sourceLength;
</span><del>- unsigned m_highFidelityTypeProfilingStartOffset;
- unsigned m_highFidelityTypeProfilingEndOffset;
</del><ins>+ unsigned m_typeProfilingStartOffset;
+ unsigned m_typeProfilingEndOffset;
</ins><span class="cx">
</span><span class="cx"> CodeFeatures m_features;
</span><span class="cx">
</span><span class="lines">@@ -276,7 +276,7 @@
</span><span class="cx"> void addExpressionInfo(unsigned instructionOffset, int divot,
</span><span class="cx"> int startOffset, int endOffset, unsigned line, unsigned column);
</span><span class="cx">
</span><del>- void addHighFidelityTypeProfileExpressionInfo(unsigned instructionOffset, unsigned startDivot, unsigned endDivot);
</del><ins>+ void addTypeProfilerExpressionInfo(unsigned instructionOffset, unsigned startDivot, unsigned endDivot);
</ins><span class="cx">
</span><span class="cx"> bool hasExpressionInfo() { return m_expressionInfo.size(); }
</span><span class="cx">
</span><span class="lines">@@ -470,7 +470,7 @@
</span><span class="cx"> void expressionRangeForBytecodeOffset(unsigned bytecodeOffset, int& divot,
</span><span class="cx"> int& startOffset, int& endOffset, unsigned& line, unsigned& column);
</span><span class="cx">
</span><del>- bool highFidelityTypeProfileExpressionInfoForBytecodeOffset(unsigned bytecodeOffset, unsigned& startDivot, unsigned& endDivot);
</del><ins>+ bool typeProfilerExpressionInfoForBytecodeOffset(unsigned bytecodeOffset, unsigned& startDivot, unsigned& endDivot);
</ins><span class="cx">
</span><span class="cx"> void recordParse(CodeFeatures features, bool hasCapturedVariables, unsigned firstLine, unsigned lineCount, unsigned endColumn)
</span><span class="cx"> {
</span><span class="lines">@@ -583,11 +583,11 @@
</span><span class="cx"> private:
</span><span class="cx"> OwnPtr<RareData> m_rareData;
</span><span class="cx"> Vector<ExpressionRangeInfo> m_expressionInfo;
</span><del>- struct HighFidelityTypeProfileExpressionRange {
</del><ins>+ struct TypeProfilerExpressionRange {
</ins><span class="cx"> unsigned m_startDivot;
</span><span class="cx"> unsigned m_endDivot;
</span><span class="cx"> };
</span><del>- HashMap<unsigned, HighFidelityTypeProfileExpressionRange> m_highFidelityTypeProfileInfoMap;
</del><ins>+ HashMap<unsigned, TypeProfilerExpressionRange> m_typeProfilerInfoMap;
</ins><span class="cx">
</span><span class="cx"> protected:
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -115,7 +115,7 @@
</span><span class="cx">
</span><span class="cx"> m_codeBlock->shrinkToFit();
</span><span class="cx">
</span><del>- if (m_codeBlock->symbolTable() && !m_codeBlock->vm()->isProfilingTypesWithHighFidelity())
</del><ins>+ if (m_codeBlock->symbolTable() && !m_codeBlock->vm()->typeProfiler())
</ins><span class="cx"> m_codeBlock->setSymbolTable(m_codeBlock->symbolTable()->cloneCapturedNames(*m_codeBlock->vm()));
</span><span class="cx">
</span><span class="cx"> if (m_expressionTooDeep)
</span><span class="lines">@@ -339,7 +339,7 @@
</span><span class="cx">
</span><span class="cx"> m_symbolTable->setCaptureEnd(virtualRegisterForLocal(codeBlock->m_numVars).offset());
</span><span class="cx">
</span><del>- bool canLazilyCreateFunctions = !functionBody->needsActivationForMoreThanVariables() && !m_shouldEmitDebugHooks && !isProfilingTypesWithHighFidelity();
</del><ins>+ bool canLazilyCreateFunctions = !functionBody->needsActivationForMoreThanVariables() && !m_shouldEmitDebugHooks && !m_vm->typeProfiler();
</ins><span class="cx"> m_firstLazyFunction = codeBlock->m_numVars;
</span><span class="cx"> for (size_t i = 0; i < functionStack.size(); ++i) {
</span><span class="cx"> FunctionBodyNode* function = functionStack[i];
</span><span class="lines">@@ -1006,8 +1006,8 @@
</span><span class="cx"> if (captureMode == IsCaptured)
</span><span class="cx"> instructions().append(watchableVariable(dst->index()));
</span><span class="cx">
</span><del>- if (!dst->isTemporary() && isProfilingTypesWithHighFidelity())
- emitProfileTypesWithHighFidelity(dst, ProfileTypesBytecodeHasGlobalID, nullptr);
</del><ins>+ if (!dst->isTemporary() && vm()->typeProfiler())
+ emitProfileType(dst, ProfileTypeBytecodeHasGlobalID, nullptr);
</ins><span class="cx">
</span><span class="cx"> return dst;
</span><span class="cx"> }
</span><span class="lines">@@ -1118,21 +1118,21 @@
</span><span class="cx"> return dst;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void BytecodeGenerator::emitHighFidelityTypeProfilingExpressionInfo(const JSTextPosition& startDivot, const JSTextPosition& endDivot)
</del><ins>+void BytecodeGenerator::emitTypeProfilerExpressionInfo(const JSTextPosition& startDivot, const JSTextPosition& endDivot)
</ins><span class="cx"> {
</span><span class="cx"> unsigned start = startDivot.offset; // Ranges are inclusive of their endpoints, AND 0 indexed.
</span><span class="cx"> unsigned end = endDivot.offset - 1; // End Ranges already go one past the inclusive range, so subtract 1.
</span><span class="cx"> unsigned instructionOffset = instructions().size() - 1;
</span><del>- m_codeBlock->addHighFidelityTypeProfileExpressionInfo(instructionOffset, start, end);
</del><ins>+ m_codeBlock->addTypeProfilerExpressionInfo(instructionOffset, start, end);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void BytecodeGenerator::emitProfileTypesWithHighFidelity(RegisterID* registerToProfile, ProfileTypesWithHighFidelityBytecodeFlag flag, const Identifier* identifier)
</del><ins>+void BytecodeGenerator::emitProfileType(RegisterID* registerToProfile, ProfileTypeBytecodeFlag flag, const Identifier* identifier)
</ins><span class="cx"> {
</span><del>- if (flag == ProfileTypesBytecodeGetFromScope || flag == ProfileTypesBytecodePutToScope)
</del><ins>+ if (flag == ProfileTypeBytecodeGetFromScope || flag == ProfileTypeBytecodePutToScope)
</ins><span class="cx"> RELEASE_ASSERT(identifier);
</span><span class="cx">
</span><del>- // The format of this instruction is: op_profile_types_with_high_fidelity regToProfile, TypeLocation*, flag, identifier?, resolveType?
- emitOpcode(op_profile_types_with_high_fidelity);
</del><ins>+ // The format of this instruction is: op_profile_type regToProfile, TypeLocation*, flag, identifier?, resolveType?
+ emitOpcode(op_profile_type);
</ins><span class="cx"> instructions().append(registerToProfile->index());
</span><span class="cx"> instructions().append(0);
</span><span class="cx"> instructions().append(flag);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -220,13 +220,13 @@
</span><span class="cx"> TryData* tryData;
</span><span class="cx"> };
</span><span class="cx">
</span><del>- enum ProfileTypesWithHighFidelityBytecodeFlag {
- ProfileTypesBytecodePutToScope,
- ProfileTypesBytecodeGetFromScope,
- ProfileTypesBytecodeHasGlobalID,
- ProfileTypesBytecodeDoesNotHaveGlobalID,
- ProfileTypesBytecodeFunctionArgument,
- ProfileTypesBytecodeFunctionReturnStatement
</del><ins>+ enum ProfileTypeBytecodeFlag {
+ ProfileTypeBytecodePutToScope,
+ ProfileTypeBytecodeGetFromScope,
+ ProfileTypeBytecodeHasGlobalID,
+ ProfileTypeBytecodeDoesNotHaveGlobalID,
+ ProfileTypeBytecodeFunctionArgument,
+ ProfileTypeBytecodeFunctionReturnStatement
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> class BytecodeGenerator {
</span><span class="lines">@@ -407,8 +407,8 @@
</span><span class="cx"> return emitNode(n);
</span><span class="cx"> }
</span><span class="cx">
</span><del>- void emitHighFidelityTypeProfilingExpressionInfo(const JSTextPosition& startDivot, const JSTextPosition& endDivot);
- void emitProfileTypesWithHighFidelity(RegisterID* registerToProfile, ProfileTypesWithHighFidelityBytecodeFlag, const Identifier*);
</del><ins>+ void emitTypeProfilerExpressionInfo(const JSTextPosition& startDivot, const JSTextPosition& endDivot);
+ void emitProfileType(RegisterID* registerToProfile, ProfileTypeBytecodeFlag, const Identifier*);
</ins><span class="cx">
</span><span class="cx"> RegisterID* emitLoad(RegisterID* dst, bool);
</span><span class="cx"> RegisterID* emitLoad(RegisterID* dst, double);
</span><span class="lines">@@ -755,8 +755,6 @@
</span><span class="cx">
</span><span class="cx"> VM* m_vm;
</span><span class="cx">
</span><del>- bool isProfilingTypesWithHighFidelity() { return vm()->isProfilingTypesWithHighFidelity(); }
-
</del><span class="cx"> OpcodeID m_lastOpcodeID;
</span><span class="cx"> #ifndef NDEBUG
</span><span class="cx"> size_t m_lastOpcodePosition;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerNodesCodegencpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -139,10 +139,10 @@
</span><span class="cx"> return 0;
</span><span class="cx">
</span><span class="cx"> RegisterID* result = generator.moveToDestinationIfNeeded(dst, generator.thisRegister());
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(generator.thisRegister(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(generator.thisRegister(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
</ins><span class="cx"> static const unsigned thisLength = 4;
</span><del>- generator.emitHighFidelityTypeProfilingExpressionInfo(position(), JSTextPosition(-1, position().offset + thisLength, -1));
</del><ins>+ generator.emitTypeProfilerExpressionInfo(position(), JSTextPosition(-1, position().offset + thisLength, -1));
</ins><span class="cx"> }
</span><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="lines">@@ -159,9 +159,9 @@
</span><span class="cx"> if (Local local = generator.local(m_ident)) {
</span><span class="cx"> if (dst == generator.ignoredResult())
</span><span class="cx"> return 0;
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(local.get(), ProfileTypesBytecodeHasGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(m_position, JSTextPosition(-1, m_position.offset + m_ident.length(), -1));
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(local.get(), ProfileTypeBytecodeHasGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(m_position, JSTextPosition(-1, m_position.offset + m_ident.length(), -1));
</ins><span class="cx"> }
</span><span class="cx"> return generator.moveToDestinationIfNeeded(dst, local.get());
</span><span class="cx"> }
</span><span class="lines">@@ -171,9 +171,9 @@
</span><span class="cx"> RefPtr<RegisterID> scope = generator.emitResolveScope(generator.tempDestination(dst), m_ident);
</span><span class="cx"> RegisterID* finalDest = generator.finalDestination(dst);
</span><span class="cx"> RegisterID* result = generator.emitGetFromScope(finalDest, scope.get(), m_ident, ThrowIfNotFound);
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(finalDest, ProfileTypesBytecodeGetFromScope, &m_ident);
- generator.emitHighFidelityTypeProfilingExpressionInfo(m_position, JSTextPosition(-1, m_position.offset + m_ident.length(), -1));
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(finalDest, ProfileTypeBytecodeGetFromScope, &m_ident);
+ generator.emitTypeProfilerExpressionInfo(m_position, JSTextPosition(-1, m_position.offset + m_ident.length(), -1));
</ins><span class="cx"> }
</span><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="lines">@@ -393,9 +393,9 @@
</span><span class="cx"> generator.emitExpressionInfo(divot(), divotStart(), divotEnd());
</span><span class="cx"> RegisterID* finalDest = generator.finalDestination(dst);
</span><span class="cx"> RegisterID* ret = generator.emitGetByVal(finalDest, base.get(), property);
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(finalDest, ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(finalDest, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return ret;
</span><span class="cx"> }
</span><span class="lines">@@ -419,9 +419,9 @@
</span><span class="cx"> generator.emitExpressionInfo(divot(), divotStart(), divotEnd());
</span><span class="cx"> RegisterID* finalDest = generator.finalDestination(dst);
</span><span class="cx"> RegisterID* ret = generator.emitGetById(finalDest, base, m_ident);
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(finalDest, ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(finalDest, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return ret;
</span><span class="cx"> }
</span><span class="lines">@@ -503,9 +503,9 @@
</span><span class="cx"> CallArguments callArguments(generator, m_args);
</span><span class="cx"> generator.emitLoad(callArguments.thisRegister(), jsUndefined());
</span><span class="cx"> RegisterID* ret = generator.emitCall(returnValue.get(), func.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd());
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(returnValue.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return ret;
</span><span class="cx"> }
</span><span class="lines">@@ -524,9 +524,9 @@
</span><span class="cx"> // This passes NoExpectedFunction because we expect that if the function is in a
</span><span class="cx"> // local variable, then it's not one of our built-in constructors.
</span><span class="cx"> RegisterID* ret = generator.emitCall(returnValue.get(), func.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd());
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(returnValue.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return ret;
</span><span class="cx"> }
</span><span class="lines">@@ -540,9 +540,9 @@
</span><span class="cx"> generator.emitResolveScope(callArguments.thisRegister(), m_ident);
</span><span class="cx"> generator.emitGetFromScope(func.get(), callArguments.thisRegister(), m_ident, ThrowIfNotFound);
</span><span class="cx"> RegisterID* ret = generator.emitCall(returnValue.get(), func.get(), expectedFunction, callArguments, divot(), divotStart(), divotEnd());
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(returnValue.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return ret;
</span><span class="cx"> }
</span><span class="lines">@@ -559,9 +559,9 @@
</span><span class="cx"> CallArguments callArguments(generator, m_args);
</span><span class="cx"> generator.emitMove(callArguments.thisRegister(), base.get());
</span><span class="cx"> RegisterID* ret = generator.emitCall(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd());
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(returnValue.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return ret;
</span><span class="cx"> }
</span><span class="lines">@@ -577,9 +577,9 @@
</span><span class="cx"> generator.emitExpressionInfo(subexpressionDivot(), subexpressionStart(), subexpressionEnd());
</span><span class="cx"> generator.emitGetById(function.get(), callArguments.thisRegister(), m_ident);
</span><span class="cx"> RegisterID* ret = generator.emitCall(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd());
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(returnValue.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return ret;
</span><span class="cx"> }
</span><span class="lines">@@ -651,9 +651,9 @@
</span><span class="cx"> }
</span><span class="cx"> generator.emitLabel(end.get());
</span><span class="cx"> }
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(returnValue.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return returnValue.get();
</span><span class="cx"> }
</span><span class="lines">@@ -765,9 +765,9 @@
</span><span class="cx"> generator.emitCall(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd());
</span><span class="cx"> generator.emitLabel(end.get());
</span><span class="cx"> }
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(returnValue.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return returnValue.get();
</span><span class="cx"> }
</span><span class="lines">@@ -802,7 +802,7 @@
</span><span class="cx"> if (local.isReadOnly()) {
</span><span class="cx"> generator.emitReadOnlyExceptionIfNeeded();
</span><span class="cx"> localReg = generator.emitMove(generator.tempDestination(dst), localReg);
</span><del>- } else if (local.isCaptured() || generator.isProfilingTypesWithHighFidelity()) {
</del><ins>+ } else if (local.isCaptured() || generator.vm()->typeProfiler()) {
</ins><span class="cx"> RefPtr<RegisterID> tempDst = generator.finalDestination(dst);
</span><span class="cx"> ASSERT(dst != localReg);
</span><span class="cx"> RefPtr<RegisterID> tempDstSrc = generator.newTemporary();
</span><span class="lines">@@ -810,8 +810,8 @@
</span><span class="cx"> generator.emitMove(tempDstSrc.get(), localReg);
</span><span class="cx"> emitIncOrDec(generator, tempDstSrc.get(), m_operator);
</span><span class="cx"> generator.emitMove(localReg, tempDstSrc.get());
</span><del>- if (generator.isProfilingTypesWithHighFidelity())
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler())
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> return tempDst.get();
</span><span class="cx"> }
</span><span class="cx"> return emitPostIncOrDec(generator, generator.finalDestination(dst), localReg, m_operator);
</span><span class="lines">@@ -822,9 +822,9 @@
</span><span class="cx"> RefPtr<RegisterID> value = generator.emitGetFromScope(generator.newTemporary(), scope.get(), ident, ThrowIfNotFound);
</span><span class="cx"> RefPtr<RegisterID> oldValue = emitPostIncOrDec(generator, generator.finalDestination(dst), value.get(), m_operator);
</span><span class="cx"> generator.emitPutToScope(scope.get(), ident, value.get(), ThrowIfNotFound);
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(value.get(), ProfileTypesBytecodePutToScope, &ident);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(value.get(), ProfileTypeBytecodePutToScope, &ident);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> return oldValue.get();
</span><span class="lines">@@ -848,9 +848,9 @@
</span><span class="cx"> RegisterID* oldValue = emitPostIncOrDec(generator, generator.tempDestination(dst), value.get(), m_operator);
</span><span class="cx"> generator.emitExpressionInfo(divot(), divotStart(), divotEnd());
</span><span class="cx"> generator.emitPutByVal(base.get(), property.get(), value.get());
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(value.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(value.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return generator.moveToDestinationIfNeeded(dst, oldValue);
</span><span class="cx"> }
</span><span class="lines">@@ -872,9 +872,9 @@
</span><span class="cx"> RegisterID* oldValue = emitPostIncOrDec(generator, generator.tempDestination(dst), value.get(), m_operator);
</span><span class="cx"> generator.emitExpressionInfo(divot(), divotStart(), divotEnd());
</span><span class="cx"> generator.emitPutById(base.get(), ident, value.get());
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(value.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(value.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return generator.moveToDestinationIfNeeded(dst, oldValue);
</span><span class="cx"> }
</span><span class="lines">@@ -992,13 +992,13 @@
</span><span class="cx"> if (local.isReadOnly()) {
</span><span class="cx"> generator.emitReadOnlyExceptionIfNeeded();
</span><span class="cx"> localReg = generator.emitMove(generator.tempDestination(dst), localReg);
</span><del>- } else if (local.isCaptured() || generator.isProfilingTypesWithHighFidelity()) {
</del><ins>+ } else if (local.isCaptured() || generator.vm()->typeProfiler()) {
</ins><span class="cx"> RefPtr<RegisterID> tempDst = generator.tempDestination(dst);
</span><span class="cx"> generator.emitMove(tempDst.get(), localReg);
</span><span class="cx"> emitIncOrDec(generator, tempDst.get(), m_operator);
</span><span class="cx"> generator.emitMove(localReg, tempDst.get());
</span><del>- if (generator.isProfilingTypesWithHighFidelity())
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler())
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> return generator.moveToDestinationIfNeeded(dst, tempDst.get());
</span><span class="cx"> }
</span><span class="cx"> emitIncOrDec(generator, localReg, m_operator);
</span><span class="lines">@@ -1010,9 +1010,9 @@
</span><span class="cx"> RefPtr<RegisterID> value = generator.emitGetFromScope(generator.newTemporary(), scope.get(), ident, ThrowIfNotFound);
</span><span class="cx"> emitIncOrDec(generator, value.get(), m_operator);
</span><span class="cx"> generator.emitPutToScope(scope.get(), ident, value.get(), ThrowIfNotFound);
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(value.get(), ProfileTypesBytecodePutToScope, &ident);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(value.get(), ProfileTypeBytecodePutToScope, &ident);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return generator.moveToDestinationIfNeeded(dst, value.get());
</span><span class="cx"> }
</span><span class="lines">@@ -1033,9 +1033,9 @@
</span><span class="cx"> emitIncOrDec(generator, value, m_operator);
</span><span class="cx"> generator.emitExpressionInfo(divot(), divotStart(), divotEnd());
</span><span class="cx"> generator.emitPutByVal(base.get(), property.get(), value);
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(value, ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(value, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return generator.moveToDestinationIfNeeded(dst, propDst.get());
</span><span class="cx"> }
</span><span class="lines">@@ -1055,9 +1055,9 @@
</span><span class="cx"> emitIncOrDec(generator, value, m_operator);
</span><span class="cx"> generator.emitExpressionInfo(divot(), divotStart(), divotEnd());
</span><span class="cx"> generator.emitPutById(base.get(), ident, value);
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(value, ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(value, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return generator.moveToDestinationIfNeeded(dst, propDst.get());
</span><span class="cx"> }
</span><span class="lines">@@ -1506,15 +1506,15 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (local.isCaptured()
</span><del>- || generator.isProfilingTypesWithHighFidelity()
</del><ins>+ || generator.vm()->typeProfiler()
</ins><span class="cx"> || generator.leftHandSideNeedsCopy(m_rightHasAssignments, m_right->isPure(generator))) {
</span><span class="cx"> RefPtr<RegisterID> result = generator.newTemporary();
</span><span class="cx"> generator.emitMove(result.get(), local.get());
</span><span class="cx"> emitReadModifyAssignment(generator, result.get(), result.get(), m_right, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor()));
</span><span class="cx"> generator.emitMove(local.get(), result.get());
</span><span class="cx"> generator.invalidateForInContextForLocal(local.get());
</span><del>- if (generator.isProfilingTypesWithHighFidelity())
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler())
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> return generator.moveToDestinationIfNeeded(dst, result.get());
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1528,9 +1528,9 @@
</span><span class="cx"> RefPtr<RegisterID> value = generator.emitGetFromScope(generator.newTemporary(), scope.get(), m_ident, ThrowIfNotFound);
</span><span class="cx"> RefPtr<RegisterID> result = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), m_right, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor()), this);
</span><span class="cx"> RegisterID* returnResult = generator.emitPutToScope(scope.get(), m_ident, result.get(), ThrowIfNotFound);
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(result.get(), ProfileTypesBytecodePutToScope, &m_ident);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(result.get(), ProfileTypeBytecodePutToScope, &m_ident);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return returnResult;
</span><span class="cx"> }
</span><span class="lines">@@ -1544,13 +1544,13 @@
</span><span class="cx"> generator.emitReadOnlyExceptionIfNeeded();
</span><span class="cx"> return generator.emitNode(dst, m_right);
</span><span class="cx"> }
</span><del>- if (local.isCaptured() || generator.isProfilingTypesWithHighFidelity()) {
</del><ins>+ if (local.isCaptured() || generator.vm()->typeProfiler()) {
</ins><span class="cx"> RefPtr<RegisterID> tempDst = generator.tempDestination(dst);
</span><span class="cx"> generator.emitNode(tempDst.get(), m_right);
</span><span class="cx"> generator.emitMove(local.get(), tempDst.get());
</span><span class="cx"> generator.invalidateForInContextForLocal(local.get());
</span><del>- if (generator.isProfilingTypesWithHighFidelity())
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler())
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> return generator.moveToDestinationIfNeeded(dst, tempDst.get());
</span><span class="cx"> }
</span><span class="cx"> RegisterID* result = generator.emitNode(local.get(), m_right);
</span><span class="lines">@@ -1566,9 +1566,9 @@
</span><span class="cx"> RefPtr<RegisterID> result = generator.emitNode(dst, m_right);
</span><span class="cx"> generator.emitExpressionInfo(divot(), divotStart(), divotEnd());
</span><span class="cx"> RegisterID* returnResult = generator.emitPutToScope(scope.get(), m_ident, result.get(), generator.isStrictMode() ? ThrowIfNotFound : DoNotThrowIfNotFound);
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(result.get(), ProfileTypesBytecodePutToScope, &m_ident);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(result.get(), ProfileTypeBytecodePutToScope, &m_ident);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return returnResult;
</span><span class="cx"> }
</span><span class="lines">@@ -1583,9 +1583,9 @@
</span><span class="cx"> generator.emitExpressionInfo(divot(), divotStart(), divotEnd());
</span><span class="cx"> RegisterID* forwardResult = (dst == generator.ignoredResult()) ? result : generator.moveToDestinationIfNeeded(generator.tempDestination(result), result);
</span><span class="cx"> generator.emitPutById(base.get(), m_ident, forwardResult);
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(forwardResult, ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(forwardResult, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return generator.moveToDestinationIfNeeded(dst, forwardResult);
</span><span class="cx"> }
</span><span class="lines">@@ -1602,9 +1602,9 @@
</span><span class="cx">
</span><span class="cx"> generator.emitExpressionInfo(divot(), divotStart(), divotEnd());
</span><span class="cx"> RegisterID* ret = generator.emitPutById(base.get(), m_ident, updatedValue);
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(updatedValue, ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(updatedValue, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return ret;
</span><span class="cx"> }
</span><span class="lines">@@ -1628,9 +1628,9 @@
</span><span class="cx"> generator.emitExpressionInfo(divot(), divotStart(), divotEnd());
</span><span class="cx"> RegisterID* forwardResult = (dst == generator.ignoredResult()) ? result : generator.moveToDestinationIfNeeded(generator.tempDestination(result), result);
</span><span class="cx"> generator.emitPutByVal(base.get(), property.get(), forwardResult);
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(forwardResult, ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(forwardResult, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> return generator.moveToDestinationIfNeeded(dst, forwardResult);
</span><span class="cx"> }
</span><span class="lines">@@ -1648,9 +1648,9 @@
</span><span class="cx">
</span><span class="cx"> generator.emitExpressionInfo(divot(), divotStart(), divotEnd());
</span><span class="cx"> generator.emitPutByVal(base.get(), property.get(), updatedValue);
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(updatedValue, ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(updatedValue, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> return updatedValue;
</span><span class="lines">@@ -1676,7 +1676,7 @@
</span><span class="cx"> return local.get();
</span><span class="cx">
</span><span class="cx"> // FIXME: Maybe call emitExpressionInfo here.
</span><del>- if (local.isCaptured() || generator.isProfilingTypesWithHighFidelity()) {
</del><ins>+ if (local.isCaptured() || generator.vm()->typeProfiler()) {
</ins><span class="cx"> RefPtr<RegisterID> tempDst = generator.newTemporary();
</span><span class="cx"> generator.emitNode(tempDst.get(), m_init);
</span><span class="cx"> return generator.emitMove(local.get(), tempDst.get());
</span><span class="lines">@@ -1786,18 +1786,18 @@
</span><span class="cx">
</span><span class="cx"> RegisterID* EmptyVarExpression::emitBytecode(BytecodeGenerator& generator, RegisterID*)
</span><span class="cx"> {
</span><del>- if (!generator.isProfilingTypesWithHighFidelity())
</del><ins>+ if (!generator.vm()->typeProfiler())
</ins><span class="cx"> return nullptr;
</span><span class="cx">
</span><span class="cx"> if (Local local = generator.local(m_ident))
</span><del>- generator.emitProfileTypesWithHighFidelity(local.get(), ProfileTypesBytecodeHasGlobalID, nullptr);
</del><ins>+ generator.emitProfileType(local.get(), ProfileTypeBytecodeHasGlobalID, nullptr);
</ins><span class="cx"> else {
</span><span class="cx"> RefPtr<RegisterID> scope = generator.emitResolveScope(generator.newTemporary(), m_ident);
</span><span class="cx"> RefPtr<RegisterID> value = generator.emitGetFromScope(generator.newTemporary(), scope.get(), m_ident, DoNotThrowIfNotFound);
</span><del>- generator.emitProfileTypesWithHighFidelity(value.get(), ProfileTypesBytecodeGetFromScope, &m_ident);
</del><ins>+ generator.emitProfileType(value.get(), ProfileTypeBytecodeGetFromScope, &m_ident);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>- generator.emitHighFidelityTypeProfilingExpressionInfo(position(), JSTextPosition(-1, position().offset + m_ident.length(), -1));
</del><ins>+ generator.emitTypeProfilerExpressionInfo(position(), JSTextPosition(-1, position().offset + m_ident.length(), -1));
</ins><span class="cx">
</span><span class="cx"> // It's safe to return null here because this node will always be a child node of VarStatementNode which ignores our return value.
</span><span class="cx"> return nullptr;
</span><span class="lines">@@ -2276,9 +2276,9 @@
</span><span class="cx"> dst = 0;
</span><span class="cx">
</span><span class="cx"> RefPtr<RegisterID> returnRegister = m_value ? generator.emitNode(dst, m_value) : generator.emitLoad(dst, jsUndefined());
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
- generator.emitProfileTypesWithHighFidelity(returnRegister.get(), ProfileTypesBytecodeFunctionReturnStatement, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd());
</del><ins>+ if (generator.vm()->typeProfiler()) {
+ generator.emitProfileType(returnRegister.get(), ProfileTypeBytecodeFunctionReturnStatement, nullptr);
+ generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> if (generator.scopeDepth()) {
</span><span class="cx"> returnRegister = generator.emitMove(generator.newTemporary(), returnRegister.get());
</span><span class="lines">@@ -2607,15 +2607,15 @@
</span><span class="cx">
</span><span class="cx"> void FunctionBodyNode::emitBytecode(BytecodeGenerator& generator, RegisterID*)
</span><span class="cx"> {
</span><del>- if (generator.isProfilingTypesWithHighFidelity()) {
</del><ins>+ if (generator.vm()->typeProfiler()) {
</ins><span class="cx"> for (size_t i = 0; i < m_parameters->size(); i++) {
</span><span class="cx"> // FIXME: Handle Destructuring assignments into arguments.
</span><span class="cx"> if (!m_parameters->at(i)->isBindingNode())
</span><span class="cx"> continue;
</span><span class="cx"> BindingNode* parameter = static_cast<BindingNode*>(m_parameters->at(i));
</span><span class="cx"> RegisterID reg(CallFrame::argumentOffset(i));
</span><del>- generator.emitProfileTypesWithHighFidelity(&reg, ProfileTypesBytecodeFunctionArgument, nullptr);
- generator.emitHighFidelityTypeProfilingExpressionInfo(parameter->divotStart(), parameter->divotEnd());
</del><ins>+ generator.emitProfileType(&reg, ProfileTypeBytecodeFunctionArgument, nullptr);
+ generator.emitTypeProfilerExpressionInfo(parameter->divotStart(), parameter->divotEnd());
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2635,8 +2635,8 @@
</span><span class="cx"> // If there is no return we must automatically insert one.
</span><span class="cx"> if (!returnNode) {
</span><span class="cx"> RegisterID* r0 = generator.isConstructor() ? generator.thisRegister() : generator.emitLoad(0, jsUndefined());
</span><del>- if (generator.isProfilingTypesWithHighFidelity())
- generator.emitProfileTypesWithHighFidelity(r0, ProfileTypesBytecodeFunctionReturnStatement, nullptr); // Do not emit expression info for this profile because it's not in the user's source code.
</del><ins>+ if (generator.vm()->typeProfiler())
+ generator.emitProfileType(r0, ProfileTypeBytecodeFunctionReturnStatement, nullptr); // Do not emit expression info for this profile because it's not in the user's source code.
</ins><span class="cx"> ASSERT(startOffset() >= lineStartOffset());
</span><span class="cx"> generator.emitDebugHook(WillLeaveCallFrame, lastLine(), startOffset(), lineStartOffset());
</span><span class="cx"> generator.emitReturn(r0);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapHeapcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/Heap.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/Heap.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/heap/Heap.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -35,7 +35,6 @@
</span><span class="cx"> #include "HeapIterationScope.h"
</span><span class="cx"> #include "HeapRootVisitor.h"
</span><span class="cx"> #include "HeapStatistics.h"
</span><del>-#include "HighFidelityLog.h"
</del><span class="cx"> #include "IncrementalSweeper.h"
</span><span class="cx"> #include "Interpreter.h"
</span><span class="cx"> #include "JSGlobalObject.h"
</span><span class="lines">@@ -45,6 +44,7 @@
</span><span class="cx"> #include "JSVirtualMachineInternal.h"
</span><span class="cx"> #include "RecursiveAllocationScope.h"
</span><span class="cx"> #include "Tracing.h"
</span><ins>+#include "TypeProfilerLog.h"
</ins><span class="cx"> #include "UnlinkedCodeBlock.h"
</span><span class="cx"> #include "VM.h"
</span><span class="cx"> #include "WeakSetInlines.h"
</span><span class="lines">@@ -979,9 +979,9 @@
</span><span class="cx">
</span><span class="cx"> SamplingRegion samplingRegion("Garbage Collection");
</span><span class="cx">
</span><del>- if (vm()->isProfilingTypesWithHighFidelity()) {
</del><ins>+ if (vm()->typeProfiler()) {
</ins><span class="cx"> DeferGCForAWhile awhile(*this);
</span><del>- vm()->highFidelityLog()->processHighFidelityLog("GC");
</del><ins>+ vm()->typeProfilerLog()->processLogEntries(ASCIILiteral("GC"));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> RELEASE_ASSERT(!m_deferralDepth);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectoragentsInspectorRuntimeAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -36,8 +36,6 @@
</span><span class="cx">
</span><span class="cx"> #include "Completion.h"
</span><span class="cx"> #include "HeapIterationScope.h"
</span><del>-#include "HighFidelityLog.h"
-#include "HighFidelityTypeProfiler.h"
</del><span class="cx"> #include "InjectedScript.h"
</span><span class="cx"> #include "InjectedScriptManager.h"
</span><span class="cx"> #include "InspectorValues.h"
</span><span class="lines">@@ -45,6 +43,8 @@
</span><span class="cx"> #include "ParserError.h"
</span><span class="cx"> #include "ScriptDebugServer.h"
</span><span class="cx"> #include "SourceCode.h"
</span><ins>+#include "TypeProfiler.h"
+#include "TypeProfilerLog.h"
</ins><span class="cx"> #include "VMEntryScope.h"
</span><span class="cx"> #include <wtf/PassRefPtr.h>
</span><span class="cx"> #include <wtf/CurrentTime.h>
</span><span class="lines">@@ -202,13 +202,13 @@
</span><span class="cx"> static const bool verbose = false;
</span><span class="cx"> VM& vm = globalVM();
</span><span class="cx"> typeDescriptions = Inspector::TypeBuilder::Array<Inspector::TypeBuilder::Runtime::TypeDescription>::create();
</span><del>- if (!vm.isProfilingTypesWithHighFidelity()) {
</del><ins>+ if (!vm.typeProfiler()) {
</ins><span class="cx"> *errorString = ASCIILiteral("The VM does not currently have Type Information.");
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> double start = currentTimeMS();
</span><del>- vm.highFidelityLog()->processHighFidelityLog("User Query");
</del><ins>+ vm.typeProfilerLog()->processLogEntries(ASCIILiteral("User Query"));
</ins><span class="cx">
</span><span class="cx"> for (size_t i = 0; i < locations->length(); i++) {
</span><span class="cx"> RefPtr<Inspector::InspectorValue> value = locations->get(i);
</span><span class="lines">@@ -227,7 +227,7 @@
</span><span class="cx">
</span><span class="cx"> RefPtr<Inspector::TypeBuilder::Runtime::TypeDescription> typeDescription = Inspector::TypeBuilder::Runtime::TypeDescription::create();
</span><span class="cx"> bool okay;
</span><del>- vm.highFidelityTypeProfiler()->getTypesForVariableAtOffsetForInspector(static_cast<TypeProfilerSearchDescriptor>(descriptor), divot, sourceIDAsString.toIntPtrStrict(&okay), typeDescription);
</del><ins>+ vm.typeProfiler()->getTypesForVariableAtOffsetForInspector(static_cast<TypeProfilerSearchDescriptor>(descriptor), divot, sourceIDAsString.toIntPtrStrict(&okay), typeDescription);
</ins><span class="cx"> typeDescriptions->addItem(typeDescription);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -253,7 +253,7 @@
</span><span class="cx"> {
</span><span class="cx"> vm.waitForCompilationsToComplete();
</span><span class="cx">
</span><del>- bool needsToRecompile = (shouldEnableTypeProfiling ? vm.enableHighFidelityTypeProfiling() : vm.disableHighFidelityTypeProfiling());
</del><ins>+ bool needsToRecompile = (shouldEnableTypeProfiling ? vm.enableTypeProfiler() : vm.disableTypeProfiler());
</ins><span class="cx"> if (needsToRecompile) {
</span><span class="cx"> TypeRecompiler recompiler;
</span><span class="cx"> HeapIterationScope iterationScope(vm.heap);
</span><span class="lines">@@ -264,20 +264,20 @@
</span><span class="cx"> void InspectorRuntimeAgent::willDestroyFrontendAndBackend(InspectorDisconnectReason reason)
</span><span class="cx"> {
</span><span class="cx"> if (reason != InspectorDisconnectReason::InspectedTargetDestroyed && m_isTypeProfilingEnabled)
</span><del>- setHighFidelityTypeProfilingEnabledState(false);
</del><ins>+ setTypeProfilerEnabledState(false);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void InspectorRuntimeAgent::enableHighFidelityTypeProfiling(ErrorString*)
</del><ins>+void InspectorRuntimeAgent::enableTypeProfiler(ErrorString*)
</ins><span class="cx"> {
</span><del>- setHighFidelityTypeProfilingEnabledState(true);
</del><ins>+ setTypeProfilerEnabledState(true);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void InspectorRuntimeAgent::disableHighFidelityTypeProfiling(ErrorString*)
</del><ins>+void InspectorRuntimeAgent::disableTypeProfiler(ErrorString*)
</ins><span class="cx"> {
</span><del>- setHighFidelityTypeProfilingEnabledState(false);
</del><ins>+ setTypeProfilerEnabledState(false);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void InspectorRuntimeAgent::setHighFidelityTypeProfilingEnabledState(bool shouldEnableTypeProfiling)
</del><ins>+void InspectorRuntimeAgent::setTypeProfilerEnabledState(bool shouldEnableTypeProfiling)
</ins><span class="cx"> {
</span><span class="cx"> if (m_isTypeProfilingEnabled == shouldEnableTypeProfiling)
</span><span class="cx"> return;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectoragentsInspectorRuntimeAgenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.h (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.h        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.h        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -69,8 +69,8 @@
</span><span class="cx"> virtual void releaseObjectGroup(ErrorString*, const String& objectGroup) override final;
</span><span class="cx"> virtual void run(ErrorString*) override;
</span><span class="cx"> virtual void getRuntimeTypesForVariablesAtOffsets(ErrorString*, const RefPtr<Inspector::InspectorArray>& locations, RefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::Runtime::TypeDescription>>&) override;
</span><del>- virtual void enableHighFidelityTypeProfiling(ErrorString*) override;
- virtual void disableHighFidelityTypeProfiling(ErrorString*) override;
</del><ins>+ virtual void enableTypeProfiler(ErrorString*) override;
+ virtual void disableTypeProfiler(ErrorString*) override;
</ins><span class="cx">
</span><span class="cx"> void setScriptDebugServer(ScriptDebugServer* scriptDebugServer) { m_scriptDebugServer = scriptDebugServer; }
</span><span class="cx">
</span><span class="lines">@@ -88,7 +88,7 @@
</span><span class="cx"> virtual void unmuteConsole() = 0;
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- void setHighFidelityTypeProfilingEnabledState(bool);
</del><ins>+ void setTypeProfilerEnabledState(bool);
</ins><span class="cx">
</span><span class="cx"> InjectedScriptManager* m_injectedScriptManager;
</span><span class="cx"> ScriptDebugServer* m_scriptDebugServer;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorprotocolRuntimejson"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/protocol/Runtime.json (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/protocol/Runtime.json        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/inspector/protocol/Runtime.json        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -241,12 +241,12 @@
</span><span class="cx"> "description": "Returns detailed informtation on given function."
</span><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "enableHighFidelityTypeProfiling",
- "description": "Enables high fidelity type profiling on the VM."
</del><ins>+ "name": "enableTypeProfiler",
+ "description": "Enables type profiling on the VM."
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "disableHighFidelityTypeProfiling",
- "description": "Disables high fidelity type profiling on the VM."
</del><ins>+ "name": "disableTypeProfiler",
+ "description": "Disables type profiling on the VM."
</ins><span class="cx"> }
</span><span class="cx"> ],
</span><span class="cx"> "events": [
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JIT.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JIT.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/jit/JIT.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -38,7 +38,6 @@
</span><span class="cx"> #include "ArityCheckFailReturnThunks.h"
</span><span class="cx"> #include "CodeBlock.h"
</span><span class="cx"> #include "DFGCapabilities.h"
</span><del>-#include "HighFidelityLog.h"
</del><span class="cx"> #include "Interpreter.h"
</span><span class="cx"> #include "JITInlines.h"
</span><span class="cx"> #include "JITOperations.h"
</span><span class="lines">@@ -53,6 +52,7 @@
</span><span class="cx"> #include "SamplingTool.h"
</span><span class="cx"> #include "SlowPathCall.h"
</span><span class="cx"> #include "StackAlignment.h"
</span><ins>+#include "TypeProfilerLog.h"
</ins><span class="cx"> #include <wtf/CryptographicallyRandomNumber.h>
</span><span class="cx">
</span><span class="cx"> using namespace std;
</span><span class="lines">@@ -268,7 +268,7 @@
</span><span class="cx"> DEFINE_OP(op_inc)
</span><span class="cx"> DEFINE_OP(op_profile_did_call)
</span><span class="cx"> DEFINE_OP(op_profile_will_call)
</span><del>- DEFINE_OP(op_profile_types_with_high_fidelity)
</del><ins>+ DEFINE_OP(op_profile_type)
</ins><span class="cx"> DEFINE_OP(op_push_name_scope)
</span><span class="cx"> DEFINE_OP(op_push_with_scope)
</span><span class="cx"> case op_put_by_id_out_of_line:
</span><span class="lines">@@ -501,9 +501,9 @@
</span><span class="cx"> break;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- // This ensures that we have the most up to date type information when performing typecheck optimizations for op_profile_types_with_high_fidelity.
- if (m_vm->isProfilingTypesWithHighFidelity())
- m_vm->highFidelityLog()->processHighFidelityLog(ASCIILiteral("Preparing for JIT compilation."));
</del><ins>+ // This ensures that we have the most up to date type information when performing typecheck optimizations for op_profile_type.
+ if (m_vm->typeProfiler())
+ m_vm->typeProfilerLog()->processLogEntries(ASCIILiteral("Preparing for JIT compilation."));
</ins><span class="cx">
</span><span class="cx"> if (Options::showDisassembly() || m_vm->m_perBytecodeProfiler)
</span><span class="cx"> m_disassembler = adoptPtr(new JITDisassembler(m_codeBlock));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JIT.h (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JIT.h        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/jit/JIT.h        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -527,7 +527,7 @@
</span><span class="cx"> void emit_op_inc(Instruction*);
</span><span class="cx"> void emit_op_profile_did_call(Instruction*);
</span><span class="cx"> void emit_op_profile_will_call(Instruction*);
</span><del>- void emit_op_profile_types_with_high_fidelity(Instruction*);
</del><ins>+ void emit_op_profile_type(Instruction*);
</ins><span class="cx"> void emit_op_push_name_scope(Instruction*);
</span><span class="cx"> void emit_op_push_with_scope(Instruction*);
</span><span class="cx"> void emit_op_put_by_id(Instruction*);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOpcodescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -32,7 +32,6 @@
</span><span class="cx"> #include "CopiedSpaceInlines.h"
</span><span class="cx"> #include "Debugger.h"
</span><span class="cx"> #include "Heap.h"
</span><del>-#include "HighFidelityLog.h"
</del><span class="cx"> #include "JITInlines.h"
</span><span class="cx"> #include "JSArray.h"
</span><span class="cx"> #include "JSCell.h"
</span><span class="lines">@@ -43,6 +42,7 @@
</span><span class="cx"> #include "RepatchBuffer.h"
</span><span class="cx"> #include "SlowPathCall.h"
</span><span class="cx"> #include "TypeLocation.h"
</span><ins>+#include "TypeProfilerLog.h"
</ins><span class="cx"> #include "VirtualRegister.h"
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span><span class="lines">@@ -1339,7 +1339,7 @@
</span><span class="cx"> slowPathCall.call();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void JIT::emit_op_profile_types_with_high_fidelity(Instruction* currentInstruction)
</del><ins>+void JIT::emit_op_profile_type(Instruction* currentInstruction)
</ins><span class="cx"> {
</span><span class="cx"> TypeLocation* cachedTypeLocation = currentInstruction[2].u.location;
</span><span class="cx"> int valueToProfile = currentInstruction[1].u.operand;
</span><span class="lines">@@ -1369,31 +1369,31 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Load the type profiling log into T2.
</span><del>- HighFidelityLog* cachedHighFidelityLog = m_vm->highFidelityLog();
- move(TrustedImmPtr(cachedHighFidelityLog), regT2);
</del><ins>+ TypeProfilerLog* cachedTypeProfilerLog = m_vm->typeProfilerLog();
+ move(TrustedImmPtr(cachedTypeProfilerLog), regT2);
</ins><span class="cx"> // Load the next log entry into T1.
</span><del>- loadPtr(Address(regT2, HighFidelityLog::currentLogEntryOffset()), regT1);
</del><ins>+ loadPtr(Address(regT2, TypeProfilerLog::currentLogEntryOffset()), regT1);
</ins><span class="cx">
</span><span class="cx"> // Store the JSValue onto the log entry.
</span><del>- store64(regT0, Address(regT1, HighFidelityLog::LogEntry::valueOffset()));
</del><ins>+ store64(regT0, Address(regT1, TypeProfilerLog::LogEntry::valueOffset()));
</ins><span class="cx">
</span><span class="cx"> // Store the structureID of the cell if T0 is a cell, otherwise, store 0 on the log entry.
</span><span class="cx"> Jump notCell = emitJumpIfNotJSCell(regT0);
</span><span class="cx"> load32(Address(regT0, JSCell::structureIDOffset()), regT0);
</span><del>- store32(regT0, Address(regT1, HighFidelityLog::LogEntry::structureIDOffset()));
</del><ins>+ store32(regT0, Address(regT1, TypeProfilerLog::LogEntry::structureIDOffset()));
</ins><span class="cx"> Jump skipIsCell = jump();
</span><span class="cx"> notCell.link(this);
</span><del>- store32(TrustedImm32(0), Address(regT1, HighFidelityLog::LogEntry::structureIDOffset()));
</del><ins>+ store32(TrustedImm32(0), Address(regT1, TypeProfilerLog::LogEntry::structureIDOffset()));
</ins><span class="cx"> skipIsCell.link(this);
</span><span class="cx">
</span><span class="cx"> // Store the typeLocation on the log entry.
</span><span class="cx"> move(TrustedImmPtr(cachedTypeLocation), regT0);
</span><del>- store64(regT0, Address(regT1, HighFidelityLog::LogEntry::locationOffset()));
</del><ins>+ store64(regT0, Address(regT1, TypeProfilerLog::LogEntry::locationOffset()));
</ins><span class="cx">
</span><span class="cx"> // Increment the current log entry.
</span><del>- addPtr(TrustedImm32(sizeof(HighFidelityLog::LogEntry)), regT1);
- store64(regT1, Address(regT2, HighFidelityLog::currentLogEntryOffset()));
- Jump skipClearLog = branchPtr(NotEqual, regT1, TrustedImmPtr(cachedHighFidelityLog->logEndPtr()));
</del><ins>+ addPtr(TrustedImm32(sizeof(TypeProfilerLog::LogEntry)), regT1);
+ store64(regT1, Address(regT2, TypeProfilerLog::currentLogEntryOffset()));
+ Jump skipClearLog = branchPtr(NotEqual, regT1, TrustedImmPtr(cachedTypeProfilerLog->logEndPtr()));
</ins><span class="cx"> // Clear the log if we're at the end of the log.
</span><span class="cx"> callOperation(operationProcessTypeProfilerLog);
</span><span class="cx"> skipClearLog.link(this);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOpcodes32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -1306,9 +1306,9 @@
</span><span class="cx"> slowPathCall.call();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void JIT::emit_op_profile_types_with_high_fidelity(Instruction* currentInstruction)
</del><ins>+void JIT::emit_op_profile_type(Instruction* currentInstruction)
</ins><span class="cx"> {
</span><del>- JITSlowPathCall slowPathCall(this, currentInstruction, slow_path_profile_types_with_high_fidelity);
</del><ins>+ JITSlowPathCall slowPathCall(this, currentInstruction, slow_path_profile_type);
</ins><span class="cx"> slowPathCall.call();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -40,7 +40,6 @@
</span><span class="cx"> #include "ErrorHandlingScope.h"
</span><span class="cx"> #include "ExceptionFuzz.h"
</span><span class="cx"> #include "GetterSetter.h"
</span><del>-#include "HighFidelityLog.h"
</del><span class="cx"> #include "HostCallReturnValue.h"
</span><span class="cx"> #include "JIT.h"
</span><span class="cx"> #include "JITToDFGDeferredCompilationCallback.h"
</span><span class="lines">@@ -54,6 +53,7 @@
</span><span class="cx"> #include "Repatch.h"
</span><span class="cx"> #include "RepatchBuffer.h"
</span><span class="cx"> #include "TestRunnerUtils.h"
</span><ins>+#include "TypeProfilerLog.h"
</ins><span class="cx"> #include <wtf/InlineASM.h>
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span><span class="lines">@@ -1929,7 +1929,7 @@
</span><span class="cx">
</span><span class="cx"> void JIT_OPERATION operationProcessTypeProfilerLog(ExecState* exec)
</span><span class="cx"> {
</span><del>- exec->vm().highFidelityLog()->processHighFidelityLog(ASCIILiteral("Log Full, called from inside baseline JIT"));
</del><ins>+ exec->vm().typeProfilerLog()->processLogEntries(ASCIILiteral("Log Full, called from inside baseline JIT"));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> } // extern "C"
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejsccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jsc.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jsc.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/jsc.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -1061,7 +1061,7 @@
</span><span class="cx">
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL functionDumpTypesForAllVariables(ExecState* exec)
</span><span class="cx"> {
</span><del>- exec->vm().dumpHighFidelityProfilingTypes();
</del><ins>+ exec->vm().dumpTypeProfilerData();
</ins><span class="cx"> return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntSlowPathscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -34,7 +34,6 @@
</span><span class="cx"> #include "ExceptionFuzz.h"
</span><span class="cx"> #include "GetterSetter.h"
</span><span class="cx"> #include "HostCallReturnValue.h"
</span><del>-#include "HighFidelityLog.h"
</del><span class="cx"> #include "Interpreter.h"
</span><span class="cx"> #include "JIT.h"
</span><span class="cx"> #include "JITExceptions.h"
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLowLevelInterpreterasm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -1352,6 +1352,6 @@
</span><span class="cx"> _llint_op_init_global_const_nop:
</span><span class="cx"> dispatch(5)
</span><span class="cx">
</span><del>-_llint_op_profile_types_with_high_fidelity:
- callSlowPath(_slow_path_profile_types_with_high_fidelity)
</del><ins>+_llint_op_profile_type:
+ callSlowPath(_slow_path_profile_type)
</ins><span class="cx"> dispatch(6)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCodeCachecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CodeCache.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CodeCache.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/runtime/CodeCache.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -79,7 +79,7 @@
</span><span class="cx"> {
</span><span class="cx"> SourceCodeKey key = SourceCodeKey(source, String(), CacheTypes<UnlinkedCodeBlockType>::codeType, strictness);
</span><span class="cx"> CodeCacheMap::AddResult addResult = m_sourceCode.add(key, SourceCodeValue());
</span><del>- bool canCache = debuggerMode == DebuggerOff && profilerMode == ProfilerOff && !vm.isProfilingTypesWithHighFidelity();
</del><ins>+ bool canCache = debuggerMode == DebuggerOff && profilerMode == ProfilerOff && !vm.typeProfiler();
</ins><span class="cx"> if (!addResult.isNewEntry && canCache) {
</span><span class="cx"> UnlinkedCodeBlockType* unlinkedCodeBlock = jsCast<UnlinkedCodeBlockType*>(addResult.iterator->value.cell.get());
</span><span class="cx"> unsigned firstLine = source.firstLine() + unlinkedCodeBlock->firstLine();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCommonSlowPathscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -34,7 +34,6 @@
</span><span class="cx"> #include "ErrorHandlingScope.h"
</span><span class="cx"> #include "ExceptionFuzz.h"
</span><span class="cx"> #include "GetterSetter.h"
</span><del>-#include "HighFidelityLog.h"
</del><span class="cx"> #include "HostCallReturnValue.h"
</span><span class="cx"> #include "Interpreter.h"
</span><span class="cx"> #include "JIT.h"
</span><span class="lines">@@ -52,6 +51,7 @@
</span><span class="cx"> #include "ObjectConstructor.h"
</span><span class="cx"> #include "JSCInlines.h"
</span><span class="cx"> #include "StructureRareDataInlines.h"
</span><ins>+#include "TypeProfilerLog.h"
</ins><span class="cx"> #include "VariableWatchpointSetInlines.h"
</span><span class="cx"> #include <wtf/StringPrintStream.h>
</span><span class="cx">
</span><span class="lines">@@ -637,12 +637,12 @@
</span><span class="cx"> RETURN(jsString(exec, Identifier::from(exec, OP(2).jsValue().asUInt32()).string()));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-SLOW_PATH_DECL(slow_path_profile_types_with_high_fidelity)
</del><ins>+SLOW_PATH_DECL(slow_path_profile_type)
</ins><span class="cx"> {
</span><span class="cx"> BEGIN();
</span><span class="cx"> TypeLocation* location = pc[2].u.location;
</span><span class="cx"> JSValue val = OP_C(1).jsValue();
</span><del>- vm.highFidelityLog()->recordTypeInformationForLocation(val, location);
</del><ins>+ vm.typeProfilerLog()->recordTypeInformationForLocation(val, location);
</ins><span class="cx"> END();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCommonSlowPathsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.h (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.h        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.h        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -233,7 +233,7 @@
</span><span class="cx"> SLOW_PATH_HIDDEN_DECL(slow_path_get_generic_property_enumerator);
</span><span class="cx"> SLOW_PATH_HIDDEN_DECL(slow_path_next_enumerator_pname);
</span><span class="cx"> SLOW_PATH_HIDDEN_DECL(slow_path_to_index_string);
</span><del>-SLOW_PATH_HIDDEN_DECL(slow_path_profile_types_with_high_fidelity);
</del><ins>+SLOW_PATH_HIDDEN_DECL(slow_path_profile_type);
</ins><span class="cx">
</span><span class="cx"> } // namespace JSC
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeExecutablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Executable.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Executable.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/runtime/Executable.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -30,12 +30,12 @@
</span><span class="cx"> #include "BytecodeGenerator.h"
</span><span class="cx"> #include "CodeBlock.h"
</span><span class="cx"> #include "DFGDriver.h"
</span><del>-#include "HighFidelityTypeProfiler.h"
</del><span class="cx"> #include "JIT.h"
</span><span class="cx"> #include "LLIntEntrypoint.h"
</span><span class="cx"> #include "JSCInlines.h"
</span><span class="cx"> #include "Parser.h"
</span><span class="cx"> #include "ProfilerDatabase.h"
</span><ins>+#include "TypeProfiler.h"
</ins><span class="cx"> #include <wtf/CommaPrinter.h>
</span><span class="cx"> #include <wtf/Vector.h>
</span><span class="cx"> #include <wtf/text/StringBuilder.h>
</span><span class="lines">@@ -104,8 +104,8 @@
</span><span class="cx"> , m_lastLine(-1)
</span><span class="cx"> , m_startColumn(UINT_MAX)
</span><span class="cx"> , m_endColumn(UINT_MAX)
</span><del>- , m_highFidelityTypeProfilingStartOffset(UINT_MAX)
- , m_highFidelityTypeProfilingEndOffset(UINT_MAX)
</del><ins>+ , m_typeProfilingStartOffset(UINT_MAX)
+ , m_typeProfilingEndOffset(UINT_MAX)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -376,10 +376,10 @@
</span><span class="cx"> ProgramExecutable::ProgramExecutable(ExecState* exec, const SourceCode& source)
</span><span class="cx"> : ScriptExecutable(exec->vm().programExecutableStructure.get(), exec->vm(), source, false)
</span><span class="cx"> {
</span><del>- m_highFidelityTypeProfilingStartOffset = 0;
- m_highFidelityTypeProfilingEndOffset = source.length() - 1;
- if (exec->vm().isProfilingTypesWithHighFidelity())
- exec->vm().highFidelityTypeProfiler()->functionHasExecutedCache()->insertUnexecutedRange(sourceID(), m_highFidelityTypeProfilingStartOffset, m_highFidelityTypeProfilingEndOffset);
</del><ins>+ m_typeProfilingStartOffset = 0;
+ m_typeProfilingEndOffset = source.length() - 1;
+ if (exec->vm().typeProfiler())
+ exec->vm().typeProfiler()->functionHasExecutedCache()->insertUnexecutedRange(sourceID(), m_typeProfilingStartOffset, m_typeProfilingEndOffset);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void ProgramExecutable::destroy(JSCell* cell)
</span><span class="lines">@@ -403,8 +403,8 @@
</span><span class="cx"> ASSERT(endColumn != UINT_MAX);
</span><span class="cx"> m_startColumn = startColumn;
</span><span class="cx"> m_endColumn = endColumn;
</span><del>- m_highFidelityTypeProfilingStartOffset = unlinkedExecutable->highFidelityTypeProfilingStartOffset();
- m_highFidelityTypeProfilingEndOffset = unlinkedExecutable->highFidelityTypeProfilingEndOffset();
</del><ins>+ m_typeProfilingStartOffset = unlinkedExecutable->typeProfilingStartOffset();
+ m_typeProfilingEndOffset = unlinkedExecutable->typeProfilingEndOffset();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void FunctionExecutable::destroy(JSCell* cell)
</span><span class="lines">@@ -501,10 +501,10 @@
</span><span class="cx"> UnlinkedFunctionExecutable* unlinkedFunctionExecutable = functionDeclarations[i].second.get();
</span><span class="cx"> JSValue value = JSFunction::create(vm, unlinkedFunctionExecutable->link(vm, m_source, lineNo()), scope);
</span><span class="cx"> globalObject->addFunction(callFrame, functionDeclarations[i].first, value);
</span><del>- if (vm.isProfilingTypesWithHighFidelity()) {
- vm.highFidelityTypeProfiler()->functionHasExecutedCache()->insertUnexecutedRange(sourceID(),
- unlinkedFunctionExecutable->highFidelityTypeProfilingStartOffset(),
- unlinkedFunctionExecutable->highFidelityTypeProfilingEndOffset());
</del><ins>+ if (vm.typeProfiler()) {
+ vm.typeProfiler()->functionHasExecutedCache()->insertUnexecutedRange(sourceID(),
+ unlinkedFunctionExecutable->typeProfilingStartOffset(),
+ unlinkedFunctionExecutable->typeProfilingEndOffset());
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeExecutableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Executable.h (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Executable.h        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/runtime/Executable.h        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -365,8 +365,8 @@
</span><span class="cx"> int lastLine() const { return m_lastLine; }
</span><span class="cx"> unsigned startColumn() const { return m_startColumn; }
</span><span class="cx"> unsigned endColumn() const { return m_endColumn; }
</span><del>- unsigned highFidelityTypeProfilingStartOffset() const { return m_highFidelityTypeProfilingStartOffset; }
- unsigned highFidelityTypeProfilingEndOffset() const { return m_highFidelityTypeProfilingEndOffset; }
</del><ins>+ unsigned typeProfilingStartOffset() const { return m_typeProfilingStartOffset; }
+ unsigned typeProfilingEndOffset() const { return m_typeProfilingEndOffset; }
</ins><span class="cx">
</span><span class="cx"> bool usesEval() const { return m_features & EvalFeature; }
</span><span class="cx"> bool usesArguments() const { return m_features & ArgumentsFeature; }
</span><span class="lines">@@ -437,8 +437,8 @@
</span><span class="cx"> int m_lastLine;
</span><span class="cx"> unsigned m_startColumn;
</span><span class="cx"> unsigned m_endColumn;
</span><del>- unsigned m_highFidelityTypeProfilingStartOffset;
- unsigned m_highFidelityTypeProfilingEndOffset;
</del><ins>+ unsigned m_typeProfilingStartOffset;
+ unsigned m_typeProfilingEndOffset;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> class EvalExecutable : public ScriptExecutable {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeHighFidelityLogcpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/runtime/HighFidelityLog.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/HighFidelityLog.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/runtime/HighFidelityLog.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -1,94 +0,0 @@
</span><del>-/*
- * Copyright (C) 2014 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.
- * 3. Neither the name of Apple Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "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 OR ITS 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 "HighFidelityLog.h"
-
-#include "JSCJSValueInlines.h"
-#include "TypeLocation.h"
-#include <wtf/CurrentTime.h>
-
-
-namespace JSC {
-
-static const bool verbose = false;
-
-void HighFidelityLog::initializeHighFidelityLog()
-{
- ASSERT(!m_logStartPtr);
- m_highFidelityLogSize = 50000;
- m_logStartPtr = new LogEntry[m_highFidelityLogSize];
- m_currentLogEntryPtr = m_logStartPtr;
- m_logEndPtr = m_logStartPtr + m_highFidelityLogSize;
-}
-
-HighFidelityLog::~HighFidelityLog()
-{
- delete[] m_logStartPtr;
-}
-
-void HighFidelityLog::processHighFidelityLog(String reason)
-{
- if (verbose)
- dataLog("Process caller:'", reason,"'");
-
- double before = currentTimeMS();
- LogEntry* entry = m_logStartPtr;
- HashMap<StructureID, RefPtr<StructureShape>> seenShapes;
- while (entry != m_currentLogEntryPtr) {
- StructureID id = entry->structureID;
- RefPtr<StructureShape> shape;
- JSValue value = entry->value;
- if (id) {
- auto iter = seenShapes.find(id);
- if (iter == seenShapes.end()) {
- shape = Heap::heap(value.asCell())->structureIDTable().get(entry->structureID)->toStructureShape(value);
- seenShapes.set(id, shape);
- } else
- shape = iter->value;
- }
-
- RuntimeType type = TypeSet::getRuntimeTypeForValue(value);
- TypeLocation* location = entry->location;
- location->m_lastSeenType = type;
- if (location->m_globalTypeSet)
- location->m_globalTypeSet->addTypeInformation(type, shape, id);
- location->m_instructionTypeSet->addTypeInformation(type, shape, id);
-
- entry++;
- }
-
- m_currentLogEntryPtr = m_logStartPtr;
-
- if (verbose) {
- double after = currentTimeMS();
- dataLogF(" Processing the log took: '%f' ms\n", after - before);
- }
-}
-
-} //namespace JSC
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeHighFidelityLogh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/runtime/HighFidelityLog.h (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/HighFidelityLog.h        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/runtime/HighFidelityLog.h        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -1,94 +0,0 @@
</span><del>-/*
- * Copyright (C) 2014 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.
- * 3. Neither the name of Apple Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "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 OR ITS 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.
- */
-
-#ifndef HighFidelityLog_h
-#define HighFidelityLog_h
-
-#include "JSCJSValue.h"
-#include "HighFidelityTypeProfiler.h"
-#include "Structure.h"
-#include <wtf/ByteSpinLock.h>
-
-namespace JSC {
-
-class TypeLocation;
-
-class HighFidelityLog {
-
-public:
- struct LogEntry {
- public:
- JSValue value;
- TypeLocation* location;
- StructureID structureID;
-
- static ptrdiff_t structureIDOffset() { return OBJECT_OFFSETOF(LogEntry, structureID); }
- static ptrdiff_t valueOffset() { return OBJECT_OFFSETOF(LogEntry, value); }
- static ptrdiff_t locationOffset() { return OBJECT_OFFSETOF(LogEntry, location); }
- };
-
-
- HighFidelityLog()
- : m_logStartPtr(0)
- {
- initializeHighFidelityLog();
- }
-
- ~HighFidelityLog();
-
- ALWAYS_INLINE void recordTypeInformationForLocation(JSValue value, TypeLocation* location)
- {
- ASSERT(m_logStartPtr);
-
- m_currentLogEntryPtr->location = location;
- m_currentLogEntryPtr->value = value;
- m_currentLogEntryPtr->structureID = (value.isCell() ? value.asCell()->structureID() : 0);
-
- m_currentLogEntryPtr += 1;
- if (UNLIKELY(m_currentLogEntryPtr == m_logEndPtr))
- processHighFidelityLog("Log Full");
- }
-
- void processHighFidelityLog(String);
- LogEntry* logEndPtr() const { return m_logEndPtr; }
-
- static ptrdiff_t logStartOffset() { return OBJECT_OFFSETOF(HighFidelityLog, m_logStartPtr); }
- static ptrdiff_t currentLogEntryOffset() { return OBJECT_OFFSETOF(HighFidelityLog, m_currentLogEntryPtr); }
-
-private:
- void initializeHighFidelityLog();
-
- unsigned m_highFidelityLogSize;
- LogEntry* m_logStartPtr;
- LogEntry* m_currentLogEntryPtr;
- LogEntry* m_logEndPtr;
-};
-
-} //namespace JSC
-
-#endif //HighFidelityLog_h
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeHighFidelityTypeProfilercpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/runtime/HighFidelityTypeProfiler.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/HighFidelityTypeProfiler.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/runtime/HighFidelityTypeProfiler.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -1,129 +0,0 @@
</span><del>-/*
- * Copyright (C) 2014 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 "HighFidelityTypeProfiler.h"
-
-#include "InspectorJSTypeBuilders.h"
-#include "TypeLocation.h"
-
-namespace JSC {
-
-static const bool verbose = false;
-
-void HighFidelityTypeProfiler::logTypesForTypeLocation(TypeLocation* location)
-{
- TypeProfilerSearchDescriptor descriptor = location->m_globalVariableID == HighFidelityReturnStatement ? TypeProfilerSearchDescriptorFunctionReturn : TypeProfilerSearchDescriptorNormal;
-
- dataLogF("[Start, End]::[%u, %u]\n", location->m_divotStart, location->m_divotEnd);
-
- if (findLocation(location->m_divotStart, location->m_sourceID, descriptor))
- dataLog("\t\t[Entry IS in System]\n");
- else
- dataLog("\t\t[Entry IS NOT in system]\n");
-
- dataLog("\t\t", location->m_globalVariableID == HighFidelityReturnStatement ? "[Return Statement]" : "[Normal Statement]", "\n");
-
- dataLog("\t\t#Local#\n\t\t", location->m_instructionTypeSet->seenTypes().replace("\n", "\n\t\t"), "\n");
- if (location->m_globalTypeSet)
- dataLog("\t\t#Global#\n\t\t", location->m_globalTypeSet->seenTypes().replace("\n", "\n\t\t"), "\n");
-}
-
-void HighFidelityTypeProfiler::insertNewLocation(TypeLocation* location)
-{
- if (verbose)
- dataLogF("Registering location:: divotStart:%u, divotEnd:%u\n", location->m_divotStart, location->m_divotEnd);
-
- if (!m_bucketMap.contains(location->m_sourceID)) {
- Vector<TypeLocation*> bucket;
- m_bucketMap.set(location->m_sourceID, bucket);
- }
-
- Vector<TypeLocation*>& bucket = m_bucketMap.find(location->m_sourceID)->value;
- bucket.append(location);
-}
-
-void HighFidelityTypeProfiler::getTypesForVariableAtOffsetForInspector(TypeProfilerSearchDescriptor descriptor, unsigned divot, intptr_t sourceID, RefPtr<Inspector::TypeBuilder::Runtime::TypeDescription>& description)
-{
- TypeLocation* location = findLocation(divot, sourceID, descriptor);
- if (!location)
- return;
-
- if (location->m_globalTypeSet && location->m_globalVariableID != HighFidelityNoGlobalIDExists) {
- description->setDisplayTypeName(location->m_globalTypeSet->displayName());
- description->setGlobalPrimitiveTypeNames(location->m_globalTypeSet->allPrimitiveTypeNames());
- description->setGlobalStructures(location->m_globalTypeSet->allStructureRepresentations());
- } else
- description->setDisplayTypeName(location->m_instructionTypeSet->displayName());
-
- description->setLocalPrimitiveTypeNames(location->m_instructionTypeSet->allPrimitiveTypeNames());
- description->setLocalStructures(location->m_instructionTypeSet->allStructureRepresentations());
-}
-
-static bool descriptorMatchesTypeLocation(TypeProfilerSearchDescriptor descriptor, TypeLocation* location)
-{
- if (descriptor == TypeProfilerSearchDescriptorFunctionReturn && location->m_globalVariableID == HighFidelityReturnStatement)
- return true;
-
- if (descriptor == TypeProfilerSearchDescriptorNormal && location->m_globalVariableID != HighFidelityReturnStatement)
- return true;
-
- return false;
-}
-
-TypeLocation* HighFidelityTypeProfiler::findLocation(unsigned divot, intptr_t sourceID, TypeProfilerSearchDescriptor descriptor)
-{
- QueryKey queryKey(sourceID, divot);
- auto iter = m_queryCache.find(queryKey);
- if (iter != m_queryCache.end())
- return iter->value;
-
- if (!m_functionHasExecutedCache.hasExecutedAtOffset(sourceID, divot))
- return nullptr;
-
- ASSERT(m_bucketMap.contains(sourceID));
-
- Vector<TypeLocation*>& bucket = m_bucketMap.find(sourceID)->value;
- TypeLocation* bestMatch = nullptr;
- unsigned distance = UINT_MAX; // Because assignments may be nested, make sure we find the closest enclosing assignment to this character offset.
- for (size_t i = 0, size = bucket.size(); i < size; i++) {
- TypeLocation* location = bucket.at(i);
- if (descriptor == TypeProfilerSearchDescriptorFunctionReturn && descriptorMatchesTypeLocation(descriptor, location) && location->m_divotForFunctionOffsetIfReturnStatement == divot)
- return location;
-
- if (location->m_divotStart <= divot && divot <= location->m_divotEnd && location->m_divotEnd - location->m_divotStart <= distance && descriptorMatchesTypeLocation(descriptor, location)) {
- distance = location->m_divotEnd - location->m_divotStart;
- bestMatch = location;
- }
- }
-
- if (bestMatch)
- m_queryCache.set(queryKey, bestMatch);
- // FIXME: BestMatch should never be null past this point. This doesn't hold currently because we ignore var assignments when code contains eval/With (VarInjection).
- // https://bugs.webkit.org/show_bug.cgi?id=135184
- return bestMatch;
-}
-
-} //namespace JSC
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeHighFidelityTypeProfilerh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/runtime/HighFidelityTypeProfiler.h (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/HighFidelityTypeProfiler.h        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/runtime/HighFidelityTypeProfiler.h        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -1,115 +0,0 @@
</span><del>-/*
- * Copyright (C) 2014 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.
- */
-
-#ifndef HighFidelityTypeProfiler_h
-#define HighFidelityTypeProfiler_h
-
-#include "CodeBlock.h"
-#include "FunctionHasExecutedCache.h"
-#include "TypeLocationCache.h"
-#include <wtf/HashMap.h>
-#include <wtf/text/WTFString.h>
-#include <wtf/Vector.h>
-
-namespace Inspector { namespace TypeBuilder { namespace Runtime {
-class TypeDescription;
-}}}
-
-namespace JSC {
-
-class TypeLocation;
-
-struct QueryKey {
- QueryKey()
- : m_sourceID(0)
- , m_divot(0)
- { }
-
- QueryKey(intptr_t sourceID, unsigned divot)
- : m_sourceID(sourceID)
- , m_divot(divot)
- { }
-
- QueryKey(WTF::HashTableDeletedValueType)
- : m_sourceID(INTPTR_MAX)
- , m_divot(UINT_MAX)
- { }
-
- bool isHashTableDeletedValue() const { return m_sourceID == INTPTR_MAX && m_divot == UINT_MAX; }
- bool operator==(const QueryKey& other) const { return m_sourceID == other.m_sourceID && m_divot == other.m_divot; }
- unsigned hash() const { return m_sourceID + m_divot; }
-
- intptr_t m_sourceID;
- unsigned m_divot;
-};
-
-struct QueryKeyHash {
- static unsigned hash(const QueryKey& key) { return key.hash(); }
- static bool equal(const QueryKey& a, const QueryKey& b) { return a == b; }
- static const bool safeToCompareToEmptyOrDeleted = true;
-};
-
-} //namespace JSC
-
-namespace WTF {
-
-template<typename T> struct DefaultHash;
-template<> struct DefaultHash<JSC::QueryKey> {
- typedef JSC::QueryKeyHash Hash;
-};
-
-template<typename T> struct HashTraits;
-template<> struct HashTraits<JSC::QueryKey> : SimpleClassHashTraits<JSC::QueryKey> { };
-
-} // namespace WTF
-
-namespace JSC {
-
-enum TypeProfilerSearchDescriptor {
- TypeProfilerSearchDescriptorNormal = 1,
- TypeProfilerSearchDescriptorFunctionReturn = 2
-};
-
-class HighFidelityTypeProfiler {
-public:
- void logTypesForTypeLocation(TypeLocation*);
- void getTypesForVariableAtOffsetForInspector(TypeProfilerSearchDescriptor descriptor, unsigned divot, intptr_t sourceID, RefPtr<Inspector::TypeBuilder::Runtime::TypeDescription>&);
- void insertNewLocation(TypeLocation*);
- FunctionHasExecutedCache* functionHasExecutedCache() { return &m_functionHasExecutedCache; }
- TypeLocationCache* typeLocationCache() { return &m_typeLocationCache; }
-
-private:
- TypeLocation* findLocation(unsigned divot, intptr_t sourceID, TypeProfilerSearchDescriptor descriptor);
- typedef HashMap<intptr_t, Vector<TypeLocation*>> SourceIDToLocationBucketMap;
- SourceIDToLocationBucketMap m_bucketMap;
- FunctionHasExecutedCache m_functionHasExecutedCache;
- TypeLocationCache m_typeLocationCache;
- typedef HashMap<QueryKey, TypeLocation*> TypeLocationQueryCache;
- TypeLocationQueryCache m_queryCache;
-};
-
-} // namespace JSC
-
-#endif //HighFidelityTypeProfiler_h
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeOptionsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Options.h (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Options.h        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/runtime/Options.h        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -274,7 +274,7 @@
</span><span class="cx"> v(unsigned, gcMaxHeapSize, 0) \
</span><span class="cx"> v(bool, recordGCPauseTimes, false) \
</span><span class="cx"> v(bool, logHeapStatisticsAtExit, false) \
</span><del>- v(bool, profileTypesWithHighFidelity, false) \
</del><ins>+ v(bool, enableTypeProfiler, false) \
</ins><span class="cx"> \
</span><span class="cx"> v(bool, enableExceptionFuzz, false) \
</span><span class="cx"> v(unsigned, fireExceptionFuzzAt, 0)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeSymbolTablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/SymbolTable.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/SymbolTable.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/runtime/SymbolTable.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -187,7 +187,7 @@
</span><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void SymbolTable::prepareForHighFidelityTypeProfiling(const ConcurrentJITLocker&)
</del><ins>+void SymbolTable::prepareForTypeProfiling(const ConcurrentJITLocker&)
</ins><span class="cx"> {
</span><span class="cx"> if (m_typeProfilingRareData)
</span><span class="cx"> return;
</span><span class="lines">@@ -195,7 +195,7 @@
</span><span class="cx"> m_typeProfilingRareData = std::make_unique<TypeProfilingRareData>();
</span><span class="cx">
</span><span class="cx"> for (auto iter = m_map.begin(), end = m_map.end(); iter != end; ++iter) {
</span><del>- m_typeProfilingRareData->m_uniqueIDMap.set(iter->key, HighFidelityNeedsUniqueIDGeneration);
</del><ins>+ m_typeProfilingRareData->m_uniqueIDMap.set(iter->key, TypeProfilerNeedsUniqueIDGeneration);
</ins><span class="cx"> m_typeProfilingRareData->m_registerToVariableMap.set(iter->value.getIndex(), iter->key);
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="lines">@@ -207,10 +207,10 @@
</span><span class="cx"> auto iter = m_typeProfilingRareData->m_uniqueIDMap.find(key);
</span><span class="cx"> auto end = m_typeProfilingRareData->m_uniqueIDMap.end();
</span><span class="cx"> if (iter == end)
</span><del>- return HighFidelityNoGlobalIDExists;
</del><ins>+ return TypeProfilerNoGlobalIDExists;
</ins><span class="cx">
</span><span class="cx"> GlobalVariableID id = iter->value;
</span><del>- if (id == HighFidelityNeedsUniqueIDGeneration) {
</del><ins>+ if (id == TypeProfilerNeedsUniqueIDGeneration) {
</ins><span class="cx"> id = vm.getNextUniqueVariableID();
</span><span class="cx"> m_typeProfilingRareData->m_uniqueIDMap.set(key, id);
</span><span class="cx"> m_typeProfilingRareData->m_uniqueTypeSetMap.set(key, TypeSet::create()); // Make a new global typeset for this corresponding ID.
</span><span class="lines">@@ -226,7 +226,7 @@
</span><span class="cx"> auto iter = m_typeProfilingRareData->m_registerToVariableMap.find(registerIndex);
</span><span class="cx"> auto end = m_typeProfilingRareData->m_registerToVariableMap.end();
</span><span class="cx"> if (iter == end)
</span><del>- return HighFidelityNoGlobalIDExists;
</del><ins>+ return TypeProfilerNoGlobalIDExists;
</ins><span class="cx">
</span><span class="cx"> return uniqueIDForVariable(locker, iter->value.get(), vm);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeSymbolTableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/SymbolTable.h (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/SymbolTable.h        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/runtime/SymbolTable.h        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -479,7 +479,7 @@
</span><span class="cx">
</span><span class="cx"> SymbolTable* cloneCapturedNames(VM&);
</span><span class="cx">
</span><del>- void prepareForHighFidelityTypeProfiling(const ConcurrentJITLocker&);
</del><ins>+ void prepareForTypeProfiling(const ConcurrentJITLocker&);
</ins><span class="cx">
</span><span class="cx"> static void visitChildren(JSCell*, SlotVisitor&);
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeTypeProfilercppfromrev172818trunkSourceJavaScriptCoreruntimeHighFidelityTypeProfilercpp"></a>
<div class="copfile"><h4>Copied: trunk/Source/JavaScriptCore/runtime/TypeProfiler.cpp (from rev 172818, trunk/Source/JavaScriptCore/runtime/HighFidelityTypeProfiler.cpp) (0 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/TypeProfiler.cpp         (rev 0)
+++ trunk/Source/JavaScriptCore/runtime/TypeProfiler.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -0,0 +1,129 @@
</span><ins>+/*
+ * Copyright (C) 2014 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 "TypeProfiler.h"
+
+#include "InspectorJSTypeBuilders.h"
+#include "TypeLocation.h"
+
+namespace JSC {
+
+static const bool verbose = false;
+
+void TypeProfiler::logTypesForTypeLocation(TypeLocation* location)
+{
+ TypeProfilerSearchDescriptor descriptor = location->m_globalVariableID == TypeProfilerReturnStatement ? TypeProfilerSearchDescriptorFunctionReturn : TypeProfilerSearchDescriptorNormal;
+
+ dataLogF("[Start, End]::[%u, %u]\n", location->m_divotStart, location->m_divotEnd);
+
+ if (findLocation(location->m_divotStart, location->m_sourceID, descriptor))
+ dataLog("\t\t[Entry IS in System]\n");
+ else
+ dataLog("\t\t[Entry IS NOT in system]\n");
+
+ dataLog("\t\t", location->m_globalVariableID == TypeProfilerReturnStatement ? "[Return Statement]" : "[Normal Statement]", "\n");
+
+ dataLog("\t\t#Local#\n\t\t", location->m_instructionTypeSet->seenTypes().replace("\n", "\n\t\t"), "\n");
+ if (location->m_globalTypeSet)
+ dataLog("\t\t#Global#\n\t\t", location->m_globalTypeSet->seenTypes().replace("\n", "\n\t\t"), "\n");
+}
+
+void TypeProfiler::insertNewLocation(TypeLocation* location)
+{
+ if (verbose)
+ dataLogF("Registering location:: divotStart:%u, divotEnd:%u\n", location->m_divotStart, location->m_divotEnd);
+
+ if (!m_bucketMap.contains(location->m_sourceID)) {
+ Vector<TypeLocation*> bucket;
+ m_bucketMap.set(location->m_sourceID, bucket);
+ }
+
+ Vector<TypeLocation*>& bucket = m_bucketMap.find(location->m_sourceID)->value;
+ bucket.append(location);
+}
+
+void TypeProfiler::getTypesForVariableAtOffsetForInspector(TypeProfilerSearchDescriptor descriptor, unsigned divot, intptr_t sourceID, RefPtr<Inspector::TypeBuilder::Runtime::TypeDescription>& description)
+{
+ TypeLocation* location = findLocation(divot, sourceID, descriptor);
+ if (!location)
+ return;
+
+ if (location->m_globalTypeSet && location->m_globalVariableID != TypeProfilerNoGlobalIDExists) {
+ description->setDisplayTypeName(location->m_globalTypeSet->displayName());
+ description->setGlobalPrimitiveTypeNames(location->m_globalTypeSet->allPrimitiveTypeNames());
+ description->setGlobalStructures(location->m_globalTypeSet->allStructureRepresentations());
+ } else
+ description->setDisplayTypeName(location->m_instructionTypeSet->displayName());
+
+ description->setLocalPrimitiveTypeNames(location->m_instructionTypeSet->allPrimitiveTypeNames());
+ description->setLocalStructures(location->m_instructionTypeSet->allStructureRepresentations());
+}
+
+static bool descriptorMatchesTypeLocation(TypeProfilerSearchDescriptor descriptor, TypeLocation* location)
+{
+ if (descriptor == TypeProfilerSearchDescriptorFunctionReturn && location->m_globalVariableID == TypeProfilerReturnStatement)
+ return true;
+
+ if (descriptor == TypeProfilerSearchDescriptorNormal && location->m_globalVariableID != TypeProfilerReturnStatement)
+ return true;
+
+ return false;
+}
+
+TypeLocation* TypeProfiler::findLocation(unsigned divot, intptr_t sourceID, TypeProfilerSearchDescriptor descriptor)
+{
+ QueryKey queryKey(sourceID, divot);
+ auto iter = m_queryCache.find(queryKey);
+ if (iter != m_queryCache.end())
+ return iter->value;
+
+ if (!m_functionHasExecutedCache.hasExecutedAtOffset(sourceID, divot))
+ return nullptr;
+
+ ASSERT(m_bucketMap.contains(sourceID));
+
+ Vector<TypeLocation*>& bucket = m_bucketMap.find(sourceID)->value;
+ TypeLocation* bestMatch = nullptr;
+ unsigned distance = UINT_MAX; // Because assignments may be nested, make sure we find the closest enclosing assignment to this character offset.
+ for (size_t i = 0, size = bucket.size(); i < size; i++) {
+ TypeLocation* location = bucket.at(i);
+ if (descriptor == TypeProfilerSearchDescriptorFunctionReturn && descriptorMatchesTypeLocation(descriptor, location) && location->m_divotForFunctionOffsetIfReturnStatement == divot)
+ return location;
+
+ if (location->m_divotStart <= divot && divot <= location->m_divotEnd && location->m_divotEnd - location->m_divotStart <= distance && descriptorMatchesTypeLocation(descriptor, location)) {
+ distance = location->m_divotEnd - location->m_divotStart;
+ bestMatch = location;
+ }
+ }
+
+ if (bestMatch)
+ m_queryCache.set(queryKey, bestMatch);
+ // FIXME: BestMatch should never be null past this point. This doesn't hold currently because we ignore var assignments when code contains eval/With (VarInjection).
+ // https://bugs.webkit.org/show_bug.cgi?id=135184
+ return bestMatch;
+}
+
+} // namespace JSC
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeTypeProfilerhfromrev172818trunkSourceJavaScriptCoreruntimeHighFidelityTypeProfilerh"></a>
<div class="copfile"><h4>Copied: trunk/Source/JavaScriptCore/runtime/TypeProfiler.h (from rev 172818, trunk/Source/JavaScriptCore/runtime/HighFidelityTypeProfiler.h) (0 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/TypeProfiler.h         (rev 0)
+++ trunk/Source/JavaScriptCore/runtime/TypeProfiler.h        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -0,0 +1,115 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.
+ */
+
+#ifndef TypeProfiler_h
+#define TypeProfiler_h
+
+#include "CodeBlock.h"
+#include "FunctionHasExecutedCache.h"
+#include "TypeLocationCache.h"
+#include <wtf/HashMap.h>
+#include <wtf/Vector.h>
+#include <wtf/text/WTFString.h>
+
+namespace Inspector { namespace TypeBuilder { namespace Runtime {
+class TypeDescription;
+}}}
+
+namespace JSC {
+
+class TypeLocation;
+
+struct QueryKey {
+ QueryKey()
+ : m_sourceID(0)
+ , m_divot(0)
+ { }
+
+ QueryKey(intptr_t sourceID, unsigned divot)
+ : m_sourceID(sourceID)
+ , m_divot(divot)
+ { }
+
+ QueryKey(WTF::HashTableDeletedValueType)
+ : m_sourceID(INTPTR_MAX)
+ , m_divot(UINT_MAX)
+ { }
+
+ bool isHashTableDeletedValue() const { return m_sourceID == INTPTR_MAX && m_divot == UINT_MAX; }
+ bool operator==(const QueryKey& other) const { return m_sourceID == other.m_sourceID && m_divot == other.m_divot; }
+ unsigned hash() const { return m_sourceID + m_divot; }
+
+ intptr_t m_sourceID;
+ unsigned m_divot;
+};
+
+struct QueryKeyHash {
+ static unsigned hash(const QueryKey& key) { return key.hash(); }
+ static bool equal(const QueryKey& a, const QueryKey& b) { return a == b; }
+ static const bool safeToCompareToEmptyOrDeleted = true;
+};
+
+} // namespace JSC
+
+namespace WTF {
+
+template<typename T> struct DefaultHash;
+template<> struct DefaultHash<JSC::QueryKey> {
+ typedef JSC::QueryKeyHash Hash;
+};
+
+template<typename T> struct HashTraits;
+template<> struct HashTraits<JSC::QueryKey> : SimpleClassHashTraits<JSC::QueryKey> { };
+
+} // namespace WTF
+
+namespace JSC {
+
+enum TypeProfilerSearchDescriptor {
+ TypeProfilerSearchDescriptorNormal = 1,
+ TypeProfilerSearchDescriptorFunctionReturn = 2
+};
+
+class TypeProfiler {
+public:
+ void logTypesForTypeLocation(TypeLocation*);
+ void getTypesForVariableAtOffsetForInspector(TypeProfilerSearchDescriptor, unsigned divot, intptr_t sourceID, RefPtr<Inspector::TypeBuilder::Runtime::TypeDescription>&);
+ void insertNewLocation(TypeLocation*);
+ FunctionHasExecutedCache* functionHasExecutedCache() { return &m_functionHasExecutedCache; }
+ TypeLocationCache* typeLocationCache() { return &m_typeLocationCache; }
+
+private:
+ TypeLocation* findLocation(unsigned divot, intptr_t sourceID, TypeProfilerSearchDescriptor);
+ typedef HashMap<intptr_t, Vector<TypeLocation*>> SourceIDToLocationBucketMap;
+ SourceIDToLocationBucketMap m_bucketMap;
+ FunctionHasExecutedCache m_functionHasExecutedCache;
+ TypeLocationCache m_typeLocationCache;
+ typedef HashMap<QueryKey, TypeLocation*> TypeLocationQueryCache;
+ TypeLocationQueryCache m_queryCache;
+};
+
+} // namespace JSC
+
+#endif // TypeProfiler_h
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeTypeProfilerLogcppfromrev172818trunkSourceJavaScriptCoreruntimeHighFidelityLogcpp"></a>
<div class="copfile"><h4>Copied: trunk/Source/JavaScriptCore/runtime/TypeProfilerLog.cpp (from rev 172818, trunk/Source/JavaScriptCore/runtime/HighFidelityLog.cpp) (0 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/TypeProfilerLog.cpp         (rev 0)
+++ trunk/Source/JavaScriptCore/runtime/TypeProfilerLog.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -0,0 +1,94 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "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 OR ITS 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 "TypeProfilerLog.h"
+
+#include "JSCJSValueInlines.h"
+#include "TypeLocation.h"
+#include <wtf/CurrentTime.h>
+
+
+namespace JSC {
+
+static const bool verbose = false;
+
+void TypeProfilerLog::initializeLog()
+{
+ ASSERT(!m_logStartPtr);
+ m_logSize = 50000;
+ m_logStartPtr = new LogEntry[m_logSize];
+ m_currentLogEntryPtr = m_logStartPtr;
+ m_logEndPtr = m_logStartPtr + m_logSize;
+}
+
+TypeProfilerLog::~TypeProfilerLog()
+{
+ delete[] m_logStartPtr;
+}
+
+void TypeProfilerLog::processLogEntries(String reason)
+{
+ if (verbose)
+ dataLog("Process caller:'", reason, "'");
+
+ double before = currentTimeMS();
+ LogEntry* entry = m_logStartPtr;
+ HashMap<StructureID, RefPtr<StructureShape>> seenShapes;
+ while (entry != m_currentLogEntryPtr) {
+ StructureID id = entry->structureID;
+ RefPtr<StructureShape> shape;
+ JSValue value = entry->value;
+ if (id) {
+ auto iter = seenShapes.find(id);
+ if (iter == seenShapes.end()) {
+ shape = Heap::heap(value.asCell())->structureIDTable().get(entry->structureID)->toStructureShape(value);
+ seenShapes.set(id, shape);
+ } else
+ shape = iter->value;
+ }
+
+ RuntimeType type = TypeSet::getRuntimeTypeForValue(value);
+ TypeLocation* location = entry->location;
+ location->m_lastSeenType = type;
+ if (location->m_globalTypeSet)
+ location->m_globalTypeSet->addTypeInformation(type, shape, id);
+ location->m_instructionTypeSet->addTypeInformation(type, shape, id);
+
+ entry++;
+ }
+
+ m_currentLogEntryPtr = m_logStartPtr;
+
+ if (verbose) {
+ double after = currentTimeMS();
+ dataLogF(" Processing the log took: '%f' ms\n", after - before);
+ }
+}
+
+} // namespace JSC
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeTypeProfilerLoghfromrev172818trunkSourceJavaScriptCoreruntimeHighFidelityLogh"></a>
<div class="copfile"><h4>Copied: trunk/Source/JavaScriptCore/runtime/TypeProfilerLog.h (from rev 172818, trunk/Source/JavaScriptCore/runtime/HighFidelityLog.h) (0 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/TypeProfilerLog.h         (rev 0)
+++ trunk/Source/JavaScriptCore/runtime/TypeProfilerLog.h        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -0,0 +1,94 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "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 OR ITS 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.
+ */
+
+#ifndef TypeProfilerLog_h
+#define TypeProfilerLog_h
+
+#include "JSCJSValue.h"
+#include "Structure.h"
+#include "TypeProfiler.h"
+#include <wtf/ByteSpinLock.h>
+
+namespace JSC {
+
+class TypeLocation;
+
+class TypeProfilerLog {
+
+public:
+ struct LogEntry {
+ public:
+ JSValue value;
+ TypeLocation* location;
+ StructureID structureID;
+
+ static ptrdiff_t structureIDOffset() { return OBJECT_OFFSETOF(LogEntry, structureID); }
+ static ptrdiff_t valueOffset() { return OBJECT_OFFSETOF(LogEntry, value); }
+ static ptrdiff_t locationOffset() { return OBJECT_OFFSETOF(LogEntry, location); }
+ };
+
+
+ TypeProfilerLog()
+ : m_logStartPtr(0)
+ {
+ initializeLog();
+ }
+
+ ~TypeProfilerLog();
+
+ ALWAYS_INLINE void recordTypeInformationForLocation(JSValue value, TypeLocation* location)
+ {
+ ASSERT(m_logStartPtr);
+
+ m_currentLogEntryPtr->location = location;
+ m_currentLogEntryPtr->value = value;
+ m_currentLogEntryPtr->structureID = (value.isCell() ? value.asCell()->structureID() : 0);
+
+ m_currentLogEntryPtr += 1;
+ if (UNLIKELY(m_currentLogEntryPtr == m_logEndPtr))
+ processLogEntries(ASCIILiteral("Log Full"));
+ }
+
+ void processLogEntries(String);
+ LogEntry* logEndPtr() const { return m_logEndPtr; }
+
+ static ptrdiff_t logStartOffset() { return OBJECT_OFFSETOF(TypeProfilerLog, m_logStartPtr); }
+ static ptrdiff_t currentLogEntryOffset() { return OBJECT_OFFSETOF(TypeProfilerLog, m_currentLogEntryPtr); }
+
+private:
+ void initializeLog();
+
+ unsigned m_logSize;
+ LogEntry* m_logStartPtr;
+ LogEntry* m_currentLogEntryPtr;
+ LogEntry* m_logEndPtr;
+};
+
+} // namespace JSC
+
+#endif // TypeProfilerLog_h
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeVMcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/VM.cpp (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/VM.cpp        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/runtime/VM.cpp        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -48,8 +48,6 @@
</span><span class="cx"> #include "GetterSetter.h"
</span><span class="cx"> #include "Heap.h"
</span><span class="cx"> #include "HeapIterationScope.h"
</span><del>-#include "HighFidelityTypeProfiler.h"
-#include "HighFidelityLog.h"
</del><span class="cx"> #include "HostCallReturnValue.h"
</span><span class="cx"> #include "Identifier.h"
</span><span class="cx"> #include "IncrementalSweeper.h"
</span><span class="lines">@@ -84,6 +82,8 @@
</span><span class="cx"> #include "StrictEvalActivation.h"
</span><span class="cx"> #include "StrongInlines.h"
</span><span class="cx"> #include "StructureInlines.h"
</span><ins>+#include "TypeProfiler.h"
+#include "TypeProfilerLog.h"
</ins><span class="cx"> #include "UnlinkedCodeBlock.h"
</span><span class="cx"> #include "WeakMapData.h"
</span><span class="cx"> #include <wtf/ProcessID.h>
</span><span class="lines">@@ -193,7 +193,7 @@
</span><span class="cx"> , m_enabledProfiler(nullptr)
</span><span class="cx"> , m_builtinExecutables(BuiltinExecutables::create(*this))
</span><span class="cx"> , m_nextUniqueVariableID(1)
</span><del>- , m_highFidelityTypeProfilingEnabledCount(0)
</del><ins>+ , m_typeProfilerEnabledCount(0)
</ins><span class="cx"> {
</span><span class="cx"> interpreter = new Interpreter(*this);
</span><span class="cx"> StackBounds stack = wtfThreadData().stack();
</span><span class="lines">@@ -286,8 +286,8 @@
</span><span class="cx"> // won't use this.
</span><span class="cx"> m_typedArrayController = adoptRef(new SimpleTypedArrayController());
</span><span class="cx">
</span><del>- if (Options::profileTypesWithHighFidelity())
- enableHighFidelityTypeProfiling();
</del><ins>+ if (Options::enableTypeProfiler())
+ enableTypeProfiler();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> VM::~VM()
</span><span class="lines">@@ -899,29 +899,29 @@
</span><span class="cx"> return m_typeLocationInfo->add();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool VM::enableHighFidelityTypeProfiling()
</del><ins>+bool VM::enableTypeProfiler()
</ins><span class="cx"> {
</span><span class="cx"> bool needsToRecompile = false;
</span><del>- if (!m_highFidelityTypeProfilingEnabledCount) {
- m_highFidelityTypeProfiler = std::make_unique<HighFidelityTypeProfiler>();
- m_highFidelityLog = std::make_unique<HighFidelityLog>();
</del><ins>+ if (!m_typeProfilerEnabledCount) {
+ m_typeProfiler = std::make_unique<TypeProfiler>();
+ m_typeProfilerLog = std::make_unique<TypeProfilerLog>();
</ins><span class="cx"> m_typeLocationInfo = std::make_unique<Bag<TypeLocation>>();
</span><span class="cx"> needsToRecompile = true;
</span><span class="cx"> }
</span><del>- m_highFidelityTypeProfilingEnabledCount++;
</del><ins>+ m_typeProfilerEnabledCount++;
</ins><span class="cx">
</span><span class="cx"> return needsToRecompile;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool VM::disableHighFidelityTypeProfiling()
</del><ins>+bool VM::disableTypeProfiler()
</ins><span class="cx"> {
</span><del>- RELEASE_ASSERT(m_highFidelityTypeProfilingEnabledCount > 0);
</del><ins>+ RELEASE_ASSERT(m_typeProfilerEnabledCount > 0);
</ins><span class="cx">
</span><span class="cx"> bool needsToRecompile = false;
</span><del>- m_highFidelityTypeProfilingEnabledCount--;
- if (!m_highFidelityTypeProfilingEnabledCount) {
- m_highFidelityTypeProfiler.reset(nullptr);
- m_highFidelityLog.reset(nullptr);
</del><ins>+ m_typeProfilerEnabledCount--;
+ if (!m_typeProfilerEnabledCount) {
+ m_typeProfiler.reset(nullptr);
+ m_typeProfilerLog.reset(nullptr);
</ins><span class="cx"> m_typeLocationInfo.reset(nullptr);
</span><span class="cx"> needsToRecompile = true;
</span><span class="cx"> }
</span><span class="lines">@@ -929,13 +929,13 @@
</span><span class="cx"> return needsToRecompile;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void VM::dumpHighFidelityProfilingTypes()
</del><ins>+void VM::dumpTypeProfilerData()
</ins><span class="cx"> {
</span><del>- if (!isProfilingTypesWithHighFidelity())
</del><ins>+ if (!typeProfiler())
</ins><span class="cx"> return;
</span><span class="cx">
</span><del>- highFidelityLog()->processHighFidelityLog("VM Dump Types");
- HighFidelityTypeProfiler* profiler = m_highFidelityTypeProfiler.get();
</del><ins>+ typeProfilerLog()->processLogEntries(ASCIILiteral("VM Dump Types"));
+ TypeProfiler* profiler = m_typeProfiler.get();
</ins><span class="cx"> for (Bag<TypeLocation>::iterator iter = m_typeLocationInfo->begin(); !!iter; ++iter) {
</span><span class="cx"> TypeLocation* location = *iter;
</span><span class="cx"> profiler->logTypesForTypeLocation(location);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeVMh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/VM.h (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/VM.h        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/JavaScriptCore/runtime/VM.h        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -77,8 +77,8 @@
</span><span class="cx"> class CommonIdentifiers;
</span><span class="cx"> class ExecState;
</span><span class="cx"> class HandleStack;
</span><del>- class HighFidelityTypeProfiler;
- class HighFidelityLog;
</del><ins>+ class TypeProfiler;
+ class TypeProfilerLog;
</ins><span class="cx"> class Identifier;
</span><span class="cx"> class Interpreter;
</span><span class="cx"> class JSGlobalObject;
</span><span class="lines">@@ -497,13 +497,12 @@
</span><span class="cx">
</span><span class="cx"> BuiltinExecutables* builtinExecutables() { return m_builtinExecutables.get(); }
</span><span class="cx">
</span><del>- bool isProfilingTypesWithHighFidelity() { return !!m_highFidelityTypeProfiler; }
- bool enableHighFidelityTypeProfiling();
- bool disableHighFidelityTypeProfiling();
- HighFidelityLog* highFidelityLog() { return m_highFidelityLog.get(); }
- HighFidelityTypeProfiler* highFidelityTypeProfiler() { return m_highFidelityTypeProfiler.get(); }
</del><ins>+ bool enableTypeProfiler();
+ bool disableTypeProfiler();
+ TypeProfilerLog* typeProfilerLog() { return m_typeProfilerLog.get(); }
+ TypeProfiler* typeProfiler() { return m_typeProfiler.get(); }
</ins><span class="cx"> TypeLocation* nextTypeLocation();
</span><del>- JS_EXPORT_PRIVATE void dumpHighFidelityProfilingTypes();
</del><ins>+ JS_EXPORT_PRIVATE void dumpTypeProfilerData();
</ins><span class="cx"> GlobalVariableID getNextUniqueVariableID() { return m_nextUniqueVariableID++; }
</span><span class="cx">
</span><span class="cx"> private:
</span><span class="lines">@@ -554,10 +553,10 @@
</span><span class="cx"> OwnPtr<BuiltinExecutables> m_builtinExecutables;
</span><span class="cx"> RefCountedArray<StackFrame> m_exceptionStack;
</span><span class="cx"> HashMap<String, RefPtr<WatchpointSet>> m_impurePropertyWatchpointSets;
</span><del>- std::unique_ptr<HighFidelityTypeProfiler> m_highFidelityTypeProfiler;
- std::unique_ptr<HighFidelityLog> m_highFidelityLog;
</del><ins>+ std::unique_ptr<TypeProfiler> m_typeProfiler;
+ std::unique_ptr<TypeProfilerLog> m_typeProfilerLog;
</ins><span class="cx"> GlobalVariableID m_nextUniqueVariableID;
</span><del>- unsigned m_highFidelityTypeProfilingEnabledCount;
</del><ins>+ unsigned m_typeProfilerEnabledCount;
</ins><span class="cx"> std::unique_ptr<Bag<TypeLocation>> m_typeLocationInfo;
</span><span class="cx"> };
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/WebInspectorUI/ChangeLog        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2014-08-20 Saam Barati <sbarati@apple.com>
+
+ Rename HighFidelityTypeProfiling variables for more clarity
+ https://bugs.webkit.org/show_bug.cgi?id=135899
+
+ Reviewed by Geoffrey Garen.
+
+ Change a reference in a comment to a JavaScriptCore file to its
+ newly renamed variant.
+
+ * UserInterface/Models/ScriptSyntaxTree.js:
+
</ins><span class="cx"> 2014-08-18 Saam Barati <sbarati@apple.com>
</span><span class="cx">
</span><span class="cx"> Web Inspector: Introduce an inspector Abstract Syntax Tree.
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceModelsScriptSyntaxTreejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js (172819 => 172820)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js        2014-08-21 00:32:59 UTC (rev 172819)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js        2014-08-21 01:03:20 UTC (rev 172820)
</span><span class="lines">@@ -41,7 +41,7 @@
</span><span class="cx"> }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-// This should be kept in sync with an enum in JavaSciptCore/runtime/HighFidelityTypeProfiler.h
</del><ins>+// This should be kept in sync with an enum in JavaSciptCore/runtime/TypeProfiler.h
</ins><span class="cx"> WebInspector.ScriptSyntaxTree.TypeProfilerSearchDescriptor = {
</span><span class="cx"> NormalExpression: 1,
</span><span class="cx"> FunctionReturn: 2
</span></span></pre>
</div>
</div>
</body>
</html>