From f473db56c308afce62914386620c049a9b9a5587 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sun, 5 Feb 2023 20:48:48 +1000 Subject: [PATCH] Fix NaN propagation in RewindConfig --- .../config/RewindConfig.cs | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/BizHawk.Client.EmuHawk/config/RewindConfig.cs b/src/BizHawk.Client.EmuHawk/config/RewindConfig.cs index 1b6a75b9d7..b8764c9868 100755 --- a/src/BizHawk.Client.EmuHawk/config/RewindConfig.cs +++ b/src/BizHawk.Client.EmuHawk/config/RewindConfig.cs @@ -8,7 +8,7 @@ namespace BizHawk.Client.EmuHawk { public partial class RewindConfig : Form { - private double _avgStateSize; + private ulong _avgStateSize; private readonly Config _config; @@ -34,15 +34,17 @@ namespace BizHawk.Client.EmuHawk var rewinder = _getRewinder(); if (rewinder?.Active == true) { - FullnessLabel.Text = $"{rewinder.FullnessRatio:P2}"; - RewindFramesUsedLabel.Text = rewinder.Count.ToString(); - _avgStateSize = rewinder.Size * rewinder.FullnessRatio / rewinder.Count; + var fullnessRatio = rewinder.FullnessRatio; + FullnessLabel.Text = $"{fullnessRatio:P2}"; + var stateCount = rewinder.Count; + RewindFramesUsedLabel.Text = stateCount.ToString(); + _avgStateSize = stateCount is 0 ? 0UL : (ulong) Math.Round(rewinder.Size * fullnessRatio / stateCount); } else { FullnessLabel.Text = "N/A"; RewindFramesUsedLabel.Text = "N/A"; - _avgStateSize = _statableCore.CloneSavestate().Length; + _avgStateSize = (ulong) _statableCore.CloneSavestate().Length; } RewindEnabledBox.Checked = _config.Rewind.Enabled; @@ -77,7 +79,7 @@ namespace BizHawk.Client.EmuHawk ScreenshotInStatesCheckbox.Checked; } - private string FormatKB(double n) + private string FormatKB(ulong n) { double num = n / 1024.0; @@ -139,16 +141,16 @@ namespace BizHawk.Client.EmuHawk private void CalculateEstimates() { - var bufferSize = 1L << (int) BufferSizeUpDown.Value; - labelEx1.Text = bufferSize.ToString(); - bufferSize *= 1024 * 1024; - var estFrames = bufferSize / _avgStateSize; - - double estTotalFrames = estFrames; - double minutes = estTotalFrames / 60 / 60; - + double estFrames = 0.0; + if (_avgStateSize is not 0UL) + { + var bufferSize = 1L << (int) BufferSizeUpDown.Value; + labelEx1.Text = bufferSize.ToString(); + bufferSize *= 1024 * 1024; + estFrames = bufferSize / (double) _avgStateSize; + } ApproxFramesLabel.Text = $"{estFrames:n0} frames"; - EstTimeLabel.Text = $"{minutes:n} minutes"; + EstTimeLabel.Text = $"{estFrames / 3600.0:n} minutes"; } private void BufferSizeUpDown_ValueChanged(object sender, EventArgs e)