@@ -94,7 +94,6 @@ FunctionJITTimeInfo::BuildJITTimeData(
9494 }
9595 }
9696
97- jitData->callbackInlineeCount = jitData->bodyData ->profiledCallSiteCount ;
9897 jitData->callbackInlinees = AnewArrayZ (alloc, FunctionJITTimeDataIDL*, jitData->bodyData ->profiledCallSiteCount );
9998
10099 for (Js::ProfileId i = 0 ; i < jitData->bodyData ->profiledCallSiteCount ; ++i)
@@ -111,6 +110,26 @@ FunctionJITTimeInfo::BuildJITTimeData(
111110 BuildJITTimeData (alloc, inlineeJITData, inlineeRuntimeData, jitData->callbackInlinees [i], true , isForegroundJIT);
112111 }
113112 }
113+
114+ jitData->callApplyTargetInlineeCount = jitData->bodyData ->profiledCallApplyCallSiteCount ;
115+ if (jitData->bodyData ->profiledCallApplyCallSiteCount > 0 )
116+ {
117+ jitData->callApplyTargetInlinees = AnewArrayZ (alloc, FunctionJITTimeDataIDL*, jitData->bodyData ->profiledCallApplyCallSiteCount );
118+ }
119+ for (Js::ProfileId i = 0 ; i < jitData->bodyData ->profiledCallApplyCallSiteCount ; ++i)
120+ {
121+ const Js::FunctionCodeGenJitTimeData * inlineeJITData = codeGenData->GetCallApplyTargetInlinee (i);
122+ if (inlineeJITData != nullptr )
123+ {
124+ const Js::FunctionCodeGenRuntimeData * inlineeRuntimeData = nullptr ;
125+ if (inlineeJITData->GetFunctionInfo ()->HasBody ())
126+ {
127+ inlineeRuntimeData = isInlinee ? targetRuntimeData->GetCallApplyTargetInlinee (i) : functionBody->GetCallApplyTargetInlineeCodeGenRuntimeData (i);
128+ }
129+ jitData->callApplyTargetInlinees [i] = AnewStructZ (alloc, FunctionJITTimeDataIDL);
130+ BuildJITTimeData (alloc, inlineeJITData, inlineeRuntimeData, jitData->callApplyTargetInlinees [i], true , isForegroundJIT);
131+ }
132+ }
114133 }
115134 jitData->profiledRuntimeData = AnewStructZ (alloc, FunctionJITRuntimeIDL);
116135 if (isInlinee && targetRuntimeData->ClonedInlineCaches ()->HasInlineCaches ())
@@ -293,6 +312,12 @@ FunctionJITTimeInfo::GetInlineeForCallbackInlineeRuntimeData(const Js::ProfileId
293312 return inlineeData->GetRuntimeInfo ();
294313}
295314
315+ const FunctionJITRuntimeInfo *
316+ FunctionJITTimeInfo::GetCallApplyTargetInlineeRuntimeData (const Js::ProfileId callApplyCallSiteId) const
317+ {
318+ return GetCallApplyTargetInlinee (callApplyCallSiteId) ? GetCallApplyTargetInlinee (callApplyCallSiteId)->GetRuntimeInfo () : nullptr ;
319+ }
320+
296321const FunctionJITRuntimeInfo *
297322FunctionJITTimeInfo::GetRuntimeInfo () const
298323{
@@ -341,11 +366,23 @@ FunctionJITTimeInfo::GetCallbackInlinee(Js::ProfileId profileId) const
341366 {
342367 return nullptr ;
343368 }
344- AssertOrFailFast (profileId < m_data.callbackInlineeCount );
369+ AssertOrFailFast (profileId < m_data.inlineeCount );
345370
346371 return reinterpret_cast <const FunctionJITTimeInfo *>(m_data.callbackInlinees [profileId]);
347372}
348373
374+ const FunctionJITTimeInfo *
375+ FunctionJITTimeInfo::GetCallApplyTargetInlinee (Js::ProfileId callApplyCallSiteId) const
376+ {
377+ if (!m_data.callApplyTargetInlinees )
378+ {
379+ return nullptr ;
380+ }
381+ AssertOrFailFast (callApplyCallSiteId < m_data.bodyData ->profiledCallApplyCallSiteCount );
382+
383+ return reinterpret_cast <const FunctionJITTimeInfo *>(m_data.callApplyTargetInlinees [callApplyCallSiteId]);
384+ }
385+
349386const FunctionJITTimeInfo *
350387FunctionJITTimeInfo::GetLdFldInlinee (Js::InlineCacheIndex inlineCacheIndex) const
351388{
0 commit comments