diff --git a/report-fossil.py b/report-fossil.py index 7572ef15a9e0dc19a6eb26bca2e2e9b9d2189e00..4a2016bf8fa6502c7324b991626f75593619763d 100755 --- a/report-fossil.py +++ b/report-fossil.py @@ -74,6 +74,7 @@ class Statistic(typing.Generic[T]): display_name : str = attr.ib() more_is_better : bool = attr.ib(False) is_hash : bool = attr.ib(False) + change_discard_others : bool = attr.ib(False) statistics = [ @@ -126,7 +127,7 @@ statistics = [ Statistic(internal_name='read_stalls', csv_names=['Read Stalls'], display_name='Read Stalls'), # Anv statistics - Statistic(internal_name='subgroup_size', csv_names=['Subgroup size'], display_name='Subgroup size', more_is_better=True), + Statistic(internal_name='subgroup_size', csv_names=['Subgroup size'], display_name='Subgroup size', more_is_better=True, change_discard_others=True), Statistic(internal_name='send_count', csv_names=['SEND Count'], display_name='Send messages'), Statistic(internal_name='loop_count', csv_names=['Loop Count'], display_name='Loop count'), Statistic(internal_name='cycle_count', csv_names=['Cycle Count'], display_name='Cycle count'), @@ -311,10 +312,31 @@ class Report(ReportProtocol): def include(self, name: str, d0: Result, d1: Result) -> None: self.num_shaders += 1 + # Figure out whether a given statistic change means we need to + # ignore all others. + discard_all_but = None + for stat in statistics: + m = stat.internal_name + d0_m: typing.Optional[int] = getattr(d0, m) + if d0_m is None: + continue + d1_m: typing.Optional[int] = getattr(d1, m) + if d1_m is None: + continue + + if d0_m != d1_m and stat.change_discard_others: + discard_all_but = stat.internal_name + break + affected = False stats: typing.List[typing.Tuple[Diff, int, int]] = [] for stat in statistics: m = stat.internal_name + + # Should this statistic be ignored? + if discard_all_but is not None and m != discard_all_but: + continue + d0_m: typing.Optional[int] = getattr(d0, m) if d0_m is None: continue