From 8a5e4837f8a47e4dc9b5d272b22f02d342c28a3c Mon Sep 17 00:00:00 2001 From: "ager@chromium.org" Date: Wed, 16 Mar 2011 09:45:28 +0000 Subject: [PATCH] Add a V8 benchmark suite run to test.py to catch failures on the buildbot. Review URL: http://codereview.chromium.org/6698029 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7198 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- test/benchmarks/testcfg.py | 101 +++++++++++++++++++++++++++++++++++++++++++++ tools/test.py | 10 ++++- 2 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 test/benchmarks/testcfg.py diff --git a/test/benchmarks/testcfg.py b/test/benchmarks/testcfg.py new file mode 100644 index 0000000..a88bd93 --- /dev/null +++ b/test/benchmarks/testcfg.py @@ -0,0 +1,101 @@ +# Copyright 2011 the V8 project authors. All rights reserved. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +import test +import os +from os.path import join, split + +def IsNumber(string): + try: + float(string) + return True + except ValueError: + return False + + +class BenchmarkTestCase(test.TestCase): + + def __init__(self, path, context, mode): + super(BenchmarkTestCase, self).__init__(context, path, mode) + self.root = '/'.join(self.path) + + def GetLabel(self): + return '%s benchmark %s' % (self.mode, self.GetName()) + + def IsFailureOutput(self, output): + if output.exit_code != 0: + return True + lines = output.stdout.splitlines() + for line in lines: + colon_index = line.find(':') + if colon_index >= 0: + if not IsNumber(line[colon_index+1:].strip()): + return True + return False + + def GetCommand(self): + result = self.context.GetVmCommand(self, self.mode) + result.append(join(self.root, 'run.js')) + return result + + def GetName(self): + return 'V8' + + def BeforeRun(self): + self.dir_before = os.getcwd() + os.chdir(self.root) + + def AfterRun(self, result): + os.chdir(self.dir_before) + + def GetSource(self): + return open(join(self.root, 'run.js')).read() + + def GetCustomFlags(self, mode): + return [] + + +class BenchmarkTestConfiguration(test.TestConfiguration): + + def __init__(self, context, root): + super(BenchmarkTestConfiguration, self).__init__(context, root) + + def ListTests(self, current_path, path, mode): + path = self.root.split(os.path.sep)[:-2] + path.append('benchmarks') + test = BenchmarkTestCase(path, self.context, mode) + return [test] + + def GetBuildRequirements(self): + return ['sample', 'sample=shell'] + + def GetTestStatus(self, sections, defs): + pass + +def GetConfiguration(context, root): + return BenchmarkTestConfiguration(context, root) diff --git a/tools/test.py b/tools/test.py index 939ca0c..66691ff 100755 --- a/tools/test.py +++ b/tools/test.py @@ -371,6 +371,9 @@ class TestCase(object): def AfterRun(self, result): pass + def GetCustomFlags(self, mode): + return None + def Run(self): self.BeforeRun() try: @@ -671,7 +674,10 @@ class Context(object): return [self.GetVm(mode)] + self.GetVmFlags(testcase, mode) def GetVmFlags(self, testcase, mode): - return testcase.variant_flags + FLAGS[mode] + flags = testcase.GetCustomFlags(mode) + if flags is None: + flags = FLAGS[mode] + return testcase.variant_flags + flags def GetTimeout(self, testcase, mode): result = self.timeout * TIMEOUT_SCALEFACTOR[mode] @@ -1295,7 +1301,7 @@ def GetSpecialCommandProcessor(value): return ExpandCommand -BUILT_IN_TESTS = ['mjsunit', 'cctest', 'message'] +BUILT_IN_TESTS = ['benchmarks', 'mjsunit', 'cctest', 'message'] def GetSuites(test_root): -- 2.7.4