1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-22 12:47:25 +08:00

Consume ability to lookup multiple users in MultiplayerGameplayLeaderboard

Avoids syncrhonously blocking on asynchronous operations (which was
leading to LCA starvation in tests).
This commit is contained in:
Dean Herbert 2021-07-05 19:56:36 +09:00
parent 9c311a6d8a
commit 77adf687c6
2 changed files with 14 additions and 16 deletions

View File

@ -125,9 +125,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
{ {
const float padding = 44; // enough margin to avoid the hit error display. const float padding = 44; // enough margin to avoid the hit error display.
leaderboard.Position = new Vector2( leaderboard.Position = new Vector2(padding, padding + HUDOverlay.TopScoringElementsHeight);
padding,
padding + HUDOverlay.TopScoringElementsHeight);
} }
private void onMatchStarted() => Scheduler.Add(() => private void onMatchStarted() => Scheduler.Add(() =>

View File

@ -53,22 +53,22 @@ namespace osu.Game.Screens.Play.HUD
{ {
scoringMode = config.GetBindable<ScoringMode>(OsuSetting.ScoreDisplayMode); scoringMode = config.GetBindable<ScoringMode>(OsuSetting.ScoreDisplayMode);
foreach (var userId in playingUsers) userLookupCache.GetUsersAsync(playingUsers.ToArray()).ContinueWith(users => Schedule(() =>
{ {
// probably won't be required in the final implementation. foreach (var user in users.Result)
var resolvedUser = userLookupCache.GetUserAsync(userId).Result; {
var trackedUser = CreateUserData(user.Id, scoreProcessor);
trackedUser.ScoringMode.BindTo(scoringMode);
var trackedUser = CreateUserData(userId, scoreProcessor); var leaderboardScore = AddPlayer(user, user.Id == api.LocalUser.Value.Id);
trackedUser.ScoringMode.BindTo(scoringMode); leaderboardScore.Accuracy.BindTo(trackedUser.Accuracy);
leaderboardScore.TotalScore.BindTo(trackedUser.Score);
leaderboardScore.Combo.BindTo(trackedUser.CurrentCombo);
leaderboardScore.HasQuit.BindTo(trackedUser.UserQuit);
var leaderboardScore = AddPlayer(resolvedUser, resolvedUser?.Id == api.LocalUser.Value.Id); UserScores[user.Id] = trackedUser;
leaderboardScore.Accuracy.BindTo(trackedUser.Accuracy); }
leaderboardScore.TotalScore.BindTo(trackedUser.Score); }));
leaderboardScore.Combo.BindTo(trackedUser.CurrentCombo);
leaderboardScore.HasQuit.BindTo(trackedUser.UserQuit);
UserScores[userId] = trackedUser;
}
} }
protected override void LoadComplete() protected override void LoadComplete()