]> Git Repo - binutils.git/blob - gdb/testsuite/gdb.perf/lib/perftest/reporter.py
Automatic date update in version.in
[binutils.git] / gdb / testsuite / gdb.perf / lib / perftest / reporter.py
1 # Copyright (C) 2013-2022 Free Software Foundation, Inc.
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 3 of the License, or
6 # (at your option) any later version.
7 #
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 # GNU General Public License for more details.
12 #
13 # You should have received a copy of the GNU General Public License
14 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16 # Text reports are written here.
17 # This is the perftest counterpart to gdb.sum.
18 SUM_FILE_NAME = "perftest.sum"
19
20 # Raw data that went into the report is written here.
21 # This is the perftest counterpart to gdb.log.
22 LOG_FILE_NAME = "perftest.log"
23
24
25 class Reporter(object):
26     """Base class of reporter to report test results in a certain format.
27
28     Subclass, which is specific to a report format, should overwrite
29     methods report, start and end.
30     """
31
32     def __init__(self, append):
33         """Constructor of Reporter.
34
35         attribute append is used to determine whether to append or
36         overwrite log file.
37         """
38         self.append = append
39
40     def report(self, *args):
41         raise NotImplementedError("Abstract Method:report.")
42
43     def start(self):
44         """Invoked when reporting is started."""
45         raise NotImplementedError("Abstract Method:start.")
46
47     def end(self):
48         """Invoked when reporting is done.
49
50         It must be overridden to do some cleanups, such as closing file
51         descriptors.
52         """
53         raise NotImplementedError("Abstract Method:end.")
54
55
56 class TextReporter(Reporter):
57     """Report results in a plain text file 'perftest.log'."""
58
59     def __init__(self, append):
60         super(TextReporter, self).__init__(Reporter(append))
61         self.txt_sum = None
62         self.txt_log = None
63
64     def report(self, test_name, measurement_name, data_points):
65         if len(data_points) == 0:
66             self.txt_sum.write(
67                 "%s %s *no data recorded*\n" % (test_name, measurement_name)
68             )
69             return
70         average = sum(data_points) / len(data_points)
71         data_min = min(data_points)
72         data_max = max(data_points)
73         self.txt_sum.write("%s %s %s\n" % (test_name, measurement_name, average))
74         self.txt_log.write(
75             "%s %s %s, min %s, max %s, data %s\n"
76             % (test_name, measurement_name, average, data_min, data_max, data_points)
77         )
78
79     def start(self):
80         mode = "a+" if self.append else "w"
81         self.txt_sum = open(SUM_FILE_NAME, mode)
82         self.txt_log = open(LOG_FILE_NAME, mode)
83
84     def end(self):
85         self.txt_sum.close()
86         self.txt_log.close()
This page took 0.029352 seconds and 4 git commands to generate.