It is unnecessary, as a successful restart will exit the current player
screen, and `OnExiting()` has another `StopSampleAndRemoveFilters()`
call, which means that in the restart flow the sample was actually
getting stopped twice.
Standard exit flow is fine, it only stopped the sample once.
The `SegmentedGraph`'s draw node would call `getSegmentColour()`
on the drawable, which would query the `DrawColourInfo` and
`tierColours` properties of the drawable. This is a cross-thread access
and as such completely unsafe, as due to being cross-thread it can die
on invalidations or out-of-bounds accesses.
Fix by transferring everything to the draw node first before attempting
to draw. `SegmentedGraph.TierColours` setter already correctly
invalidates the draw node via `graphNeedsUpdate`, so no further
intervention was required there.
Closes#22326.
Both `JudgementCounterDisplay` (via the `ShowMaxJudgement` callback)
and the `JudgementCounter.Pop{In,Out}` methods were operating on the
alpha of the `JudgementCounter`. This meant that if the counter display
was created with max judgement initially hidden, it would be hidden
by the `ShowMaxJudgement` callback first, but then _unhidden_
by `PopIn()`.