78 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
| # Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
 | |
| # Use of this source code is governed by a BSD-style license that can be
 | |
| # found in the LICENSE file.
 | |
| 
 | |
| import logging
 | |
| import os
 | |
| import re
 | |
| 
 | |
| from autotest_lib.client.bin import test, utils
 | |
| from autotest_lib.client.common_lib import error
 | |
| from autotest_lib.client.cros import service_stopper
 | |
| from autotest_lib.client.cros.graphics import graphics_utils
 | |
| 
 | |
| 
 | |
| class graphics_SanAngeles(graphics_utils.GraphicsTest):
 | |
|     """
 | |
|     Benchmark OpenGL object rendering.
 | |
|     """
 | |
|     version = 2
 | |
|     preserve_srcdir = True
 | |
| 
 | |
|     def setup(self):
 | |
|         os.chdir(self.srcdir)
 | |
|         utils.make('clean')
 | |
|         utils.make('all')
 | |
| 
 | |
|     def initialize(self):
 | |
|         super(graphics_SanAngeles, self).initialize()
 | |
|         # If UI is running, we must stop it and restore later.
 | |
|         self._services = service_stopper.ServiceStopper(['ui'])
 | |
|         self._services.stop_services()
 | |
| 
 | |
|     def cleanup(self):
 | |
|         if self._services:
 | |
|             self._services.restore_services()
 | |
|         super(graphics_SanAngeles, self).cleanup()
 | |
| 
 | |
|     @graphics_utils.GraphicsTest.failure_report_decorator('graphics_SanAngeles')
 | |
|     def run_once(self):
 | |
|         cmd_gl = os.path.join(self.srcdir, 'SanOGL')
 | |
|         cmd_gles = os.path.join(self.srcdir, 'SanOGLES')
 | |
|         cmd_gles_s = os.path.join(self.srcdir, 'SanOGLES_S')
 | |
|         if os.path.isfile(cmd_gl):
 | |
|             cmd = cmd_gl
 | |
|         elif os.path.isfile(cmd_gles):
 | |
|             cmd = cmd_gles
 | |
|         elif os.path.isfile(cmd_gles_s):
 | |
|             cmd = cmd_gles_s
 | |
|         else:
 | |
|             raise error.TestFail(
 | |
|                 'Failed: Could not locate SanAngeles executable: '
 | |
|                 '%s, %s or %s.  Test setup error.' %
 | |
|                 (cmd_gl, cmd_gles, cmd_gles_s))
 | |
| 
 | |
|         cmd += ' ' + utils.graphics_platform()
 | |
|         result = utils.run(cmd,
 | |
|                            stderr_is_expected=False,
 | |
|                            stdout_tee=utils.TEE_TO_LOGS,
 | |
|                            stderr_tee=utils.TEE_TO_LOGS,
 | |
|                            ignore_status=True)
 | |
| 
 | |
|         report = re.findall(r'frame_rate = ([0-9.]+)', result.stdout)
 | |
|         if not report:
 | |
|             raise error.TestFail('Failed: Could not find frame_rate in stdout ('
 | |
|                                  + result.stdout + ') ' + result.stderr)
 | |
| 
 | |
|         frame_rate = float(report[0])
 | |
|         logging.info('frame_rate = %.1f', frame_rate)
 | |
|         self.write_perf_keyval({'frames_per_sec_rate_san_angeles': frame_rate})
 | |
|         self.output_perf_value(
 | |
|             description='fps',
 | |
|             value=frame_rate,
 | |
|             units='fps',
 | |
|             higher_is_better=True)
 | |
|         if 'error' in result.stderr.lower():
 | |
|             raise error.TestFail('Failed: stderr while running SanAngeles: ' +
 | |
|                                  result.stderr + ' (' + report[0] + ')')
 |