From ad6fa38d61452dba69a23128fa4aef40f3eaf584 Mon Sep 17 00:00:00 2001 From: Askaholic Date: Wed, 22 Sep 2021 21:01:17 -0800 Subject: [PATCH] Only compute displayed rating if enforcement is enabled This should significantly reduce calls to rating initialization code --- server/games/game.py | 11 ++++++++--- server/players.py | 4 ++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/server/games/game.py b/server/games/game.py index 70412ffe6..33a7ad277 100644 --- a/server/games/game.py +++ b/server/games/game.py @@ -861,17 +861,22 @@ def report_army_stats(self, stats_json): self._process_pending_army_stats() def is_visible_to_player(self, player: Player) -> bool: + """ + Determine if a player should see this game in their games list. + + Note: This is a *hot* function, it can have significant impacts on + performance. + """ if self.host is None: return False if player == self.host or player in self._connections: return True - mean, dev = player.ratings[self.rating_type] - displayed_rating = mean - 3 * dev if ( self.enforce_rating_range - and displayed_rating not in self.displayed_rating_range + and player.get_displayed_rating(self.rating_type) + not in self.displayed_rating_range ): return False diff --git a/server/players.py b/server/players.py index 2688549ad..e289801af 100644 --- a/server/players.py +++ b/server/players.py @@ -88,6 +88,10 @@ def faction(self, value: Union[str, int, Faction]) -> None: else: self._faction = Faction.from_value(value) + def get_displayed_rating(self, rating_type: str) -> float: + mean, dev = self.ratings[rating_type] + return mean - 3 * dev + def power(self) -> int: """An artifact of the old permission system. The client still uses this number to determine if a player gets a special category in the user list