blob: 8fcd8b87214671561af18d8553e6aeb186838c3d [file] [log] [blame]
# Copyright 2016 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 utils
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib.cros import arc
_SDCARD_EXEC = '/sdcard/gralloctest'
_EXEC_DIRECTORY = '/data/executables/'
_ANDROID_EXEC = _EXEC_DIRECTORY + 'gralloctest'
class graphics_Gralloc(arc.ArcTest):
"""gralloc test."""
version = 1
def setup(self):
os.chdir(self.srcdir)
utils.make('clean')
utils.make('all')
def initialize(self):
super(graphics_Gralloc, self).initialize(autotest_ext=True)
def arc_setup(self):
super(graphics_Gralloc, self).arc_setup()
# Get the executable from CrOS and copy it to Android container. Due to
# weird permission issues inside the container, we first have to copy
# the test to /sdcard/, then move it to a /data/ subdirectory we create.
# The permissions on the exectuable have to be modified as well.
arc.adb_root()
cmd = os.path.join(self.srcdir, 'gralloctest')
arc.adb_cmd('-e push %s %s' % (cmd, _SDCARD_EXEC))
arc._android_shell('mkdir -p %s' % (_EXEC_DIRECTORY))
arc._android_shell('mv %s %s' % (_SDCARD_EXEC, _ANDROID_EXEC))
arc._android_shell('chmod o+rwx %s' % (_ANDROID_EXEC))
def arc_teardown(self):
# Remove test contents from Android container.
arc._android_shell('rm -rf %s' % (_EXEC_DIRECTORY))
super(graphics_Gralloc, self).arc_teardown()
def run_once(self):
failures = []
# TODO(ihf): shard this test into multiple control files.
test_names = [
'alloc_varying_sizes', 'alloc_usage', 'api', 'gralloc_order',
'uninitialized_handle', 'freed_handle', 'mapping', 'perform',
'ycbcr', 'async'
]
# Run the tests and capture stdout.
for test_name in test_names:
try:
cmd = '%s %s' % (_ANDROID_EXEC, test_name)
stdout = arc._android_shell(cmd)
except Exception:
logging.error('Exception running %s', cmd)
# Look for the regular expression indicating success.
match = re.search(r'\[ PASSED \]', stdout)
if not match:
failures.append(test_name)
logging.error(stdout)
else:
logging.debug(stdout)
if failures:
gpu_family = utils.get_gpu_family()
raise error.TestFail('Failed: gralloc on %s in %s.' %
(gpu_family, failures))