From 604f4ce83352090dbaaffe1e9243bf128e24e4fe Mon Sep 17 00:00:00 2001 From: adelikat Date: Sun, 17 May 2020 10:41:39 -0500 Subject: [PATCH] TasStateManager - simplify MaxState logic and actually fix the math so it isn't 2x of what is intended --- .../movie/tasproj/TasStateManager.cs | 11 +++++------ .../movie/tasproj/TasStateManagerSettings.cs | 8 -------- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/src/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs b/src/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs index 49765bffba..3c4dc036d1 100644 --- a/src/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs +++ b/src/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs @@ -25,13 +25,12 @@ namespace BizHawk.Client.Common private readonly ITasMovie _movie; private readonly SortedList _states; - private readonly ulong _expectedStateSize; + private readonly double _expectedStateSizeInMb; private ulong _used; private int _stateFrequency; - private int MaxStates => (int)(Settings.Cap / _expectedStateSize) + - (int)((ulong)Settings.DiskCapacityMb * 1024 * 1024 / _expectedStateSize); + private int MaxStates => (int)(Settings.CapacityMb / _expectedStateSizeInMb + 1); private int FileStateGap => 1 << Settings.FileStateGap; /// loaded core expects savestate size of 0 B @@ -47,8 +46,8 @@ namespace BizHawk.Client.Common _decay = new StateManagerDecay(_movie, this); - _expectedStateSize = (ulong)Core.CloneSavestate().Length; // TODO: why do we store this in a ulong? - if (_expectedStateSize == 0) + _expectedStateSizeInMb = Core.CloneSavestate().Length / (double)(1024 * 1024); + if (_expectedStateSizeInMb.HawkFloatEquality(0)) { throw new InvalidOperationException("Savestate size can not be zero!"); } @@ -103,7 +102,7 @@ namespace BizHawk.Client.Common public void UpdateStateFrequency() { - _stateFrequency = ((int)_expectedStateSize / Settings.MemStateGapDivider / 1024) + _stateFrequency = ((int)_expectedStateSizeInMb / Settings.MemStateGapDivider / 1024) .Clamp(MinFrequency, MaxFrequency); _decay.UpdateSettings(MaxStates, _stateFrequency, 4); diff --git a/src/BizHawk.Client.Common/movie/tasproj/TasStateManagerSettings.cs b/src/BizHawk.Client.Common/movie/tasproj/TasStateManagerSettings.cs index 3da6d23119..31e0b0fbf4 100644 --- a/src/BizHawk.Client.Common/movie/tasproj/TasStateManagerSettings.cs +++ b/src/BizHawk.Client.Common/movie/tasproj/TasStateManagerSettings.cs @@ -1,5 +1,4 @@ using System.ComponentModel; -using Newtonsoft.Json; namespace BizHawk.Client.Common { @@ -64,12 +63,5 @@ namespace BizHawk.Client.Common [DisplayName("State interval for .tasproj")] [Description("The actual state gap in frames is calculated as Nth power on 2")] public int FileStateGap { get; set; } - - /// - /// The memory state capacity in bytes. - /// - [JsonIgnore] - [Browsable(false)] - public ulong Cap => (ulong)CapacityMb * 1024UL * 1024UL; } }