Skip to content

Commit 20c8338

Browse files
committed
Fix sync overlay rampantly updating
this mysterious (but logical) change nets me another 200 fps in gameplay when not syncing or using autoplay
1 parent cd23136 commit 20c8338

File tree

2 files changed

+17
-12
lines changed

2 files changed

+17
-12
lines changed

src/Etterna/Screen/Others/ScreenSyncOverlay.cpp

+16-11
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "Etterna/Models/Songs/Song.h"
1313

1414
static bool previousGameplayState;
15+
static AutosyncType lastSyncType;
1516

1617
static bool
1718
IsGameplay()
@@ -78,7 +79,7 @@ static LocalizedString COLLECTING_SAMPLE("ScreenSyncOverlay",
7879
static LocalizedString STANDARD_DEVIATION("ScreenSyncOverlay",
7980
"Standard deviation");
8081
void
81-
ScreenSyncOverlay::UpdateText()
82+
ScreenSyncOverlay::UpdateText(bool forcedChange)
8283
{
8384
// Update Status
8485
vector<RString> vs;
@@ -125,32 +126,36 @@ ScreenSyncOverlay::UpdateText()
125126
AdjustSync::GetSyncChangeTextSong(vs);
126127
}
127128

128-
Message set_status("SetStatus");
129-
set_status.SetParam("text", join("\n", vs));
130-
m_overlay->HandleMessage(set_status);
129+
if (forcedChange || !vs.empty() || type != lastSyncType) {
130+
Message set_status("SetStatus");
131+
set_status.SetParam("text", join("\n", vs));
132+
m_overlay->HandleMessage(set_status);
133+
}
131134

132135
// Update SyncInfo
133136
bool visible =
134137
GAMESTATE->m_SongOptions.GetCurrent().m_AutosyncType != AutosyncType_Off;
135-
Message set_adjustments("SetAdjustments");
136-
set_adjustments.SetParam("visible", visible);
138+
RString s;
137139
if (visible) {
138140
float fNew = PREFSMAN->m_fGlobalOffsetSeconds;
139141
float fOld = AdjustSync::s_fGlobalOffsetSecondsOriginal;
140142
float fStdDev = AdjustSync::s_fStandardDeviation;
141-
RString s;
142143
s += OLD_OFFSET.GetValue() + ssprintf(": %0.3f\n", fOld);
143144
s += NEW_OFFSET.GetValue() + ssprintf(": %0.3f\n", fNew);
144145
s += STANDARD_DEVIATION.GetValue() + ssprintf(": %0.3f\n", fStdDev);
145146
s += COLLECTING_SAMPLE.GetValue() +
146147
ssprintf(": %d / %d",
147148
AdjustSync::s_iAutosyncOffsetSample + 1,
148149
AdjustSync::OFFSET_SAMPLE_COUNT);
150+
}
151+
152+
if (forcedChange || visible || type != lastSyncType) {
153+
Message set_adjustments("SetAdjustments");
154+
set_adjustments.SetParam("visible", visible);
149155
set_adjustments.SetParam("text", s);
150-
} else {
151-
set_adjustments.SetParam("text", RString(""));
156+
m_overlay->HandleMessage(set_adjustments);
152157
}
153-
m_overlay->HandleMessage(set_adjustments);
158+
lastSyncType = type;
154159
}
155160

156161
static LocalizedString CANT_SYNC_WHILE_PLAYING_A_COURSE(
@@ -329,7 +334,7 @@ ScreenSyncOverlay::Input(const InputEventPlus& input)
329334
ShowHelp();
330335
}
331336

332-
UpdateText();
337+
UpdateText(true);
333338
return true;
334339
}
335340

src/Etterna/Screen/Others/ScreenSyncOverlay.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class ScreenSyncOverlay : public Screen
1616
static void SetShowAutoplay(bool b);
1717

1818
private:
19-
void UpdateText();
19+
void UpdateText(bool forcedChange = false);
2020
void ShowHelp();
2121
void HideHelp();
2222

0 commit comments

Comments
 (0)