[tools] testbot: Filter the jobs in GetStatistics().

Francois Gouget fgouget at codeweavers.com
Thu Apr 14 09:57:57 CDT 2022


This reduces the number of Tasks that need to be loaded from the
database and processed in order to collect the statistics for short
periods of time.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
I guess this was not done initially because FilterNull() and
FilterOr() were added after the stats code.

A big source of inefficiency is the loading of the Tasks a handful at a
time. But fixing that requires a bigger code reorganisation.

There are some smaller optimisations that can provide 10-20% speedups
like caching some object properties to avoid the AUTOLOAD performance
penalty. But whether they make sense depends on how the performance of
that mechanism evolves.
---
 testbot/lib/WineTestBot/Activity.pm | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/testbot/lib/WineTestBot/Activity.pm b/testbot/lib/WineTestBot/Activity.pm
index f7579057e..d395a12a8 100644
--- a/testbot/lib/WineTestBot/Activity.pm
+++ b/testbot/lib/WineTestBot/Activity.pm
@@ -31,6 +31,8 @@ our @EXPORT = qw(GetActivity GetStatistics);
 use List::Util qw(max);
 use Scalar::Util qw(weaken);
 
+use ObjectModel::Collection;
+
 use WineTestBot::Config;
 use WineTestBot::Jobs;
 use WineTestBot::RecordGroups;
@@ -342,9 +344,12 @@ sub GetStatistics($;$)
 
   my ($GlobalStats, $HostsStats, $VMsStats) = ({}, {}, {});
 
-  my @JobTimes;
   my $Jobs = CreateJobs();
   my $Cutoff = $Seconds ? (time() - $Seconds) : 0;
+  $Jobs->AddFilter(FilterOr(FilterNull("Ended"),
+                            FilterValue("Ended", ">=", [$Cutoff])));
+
+  my @JobTimes;
   foreach my $Job (@{$Jobs->GetItems()})
   {
     my $CountsAsNew = ($Job->Submitted >= $Cutoff);
@@ -372,6 +377,7 @@ sub GetStatistics($;$)
           $GlobalStats->{"newtasks.count"}++;
           $HostStats->{"newtasks.count"}++ if ($HostStats);
         }
+        # The Task may have ended much earlier than the Job
         next if (!$Task->Ended or $Task->Ended < $Cutoff);
         $GlobalStats->{"donetasks.count"}++;
         $HostStats->{"donetasks.count"}++ if ($HostStats);
-- 
2.30.2




More information about the wine-devel mailing list