2013-07-21 20:39:11 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Windows.Forms;
|
2013-07-28 19:09:52 +00:00
|
|
|
|
using System.Drawing;
|
2013-07-21 20:39:11 +00:00
|
|
|
|
|
2014-12-05 00:52:16 +00:00
|
|
|
|
using BizHawk.Emulation.Common.IEmulatorExtensions;
|
|
|
|
|
using BizHawk.Client.Common;
|
2013-10-25 00:57:23 +00:00
|
|
|
|
|
2013-11-03 03:54:37 +00:00
|
|
|
|
namespace BizHawk.Client.EmuHawk
|
2013-07-21 20:39:11 +00:00
|
|
|
|
{
|
|
|
|
|
public partial class RewindConfig : Form
|
|
|
|
|
{
|
2013-11-27 23:35:32 +00:00
|
|
|
|
private long _stateSize;
|
|
|
|
|
private int _mediumStateSize;
|
|
|
|
|
private int _largeStateSize;
|
2017-05-31 15:28:06 +00:00
|
|
|
|
private int _stateSizeCategory = 1; // 1 = small, 2 = med, 3 = larg //TODO: enum
|
2015-01-26 04:22:07 +00:00
|
|
|
|
|
2013-07-21 20:39:11 +00:00
|
|
|
|
public RewindConfig()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RewindConfig_Load(object sender, EventArgs e)
|
|
|
|
|
{
|
2013-12-27 01:19:38 +00:00
|
|
|
|
if (Global.Rewinder.HasBuffer)
|
2013-08-24 21:40:42 +00:00
|
|
|
|
{
|
2017-05-31 15:28:06 +00:00
|
|
|
|
FullnessLabel.Text = $"{Global.Rewinder.FullnessRatio * 100:0.00}" + "%";
|
2013-12-27 01:19:38 +00:00
|
|
|
|
RewindFramesUsedLabel.Text = Global.Rewinder.Count.ToString();
|
2013-08-24 21:40:42 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FullnessLabel.Text = "N/A";
|
|
|
|
|
RewindFramesUsedLabel.Text = "N/A";
|
|
|
|
|
}
|
2013-07-28 20:08:55 +00:00
|
|
|
|
|
2015-01-25 18:34:53 +00:00
|
|
|
|
RewindSpeedNumeric.Value = Global.Config.RewindSpeedMultiplier;
|
2013-09-14 19:34:14 +00:00
|
|
|
|
DiskBufferCheckbox.Checked = Global.Config.Rewind_OnDisk;
|
|
|
|
|
RewindIsThreadedCheckbox.Checked = Global.Config.Rewind_IsThreaded;
|
2014-12-05 00:52:16 +00:00
|
|
|
|
_stateSize = Global.Emulator.AsStatable().SaveStateBinary().Length;
|
2017-06-13 22:23:45 +00:00
|
|
|
|
BufferSizeUpDown.Value = Math.Max(Global.Config.Rewind_BufferSize, BufferSizeUpDown.Minimum);
|
2013-08-24 21:40:42 +00:00
|
|
|
|
|
2013-11-27 23:35:32 +00:00
|
|
|
|
_mediumStateSize = Global.Config.Rewind_MediumStateSize;
|
|
|
|
|
_largeStateSize = Global.Config.Rewind_LargeStateSize;
|
2013-07-28 19:54:02 +00:00
|
|
|
|
|
2013-09-14 19:34:14 +00:00
|
|
|
|
UseDeltaCompression.Checked = Global.Config.Rewind_UseDelta;
|
2013-07-28 19:09:52 +00:00
|
|
|
|
|
2013-09-14 19:34:14 +00:00
|
|
|
|
SmallSavestateNumeric.Value = Global.Config.RewindFrequencySmall;
|
|
|
|
|
MediumSavestateNumeric.Value = Global.Config.RewindFrequencyMedium;
|
|
|
|
|
LargeSavestateNumeric.Value = Global.Config.RewindFrequencyLarge;
|
2013-07-21 20:39:11 +00:00
|
|
|
|
|
2013-09-14 19:34:14 +00:00
|
|
|
|
SmallStateEnabledBox.Checked = Global.Config.RewindEnabledSmall;
|
|
|
|
|
MediumStateEnabledBox.Checked = Global.Config.RewindEnabledMedium;
|
|
|
|
|
LargeStateEnabledBox.Checked = Global.Config.RewindEnabledLarge;
|
2013-07-21 20:39:11 +00:00
|
|
|
|
|
2013-09-14 19:34:14 +00:00
|
|
|
|
SetSmallEnabled();
|
|
|
|
|
SetMediumEnabled();
|
|
|
|
|
SetLargeEnabled();
|
2013-07-28 19:09:52 +00:00
|
|
|
|
|
2013-09-14 19:34:14 +00:00
|
|
|
|
SetStateSize();
|
2013-07-28 19:54:02 +00:00
|
|
|
|
|
2017-05-31 15:28:06 +00:00
|
|
|
|
var mediumStateSizeKb = Global.Config.Rewind_MediumStateSize / 1024;
|
|
|
|
|
var largeStateSizeKb = Global.Config.Rewind_LargeStateSize / 1024;
|
2013-07-28 19:54:02 +00:00
|
|
|
|
|
2017-05-31 15:28:06 +00:00
|
|
|
|
MediumStateTrackbar.Value = mediumStateSizeKb;
|
|
|
|
|
MediumStateUpDown.Value = mediumStateSizeKb;
|
|
|
|
|
LargeStateTrackbar.Value = largeStateSizeKb;
|
|
|
|
|
LargeStateUpDown.Value = largeStateSizeKb;
|
2014-07-12 20:20:08 +00:00
|
|
|
|
|
|
|
|
|
nudCompression.Value = Global.Config.SaveStateCompressionLevelNormal;
|
|
|
|
|
|
|
|
|
|
rbStatesDefault.Checked = Global.Config.SaveStateType == Config.SaveStateTypeE.Default;
|
|
|
|
|
rbStatesBinary.Checked = Global.Config.SaveStateType == Config.SaveStateTypeE.Binary;
|
|
|
|
|
rbStatesText.Checked = Global.Config.SaveStateType == Config.SaveStateTypeE.Text;
|
2014-09-29 02:53:52 +00:00
|
|
|
|
|
|
|
|
|
BackupSavestatesCheckbox.Checked = Global.Config.BackupSavestates;
|
|
|
|
|
ScreenshotInStatesCheckbox.Checked = Global.Config.SaveScreenshotWithStates;
|
2015-02-23 23:43:51 +00:00
|
|
|
|
LowResLargeScreenshotsCheckbox.Checked = !Global.Config.NoLowResLargeScreenshotWithStates;
|
2014-09-29 02:53:52 +00:00
|
|
|
|
BigScreenshotNumeric.Value = Global.Config.BigScreenshotSize / 1024;
|
|
|
|
|
|
|
|
|
|
ScreenshotInStatesCheckbox_CheckedChanged(null, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ScreenshotInStatesCheckbox_CheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
2015-02-23 23:43:51 +00:00
|
|
|
|
LowResLargeScreenshotsCheckbox.Enabled =
|
2014-09-29 02:53:52 +00:00
|
|
|
|
BigScreenshotNumeric.Enabled =
|
|
|
|
|
KbLabel.Enabled =
|
|
|
|
|
ScreenshotInStatesCheckbox.Checked;
|
2013-07-28 19:09:52 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-05-31 15:28:06 +00:00
|
|
|
|
private string FormatKB(long n)
|
2013-07-28 19:09:52 +00:00
|
|
|
|
{
|
2016-02-08 08:46:16 +00:00
|
|
|
|
double num = n / 1024.0;
|
2013-07-30 01:59:28 +00:00
|
|
|
|
|
2013-11-27 23:35:32 +00:00
|
|
|
|
if (num >= 1024)
|
2013-07-30 01:59:28 +00:00
|
|
|
|
{
|
|
|
|
|
num /= 1024.0;
|
2017-05-31 15:28:06 +00:00
|
|
|
|
return $"{num:0.00}" + " MB";
|
2013-07-30 01:59:28 +00:00
|
|
|
|
}
|
2017-05-31 15:28:06 +00:00
|
|
|
|
|
|
|
|
|
return $"{num:0.00}" + " KB";
|
2016-02-08 08:46:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SetStateSize()
|
|
|
|
|
{
|
|
|
|
|
double num = _stateSize / 1024.0;
|
2013-07-30 01:59:28 +00:00
|
|
|
|
|
2016-02-08 08:46:16 +00:00
|
|
|
|
StateSizeLabel.Text = FormatKB(_stateSize);
|
2013-07-28 19:09:52 +00:00
|
|
|
|
|
2017-04-10 13:35:40 +00:00
|
|
|
|
SmallLabel1.Text = $"Small savestates (less than {_mediumStateSize / 1024}KB)";
|
|
|
|
|
MediumLabel1.Text = $"Medium savestates ({_mediumStateSize / 1024} - {_largeStateSize / 1024}KB)";
|
|
|
|
|
LargeLabel1.Text = $"Large savestates ({_largeStateSize / 1024}KB or more)";
|
2013-07-28 19:09:52 +00:00
|
|
|
|
|
2013-11-27 23:35:32 +00:00
|
|
|
|
if (_stateSize >= _largeStateSize)
|
2013-07-28 19:09:52 +00:00
|
|
|
|
{
|
2013-11-27 23:35:32 +00:00
|
|
|
|
_stateSizeCategory = 3;
|
|
|
|
|
SmallLabel1.Font = new Font(SmallLabel1.Font, FontStyle.Regular);
|
2013-07-28 19:09:52 +00:00
|
|
|
|
MediumLabel1.Font = new Font(SmallLabel1.Font, FontStyle.Regular);
|
|
|
|
|
LargeLabel1.Font = new Font(SmallLabel1.Font, FontStyle.Italic);
|
|
|
|
|
}
|
2013-11-27 23:35:32 +00:00
|
|
|
|
else if (_stateSize >= _mediumStateSize)
|
2013-07-28 19:09:52 +00:00
|
|
|
|
{
|
2013-11-27 23:35:32 +00:00
|
|
|
|
_stateSizeCategory = 2;
|
|
|
|
|
SmallLabel1.Font = new Font(SmallLabel1.Font, FontStyle.Regular);
|
2013-07-28 19:09:52 +00:00
|
|
|
|
MediumLabel1.Font = new Font(SmallLabel1.Font, FontStyle.Italic);
|
|
|
|
|
LargeLabel1.Font = new Font(SmallLabel1.Font, FontStyle.Regular);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2013-11-27 23:35:32 +00:00
|
|
|
|
_stateSizeCategory = 1;
|
|
|
|
|
SmallLabel1.Font = new Font(SmallLabel1.Font, FontStyle.Italic);
|
2013-07-28 19:09:52 +00:00
|
|
|
|
MediumLabel1.Font = new Font(SmallLabel1.Font, FontStyle.Regular);
|
|
|
|
|
LargeLabel1.Font = new Font(SmallLabel1.Font, FontStyle.Regular);
|
|
|
|
|
}
|
2013-08-01 21:09:32 +00:00
|
|
|
|
|
2013-11-27 23:35:32 +00:00
|
|
|
|
CalculateEstimates();
|
2013-07-21 20:39:11 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void Cancel_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2013-11-03 16:07:58 +00:00
|
|
|
|
GlobalWin.OSD.AddMessage("Rewind config aborted");
|
2013-07-21 20:39:11 +00:00
|
|
|
|
Close();
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-26 04:22:07 +00:00
|
|
|
|
private bool TriggerRewindSettingsReload { get; set; }
|
|
|
|
|
|
|
|
|
|
private void PutRewindSetting<T>(ref T setting, T value) where T : IEquatable<T>
|
|
|
|
|
{
|
2017-05-31 15:28:06 +00:00
|
|
|
|
if (setting.Equals(value))
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-26 04:22:07 +00:00
|
|
|
|
setting = value;
|
|
|
|
|
TriggerRewindSettingsReload = true;
|
|
|
|
|
}
|
|
|
|
|
|
2017-05-31 15:28:06 +00:00
|
|
|
|
private void Ok_Click(object sender, EventArgs e)
|
2013-07-21 20:39:11 +00:00
|
|
|
|
{
|
2015-01-26 04:22:07 +00:00
|
|
|
|
// These settings are used by DoRewindSettings, which we'll only call if anything actually changed (i.e. preserve rewind history if possible)
|
|
|
|
|
PutRewindSetting(ref Global.Config.RewindEnabledSmall, SmallStateEnabledBox.Checked);
|
|
|
|
|
PutRewindSetting(ref Global.Config.RewindEnabledMedium, MediumStateEnabledBox.Checked);
|
|
|
|
|
PutRewindSetting(ref Global.Config.RewindEnabledLarge, LargeStateEnabledBox.Checked);
|
|
|
|
|
PutRewindSetting(ref Global.Config.RewindFrequencySmall, (int)SmallSavestateNumeric.Value);
|
|
|
|
|
PutRewindSetting(ref Global.Config.RewindFrequencyMedium, (int)MediumSavestateNumeric.Value);
|
|
|
|
|
PutRewindSetting(ref Global.Config.RewindFrequencyLarge, (int)LargeSavestateNumeric.Value);
|
|
|
|
|
PutRewindSetting(ref Global.Config.Rewind_OnDisk, DiskBufferCheckbox.Checked);
|
|
|
|
|
PutRewindSetting(ref Global.Config.Rewind_UseDelta, UseDeltaCompression.Checked);
|
|
|
|
|
PutRewindSetting(ref Global.Config.Rewind_IsThreaded, RewindIsThreadedCheckbox.Checked);
|
|
|
|
|
PutRewindSetting(ref Global.Config.Rewind_BufferSize, (int)BufferSizeUpDown.Value);
|
|
|
|
|
PutRewindSetting(ref Global.Config.Rewind_MediumStateSize, (int)MediumStateUpDown.Value * 1024);
|
|
|
|
|
PutRewindSetting(ref Global.Config.Rewind_LargeStateSize, (int)LargeStateUpDown.Value * 1024);
|
|
|
|
|
if (TriggerRewindSettingsReload)
|
|
|
|
|
{
|
2017-03-19 01:22:02 +00:00
|
|
|
|
Global.Rewinder.Initialize();
|
2015-01-26 04:22:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// These settings are not used by DoRewindSettings
|
2015-01-25 18:34:53 +00:00
|
|
|
|
Global.Config.RewindSpeedMultiplier = (int)RewindSpeedNumeric.Value;
|
2014-07-12 20:20:08 +00:00
|
|
|
|
Global.Config.SaveStateCompressionLevelNormal = (int)nudCompression.Value;
|
|
|
|
|
if (rbStatesDefault.Checked) Global.Config.SaveStateType = Config.SaveStateTypeE.Default;
|
|
|
|
|
if (rbStatesBinary.Checked) Global.Config.SaveStateType = Config.SaveStateTypeE.Binary;
|
|
|
|
|
if (rbStatesText.Checked) Global.Config.SaveStateType = Config.SaveStateTypeE.Text;
|
2014-09-29 02:53:52 +00:00
|
|
|
|
Global.Config.BackupSavestates = BackupSavestatesCheckbox.Checked;
|
|
|
|
|
Global.Config.SaveScreenshotWithStates = ScreenshotInStatesCheckbox.Checked;
|
2015-02-23 23:43:51 +00:00
|
|
|
|
Global.Config.NoLowResLargeScreenshotWithStates = !LowResLargeScreenshotsCheckbox.Checked;
|
2015-01-26 04:22:07 +00:00
|
|
|
|
Global.Config.BigScreenshotSize = (int)BigScreenshotNumeric.Value * 1024;
|
2014-09-29 02:53:52 +00:00
|
|
|
|
|
2014-12-25 13:35:59 +00:00
|
|
|
|
GlobalWin.OSD.AddMessage("Rewind and State settings saved");
|
2013-07-21 20:39:11 +00:00
|
|
|
|
Close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SetSmallEnabled()
|
|
|
|
|
{
|
|
|
|
|
SmallLabel1.Enabled = SmallLabel2.Enabled
|
2013-11-27 23:35:32 +00:00
|
|
|
|
= SmallSavestateNumeric.Enabled = SmallLabel3.Enabled
|
2013-07-21 20:39:11 +00:00
|
|
|
|
= SmallStateEnabledBox.Checked;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SetMediumEnabled()
|
|
|
|
|
{
|
|
|
|
|
MediumLabel1.Enabled = MediumLabel2.Enabled
|
|
|
|
|
= MediumSavestateNumeric.Enabled = MediumLabel3.Enabled
|
|
|
|
|
= MediumStateEnabledBox.Checked;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SetLargeEnabled()
|
|
|
|
|
{
|
|
|
|
|
LargeLabel1.Enabled = LargeLabel2.Enabled
|
|
|
|
|
= LargeSavestateNumeric.Enabled = LargeLabel3.Enabled
|
|
|
|
|
= LargeStateEnabledBox.Checked;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SmallStateEnabledBox_CheckStateChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
SetSmallEnabled();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void MediumStateEnabledBox_CheckStateChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
SetMediumEnabled();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void LargeStateEnabledBox_CheckStateChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
SetLargeEnabled();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void LargeLabel1_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
LargeStateEnabledBox.Checked ^= true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void MediumLabel1_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
MediumStateEnabledBox.Checked ^= true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SmallLabel1_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
SmallStateEnabledBox.Checked ^= true;
|
|
|
|
|
}
|
2013-07-28 19:54:02 +00:00
|
|
|
|
|
|
|
|
|
private void MediumStateTrackbar_ValueChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
2017-05-31 15:28:06 +00:00
|
|
|
|
MediumStateUpDown.Value = ((TrackBar)sender).Value;
|
2013-07-28 19:54:02 +00:00
|
|
|
|
if (MediumStateUpDown.Value > LargeStateUpDown.Value)
|
|
|
|
|
{
|
|
|
|
|
LargeStateUpDown.Value = MediumStateUpDown.Value;
|
|
|
|
|
LargeStateTrackbar.Value = (int)MediumStateUpDown.Value;
|
|
|
|
|
}
|
2017-05-31 15:28:06 +00:00
|
|
|
|
|
2013-11-27 23:35:32 +00:00
|
|
|
|
_mediumStateSize = MediumStateTrackbar.Value * 1024;
|
|
|
|
|
_largeStateSize = LargeStateTrackbar.Value * 1024;
|
2013-07-28 19:54:02 +00:00
|
|
|
|
SetStateSize();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void MediumStateUpDown_ValueChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
2017-05-31 15:28:06 +00:00
|
|
|
|
MediumStateTrackbar.Value = (int)((NumericUpDown)sender).Value;
|
2013-07-28 19:54:02 +00:00
|
|
|
|
if (MediumStateUpDown.Value > LargeStateUpDown.Value)
|
|
|
|
|
{
|
|
|
|
|
LargeStateUpDown.Value = MediumStateUpDown.Value;
|
|
|
|
|
LargeStateTrackbar.Value = (int)MediumStateUpDown.Value;
|
|
|
|
|
}
|
2017-05-31 15:28:06 +00:00
|
|
|
|
|
2013-11-27 23:35:32 +00:00
|
|
|
|
_mediumStateSize = MediumStateTrackbar.Value * 1024;
|
|
|
|
|
_largeStateSize = LargeStateTrackbar.Value * 1024;
|
2013-07-28 19:54:02 +00:00
|
|
|
|
SetStateSize();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void LargeStateTrackbar_ValueChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (LargeStateTrackbar.Value < MediumStateTrackbar.Value)
|
|
|
|
|
{
|
|
|
|
|
LargeStateTrackbar.Value = MediumStateTrackbar.Value;
|
|
|
|
|
LargeStateUpDown.Value = MediumStateTrackbar.Value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2017-05-31 15:28:06 +00:00
|
|
|
|
LargeStateUpDown.Value = ((TrackBar)sender).Value;
|
2013-07-28 19:54:02 +00:00
|
|
|
|
}
|
2017-05-31 15:28:06 +00:00
|
|
|
|
|
2013-11-27 23:35:32 +00:00
|
|
|
|
_mediumStateSize = MediumStateTrackbar.Value * 1024;
|
|
|
|
|
_largeStateSize = LargeStateTrackbar.Value * 1024;
|
2013-07-28 19:54:02 +00:00
|
|
|
|
SetStateSize();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void LargeStateUpDown_ValueChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (LargeStateUpDown.Value < MediumStateUpDown.Value)
|
|
|
|
|
{
|
|
|
|
|
LargeStateTrackbar.Value = MediumStateTrackbar.Value;
|
|
|
|
|
LargeStateUpDown.Value = MediumStateTrackbar.Value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2017-05-31 15:28:06 +00:00
|
|
|
|
LargeStateTrackbar.Value = (int)((NumericUpDown)sender).Value;
|
2013-07-28 19:54:02 +00:00
|
|
|
|
}
|
2017-05-31 15:28:06 +00:00
|
|
|
|
|
2013-11-27 23:35:32 +00:00
|
|
|
|
_mediumStateSize = MediumStateTrackbar.Value * 1024;
|
|
|
|
|
_largeStateSize = LargeStateTrackbar.Value * 1024;
|
2013-07-28 19:54:02 +00:00
|
|
|
|
SetStateSize();
|
|
|
|
|
}
|
2013-08-01 21:09:32 +00:00
|
|
|
|
|
2013-11-27 23:35:32 +00:00
|
|
|
|
private void CalculateEstimates()
|
|
|
|
|
{
|
2017-05-31 15:28:06 +00:00
|
|
|
|
long avgStateSize;
|
2013-11-27 23:35:32 +00:00
|
|
|
|
|
|
|
|
|
if (UseDeltaCompression.Checked || _stateSize == 0)
|
|
|
|
|
{
|
2013-12-27 01:19:38 +00:00
|
|
|
|
if (Global.Rewinder.Count > 0)
|
2013-11-27 23:35:32 +00:00
|
|
|
|
{
|
2017-05-31 15:28:06 +00:00
|
|
|
|
avgStateSize = Global.Rewinder.Size / Global.Rewinder.Count;
|
2013-11-27 23:35:32 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2017-05-31 15:28:06 +00:00
|
|
|
|
avgStateSize = _stateSize;
|
2013-11-27 23:35:32 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2017-05-31 15:28:06 +00:00
|
|
|
|
avgStateSize = _stateSize;
|
2013-11-27 23:35:32 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-05-31 15:28:06 +00:00
|
|
|
|
var bufferSize = (long)BufferSizeUpDown.Value;
|
|
|
|
|
bufferSize *= 1024 * 1024;
|
|
|
|
|
var estFrames = bufferSize / avgStateSize;
|
2013-11-27 23:35:32 +00:00
|
|
|
|
|
2017-05-31 15:28:06 +00:00
|
|
|
|
long estFrequency = 0;
|
2013-11-27 23:35:32 +00:00
|
|
|
|
switch (_stateSizeCategory)
|
|
|
|
|
{
|
|
|
|
|
case 1:
|
2017-05-31 15:28:06 +00:00
|
|
|
|
estFrequency = (long)SmallSavestateNumeric.Value;
|
2013-11-27 23:35:32 +00:00
|
|
|
|
break;
|
|
|
|
|
case 2:
|
2017-05-31 15:28:06 +00:00
|
|
|
|
estFrequency = (long)MediumSavestateNumeric.Value;
|
2013-11-27 23:35:32 +00:00
|
|
|
|
break;
|
|
|
|
|
case 3:
|
2017-05-31 15:28:06 +00:00
|
|
|
|
estFrequency = (long)LargeSavestateNumeric.Value;
|
2013-11-27 23:35:32 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2017-05-31 15:28:06 +00:00
|
|
|
|
long estTotalFrames = estFrames * estFrequency;
|
|
|
|
|
double minutes = estTotalFrames / 60 / 60;
|
|
|
|
|
|
|
|
|
|
AverageStoredStateSizeLabel.Text = FormatKB(avgStateSize);
|
|
|
|
|
ApproxFramesLabel.Text = $"{estFrames:n0}" + " frames";
|
|
|
|
|
EstTimeLabel.Text = $"{minutes:n}" + " minutes";
|
2013-11-27 23:35:32 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void BufferSizeUpDown_ValueChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CalculateEstimates();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void UseDeltaCompression_CheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CalculateEstimates();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SmallSavestateNumeric_ValueChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CalculateEstimates();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void MediumSavestateNumeric_ValueChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CalculateEstimates();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void LargeSavestateNumeric_ValueChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CalculateEstimates();
|
|
|
|
|
}
|
2014-07-12 20:20:08 +00:00
|
|
|
|
|
2017-05-31 15:28:06 +00:00
|
|
|
|
private void NudCompression_ValueChanged(object sender, EventArgs e)
|
2014-07-12 20:20:08 +00:00
|
|
|
|
{
|
2017-05-31 15:28:06 +00:00
|
|
|
|
trackBarCompression.Value = (int)((NumericUpDown)sender).Value;
|
2014-07-12 20:20:08 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-05-31 15:28:06 +00:00
|
|
|
|
private void TrackBarCompression_ValueChanged(object sender, EventArgs e)
|
2014-07-12 20:20:08 +00:00
|
|
|
|
{
|
2017-05-31 15:28:06 +00:00
|
|
|
|
// TODO - make a UserControl which is trackbar and NUD combined
|
|
|
|
|
nudCompression.Value = ((TrackBar)sender).Value;
|
2014-07-12 20:20:08 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-05-31 15:28:06 +00:00
|
|
|
|
private void BtnResetCompression_Click(object sender, EventArgs e)
|
2014-07-12 20:20:08 +00:00
|
|
|
|
{
|
|
|
|
|
nudCompression.Value = Config.DefaultSaveStateCompressionLevelNormal;
|
|
|
|
|
}
|
2013-07-21 20:39:11 +00:00
|
|
|
|
}
|
|
|
|
|
}
|