diff options
author | Doug Evans <dje@google.com> | 2015-08-03 09:04:03 -0700 |
---|---|---|
committer | Doug Evans <dje@google.com> | 2015-08-03 09:04:03 -0700 |
commit | af061d3e9c09baa0df2f2d4724baed06cc6158ca (patch) | |
tree | bfcb89aed991ebc5a4cb265ddb06540c24ec4a57 | |
parent | 1da03605ced73fc20f40ad649f3038e654d36dee (diff) | |
download | gdb-af061d3e9c09baa0df2f2d4724baed06cc6158ca.zip gdb-af061d3e9c09baa0df2f2d4724baed06cc6158ca.tar.gz gdb-af061d3e9c09baa0df2f2d4724baed06cc6158ca.tar.bz2 |
Move basic perf-test output from perftest.log to perftest.sum.
This patch does two things.
1) Add support for multiple data points.
2) Move the "report" output from perftest.log to perftest.sum.
I want to record the raw data somewhere, and a bit of statistical analysis
(standard deviation left for another day), but I also don't want
it to clutter up the basic report.
This patch takes a cue from gdb.{sum,log} and does the same thing
with perftest.{sum,log}.
Ultimately, we'll probably want to emit raw data to csv files or some
such and then do post-processing passes on that.
gdb/testsuite/ChangeLog:
* lib/perftest/reporter.py (SUM_FILE_NAME): New global.
(LOG_FILE_NAME): New global.
(TextReporter.__init__): Initialize self.txt_sum.
(TextReporter.report): Add support for multiple data-points.
Move report to perftest.sum, put raw data in perftest.log.
(TextReporter.start): Open sum and log files.
(TextReporter.end): Close sum and log files.
* lib/perftest/testresult.py (SingleStatisticTestResult.record): Handle
multiple data-points.
-rw-r--r-- | gdb/testsuite/ChangeLog | 12 | ||||
-rw-r--r-- | gdb/testsuite/gdb.perf/lib/perftest/reporter.py | 35 | ||||
-rw-r--r-- | gdb/testsuite/gdb.perf/lib/perftest/testresult.py | 5 |
3 files changed, 44 insertions, 8 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index e11260c..3e1ad7b 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,15 @@ +2015-08-03 Doug Evans <dje@google.com> + + * lib/perftest/reporter.py (SUM_FILE_NAME): New global. + (LOG_FILE_NAME): New global. + (TextReporter.__init__): Initialize self.txt_sum. + (TextReporter.report): Add support for multiple data-points. + Move report to perftest.sum, put raw data in perftest.log. + (TextReporter.start): Open sum and log files. + (TextReporter.end): Close sum and log files. + * lib/perftest/testresult.py (SingleStatisticTestResult.record): Handle + multiple data-points. + 2015-07-31 Pedro Alves <palves@redhat.com> * gdb.base/attach-pie-misread.exp: Rename $res to $test_spawn_id. diff --git a/gdb/testsuite/gdb.perf/lib/perftest/reporter.py b/gdb/testsuite/gdb.perf/lib/perftest/reporter.py index 1f9358c..646051e 100644 --- a/gdb/testsuite/gdb.perf/lib/perftest/reporter.py +++ b/gdb/testsuite/gdb.perf/lib/perftest/reporter.py @@ -13,6 +13,15 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +# Text reports are written here. +# This is the perftest counterpart to gdb.sum. +SUM_FILE_NAME = "perftest.sum" + +# Raw data that went into the report is written here. +# This is the perftest counterpart to gdb.log. +LOG_FILE_NAME = "perftest.log" + + class Reporter(object): """Base class of reporter to report test results in a certain format. @@ -43,22 +52,34 @@ class Reporter(object): """ raise NotImplementedError("Abstract Method:end.") + class TextReporter(Reporter): """Report results in a plain text file 'perftest.log'.""" def __init__(self, append): super (TextReporter, self).__init__(Reporter(append)) + self.txt_sum = None self.txt_log = None - def report(self, *args): - self.txt_log.write(' '.join(str(arg) for arg in args)) - self.txt_log.write('\n') + def report(self, test_name, measurement_name, data_points): + if len(data_points) == 0: + self.txt_sum.write("%s %s *no data recorded*\n" % ( + test_name, measurement_name)) + return + average = sum(data_points) / len(data_points) + data_min = min(data_points) + data_max = max(data_points) + self.txt_sum.write("%s %s %s\n" % ( + test_name, measurement_name, average)) + self.txt_log.write("%s %s %s, min %s, max %s, data %s\n" % ( + test_name, measurement_name, average, data_min, data_max, + data_points)) def start(self): - if self.append: - self.txt_log = open ("perftest.log", 'a+'); - else: - self.txt_log = open ("perftest.log", 'w'); + mode = "a+" if self.append else "w" + self.txt_sum = open (SUM_FILE_NAME, mode); + self.txt_log = open (LOG_FILE_NAME, mode); def end(self): + self.txt_sum.close () self.txt_log.close () diff --git a/gdb/testsuite/gdb.perf/lib/perftest/testresult.py b/gdb/testsuite/gdb.perf/lib/perftest/testresult.py index cf39808..c799d38 100644 --- a/gdb/testsuite/gdb.perf/lib/perftest/testresult.py +++ b/gdb/testsuite/gdb.perf/lib/perftest/testresult.py @@ -35,7 +35,10 @@ class SingleStatisticTestResult(TestResult): self.results = dict () def record(self, parameter, result): - self.results[parameter] = result + if parameter in self.results: + self.results[parameter].append(result) + else: + self.results[parameter] = [result] def report(self, reporter, name): reporter.start() |