From 5e9495d21d40920e2ef6c520bef6ea87ac141b9c Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Tue, 25 Oct 2016 16:49:10 -0400 Subject: [PATCH] Fix performance issues with song select --- osu.Game/GameModes/Play/PlaySongSelect.cs | 32 ++++++++++++++--------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/osu.Game/GameModes/Play/PlaySongSelect.cs b/osu.Game/GameModes/Play/PlaySongSelect.cs index ce6c11a610..7e68fef78d 100644 --- a/osu.Game/GameModes/Play/PlaySongSelect.cs +++ b/osu.Game/GameModes/Play/PlaySongSelect.cs @@ -18,6 +18,8 @@ using OpenTK; using OpenTK.Graphics; using osu.Framework.Graphics.Textures; using osu.Framework.Graphics.UserInterface; +using System.Threading.Tasks; +using System.Diagnostics; namespace osu.Game.GameModes.Play { @@ -54,16 +56,29 @@ namespace osu.Game.GameModes.Play selectedBeatmap = beatmap; } + private Stopwatch watch = new Stopwatch(); + private void addBeatmapSet(BeatmapSetInfo beatmapSet) { + watch.Reset(); + watch.Start(); beatmapSet = beatmaps.GetWithChildren(beatmapSet.BeatmapSetID); beatmapSet.Beatmaps.ForEach(b => beatmaps.GetChildren(b)); beatmapSet.Beatmaps = beatmapSet.Beatmaps.OrderBy(b => b.BaseDifficulty.OverallDifficulty) .ToList(); - var group = new BeatmapGroup(beatmapSet); - group.SetSelected += selectBeatmapSet; - group.BeatmapSelected += selectBeatmap; - setList.Add(group); + Scheduler.Add(() => + { + var group = new BeatmapGroup(beatmapSet); + group.SetSelected += selectBeatmapSet; + group.BeatmapSelected += selectBeatmap; + setList.Add(group); + if (setList.Children.Count() == 1) + { + selectedBeatmapSet = group.BeatmapSet; + selectedBeatmap = group.SelectedBeatmap; + group.Collapsed = false; + } + }); } private void addBeatmapSets() @@ -165,14 +180,7 @@ namespace osu.Game.GameModes.Play beatmaps = (game as OsuGameBase).Beatmaps; beatmaps.BeatmapSetAdded += bset => Scheduler.Add(() => addBeatmapSet(bset)); - addBeatmapSets(); - var first = setList.Children.FirstOrDefault() as BeatmapGroup; - if (first != null) - { - first.Collapsed = false; - selectedBeatmapSet = first.BeatmapSet; - selectedBeatmap = first.SelectedBeatmap; - } + Task.Factory.StartNew(addBeatmapSets); } protected override void Dispose(bool isDisposing)