GetByIdStatus GetByIdStatus::computeFor( CodeBlock* profiledBlock, CodeBlock* dfgBlock, StubInfoMap& baselineMap, StubInfoMap& dfgMap, CodeOrigin codeOrigin, StringImpl* uid) { #if ENABLE(DFG_JIT) if (dfgBlock) { GetByIdStatus result; { ConcurrentJITLocker locker(dfgBlock->m_lock); result = computeForStubInfo(locker, dfgBlock, dfgMap.get(codeOrigin), uid); } if (result.takesSlowPath()) return result; { ConcurrentJITLocker locker(profiledBlock->m_lock); if (hasExitSite(locker, profiledBlock, codeOrigin.bytecodeIndex, ExitFromFTL)) return GetByIdStatus(TakesSlowPath, true); } if (result.isSet()) return result; } #else UNUSED_PARAM(dfgBlock); UNUSED_PARAM(dfgMap); #endif return computeFor(profiledBlock, baselineMap, codeOrigin.bytecodeIndex, uid); }
GetByIdStatus GetByIdStatus::computeFor( CodeBlock* profiledBlock, CodeBlock* dfgBlock, StubInfoMap& baselineMap, StubInfoMap& dfgMap, CodeOrigin codeOrigin, UniquedStringImpl* uid) { #if ENABLE(DFG_JIT) if (dfgBlock) { CallLinkStatus::ExitSiteData exitSiteData; { ConcurrentJITLocker locker(profiledBlock->m_lock); exitSiteData = CallLinkStatus::computeExitSiteData( locker, profiledBlock, codeOrigin.bytecodeIndex); } GetByIdStatus result; { ConcurrentJITLocker locker(dfgBlock->m_lock); result = computeForStubInfoWithoutExitSiteFeedback( locker, dfgBlock, dfgMap.get(codeOrigin), uid, exitSiteData); } if (result.takesSlowPath()) return result; { ConcurrentJITLocker locker(profiledBlock->m_lock); if (hasExitSite(locker, profiledBlock, codeOrigin.bytecodeIndex)) return GetByIdStatus(TakesSlowPath, true); } if (result.isSet()) return result; } #else UNUSED_PARAM(dfgBlock); UNUSED_PARAM(dfgMap); #endif return computeFor(profiledBlock, baselineMap, codeOrigin.bytecodeIndex, uid); }