# 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(test.test): """ Benchmark OpenGL object rendering. """ version = 2 preserve_srcdir = True GSC = None def setup(self): os.chdir(self.srcdir) utils.make('clean') utils.make('all') def initialize(self): self.GSC = graphics_utils.GraphicsStateChecker() if utils.is_freon(): # 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 utils.is_freon() and self._services: self._services.restore_services() if self.GSC: keyvals = self.GSC.get_memory_keyvals() for key, val in keyvals.iteritems(): self.output_perf_value(description=key, value=val, units='bytes', higher_is_better=False) self.GSC.finalize() self.write_perf_keyval(keyvals) 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 to locate SanAngeles executable: ' '%s, %s or %s. Test setup error.' % (cmd_gl, cmd_gles, cmd_gles_s)) cmd += ' ' + utils.graphics_platform() cmd = graphics_utils.xcommand(cmd) 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('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('Error on stderr while running SanAngeles: ' + result.stderr + ' (' + report[0] + ')')