普通文本  |  93行  |  2.99 KB

# Copyright (c) 2014 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 ConfigParser

from autotest_lib.client.cros.image_comparison import pdiff_image_comparer
from autotest_lib.client.cros.image_comparison import publisher
from autotest_lib.client.cros.image_comparison import rgb_image_comparer
from autotest_lib.client.cros.image_comparison import verifier
from autotest_lib.client.cros.video import method_logger


class ImageComparisonFactory(object):
    """
    Responsible for instantiating objects used in image comparison based tests.

    """


    def __init__(self, conf_filepath):
        """
        @param conf_filepath: path, full path to the conf file.

        """
        self.conf_filepath = conf_filepath
        self._load_configuration()


    def _load_configuration(self):
        """
        Loads values from configuration file.

        """
        parser = ConfigParser.SafeConfigParser()
        parser.read(self.conf_filepath)

        self.pixel_thres = parser.getint('rgb', 'rgb_pixel_threshold')
        self.pixel_count_thres = parser.getint('all', 'pixel_count_threshold')
        self.desired_comp_h = parser.getint('all', 'desired_comp_h')
        self.desired_comp_w = parser.getint('all', 'desired_comp_w')


    @method_logger.log
    def make_rgb_comparer(self):
        """
        @returns an RGBImageComparer object initialized with config. values.

        """
        return rgb_image_comparer.RGBImageComparer(self.pixel_thres)


    @method_logger.log
    def make_pdiff_comparer(self):
        """
        @returns a PDiffImageComparer object.

        """
        return pdiff_image_comparer.PdiffImageComparer()


    @method_logger.log
    def make_image_verifier(self, image_comparer, stop_on_first_failure=False):
        """
        @param image_comparer: any object that implements compare(). Currently,
                               it could RGBImageComparer or
                               UploadOnFailComparer.

        @param stop_on_first_failure: bool, True if we should stop the test when
                                      we encounter the first failed comparison.
                                      False if we should continue the test.
        @returns a Verifier object initialized with config. values.

        """
        if self.desired_comp_h == 0 or self.desired_comp_w == 0:
            box = None
        else:
            box = (0, 0, self.desired_comp_w, self.desired_comp_h)

        return verifier.Verifier(image_comparer,
                                 stop_on_first_failure,
                                 threshold=self.pixel_count_thres,
                                 box=box)


    @method_logger.log
    def make_imagediff_publisher(self, results_folder):
        """
        @param results_folder: path, where to publish the results to
        @returns an ImageDIffPublisher object

        """
        return publisher.ImageDiffPublisher(results_folder)