From af061d3e9c09baa0df2f2d4724baed06cc6158ca Mon Sep 17 00:00:00 2001 From: Doug Evans Date: Mon, 3 Aug 2015 09:04:03 -0700 Subject: [PATCH] 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. --- gdb/testsuite/ChangeLog | 12 +++++++ .../gdb.perf/lib/perftest/reporter.py | 35 +++++++++++++++---- .../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 e11260c6a6..3e1ad7b12e 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,15 @@ +2015-08-03 Doug Evans + + * 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 * 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 1f9358c3ad..646051e225 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 . +# 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 cf39808380..c799d38bb8 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() -- 2.34.1