!B (Sandbox) (CE-21795) Importing models with multisubmaterials via fbx switches...
[CRYENGINE.git] / Code / Tools / Statoscope / Statoscope / StreamingBucket.cs
blobabd28d9e8a59e330d0f7d67a28f5a5b5a81a9113
1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
3 using System;
4 using System.Collections.Generic;
5 using System.Linq;
6 using System.Text;
7 using System.ComponentModel;
9 namespace Statoscope
11 class BucketTimeRange
13 private TimeSpan m_min;
14 private TimeSpan m_max;
16 public TimeSpan Min
18 get { return m_min; }
21 public TimeSpan Max
23 get { return m_max; }
26 public BucketTimeRange(TimeSpan min, TimeSpan max)
28 m_min = min;
29 m_max = max;
33 class StreamingTimeBucket : Bucket
35 [Description("Count")]
36 public int Num
38 get { return m_num; }
39 set { m_num = value; }
42 [Description("%")]
43 public float NumPc
45 get { return m_numPc; }
46 set { m_numPc = value; }
49 [Description("% Cumulative")]
50 public float NumPcCumulative
52 get { return m_numPcCumulative; }
53 set { m_numPcCumulative = value; }
56 public StreamingTimeBucket(string rangeStr)
57 : base(rangeStr)
61 private int m_num;
62 private float m_numPc;
63 private float m_numPcCumulative;
66 class StreamingTypeBucket : Bucket
68 [Description("Count")]
69 public int Num
71 get { return m_num; }
72 set { m_num = value; }
75 [Description("%")]
76 public float NumPc
78 get { return m_numPc; }
79 set { m_numPc = value; }
82 public StreamingTypeBucket(string rangeStr)
83 : base(rangeStr)
87 private int m_num;
88 private float m_numPc;
91 class StreamingTypeBucketSet : BucketSet
93 private readonly StreamTaskType[] m_types;
94 private readonly Dictionary<StreamTaskType, int> m_typeToBucket = new Dictionary<StreamTaskType, int>();
95 private int m_total;
97 public override bool IsEmpty
99 get { return m_total == 0; }
102 public StreamingTypeBucketSet(StreamTaskType[] types)
103 : base(CreateBuckets(types))
105 m_types = types;
107 for (int i = 0, c = types.Length; i != c; ++i)
108 m_typeToBucket[types[i]] = i;
111 public void AddInterval(StreamingInterval iv)
113 ++m_total;
115 int bucketIdx = m_typeToBucket[iv.Source];
116 StreamingTypeBucket bucket = m_buckets[bucketIdx] as StreamingTypeBucket;
117 ++bucket.Num;
119 UpdatePc();
122 private void UpdatePc()
124 float total = m_total;
125 for (int i = 0; i < m_buckets.Count; ++i)
127 StreamingTypeBucket bucket = m_buckets[i] as StreamingTypeBucket;
128 bucket.NumPc = Math.Min(100.0f, 100.0f * bucket.Num / total);
132 private static List<Bucket> CreateBuckets(StreamTaskType[] types)
134 List<Bucket> l = new List<Bucket>(types.Length);
136 foreach (StreamTaskType i in types)
137 l.Add(new StreamingTypeBucket(i.ToString()));
139 return l;
143 class StreamingTimeBucketSet : BucketSet
145 private readonly BucketTimeRange[] m_ranges;
146 private int m_total;
148 public override bool IsEmpty
150 get { return m_total == 0; }
153 public StreamingTimeBucketSet(BucketTimeRange[] ranges)
154 : base(CreateBuckets(ranges))
156 m_ranges = ranges;
157 m_total = 0;
160 public void AddIntervals(IEnumerable<StreamingInterval> ivs)
162 foreach (StreamingInterval iv in ivs)
163 AddInterval(iv.Length);
166 public void AddInterval(double length)
168 ++m_total;
170 TimeSpan ivts = new TimeSpan((long)(length * 1000.0 * 1000.0 * 10.0));
171 int bucketIdx = m_ranges.MappedBinarySearchIndex(ivts, (x) => x.Min, (a, b) => a < b);
172 StreamingTimeBucket bucket = (StreamingTimeBucket)m_buckets[bucketIdx];
174 ++bucket.Num;
175 bucket.NumPc = Math.Min(100.0f, 100.0f * (bucket.Num / (float)m_total));
177 UpdatePc();
180 private void UpdatePc()
182 float total = (float)m_total;
183 int numCumulative = 0;
185 for (int i = 0, c = m_buckets.Count; i < c; ++i)
187 StreamingTimeBucket sb = m_buckets[i] as StreamingTimeBucket;
188 numCumulative += sb.Num;
189 sb.NumPc = Math.Min(100.0f, 100.0f * sb.Num / total);
190 sb.NumPcCumulative = Math.Min(100.0f, 100.0f * (numCumulative / total));
194 static private List<Bucket> CreateBuckets(BucketTimeRange[] ranges)
196 List<Bucket> buckets = new List<Bucket>();
197 foreach (BucketTimeRange r in ranges)
199 string s = "";
200 if (r.Min > new TimeSpan(0))
201 s += string.Format("{0}ms", r.Min.TotalMilliseconds);
202 s += "-";
203 if (r.Max < TimeSpan.MaxValue)
204 s += string.Format("{0}ms", r.Max.TotalMilliseconds);
205 buckets.Add(new StreamingTimeBucket(s));
207 return buckets;