blob: c365d38d3ec1ba707c13bd13de4f766de965e6c3 [file] [log] [blame]
# 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, os
import common, cros_ui, cros_ui_test
from autotest_lib.client.bin import utils
from autotest_lib.client.common_lib import error
class GraphicsUITest(cros_ui_test.UITest):
"""Base class for tests requiring graphics acceleration.
How to derive from this class:
- Do not override any methods in this class
"""
version = 1
hangs = {}
_MESSAGES_FILE = '/var/log/messages'
_HANGCHECK = 'drm:i915_hangcheck_elapsed'
def initialize(self, creds=None, is_creating_owner=False,
extra_chrome_flags=[], subtract_extra_chrome_flags=[]):
if utils.get_cpu_arch() != 'arm':
cmd = 'glxinfo | grep "OpenGL renderer string"'
cmd = cros_ui.xcommand(cmd)
output = utils.run(cmd)
result = output.stdout.splitlines()[0]
logging.info('glxinfo: %s', result)
# TODO(ihf): Find exhaustive error conditions (especially ARM).
if 'llvmpipe' in result.lower() or 'soft' in result.lower():
raise error.TestFail('Refusing to run on SW rasterizer: ' + result)
logging.info('Initialize: Checking for old GPU hangs...')
f = open(self._MESSAGES_FILE, 'r')
for line in f:
if self._HANGCHECK in line:
logging.info(line)
self.hangs[line] = line
f.close()
cros_ui_test.UITest.initialize(self, creds, is_creating_owner,
extra_chrome_flags, subtract_extra_chrome_flags)
def cleanup(self):
if utils.get_cpu_arch() != 'arm':
logging.info('Cleanup: Checking for new GPU hangs...')
f = open(self._MESSAGES_FILE, 'r')
for line in f:
if self._HANGCHECK in line:
if not line in self.hangs.keys():
logging.info(line)
self.job.record('WARN', None, 'Saw GPU hang during test.')
f.close()
cmd = 'glxinfo | grep "OpenGL renderer string"'
cmd = cros_ui.xcommand(cmd)
output = utils.run(cmd)
result = output.stdout.splitlines()[0]
logging.info('glxinfo: %s', result)
# TODO(ihf): Find exhaustive error conditions (especially ARM).
if 'llvmpipe' in result.lower() or 'soft' in result.lower():
logging.info('Finished test on SW rasterizer.')
raise error.TestFail('Finished test on SW rasterizer: ' + result)
cros_ui_test.UITest.cleanup(self)