aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Evans <dje@google.com>2015-08-03 09:04:03 -0700
committerDoug Evans <dje@google.com>2015-08-03 09:04:03 -0700
commitaf061d3e9c09baa0df2f2d4724baed06cc6158ca (patch)
treebfcb89aed991ebc5a4cb265ddb06540c24ec4a57
parent1da03605ced73fc20f40ad649f3038e654d36dee (diff)
downloadgdb-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/ChangeLog12
-rw-r--r--gdb/testsuite/gdb.perf/lib/perftest/reporter.py35
-rw-r--r--gdb/testsuite/gdb.perf/lib/perftest/testresult.py5
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()