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