示例#1
0
            public void Decode(PerHeapEventVersion Version)
            {
                // First decode the reasons that return us a generation number. 
                // It's the same in 4.0 and 4.5.
                for (Condemned_Reason_Generation i = 0; i < Condemned_Reason_Generation.CRG_max; i++)
                {
                    CondemnedReasonGroups[(int)i] = (byte)GetReasonWithGenNumber(i);
                }

                // Then decode the reasons that just indicate true or false.
                for (Condemned_Reason_Condition i = 0; i < Condemned_Reason_Condition.CRC_max; i++)
                {
                    if (GetReasonWithCondition(i, Version))
                    {
                        switch (i)
                        {
                            case Condemned_Reason_Condition.CRC_induced_fullgc_p:
                                CondemnedReasonGroups[(int)CondemnedReasonGroup.CRG_Induced] = (byte)InducedType.Blocking;
                                break;
                            case Condemned_Reason_Condition.CRC_induced_noforce_p:
                                CondemnedReasonGroups[(int)CondemnedReasonGroup.CRG_Induced] = (byte)InducedType.NotForced;
                                break;
                            case Condemned_Reason_Condition.CRC_low_ephemeral_p:
                                CondemnedReasonGroups[(int)CondemnedReasonGroup.CRG_Low_Ephemeral] = 1;
                                break;
                            case Condemned_Reason_Condition.CRC_low_card_p:
                                CondemnedReasonGroups[(int)CondemnedReasonGroup.CRG_Internal_Tuning] = 1;
                                break;
                            case Condemned_Reason_Condition.CRC_eph_high_frag_p:
                                CondemnedReasonGroups[(int)CondemnedReasonGroup.CRG_Fragmented_Ephemeral] = 1;
                                break;
                            case Condemned_Reason_Condition.CRC_max_high_frag_p:
                                CondemnedReasonGroups[(int)CondemnedReasonGroup.CRG_Fragmented_Gen2] = 1;
                                break;
                            case Condemned_Reason_Condition.CRC_max_high_frag_e_p:
                                CondemnedReasonGroups[(int)CondemnedReasonGroup.CRG_Fragmented_Gen1_To_Gen2] = 1;
                                break;
                            case Condemned_Reason_Condition.CRC_max_high_frag_m_p:
                            case Condemned_Reason_Condition.CRC_max_high_frag_vm_p:
                                CondemnedReasonGroups[(int)CondemnedReasonGroup.CRG_Fragmented_Gen2_High_Mem] = 1;
                                break;
                            case Condemned_Reason_Condition.CRC_max_gen1:
                                CondemnedReasonGroups[(int)CondemnedReasonGroup.CRG_Alloc_Exceeded] = 2;
                                break;
                            case Condemned_Reason_Condition.CRC_expand_fullgc_p:
                                CondemnedReasonGroups[(int)CondemnedReasonGroup.CRG_Expand_Heap] = 1;
                                break;
                            case Condemned_Reason_Condition.CRC_before_oom:
                                CondemnedReasonGroups[(int)CondemnedReasonGroup.CRG_GC_Before_OOM] = 1;
                                break;
                            case Condemned_Reason_Condition.CRC_gen2_too_small:
                                CondemnedReasonGroups[(int)CondemnedReasonGroup.CRG_Too_Small_For_BGC] = 1;
                                break;
                            case Condemned_Reason_Condition.CRC_before_bgc:
                                CondemnedReasonGroups[(int)CondemnedReasonGroup.CRG_Ephemeral_Before_BGC] = 1;
                                break;
                            default:
                                Debug.Assert(false, "Unexpected reason");
                                break;
                        }
                    }
                }
            }
示例#2
0
 private bool GetReasonWithCondition(Condemned_Reason_Condition Reason_Condition, PerHeapEventVersion Version)
 {
     bool ConditionIsSet = false;
     if (Version == PerHeapEventVersion.V4_0)
     {
         Debug.Assert((int)Reason_Condition < 16);
         ConditionIsSet = ((EncodedReasons.Reasons & (1 << (int)(Reason_Condition + 16))) != 0);
     }
     else
     {
         ConditionIsSet = ((EncodedReasons.ReasonsEx & (1 << (int)Reason_Condition)) != 0);
     }
     return ConditionIsSet;
 }
示例#3
0
 private void GetVersion()
 {
     if (Version == PerHeapEventVersion.V0)
     {
         if (PerHeapHistories[0].V4_0)
             Version = PerHeapEventVersion.V4_0;
         else if (PerHeapHistories[0].V4_5)
         {
             Version = PerHeapEventVersion.V4_5;
             Debug.Assert(PerHeapHistories[0].Version == 2);
         }
         else
         {
             Version = PerHeapEventVersion.V4_6;
             Debug.Assert(PerHeapHistories[0].Version == 3);
         }
     }
 }