Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (188698 => 188699)
--- trunk/Source/_javascript_Core/ChangeLog 2015-08-20 20:53:26 UTC (rev 188698)
+++ trunk/Source/_javascript_Core/ChangeLog 2015-08-20 21:09:19 UTC (rev 188699)
@@ -1,3 +1,17 @@
+2015-08-20 Commit Queue <[email protected]>
+
+ Unreviewed, rolling out r188675.
+ https://bugs.webkit.org/show_bug.cgi?id=148244
+
+ "caused a 17% Mac PLT regression" (Requested by ggaren on
+ #webkit).
+
+ Reverted changeset:
+
+ "clearCode() should clear code"
+ https://bugs.webkit.org/show_bug.cgi?id=148203
+ http://trac.webkit.org/changeset/188675
+
2015-08-11 Yusuke Suzuki <[email protected]>
Introduce put_by_id like IC into put_by_val when the given name is String or Symbol
Modified: trunk/Source/_javascript_Core/bytecode/UnlinkedFunctionExecutable.h (188698 => 188699)
--- trunk/Source/_javascript_Core/bytecode/UnlinkedFunctionExecutable.h 2015-08-20 20:53:26 UTC (rev 188698)
+++ trunk/Source/_javascript_Core/bytecode/UnlinkedFunctionExecutable.h 2015-08-20 21:09:19 UTC (rev 188699)
@@ -102,7 +102,7 @@
FunctionExecutable* link(VM&, const SourceCode&, int overrideLineNumber = -1);
- void clearCode()
+ void clearCodeForRecompilation()
{
m_codeBlockForCall.clear();
m_codeBlockForConstruct.clear();
Modified: trunk/Source/_javascript_Core/debugger/Debugger.cpp (188698 => 188699)
--- trunk/Source/_javascript_Core/debugger/Debugger.cpp 2015-08-20 20:53:26 UTC (rev 188698)
+++ trunk/Source/_javascript_Core/debugger/Debugger.cpp 2015-08-20 21:09:19 UTC (rev 188699)
@@ -88,6 +88,7 @@
ExecState* exec = function->scope()->globalObject()->JSGlobalObject::globalExec();
executable->clearCode();
+ executable->clearUnlinkedCodeForRecompilation();
if (m_debugger == function->scope()->globalObject()->debugger())
m_sourceProviders.add(executable->source().provider(), exec);
}
Modified: trunk/Source/_javascript_Core/heap/Heap.cpp (188698 => 188699)
--- trunk/Source/_javascript_Core/heap/Heap.cpp 2015-08-20 20:53:26 UTC (rev 188698)
+++ trunk/Source/_javascript_Core/heap/Heap.cpp 2015-08-20 21:09:19 UTC (rev 188699)
@@ -936,6 +936,15 @@
m_codeBlocks.deleteUnmarkedAndUnreferenced(FullCollection);
}
+void Heap::deleteAllUnlinkedFunctionCode()
+{
+ for (ExecutableBase* current : m_compiledCode) {
+ if (!current->isFunctionExecutable())
+ continue;
+ static_cast<FunctionExecutable*>(current)->clearUnlinkedCodeForRecompilation();
+ }
+}
+
void Heap::clearUnmarkedExecutables()
{
GCPHASE(ClearUnmarkedExecutables);
Modified: trunk/Source/_javascript_Core/heap/Heap.h (188698 => 188699)
--- trunk/Source/_javascript_Core/heap/Heap.h 2015-08-20 20:53:26 UTC (rev 188698)
+++ trunk/Source/_javascript_Core/heap/Heap.h 2015-08-20 21:09:19 UTC (rev 188699)
@@ -209,6 +209,7 @@
size_t sizeAfterLastFullCollection() const { return m_sizeAfterLastFullCollect; }
JS_EXPORT_PRIVATE void deleteAllCompiledCode();
+ void deleteAllUnlinkedFunctionCode();
void didAllocate(size_t);
void didAbandon(size_t);
Modified: trunk/Source/_javascript_Core/inspector/agents/InspectorRuntimeAgent.cpp (188698 => 188699)
--- trunk/Source/_javascript_Core/inspector/agents/InspectorRuntimeAgent.cpp 2015-08-20 20:53:26 UTC (rev 188698)
+++ trunk/Source/_javascript_Core/inspector/agents/InspectorRuntimeAgent.cpp 2015-08-20 21:09:19 UTC (rev 188699)
@@ -316,6 +316,7 @@
FunctionExecutable* executable = jsCast<FunctionExecutable*>(cell);
executable->clearCode();
+ executable->clearUnlinkedCodeForRecompilation();
}
inline IterationStatus operator()(JSCell* cell)
{
Modified: trunk/Source/_javascript_Core/runtime/Executable.cpp (188698 => 188699)
--- trunk/Source/_javascript_Core/runtime/Executable.cpp 2015-08-20 20:53:26 UTC (rev 188698)
+++ trunk/Source/_javascript_Core/runtime/Executable.cpp 2015-08-20 21:09:19 UTC (rev 188699)
@@ -557,9 +557,13 @@
visitor.append(&thisObject->m_singletonFunction);
}
+void FunctionExecutable::clearUnlinkedCodeForRecompilation()
+{
+ m_unlinkedExecutable->clearCodeForRecompilation();
+}
+
void FunctionExecutable::clearCode()
{
- m_unlinkedExecutable->clearCode();
m_codeBlockForCall = nullptr;
m_codeBlockForConstruct = nullptr;
Base::clearCode();
Modified: trunk/Source/_javascript_Core/runtime/Executable.h (188698 => 188699)
--- trunk/Source/_javascript_Core/runtime/Executable.h 2015-08-20 20:53:26 UTC (rev 188698)
+++ trunk/Source/_javascript_Core/runtime/Executable.h 2015-08-20 21:09:19 UTC (rev 188699)
@@ -640,6 +640,7 @@
JSString* nameValue() const { return m_unlinkedExecutable->nameValue(); }
size_t parameterCount() const { return m_unlinkedExecutable->parameterCount(); } // Excluding 'this'!
+ void clearUnlinkedCodeForRecompilation();
static void visitChildren(JSCell*, SlotVisitor&);
static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue proto)
{
Modified: trunk/Source/_javascript_Core/runtime/VM.cpp (188698 => 188699)
--- trunk/Source/_javascript_Core/runtime/VM.cpp 2015-08-20 20:53:26 UTC (rev 188698)
+++ trunk/Source/_javascript_Core/runtime/VM.cpp 2015-08-20 21:09:19 UTC (rev 188699)
@@ -487,6 +487,7 @@
m_codeCache->clear();
m_regExpCache->deleteAllCode();
heap.deleteAllCompiledCode();
+ heap.deleteAllUnlinkedFunctionCode();
heap.reportAbandonedObjectGraph();
}