mirror of
https://github.com/ppy/osu.git
synced 2025-02-13 15:03:13 +08:00
Fix databased config save performance
Adds proper save debounce logic. Closes #5991.
This commit is contained in:
parent
3b650ac646
commit
afac512a1b
@ -16,11 +16,11 @@ namespace osu.Game.Configuration
|
|||||||
|
|
||||||
private readonly int? variant;
|
private readonly int? variant;
|
||||||
|
|
||||||
private readonly List<DatabasedSetting> databasedSettings;
|
private List<DatabasedSetting> databasedSettings;
|
||||||
|
|
||||||
private readonly RulesetInfo ruleset;
|
private readonly RulesetInfo ruleset;
|
||||||
|
|
||||||
private readonly bool legacySettingsExist;
|
private bool legacySettingsExist;
|
||||||
|
|
||||||
protected DatabasedConfigManager(SettingsStore settings, RulesetInfo ruleset = null, int? variant = null)
|
protected DatabasedConfigManager(SettingsStore settings, RulesetInfo ruleset = null, int? variant = null)
|
||||||
{
|
{
|
||||||
@ -28,21 +28,34 @@ namespace osu.Game.Configuration
|
|||||||
this.ruleset = ruleset;
|
this.ruleset = ruleset;
|
||||||
this.variant = variant;
|
this.variant = variant;
|
||||||
|
|
||||||
databasedSettings = settings.Query(ruleset?.ID, variant);
|
Load();
|
||||||
legacySettingsExist = databasedSettings.Any(s => int.TryParse(s.Key, out var _));
|
|
||||||
|
|
||||||
InitialiseDefaults();
|
InitialiseDefaults();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void PerformLoad()
|
protected override void PerformLoad()
|
||||||
{
|
{
|
||||||
|
databasedSettings = settings.Query(ruleset?.ID, variant);
|
||||||
|
legacySettingsExist = databasedSettings.Any(s => int.TryParse(s.Key, out var _));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool PerformSave()
|
protected override bool PerformSave()
|
||||||
{
|
{
|
||||||
|
lock (dirtySettings)
|
||||||
|
{
|
||||||
|
if (dirtySettings.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (var setting in dirtySettings)
|
||||||
|
settings.Update(setting);
|
||||||
|
dirtySettings.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private readonly List<DatabasedSetting> dirtySettings = new List<DatabasedSetting>();
|
||||||
|
|
||||||
protected override void AddBindable<TBindable>(T lookup, Bindable<TBindable> bindable)
|
protected override void AddBindable<TBindable>(T lookup, Bindable<TBindable> bindable)
|
||||||
{
|
{
|
||||||
base.AddBindable(lookup, bindable);
|
base.AddBindable(lookup, bindable);
|
||||||
@ -80,7 +93,9 @@ namespace osu.Game.Configuration
|
|||||||
bindable.ValueChanged += b =>
|
bindable.ValueChanged += b =>
|
||||||
{
|
{
|
||||||
setting.Value = b.NewValue;
|
setting.Value = b.NewValue;
|
||||||
settings.Update(setting);
|
lock (dirtySettings)
|
||||||
|
if (!dirtySettings.Contains(setting))
|
||||||
|
dirtySettings.Add(setting);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user