diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-05-24 08:28:08 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-05-24 08:28:08 +0000 |
commit | a4e969f4965059196ca948db781e52f7cfebf19e (patch) | |
tree | 6ca352808c8fdc52006a0f33f6ae3c593b23867d /Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp | |
parent | 41386e9cb918eed93b3f13648cbef387e371e451 (diff) | |
download | WebKitGtk-tarball-a4e969f4965059196ca948db781e52f7cfebf19e.tar.gz |
webkitgtk-2.12.3webkitgtk-2.12.3
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp')
-rw-r--r-- | Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp | 46 |
1 files changed, 27 insertions, 19 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp b/Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp index 17b45a328..c9e5c79fd 100644 --- a/Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp +++ b/Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp @@ -31,12 +31,11 @@ #include "CodeBlock.h" #include "DFGJITCode.h" #include "Executable.h" +#include "JSCInlines.h" namespace JSC { namespace DFG { -ToFTLForOSREntryDeferredCompilationCallback::ToFTLForOSREntryDeferredCompilationCallback( - PassRefPtr<CodeBlock> dfgCodeBlock) - : m_dfgCodeBlock(dfgCodeBlock) +ToFTLForOSREntryDeferredCompilationCallback::ToFTLForOSREntryDeferredCompilationCallback() { } @@ -44,42 +43,51 @@ ToFTLForOSREntryDeferredCompilationCallback::~ToFTLForOSREntryDeferredCompilatio { } -PassRefPtr<ToFTLForOSREntryDeferredCompilationCallback> -ToFTLForOSREntryDeferredCompilationCallback::create( - PassRefPtr<CodeBlock> dfgCodeBlock) +Ref<ToFTLForOSREntryDeferredCompilationCallback>ToFTLForOSREntryDeferredCompilationCallback::create() { - return adoptRef(new ToFTLForOSREntryDeferredCompilationCallback(dfgCodeBlock)); + return adoptRef(*new ToFTLForOSREntryDeferredCompilationCallback()); } void ToFTLForOSREntryDeferredCompilationCallback::compilationDidBecomeReadyAsynchronously( - CodeBlock* codeBlock) + CodeBlock* codeBlock, CodeBlock* profiledDFGCodeBlock) { if (Options::verboseOSR()) { dataLog( - "Optimizing compilation of ", *codeBlock, " (for ", *m_dfgCodeBlock, + "Optimizing compilation of ", *codeBlock, " (for ", *profiledDFGCodeBlock, ") did become ready.\n"); } - m_dfgCodeBlock->jitCode()->dfg()->forceOptimizationSlowPathConcurrently( - m_dfgCodeBlock.get()); + profiledDFGCodeBlock->jitCode()->dfg()->forceOptimizationSlowPathConcurrently( + profiledDFGCodeBlock); } void ToFTLForOSREntryDeferredCompilationCallback::compilationDidComplete( - CodeBlock* codeBlock, CompilationResult result) + CodeBlock* codeBlock, CodeBlock* profiledDFGCodeBlock, CompilationResult result) { if (Options::verboseOSR()) { dataLog( - "Optimizing compilation of ", *codeBlock, " (for ", *m_dfgCodeBlock, + "Optimizing compilation of ", *codeBlock, " (for ", *profiledDFGCodeBlock, ") result: ", result, "\n"); } - if (result == CompilationSuccessful) - m_dfgCodeBlock->jitCode()->dfg()->osrEntryBlock = codeBlock; + JITCode* jitCode = profiledDFGCodeBlock->jitCode()->dfg(); + + switch (result) { + case CompilationSuccessful: + jitCode->setOSREntryBlock(*codeBlock->vm(), profiledDFGCodeBlock, codeBlock); + break; + case CompilationFailed: + jitCode->osrEntryRetry = 0; + jitCode->abandonOSREntry = true; + break; + case CompilationDeferred: + RELEASE_ASSERT_NOT_REACHED(); + case CompilationInvalidated: + jitCode->osrEntryRetry = 0; + break; + } - // FIXME: if we failed, we might want to just turn off OSR entry rather than - // totally turning off tier-up. - m_dfgCodeBlock->jitCode()->dfg()->setOptimizationThresholdBasedOnCompilationResult( - m_dfgCodeBlock.get(), result); + DeferredCompilationCallback::compilationDidComplete(codeBlock, profiledDFGCodeBlock, result); } } } // JSC::DFG |