68 lines
2.7 KiB
Python
68 lines
2.7 KiB
Python
# Copyright 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.
|
|
|
|
"""Classes to do comparison for mirrored mode."""
|
|
|
|
import logging
|
|
|
|
from autotest_lib.client.cros.chameleon import screen_capture
|
|
from autotest_lib.client.cros.chameleon import screen_comparison
|
|
|
|
|
|
class MirrorComparer(object):
|
|
"""A class to compare the resolutions and screens for mirrored mode.
|
|
|
|
Calling its member method compare() does the comparison.
|
|
|
|
"""
|
|
|
|
def __init__(self, display_facade, output_dir):
|
|
"""Initializes the MirrorComparer objects.
|
|
|
|
@param display_facade: A display facade object
|
|
@param output_dir: The directory for output images.
|
|
"""
|
|
self._display_facade = display_facade
|
|
int_capturer = screen_capture.CrosInternalScreenCapturer(display_facade)
|
|
ext_capturer = screen_capture.CrosExternalScreenCapturer(display_facade)
|
|
# The frame buffers of screens should be perfectly matched.
|
|
# Skip if the image sizes are different.
|
|
self._screen_comparer = screen_comparison.ScreenComparer(
|
|
int_capturer, ext_capturer, output_dir, 0, 0, True)
|
|
|
|
|
|
def compare(self):
|
|
"""Compares the resolutions and screens on all CrOS screens.
|
|
|
|
This method first checks if CrOS is under mirrored mode or not. Skip
|
|
the following tests if not in mirrored mode.
|
|
|
|
Then it checks all the resolutions identical and also all the screens
|
|
identical.
|
|
|
|
@return: None if the check passes; otherwise, a string of error message.
|
|
"""
|
|
if not self._display_facade.is_mirrored_enabled():
|
|
message = 'Do mirror comparison but not in mirrored mode.'
|
|
logging.error(message)
|
|
return message
|
|
|
|
logging.info('Checking the resolutions of all screens identical...')
|
|
# TODO(waihong): Support the case without internal screen.
|
|
internal_resolution = self._display_facade.get_internal_resolution()
|
|
# TODO(waihong): Support multiple external screens.
|
|
external_resolution = self._display_facade.get_external_resolution()
|
|
|
|
if internal_resolution != external_resolution:
|
|
logging.info('Sofware-based mirroring, skip the screen comparison. '
|
|
'Resolutions: Internal %r; External %r',
|
|
internal_resolution, external_resolution)
|
|
return None
|
|
else:
|
|
logging.info('Resolutions across all CrOS screens match: %dx%d',
|
|
*internal_resolution)
|
|
|
|
logging.info('Checking all the screens mirrored...')
|
|
return self._screen_comparer.compare()
|