From patchwork Sun Jul 26 16:49:14 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Evans X-Patchwork-Id: 7864 Received: (qmail 18982 invoked by alias); 26 Jul 2015 16:50:14 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 18819 invoked by uid 89); 26 Jul 2015 16:50:12 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL, BAYES_00, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-pa0-f43.google.com Received: from mail-pa0-f43.google.com (HELO mail-pa0-f43.google.com) (209.85.220.43) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Sun, 26 Jul 2015 16:50:09 +0000 Received: by pabkd10 with SMTP id kd10so38559904pab.2 for ; Sun, 26 Jul 2015 09:50:06 -0700 (PDT) X-Received: by 10.66.249.101 with SMTP id yt5mr57577048pac.116.1437929406258; Sun, 26 Jul 2015 09:50:06 -0700 (PDT) Received: from sspiff.org (173-13-178-53-sfba.hfc.comcastbusiness.net. [173.13.178.53]) by smtp.gmail.com with ESMTPSA id ex1sm21498945pdb.57.2015.07.26.09.50.04 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 26 Jul 2015 09:50:05 -0700 (PDT) Received: by sspiff.org (sSMTP sendmail emulation); Sun, 26 Jul 2015 09:49:14 -0700 From: Doug Evans To: gdb-patches@sourceware.org, yao.qi@linaro.org Subject: [PATCH] Add support for multiple data points to perf tests Date: Sun, 26 Jul 2015 09:49:14 -0700 Message-ID: MIME-Version: 1.0 X-IsSubscribed: yes Hi. 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}. Regression tested on amd64-linux. 2015-07-26 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. 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 . +# 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()