示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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++;
                }
            }
        }