示例#1
0
 public CallNodeProfile GetCallNodeProfile(int index)
 {
     if (index >= CallProfileData.Count)
     {
         _resizeProfileData <CallNodeProfile>(CallProfileData, index + 1, null);
         CallProfileData[index] = new CallNodeProfile(null);
     }
     if (CallProfileData[index] == null)
     {
         CallProfileData[index] = new CallNodeProfile(null);
     }
     Debug.Assert(index > -1 && index < CallProfileData.Count, "Assignment happens in codegen time");
     return(CallProfileData[index]);
 }
示例#2
0
        //Public functions
        public void CreateNewProfile(Invocation node, mdr.DFunction target)
        {
            CallNodeProfile prof = new CallNodeProfile(target);

            if (node.ProfileIndex == -1)
            {
                node.ProfileIndex = CallProfileData.Count;
                CallProfileData.Add(prof);
                jsMD.CallProfileSize++;
            }
            else
            {
                _resizeProfileData <CallNodeProfile>(CallProfileData, node.ProfileIndex + 1, null);
                CallProfileData[node.ProfileIndex] = prof;
            }
        }
示例#3
0
 public int GetCallNodeIndex(Invocation node)
 {
     //Debug.Assert(node.ProfileIndex <= CallProfileData.Count, "Assignment happens in codegen time");
     if (node.ProfileIndex == -1)
     {
         node.ProfileIndex = CallProfilerCounter;
         int index = node.ProfileIndex;
         if (index == CallProfileData.Count)
         {
             _resizeProfileData <CallNodeProfile>(CallProfileData, index + 1, null);
             CallProfileData[index] = new CallNodeProfile(null);
         }
         CallProfilerCounter++;
         if (CallProfilerCounter > jsMD.CallProfileSize)
         {
             jsMD.CallProfileSize = CallProfilerCounter;
         }
     }
     return(node.ProfileIndex);
 }