Home | History | Annotate | Download | only in graphics_PiglitBVT
      1 # Copyright 2014 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import logging, os
      6 
      7 from autotest_lib.client.bin import test, utils
      8 from autotest_lib.client.common_lib import error
      9 from autotest_lib.client.cros.graphics import graphics_utils
     10 
     11 class graphics_PiglitBVT(test.test):
     12     """
     13     Runs a slice of the passing Piglit test sets.
     14     """
     15     version = 1
     16 
     17     test_scripts = 'test_scripts/'
     18     GSC = None
     19 
     20     def initialize(self):
     21         self.GSC = graphics_utils.GraphicsStateChecker()
     22 
     23     def cleanup(self):
     24         if self.GSC:
     25             keyvals = self.GSC.get_memory_keyvals()
     26             for key, val in keyvals.iteritems():
     27                 self.output_perf_value(description=key, value=val,
     28                                        units='bytes', higher_is_better=False)
     29             self.GSC.finalize()
     30             self.write_perf_keyval(keyvals)
     31 
     32     def run_once(self, test_slice):
     33         # TODO(ihf): Remove this once Piglit works on freon.
     34         if utils.is_freon():
     35             return
     36 
     37         gpu_family = utils.get_gpu_family()
     38         family = gpu_family
     39         logging.info('Detected gpu family %s.', gpu_family)
     40 
     41         # TODO(ihf): Delete this once we have a piglit that runs on ARM.
     42         if gpu_family in ['mali', 'tegra']:
     43             logging.info('Not running any tests, passing by default.')
     44             return
     45 
     46         scripts_dir = os.path.join(self.bindir, self.test_scripts)
     47         family_dir = os.path.join(scripts_dir, family)
     48         # We don't want to introduce too many combinations, so fall back.
     49         if not os.path.isdir(family_dir):
     50             family = 'other'
     51             family_dir = os.path.join(scripts_dir, family)
     52         logging.info('Using scripts for gpu family %s.', family)
     53         scripts_dir = os.path.join(self.bindir, self.test_scripts)
     54         # Mark scripts executable if they are not.
     55         utils.system('chmod +x ' + scripts_dir + '*/graphics_PiglitBVT_*.sh')
     56 
     57         # Kick off test script.
     58         cmd = ('source ' + os.path.join(family_dir, 'graphics_PiglitBVT_%d.sh' %
     59                                                     test_slice))
     60         logging.info('Executing cmd = %s', cmd)
     61         result = utils.run(cmd,
     62                            stdout_tee=utils.TEE_TO_LOGS,
     63                            stderr_tee=utils.TEE_TO_LOGS,
     64                            ignore_status = True)
     65         tests_failed = result.exit_status
     66         if tests_failed:
     67             reason = '%d tests failed on "%s" in slice %d' % (tests_failed,
     68                                                               gpu_family,
     69                                                               test_slice)
     70             raise error.TestError(reason)
     71