-
Notifications
You must be signed in to change notification settings - Fork 270
/
FrameTimeAverager.cs
47 lines (40 loc) · 1.3 KB
/
FrameTimeAverager.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
namespace Veldrid.NeoDemo
{
public class FrameTimeAverager
{
private readonly double _timeLimit = 666;
private double _accumulatedTime = 0;
private int _frameCount = 0;
private readonly double _decayRate = .3;
public double CurrentAverageFrameTimeSeconds { get; private set; }
public double CurrentAverageFrameTimeMilliseconds => CurrentAverageFrameTimeSeconds * 1000.0;
public double CurrentAverageFramesPerSecond => 1 / CurrentAverageFrameTimeSeconds;
public FrameTimeAverager(double maxTimeSeconds)
{
_timeLimit = maxTimeSeconds;
}
public void Reset()
{
_accumulatedTime = 0;
_frameCount = 0;
}
public void AddTime(double seconds)
{
_accumulatedTime += seconds;
_frameCount++;
if (_accumulatedTime >= _timeLimit)
{
Average();
}
}
private void Average()
{
double total = _accumulatedTime;
CurrentAverageFrameTimeSeconds =
(CurrentAverageFrameTimeSeconds * _decayRate)
+ ((total / _frameCount) * (1 - _decayRate));
_accumulatedTime = 0;
_frameCount = 0;
}
}
}