java-topology/defects/pcsx2-0003/patch/pcsx2-0003-achievements-badge-paths-map.patch

28 lines
1.3 KiB
Diff

# UNDF: UNDF-2026-000001052
# UNDF: UNDF-2026-XXXXXXXXX
--- a/pcsx2/Achievements.cpp
+++ b/pcsx2/Achievements.cpp
@@ -219,7 +219,8 @@ namespace
{
- static std::vector<std::pair<const void*, std::string>> s_achievement_badge_paths;
+ // Keyed by rc_client_achievement_t pointer — use unordered_map for O(1) lookup
+ // instead of O(A) std::find_if scan per DrawAchievement call.
+ static std::unordered_map<const void*, std::string> s_achievement_badge_paths;
}
@@ -2774,10 +2775,10 @@ void Achievements::DrawAchievement(const rc_client_achievement_t* cheevo)
std::string* badge_path;
- if (const auto badge_it = std::find_if(
- s_achievement_badge_paths.begin(), s_achievement_badge_paths.end(), [cheevo](const auto& it) { return (it.first == cheevo); });
- badge_it != s_achievement_badge_paths.end())
+ if (const auto badge_it = s_achievement_badge_paths.find(cheevo);
+ badge_it != s_achievement_badge_paths.end())
{
badge_path = &badge_it->second;
}
else
{
std::string new_badge_path = Achievements::GetAchievementBadgePath(cheevo, cheevo->state);
- badge_path = &s_achievement_badge_paths.emplace_back(cheevo, std::move(new_badge_path)).second;
+ badge_path = &s_achievement_badge_paths.emplace(cheevo, std::move(new_badge_path)).first->second;
}