1aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov# Copyright 2014 The Chromium OS Authors. All rights reserved. 2aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov# Use of this source code is governed by a BSD-style license that can be 3aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov# found in the LICENSE file. 4aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov 5aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov"""This is test switching the external display mode.""" 6aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov 7aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanovimport logging, time 8aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov 94eca901f8bb777c61411a883731c91b7c9966120Tom Wai-Hong Tamfrom autotest_lib.client.common_lib import error 103101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tamfrom autotest_lib.client.cros.chameleon import chameleon_port_finder 113101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tamfrom autotest_lib.client.cros.chameleon import chameleon_screen_test 123101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tamfrom autotest_lib.server import test 133101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tamfrom autotest_lib.server.cros.multimedia import remote_facade_factory 14aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov 15aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov 163101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tamclass display_SwitchMode(test.test): 17aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov """External Display switch between extended and mirrored modes. 18aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov 19aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov This test switches the external display mode between extended 20aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov and mirrored modes, and checks resolution and static test image. 21aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov """ 22aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov version = 1 23aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov WAIT_AFTER_SWITCH = 5 24aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov 25aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov def check_external_display(self, test_mirrored): 26aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov """Display status check 27aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov 28aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov @param test_mirrored: is mirrored mode active 29aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov 30aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov """ 31a435cc0a9e2feea72edb87d84dfd6ac944aef39bTom Wai-Hong Tam resolution = self.display_facade.get_external_resolution() 32aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov # Check connector 33c32cd25e14e64c4550685962a461e9d620955129Tom Wai-Hong Tam if self.screen_test.check_external_display_connected( 34c32cd25e14e64c4550685962a461e9d620955129Tom Wai-Hong Tam self.connector_used, self.errors) is None: 35c32cd25e14e64c4550685962a461e9d620955129Tom Wai-Hong Tam # Check test image 36c32cd25e14e64c4550685962a461e9d620955129Tom Wai-Hong Tam self.screen_test.test_screen_with_image( 37c32cd25e14e64c4550685962a461e9d620955129Tom Wai-Hong Tam resolution, test_mirrored, self.errors) 384eca901f8bb777c61411a883731c91b7c9966120Tom Wai-Hong Tam if self.errors: 394eca901f8bb777c61411a883731c91b7c9966120Tom Wai-Hong Tam raise error.TestFail('; '.join(set(self.errors))) 40aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov 41aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov 42aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov def set_mode_and_check(self, test_mirrored): 43aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov """Sets display mode and checks status 44aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov 45aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov @param test_mirrored: is mirrored mode active 46aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov 47aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov """ 48a52a17eea34deb28b64931e0744c278931213c28Tom Wai-Hong Tam logging.info('Set mirrored: %s', test_mirrored) 49a52a17eea34deb28b64931e0744c278931213c28Tom Wai-Hong Tam self.display_facade.set_mirrored(test_mirrored) 50aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov time.sleep(self.WAIT_AFTER_SWITCH) 51aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov self.check_external_display(test_mirrored) 52aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov 53aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov 54aa9476e6db648bb6899be05a409b887b534e2230Kalin Stoyanov def run_once(self, host, repeat): 553101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam factory = remote_facade_factory.RemoteFacadeFactory(host) 563101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam self.display_facade = factory.create_display_facade() 573101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam chameleon_board = host.chameleon 583101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam 593101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam chameleon_board.reset() 603101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam finder = chameleon_port_finder.ChameleonVideoInputFinder( 613101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam chameleon_board, self.display_facade) 623101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam 633101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam self.errors = [] 643101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam for chameleon_port in finder.iterate_all_ports(): 653101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam self.chameleon_port = chameleon_port 663101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam self.screen_test = chameleon_screen_test.ChameleonScreenTest( 673101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam chameleon_port, self.display_facade, self.outputdir) 683101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam 693101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam logging.debug('See the display on Chameleon: port %d (%s)', 703101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam self.chameleon_port.get_connector_id(), 713101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam self.chameleon_port.get_connector_type()) 723101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam # Keep the original connector name, for later comparison. 733101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam self.connector_used = ( 743101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam self.display_facade.get_external_connector_name()) 753101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam 763101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam for i in xrange(repeat): 773101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam logging.info("Iteration %d", (i + 1)) 783101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam self.set_mode_and_check(False) 793101f5391422c58b1be1de503453f9ce45a6fca8Tom Wai-Hong Tam self.set_mode_and_check(True) 80