1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-19 12:03:21 +08:00

Merge pull request #14682 from peppy/fix-playlist-listing-performance

Improve multiplayer lounge listing performance
This commit is contained in:
Dan Balasescu 2021-09-09 12:00:32 +09:00 committed by GitHub
commit 508184233e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 164 additions and 145 deletions

View File

@ -130,6 +130,8 @@ namespace osu.Game.Tests.Visual.Multiplayer
Type = { Value = MatchType.HeadToHead },
}));
AddUntilStep("wait for panel load", () => drawableRoom.ChildrenOfType<RecentParticipantsList>().Any());
AddAssert("password icon hidden", () => Precision.AlmostEquals(0, drawableRoom.ChildrenOfType<DrawableRoom.PasswordProtectedIcon>().Single().Alpha));
AddStep("set password", () => room.Password.Value = "password");

View File

@ -32,6 +32,12 @@ namespace osu.Game.Tests.Visual.Playlists
private RoomsContainer roomsContainer => loungeScreen.ChildrenOfType<RoomsContainer>().First();
[Test]
public void TestManyRooms()
{
AddStep("add rooms", () => RoomManager.AddRooms(500));
}
[Test]
public void TestScrollByDraggingRooms()
{

View File

@ -43,6 +43,8 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components
private PasswordProtectedIcon passwordIcon;
private EndDateInfo endDateInfo;
private DelayedLoadWrapper wrapper;
public DrawableRoom(Room room)
{
Room = room;
@ -63,6 +65,14 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components
[BackgroundDependencyLoader]
private void load(OverlayColourProvider colours)
{
ButtonsContainer = new Container
{
Anchor = Anchor.CentreRight,
Origin = Anchor.CentreRight,
RelativeSizeAxes = Axes.Y,
AutoSizeAxes = Axes.X
};
InternalChildren = new[]
{
// This resolves internal 1px gaps due to applying the (parenting) corner radius and masking across multiple filling background sprites.
@ -75,6 +85,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components
{
d.RelativeSizeAxes = Axes.Both;
}),
wrapper = new DelayedLoadWrapper(() =>
new Container
{
Name = @"Room content",
@ -205,13 +216,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components
},
Children = new Drawable[]
{
ButtonsContainer = new Container
{
Anchor = Anchor.CentreRight,
Origin = Anchor.CentreRight,
RelativeSizeAxes = Axes.Y,
AutoSizeAxes = Axes.X
},
ButtonsContainer,
recentParticipantsList = new RecentParticipantsList
{
Anchor = Anchor.CentreRight,
@ -223,7 +228,10 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components
passwordIcon = new PasswordProtectedIcon { Alpha = 0 }
},
},
},
}, 0)
{
RelativeSizeAxes = Axes.Both,
}
};
}
@ -231,6 +239,10 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components
{
base.LoadComplete();
wrapper.DelayedLoadComplete += _ =>
{
wrapper.FadeInFromZero(200);
roomCategory.BindTo(Room.Category);
roomCategory.BindValueChanged(c =>
{
@ -248,6 +260,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components
hasPassword.BindTo(Room.HasPassword);
hasPassword.BindValueChanged(v => passwordIcon.Alpha = v.NewValue ? 1 : 0, true);
};
}
protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent)

View File

@ -83,12 +83,10 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
{
base.LoadComplete();
if (matchingFilter)
this.FadeInFromZero(transition_duration);
else
Alpha = 0;
Alpha = matchingFilter ? 1 : 0;
selectionBox.Alpha = SelectedRoom.Value == Room ? 1 : 0;
SelectedRoom.BindValueChanged(updateSelectedRoom, true);
SelectedRoom.BindValueChanged(updateSelectedRoom);
}
private void updateSelectedRoom(ValueChangedEvent<Room> selected)