Allow custom MaxCatchUpFrames to be specified

Also adjusts the default to allow for smoother seeking.
This commit is contained in:
Dean Herbert 2019-05-09 16:37:34 +09:00
parent 66594b7a1b
commit 3bcfc86b9c
2 changed files with 11 additions and 4 deletions

View File

@ -103,7 +103,11 @@ public void TestInitialSeek()
checkFrameCount(0);
}
private void createStabilityContainer() => AddStep("create container", () => mainContainer.Child = new FrameStabilityContainer().WithChild(consumer = new ClockConsumingChild()));
private const int max_frames_catchup = 50;
private void createStabilityContainer(double gameplayStartTime = double.MinValue) => AddStep("create container", () =>
mainContainer.Child = new FrameStabilityContainer(gameplayStartTime) { MaxCatchUpFrames = max_frames_catchup }
.WithChild(consumer = new ClockConsumingChild()));
private void seekManualTo(double time) => AddStep($"seek manual clock to {time}", () => manualClock.CurrentTime = time);

View File

@ -19,6 +19,11 @@ public class FrameStabilityContainer : Container, IHasReplayHandler
{
private readonly double gameplayStartTime;
/// <summary>
/// The number of frames (per parent frame) which can be run in an attempt to catch-up to real-time.
/// </summary>
public int MaxCatchUpFrames { get; set; } = 5;
public FrameStabilityContainer(double gameplayStartTime = double.MinValue)
{
RelativeSizeAxes = Axes.Both;
@ -68,8 +73,6 @@ protected override void LoadComplete()
private bool isAttached => ReplayInputHandler != null;
private const int max_catch_up_updates_per_frame = 50;
private const double sixty_frame_time = 1000.0 / 60;
private bool firstConsumption = true;
@ -81,7 +84,7 @@ public override bool UpdateSubTree()
int loops = 0;
while (validState && requireMoreUpdateLoops && loops++ < max_catch_up_updates_per_frame)
while (validState && requireMoreUpdateLoops && loops++ < MaxCatchUpFrames)
{
updateClock();