Esempio n. 1
0
        /// <summary>
        /// Diffs the two passed in callstack infos and returns the difference.
        /// </summary>
        /// <param name="New"> Newer callstack info to subtract older from </param>
        /// <param name="Old"> Older callstack info to subtract from older </param>
        public static FCallStackAllocationInfo Diff(FCallStackAllocationInfo New, FCallStackAllocationInfo Old)
        {
            if (New.CallStackIndex != Old.CallStackIndex)
            {
                throw new InvalidDataException();
            }

            FCallStackAllocationInfo DiffData = New.DeepCopy();

            DiffData.UntaggedAllocationInfo -= Old.UntaggedAllocationInfo;

            if (Old.TaggedAllocationInfo != null)
            {
                DiffData.EnsureTaggedAllocationsAvailable();

                foreach (var TaggedAllocationInfoPair in Old.TaggedAllocationInfo)
                {
                    FCallStackTagsAllocationInfo CurrentTagsAllocationInfo;
                    if (!DiffData.TaggedAllocationInfo.TryGetValue(TaggedAllocationInfoPair.Key, out CurrentTagsAllocationInfo))
                    {
                        CurrentTagsAllocationInfo = new FCallStackTagsAllocationInfo(0, 0);
                    }
                    DiffData.TaggedAllocationInfo[TaggedAllocationInfoPair.Key] = CurrentTagsAllocationInfo - TaggedAllocationInfoPair.Value;
                }
            }

            return(DiffData);
        }
Esempio n. 2
0
        /// <summary> Constructor, initializing all member variables to passed in values. </summary>
        public FCallStackAllocationInfo(long InSize, int InCallStackIndex, int InCount, int InTagsIndex)
        {
            CallStackIndex         = InCallStackIndex;
            UntaggedAllocationInfo = new FCallStackTagsAllocationInfo(0, 0);
            TaggedAllocationInfo   = null;

            if (InTagsIndex == -1)
            {
                UntaggedAllocationInfo += new FCallStackTagsAllocationInfo(InSize, InCount);
            }
            else
            {
                EnsureTaggedAllocationsAvailable();
                TaggedAllocationInfo.Add(InTagsIndex, new FCallStackTagsAllocationInfo(InSize, InCount));
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Adds the passed in size and count to this callstack info.
        /// </summary>
        /// <param name="SizeToAdd"> Size to add </param>
        /// <param name="CountToAdd"> Count to add </param>
        /// <param name="InTagsIndex"> Index of the tags associated with the allocation </param>
        public void Add(long SizeToAdd, int CountToAdd, int InTagsIndex)
        {
            if (InTagsIndex == -1)
            {
                UntaggedAllocationInfo += new FCallStackTagsAllocationInfo(SizeToAdd, CountToAdd);
            }
            else
            {
                EnsureTaggedAllocationsAvailable();

                FCallStackTagsAllocationInfo CurrentTagsAllocationInfo;
                if (!TaggedAllocationInfo.TryGetValue(InTagsIndex, out CurrentTagsAllocationInfo))
                {
                    CurrentTagsAllocationInfo = new FCallStackTagsAllocationInfo(0, 0);
                }
                TaggedAllocationInfo[InTagsIndex] = CurrentTagsAllocationInfo + new FCallStackTagsAllocationInfo(SizeToAdd, CountToAdd);
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Adds the passed callstack info to this callstack info.
        /// </summary>
        /// <param name="InOther"> Callstack info to add </param>
        public void Add(FCallStackAllocationInfo InOther)
        {
            if (CallStackIndex != InOther.CallStackIndex)
            {
                throw new InvalidDataException();
            }

            UntaggedAllocationInfo += InOther.UntaggedAllocationInfo;

            if (InOther.TaggedAllocationInfo != null)
            {
                EnsureTaggedAllocationsAvailable();

                foreach (var TaggedAllocationInfoPair in InOther.TaggedAllocationInfo)
                {
                    FCallStackTagsAllocationInfo CurrentTagsAllocationInfo;
                    if (!TaggedAllocationInfo.TryGetValue(TaggedAllocationInfoPair.Key, out CurrentTagsAllocationInfo))
                    {
                        CurrentTagsAllocationInfo = new FCallStackTagsAllocationInfo(0, 0);
                    }
                    TaggedAllocationInfo[TaggedAllocationInfoPair.Key] = CurrentTagsAllocationInfo + TaggedAllocationInfoPair.Value;
                }
            }
        }
Esempio n. 5
0
 /// <summary> Private constructor used by DeepCopy. </summary>
 private FCallStackAllocationInfo(int InCallStackIndex, FCallStackTagsAllocationInfo InUntaggedAllocationInfo, Dictionary <int, FCallStackTagsAllocationInfo> InTaggedAllocationInfo)
 {
     CallStackIndex         = InCallStackIndex;
     UntaggedAllocationInfo = InUntaggedAllocationInfo;
     TaggedAllocationInfo   = InTaggedAllocationInfo;
 }