def run_once(self):
     if graphics_utils.get_display_resolution() is None:
         logging.warning('Skipping test because there is no screen')
         return
     self.add_failures('graphics_Sanity')
     self.wake_screen_with_keyboard()
     self.test_something_on_screen()
     self.test_generated_screenshots_match_expectation()
     self.remove_failures('graphics_Sanity')
Exemplo n.º 2
0
    def run_once(self):
        """
        Draws a texture with a soft ellipse twice and captures each image.
        Compares the output fuzzily against reference images.
        """
        if graphics_utils.get_display_resolution() is None:
            logging.warning('Skipping test because there is no screen')
            return
        self.add_failures('graphics_Sanity')

        dep = 'glbench'
        dep_dir = os.path.join(self.autodir, 'deps', dep)
        self.job.install_pkg(dep, 'dep', dep_dir)

        screenshot1_reference = os.path.join(self.bindir,
                                             "screenshot1_reference.png")
        screenshot1_generated = os.path.join(self.resultsdir,
                                             "screenshot1_generated.png")
        screenshot1_resized = os.path.join(
            self.resultsdir, "screenshot1_generated_resized.png")
        screenshot2_reference = os.path.join(self.bindir,
                                             "screenshot2_reference.png")
        screenshot2_generated = os.path.join(self.resultsdir,
                                             "screenshot2_generated.png")
        screenshot2_resized = os.path.join(
            self.resultsdir, "screenshot2_generated_resized.png")

        exefile = os.path.join(self.autodir, 'deps/glbench/windowmanagertest')

        # Delay before screenshot: 1 second has caused failures.
        options = ' --screenshot1_sec 2'
        options += ' --screenshot2_sec 1'
        options += ' --cooldown_sec 1'
        # perceptualdiff can handle only 8 bit images.
        screenshot_cmd = ' "/usr/local/autotest/bin/screenshot.py %s"'
        options += ' --screenshot1_cmd' + screenshot_cmd % screenshot1_generated
        options += ' --screenshot2_cmd' + screenshot_cmd % screenshot2_generated

        cmd = exefile + ' ' + options
        utils.run(cmd,
                  stdout_tee=utils.TEE_TO_LOGS,
                  stderr_tee=utils.TEE_TO_LOGS)

        convert_cmd = ("convert -channel RGB -colorspace RGB -depth 8"
                       " -resize '100x100!' %s %s")
        utils.system(convert_cmd %
                     (screenshot1_generated, screenshot1_resized))
        utils.system(convert_cmd %
                     (screenshot2_generated, screenshot2_resized))
        os.remove(screenshot1_generated)
        os.remove(screenshot2_generated)

        diff_cmd = 'perceptualdiff -verbose %s %s'
        utils.system(diff_cmd % (screenshot1_reference, screenshot1_resized))
        utils.system(diff_cmd % (screenshot2_reference, screenshot2_resized))

        self.remove_failures('graphics_Sanity')
Exemplo n.º 3
0
    def capture_screenshot(self, filepath):
        """
        Sets the portion of the screenshot to crop.
        Calls into take_screenshot_crop to take the screenshot and crop it.

        self.logged_in controls which logged-in state we are testing when we
        take the screenshot.

        if None, we don't login at all
        if True, we login as the test user
        if False, we login as guest

        For the logged in user we mask the profile photo so that the randomly
        generated profile pictures don't break the tests.

        @param filepath: path, fullpath to where the screenshot will be saved to

        """

        w, h = graphics_utils.get_display_resolution()
        box = (w - self.width, h - self.height, w, h)

        if self.logged_in is None:
            graphics_utils.take_screenshot_crop(filepath, box)
            return

        with chrome.Chrome(logged_in=self.logged_in):
            # set up a pixel comparer
            image_name = os.path.splitext(filepath)[0]
            temp_file_path = '%s_temp.png' % image_name
            comparer = rgb_image_comparer.RGBImageComparer(
                rgb_pixel_threshold=0)

            def has_animation_stopped():
                """
                Takes two screenshots. Checks if they are identical to
                indicate the shelf has stop animating.

                """

                graphics_utils.take_screenshot_crop(filepath, box)
                graphics_utils.take_screenshot_crop(temp_file_path, box)
                diff = comparer.compare(filepath, temp_file_path)
                logging.debug("Pixel diff count: %d", diff.diff_pixel_count)
                return diff.diff_pixel_count == 0

            # crbug.com/476791 error when take screenshots too soon after login
            time.sleep(30)
            utils.poll_for_condition(has_animation_stopped,
                                     timeout=30,
                                     desc='end of system tray animation')

            if self.logged_in and self.mask_points is not None:
                self.draw_image_mask(filepath, self.mask_points)
    def run_once(self):
        """
        Draws a texture with a soft ellipse twice and captures each image.
        Compares the output fuzzily against reference images.
        """
        if utils.is_freon(
        ) and graphics_utils.get_display_resolution() is None:
            logging.warning('Skipping test because there is no screen')
            return

        dep = 'glbench'
        dep_dir = os.path.join(self.autodir, 'deps', dep)
        self.job.install_pkg(dep, 'dep', dep_dir)

        screenshot1_reference = os.path.join(self.bindir,
                                             "screenshot1_reference.png")
        screenshot1_generated = os.path.join(self.resultsdir,
                                             "screenshot1_generated.png")
        screenshot1_resized = os.path.join(
            self.resultsdir, "screenshot1_generated_resized.png")
        screenshot2_reference = os.path.join(self.bindir,
                                             "screenshot2_reference.png")
        screenshot2_generated = os.path.join(self.resultsdir,
                                             "screenshot2_generated.png")
        screenshot2_resized = os.path.join(
            self.resultsdir, "screenshot2_generated_resized.png")

        exefile = os.path.join(self.autodir, 'deps/glbench/windowmanagertest')

        # Delay before screenshot: 1 second has caused failures.
        options = ' --screenshot1_sec 2'
        options += ' --screenshot2_sec 1'
        options += ' --cooldown_sec 1'
        # perceptualdiff can handle only 8 bit images.
        if not utils.is_freon():
            screenshot_cmd = ' "DISPLAY=:1 import -window root %s"'
        else:
            screenshot_cmd = ' "/usr/local/autotest/bin/screenshot.py %s"'
        options += ' --screenshot1_cmd' + screenshot_cmd % screenshot1_generated
        options += ' --screenshot2_cmd' + screenshot_cmd % screenshot2_generated

        cmd = exefile + ' ' + options
        if not utils.is_freon():
            cmd = 'X :1 vt1 & sleep 1; chvt 1 && DISPLAY=:1 ' + cmd
        try:
            utils.run(cmd,
                      stdout_tee=utils.TEE_TO_LOGS,
                      stderr_tee=utils.TEE_TO_LOGS)
        finally:
            if not utils.is_freon():
                # Just sending SIGTERM to X is not enough; we must wait for it to
                # really die before we start a new X server (ie start ui).
                utils.ensure_processes_are_dead_by_name('^X$')

        convert_cmd = ("convert -channel RGB -colorspace RGB -depth 8"
                       " -resize '100x100!' %s %s")
        utils.system(convert_cmd %
                     (screenshot1_generated, screenshot1_resized))
        utils.system(convert_cmd %
                     (screenshot2_generated, screenshot2_resized))
        os.remove(screenshot1_generated)
        os.remove(screenshot2_generated)

        diff_cmd = 'perceptualdiff -verbose %s %s'
        utils.system(diff_cmd % (screenshot1_reference, screenshot1_resized))
        utils.system(diff_cmd % (screenshot2_reference, screenshot2_resized))