28 lines
1.3 KiB
Diff
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;
|
|
}
|