From 1a398dc36b4d130f2e8c8622a691c4f0df3411ef Mon Sep 17 00:00:00 2001 From: MinaciousGrace Date: Sun, 29 Jan 2017 17:58:10 -0500 Subject: [PATCH] further optimization of recalcssr --- src/Profile.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/Profile.cpp b/src/Profile.cpp index 5116f6e6ca..65d40401b8 100644 --- a/src/Profile.cpp +++ b/src/Profile.cpp @@ -2189,8 +2189,6 @@ void Profile::RecalculateSSRs(bool OnlyOld) { if (!pSteps) continue; - auto nd = pSteps->GetNoteData(); - if (!pSteps->IsRecalcValid()) { for (size_t i = 0; i < hsv.size(); i++) { FOREACH_ENUM(Skillset, ss) @@ -2199,13 +2197,7 @@ void Profile::RecalculateSSRs(bool OnlyOld) { continue; } - TimingData* td = pSteps->GetTimingData(); - vector& nerv = nd.GetNonEmptyRowVector(); vector etaner; - - for (size_t i = 0; i < nerv.size(); i++) - etaner.emplace_back(td->GetElapsedTimeFromBeatNoOffset(NoteRowToBeat(nerv[i]))); - for (size_t i = 0; i < hsv.size(); i++) { float wifescore = hsv[i].GetWifeScore(); float musicrate = hsv[i].GetMusicRate(); @@ -2216,7 +2208,17 @@ void Profile::RecalculateSSRs(bool OnlyOld) { if (OnlyOld && hsv[i].GetSSRCalcVersion() == GetCalcVersion()) continue; - vector recalcSSR = MinaSDCalc(nd, etaner, musicrate, wifescore, 1.f, td->HasWarps()); + NoteData& nd = pSteps->GetNoteData(); + + // only build etaner once + if (etaner.empty()) { + TimingData* td = pSteps->GetTimingData(); + vector& nerv = nd.GetNonEmptyRowVector(); + for (size_t i = 0; i < nerv.size(); i++) + etaner.emplace_back(td->GetElapsedTimeFromBeatNoOffset(NoteRowToBeat(nerv[i]))); + } + + vector recalcSSR = MinaSDCalc(nd, etaner, musicrate, wifescore, 1.f, false); FOREACH_ENUM(Skillset, ss) hsv[i].SetSkillsetSSR(ss, recalcSSR[ss]); hsv[i].SetSSRCalcVersion(GetCalcVersion());