mirror of
https://github.com/LANCommander/GameOverlay.Capture.git
synced 2026-08-01 03:38:56 -04:00
67 lines
1.9 KiB
C#
67 lines
1.9 KiB
C#
using GameOverlay.Capture;
|
|
using Xunit;
|
|
|
|
namespace GameOverlay.Capture.Tests;
|
|
|
|
public class FrameTimeTrackerTests
|
|
{
|
|
[Fact]
|
|
public void FirstPresent_EstablishesBaseline_NoSample()
|
|
{
|
|
var tracker = new FrameTimeTracker();
|
|
Assert.Null(tracker.AddPresent(1000.0));
|
|
Assert.Equal(0, tracker.Count);
|
|
}
|
|
|
|
[Fact]
|
|
public void SubsequentPresents_ProduceFrameTimeSamples()
|
|
{
|
|
var tracker = new FrameTimeTracker();
|
|
tracker.AddPresent(0.0);
|
|
var s1 = tracker.AddPresent(16.0);
|
|
var s2 = tracker.AddPresent(32.0);
|
|
|
|
Assert.NotNull(s1);
|
|
Assert.Equal(16.0, s1!.Value.FrameTimeMs, 6);
|
|
Assert.Equal(1000.0 / 16.0, s1.Value.Fps, 6);
|
|
Assert.NotNull(s2);
|
|
Assert.Equal(2, tracker.Count);
|
|
}
|
|
|
|
[Fact]
|
|
public void OutOfOrderOrDuplicateTimestamps_AreIgnored()
|
|
{
|
|
var tracker = new FrameTimeTracker();
|
|
tracker.AddPresent(100.0);
|
|
Assert.Null(tracker.AddPresent(100.0)); // duplicate
|
|
Assert.Null(tracker.AddPresent(90.0)); // out of order
|
|
Assert.Equal(0, tracker.Count);
|
|
}
|
|
|
|
[Fact]
|
|
public void Summary_ReflectsSteadyRate()
|
|
{
|
|
var tracker = new FrameTimeTracker();
|
|
double t = 0;
|
|
for (int i = 0; i < 101; i++) // 101 presents => 100 frame times of 10ms
|
|
{
|
|
tracker.AddPresent(t);
|
|
t += 10.0;
|
|
}
|
|
|
|
var summary = tracker.ComputeSummary();
|
|
Assert.Equal(100, summary.FrameCount);
|
|
Assert.Equal(100.0, summary.AverageFps, 6);
|
|
}
|
|
|
|
[Fact]
|
|
public void Reset_ClearsCountAndBaseline()
|
|
{
|
|
var tracker = new FrameTimeTracker();
|
|
tracker.AddPresent(0);
|
|
tracker.AddPresent(10);
|
|
tracker.Reset();
|
|
Assert.Equal(0, tracker.Count);
|
|
Assert.Null(tracker.AddPresent(5)); // first after reset is a baseline again
|
|
}
|
|
}
|