普通文本  |  89行  |  3.19 KB

# 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.graphics import graphics_utils


class graphics_GLAPICheck(graphics_utils.GraphicsTest):
    """
    Verify correctness of OpenGL/GLES.
    """
    version = 1
    error_message = ''

    def __check_extensions(self, info, ext_entries):
        info_split = info.split()
        comply = True
        for extension in ext_entries:
            match = extension in info_split
            if not match:
                self.error_message += ' ' + extension
                comply = False
        return comply

    def __check_gles_extensions(self, info):
        extensions = [
            'GL_OES_EGL_image',
            'EGL_KHR_image'
        ]
        extensions2 = [
            'GL_OES_EGL_image',
            'EGL_KHR_image_base',
            'EGL_KHR_image_pixmap'
        ]
        return (self.__check_extensions(info, extensions) or
                self.__check_extensions(info, extensions2))

    def __check_wflinfo(self):
        # TODO(ihf): Extend this function once gl(es)_APICheck code has
        # been upstreamed to waffle.
        version_major, version_minor = graphics_utils.get_gles_version()
        if version_major:
            version_info = ('GLES_VERSION = %d.%d' %
                            (version_major, version_minor))
            logging.info(version_info)
            # GLES version has to be 2.0 or above.
            if version_major < 2:
                self.error_message = ' %s' % version_info
                return False
            version_major, version_minor = graphics_utils.get_egl_version()
            if version_major:
                version_info = ('EGL_VERSION = %d.%d' %
                                (version_major, version_minor))
                logging.info(version_info)
                # EGL version has to be 1.3 or above.
                if (version_major == 1 and version_minor >= 3 or
                    version_major > 1):
                    logging.warning('Please add missing extension check. '
                                    'Details crbug.com/413079')
                    # return self.__check_gles_extensions(wflinfo + eglinfo)
                    return True
                else:
                    self.error_message = version_info
                    return False
            # No EGL version info found.
            self.error_message = ' missing EGL version info'
            return False
        # No GLES version info found.
        self.error_message = ' missing GLES version info'
        return False

    def initialize(self):
        super(graphics_GLAPICheck, self).initialize()

    def cleanup(self):
        super(graphics_GLAPICheck, self).cleanup()

    @graphics_utils.GraphicsTest.failure_report_decorator('graphics_GLAPICheck')
    def run_once(self):
        if not self.__check_wflinfo():
            raise error.TestFail('Failed: GLES API insufficient:' +
                                 self.error_message)
        return