144f0eee88ff00398ff7f715fab053374d808c90dSteve Block# Copyright 2011 the V8 project authors. All rights reserved. 244f0eee88ff00398ff7f715fab053374d808c90dSteve Block# Redistribution and use in source and binary forms, with or without 344f0eee88ff00398ff7f715fab053374d808c90dSteve Block# modification, are permitted provided that the following conditions are 444f0eee88ff00398ff7f715fab053374d808c90dSteve Block# met: 544f0eee88ff00398ff7f715fab053374d808c90dSteve Block# 644f0eee88ff00398ff7f715fab053374d808c90dSteve Block# * Redistributions of source code must retain the above copyright 744f0eee88ff00398ff7f715fab053374d808c90dSteve Block# notice, this list of conditions and the following disclaimer. 844f0eee88ff00398ff7f715fab053374d808c90dSteve Block# * Redistributions in binary form must reproduce the above 944f0eee88ff00398ff7f715fab053374d808c90dSteve Block# copyright notice, this list of conditions and the following 1044f0eee88ff00398ff7f715fab053374d808c90dSteve Block# disclaimer in the documentation and/or other materials provided 1144f0eee88ff00398ff7f715fab053374d808c90dSteve Block# with the distribution. 1244f0eee88ff00398ff7f715fab053374d808c90dSteve Block# * Neither the name of Google Inc. nor the names of its 1344f0eee88ff00398ff7f715fab053374d808c90dSteve Block# contributors may be used to endorse or promote products derived 1444f0eee88ff00398ff7f715fab053374d808c90dSteve Block# from this software without specific prior written permission. 1544f0eee88ff00398ff7f715fab053374d808c90dSteve Block# 1644f0eee88ff00398ff7f715fab053374d808c90dSteve Block# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1744f0eee88ff00398ff7f715fab053374d808c90dSteve Block# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1844f0eee88ff00398ff7f715fab053374d808c90dSteve Block# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1944f0eee88ff00398ff7f715fab053374d808c90dSteve Block# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2044f0eee88ff00398ff7f715fab053374d808c90dSteve Block# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2144f0eee88ff00398ff7f715fab053374d808c90dSteve Block# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2244f0eee88ff00398ff7f715fab053374d808c90dSteve Block# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2344f0eee88ff00398ff7f715fab053374d808c90dSteve Block# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2444f0eee88ff00398ff7f715fab053374d808c90dSteve Block# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2544f0eee88ff00398ff7f715fab053374d808c90dSteve Block# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2644f0eee88ff00398ff7f715fab053374d808c90dSteve Block# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 2844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 2944f0eee88ff00398ff7f715fab053374d808c90dSteve Blockimport test 3044f0eee88ff00398ff7f715fab053374d808c90dSteve Blockimport os 3144f0eee88ff00398ff7f715fab053374d808c90dSteve Blockfrom os.path import join, split 3244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 3344f0eee88ff00398ff7f715fab053374d808c90dSteve Blockdef IsNumber(string): 3444f0eee88ff00398ff7f715fab053374d808c90dSteve Block try: 3544f0eee88ff00398ff7f715fab053374d808c90dSteve Block float(string) 3644f0eee88ff00398ff7f715fab053374d808c90dSteve Block return True 3744f0eee88ff00398ff7f715fab053374d808c90dSteve Block except ValueError: 3844f0eee88ff00398ff7f715fab053374d808c90dSteve Block return False 3944f0eee88ff00398ff7f715fab053374d808c90dSteve Block 4044f0eee88ff00398ff7f715fab053374d808c90dSteve Block 4144f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass BenchmarkTestCase(test.TestCase): 4244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 4344f0eee88ff00398ff7f715fab053374d808c90dSteve Block def __init__(self, path, context, mode): 4444f0eee88ff00398ff7f715fab053374d808c90dSteve Block super(BenchmarkTestCase, self).__init__(context, split(path), mode) 4544f0eee88ff00398ff7f715fab053374d808c90dSteve Block self.root = path 4644f0eee88ff00398ff7f715fab053374d808c90dSteve Block 4744f0eee88ff00398ff7f715fab053374d808c90dSteve Block def GetLabel(self): 4844f0eee88ff00398ff7f715fab053374d808c90dSteve Block return '%s benchmark %s' % (self.mode, self.GetName()) 4944f0eee88ff00398ff7f715fab053374d808c90dSteve Block 5044f0eee88ff00398ff7f715fab053374d808c90dSteve Block def IsFailureOutput(self, output): 5144f0eee88ff00398ff7f715fab053374d808c90dSteve Block if output.exit_code != 0: 5244f0eee88ff00398ff7f715fab053374d808c90dSteve Block return True 5344f0eee88ff00398ff7f715fab053374d808c90dSteve Block lines = output.stdout.splitlines() 5444f0eee88ff00398ff7f715fab053374d808c90dSteve Block for line in lines: 5544f0eee88ff00398ff7f715fab053374d808c90dSteve Block colon_index = line.find(':') 5644f0eee88ff00398ff7f715fab053374d808c90dSteve Block if colon_index >= 0: 5744f0eee88ff00398ff7f715fab053374d808c90dSteve Block if not IsNumber(line[colon_index+1:].strip()): 5844f0eee88ff00398ff7f715fab053374d808c90dSteve Block return True 5944f0eee88ff00398ff7f715fab053374d808c90dSteve Block return False 6044f0eee88ff00398ff7f715fab053374d808c90dSteve Block 6144f0eee88ff00398ff7f715fab053374d808c90dSteve Block def GetCommand(self): 6244f0eee88ff00398ff7f715fab053374d808c90dSteve Block result = self.context.GetVmCommand(self, self.mode) 6344f0eee88ff00398ff7f715fab053374d808c90dSteve Block result.append(join(self.root, 'run.js')) 6444f0eee88ff00398ff7f715fab053374d808c90dSteve Block return result 6544f0eee88ff00398ff7f715fab053374d808c90dSteve Block 6644f0eee88ff00398ff7f715fab053374d808c90dSteve Block def GetName(self): 6744f0eee88ff00398ff7f715fab053374d808c90dSteve Block return 'V8' 6844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 6944f0eee88ff00398ff7f715fab053374d808c90dSteve Block def BeforeRun(self): 7044f0eee88ff00398ff7f715fab053374d808c90dSteve Block os.chdir(self.root) 7144f0eee88ff00398ff7f715fab053374d808c90dSteve Block 7244f0eee88ff00398ff7f715fab053374d808c90dSteve Block def AfterRun(self, result): 7344f0eee88ff00398ff7f715fab053374d808c90dSteve Block os.chdir(self.context.buildspace) 7444f0eee88ff00398ff7f715fab053374d808c90dSteve Block 7544f0eee88ff00398ff7f715fab053374d808c90dSteve Block def GetSource(self): 7644f0eee88ff00398ff7f715fab053374d808c90dSteve Block return open(join(self.root, 'run.js')).read() 7744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 7844f0eee88ff00398ff7f715fab053374d808c90dSteve Block def GetCustomFlags(self, mode): 7944f0eee88ff00398ff7f715fab053374d808c90dSteve Block return [] 8044f0eee88ff00398ff7f715fab053374d808c90dSteve Block 8144f0eee88ff00398ff7f715fab053374d808c90dSteve Block 8244f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass BenchmarkTestConfiguration(test.TestConfiguration): 8344f0eee88ff00398ff7f715fab053374d808c90dSteve Block 8444f0eee88ff00398ff7f715fab053374d808c90dSteve Block def __init__(self, context, root): 8544f0eee88ff00398ff7f715fab053374d808c90dSteve Block super(BenchmarkTestConfiguration, self).__init__(context, root) 8644f0eee88ff00398ff7f715fab053374d808c90dSteve Block 8744f0eee88ff00398ff7f715fab053374d808c90dSteve Block def ListTests(self, current_path, path, mode, variant_flags): 8844f0eee88ff00398ff7f715fab053374d808c90dSteve Block path = self.context.workspace 8944f0eee88ff00398ff7f715fab053374d808c90dSteve Block path = join(path, 'benchmarks') 9044f0eee88ff00398ff7f715fab053374d808c90dSteve Block test = BenchmarkTestCase(path, self.context, mode) 9144f0eee88ff00398ff7f715fab053374d808c90dSteve Block return [test] 9244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 9344f0eee88ff00398ff7f715fab053374d808c90dSteve Block def GetBuildRequirements(self): 9469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch return ['d8'] 9544f0eee88ff00398ff7f715fab053374d808c90dSteve Block 9644f0eee88ff00398ff7f715fab053374d808c90dSteve Block def GetTestStatus(self, sections, defs): 9744f0eee88ff00398ff7f715fab053374d808c90dSteve Block pass 9844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 9944f0eee88ff00398ff7f715fab053374d808c90dSteve Blockdef GetConfiguration(context, root): 10044f0eee88ff00398ff7f715fab053374d808c90dSteve Block return BenchmarkTestConfiguration(context, root) 101