private double GetPercentOfParent(double Duration) { if (Parent == null) { if (ParentDurationOverride.HasValue) { return((100 * Duration) / ParentDurationOverride.Value); } return(100.0); } TimingDataViewModel ParentViewModel = (TimingDataViewModel)Parent; return((100 * Duration) / ParentViewModel.InclusiveDuration); }
public TimingDataViewModel Clone() { TimingDataViewModel NewViewModel = new TimingDataViewModel() { Name = Name, Type = Type, ParentDurationOverride = ParentDurationOverride, ExclusiveDuration = ExclusiveDuration, HasChildren = Children.Any(), }; foreach (TimingDataViewModel Child in Children.Cast <TimingDataViewModel>()) { TimingDataViewModel ChildData = Child.Clone(); NewViewModel.Children.Add(ChildData); } return(NewViewModel); }
public static TimingDataViewModel FromTimingData(TimingData TimingData) { TimingDataViewModel NewViewModel = new TimingDataViewModel() { Name = TimingData.Name, Type = TimingData.Type, Count = TimingData.Count, ExclusiveDuration = TimingData.ExclusiveDuration, HasChildren = TimingData.Children.Any(), }; foreach (KeyValuePair <string, TimingData> Child in TimingData.Children) { TimingDataViewModel ChildData = FromTimingData(Child.Value); NewViewModel.Children.Add(ChildData); } return(NewViewModel); }
private static TimingDataViewModel FromBinaryReader(BinaryReader Reader) { // Read in the timing data. TimingData DeserializedTimingData = new TimingData(Reader); TimingDataViewModel ViewModel = FromTimingData(DeserializedTimingData); // If this is an aggregate, read in the look up table and the binary blobs, and also de-parent the // include, class, and function aggregate lists. if (ViewModel.Type == TimingDataType.Aggregate) { ViewModel.BinaryBlobLookupTable = new Dictionary <string, BinaryBlob>(); int BinaryBlobCount = Reader.ReadInt32(); for (int i = 0; i < BinaryBlobCount; ++i) { string BlobName = Reader.ReadString(); int BlobOffset = Reader.ReadInt32(); int BlobCompressedSize = Reader.ReadInt32(); int BlobDecompressedSize = Reader.ReadInt32(); ViewModel.BinaryBlobLookupTable.Add(BlobName, new BinaryBlob() { Offset = BlobOffset, CompressedSize = BlobCompressedSize, DecompressedSize = BlobDecompressedSize }); } // Allocate the memory for the binary blobs then copy them into it. int BinaryBlobLength = (int)(Reader.BaseStream.Length - Reader.BaseStream.Position); ViewModel.BinaryBlobBytes = Reader.ReadBytes(BinaryBlobLength); foreach (TreeGridElement SummaryChild in ViewModel.Children.Skip(1)) { foreach (TreeGridElement Child in SummaryChild.Children) { Child.Level = 0; } } } return(ViewModel); }
private static void UpdateSortIndexInternal(string SortMember, ListSortDirection SortDirection, TimingDataViewModel ViewModel, ref int Index) { IEnumerable <TimingDataViewModel> ChildrenViewModels = ViewModel.Children.Cast <TimingDataViewModel>(); IOrderedEnumerable <TimingDataViewModel> SortedChildren = null; switch (SortMember) { case "Name": { if (SortDirection == ListSortDirection.Ascending) { SortedChildren = ChildrenViewModels.OrderBy(c => c.Name); } else { SortedChildren = ChildrenViewModels.OrderByDescending(c => c.Name); } break; } case "InclusiveDuration": { if (SortDirection == ListSortDirection.Ascending) { SortedChildren = ChildrenViewModels.OrderBy(c => c.InclusiveDuration); } else { SortedChildren = ChildrenViewModels.OrderByDescending(c => c.InclusiveDuration); } break; } case "ExclusiveDuration": { if (SortDirection == ListSortDirection.Ascending) { SortedChildren = ChildrenViewModels.OrderBy(c => c.ExclusiveDuration); } else { SortedChildren = ChildrenViewModels.OrderByDescending(c => c.ExclusiveDuration); } break; } } foreach (TimingDataViewModel Child in SortedChildren) { if (SortDirection == ListSortDirection.Ascending) { Child.SortedIndex = Index++; } if (Child.HasChildren) { UpdateSortIndexInternal(SortMember, SortDirection, Child, ref Index); } if (SortDirection == ListSortDirection.Descending) { Child.SortedIndex = Index++; } } }