Skip to content

Commit

Permalink
Pool summary timeline break visualisations to reduce allocations
Browse files Browse the repository at this point in the history
  • Loading branch information
bdach committed Jul 10, 2024
1 parent 343090e commit b881c25
Showing 1 changed file with 33 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Pooling;
using osu.Framework.Graphics.Shapes;
using osu.Game.Beatmaps.Timing;
using osu.Game.Graphics;
Expand All @@ -17,32 +18,54 @@ public partial class BreakPart : TimelinePart
{
private readonly BindableList<BreakPeriod> breaks = new BindableList<BreakPeriod>();

private DrawablePool<BreakVisualisation> pool = null!;

[BackgroundDependencyLoader]
private void load()
{
AddInternal(pool = new DrawablePool<BreakVisualisation>(10));
}

protected override void LoadBeatmap(EditorBeatmap beatmap)
{
base.LoadBeatmap(beatmap);

breaks.UnbindAll();
breaks.BindTo(beatmap.Breaks);
}

protected override void LoadComplete()
{
base.LoadComplete();

breaks.BindCollectionChanged((_, _) =>
{
Clear();
foreach (var breakPeriod in beatmap.Breaks)
Add(new BreakVisualisation(breakPeriod));
Clear(disposeChildren: false);
foreach (var breakPeriod in breaks)
Add(pool.Get(v => v.BreakPeriod = breakPeriod));
}, true);
}

private partial class BreakVisualisation : Circle
private partial class BreakVisualisation : PoolableDrawable
{
public BreakVisualisation(BreakPeriod breakPeriod)
public BreakPeriod BreakPeriod
{
RelativePositionAxes = Axes.X;
RelativeSizeAxes = Axes.Both;
X = (float)breakPeriod.StartTime;
Width = (float)breakPeriod.Duration;
set
{
X = (float)value.StartTime;
Width = (float)value.Duration;
}
}

[BackgroundDependencyLoader]
private void load(OsuColour colours) => Colour = colours.Gray7;
private void load(OsuColour colours)
{
RelativePositionAxes = Axes.X;
RelativeSizeAxes = Axes.Both;

InternalChild = new Circle { RelativeSizeAxes = Axes.Both };
Colour = colours.Gray7;
}
}
}
}

0 comments on commit b881c25

Please sign in to comment.