Chromium Code Reviews| Index: client/site_tests/audiovideo_PlaybackRecordSemiAuto/audiovideo_PlaybackRecordSemiAuto.py | 
| diff --git a/client/site_tests/audiovideo_PlaybackRecordSemiAuto/audiovideo_PlaybackRecordSemiAuto.py b/client/site_tests/audiovideo_PlaybackRecordSemiAuto/audiovideo_PlaybackRecordSemiAuto.py | 
| index 7bfc4efbe9bc7de2e0922575a87de4db197a366d..e034c98a0a60003e359a2a7d3b79a12c01af4c40 100644 | 
| --- a/client/site_tests/audiovideo_PlaybackRecordSemiAuto/audiovideo_PlaybackRecordSemiAuto.py | 
| +++ b/client/site_tests/audiovideo_PlaybackRecordSemiAuto/audiovideo_PlaybackRecordSemiAuto.py | 
| @@ -89,6 +89,18 @@ _DEVICE_SECTION_ENTRY_TMPL = '''<tr> | 
| </tr> | 
| ''' | 
| +_DEVICE_SECTION_ENTRY_PORT_START_TMPL = '''<tr> | 
| +<td>%(name)s</td> | 
| +<td>%(index)d</td> | 
| +<td>%(channels)d</td> | 
| +<td>%(is_hardware)d</td> | 
| +<td>%(sample_format)s</td> | 
| +<td>%(sample_rate)s</td> | 
| +''' | 
| +_DEVICE_SECTION_ENTRY_PORT_END_TMPL = '''<td>%s</td> | 
| +</tr> | 
| +''' | 
| + | 
| _DEVICE_LIST_TEST = ''' | 
| <tr><td><table> <tr> | 
| <td>Device List Looks Correct?</td> | 
| @@ -211,7 +223,7 @@ _CHANNEL_MAP_RE = re.compile('\tchannel map:\s+(.+)') | 
| _TOP_LEVEL_RE = re.compile('\t\S') | 
| _PORTS_RE = re.compile('\tports:') | 
| _PORT_SPEC_RE = re.compile('\t\t(\S+): .* \(priority \d+\)') | 
| - | 
| +_ACTIVE_PORT_RE = re.compile('\tactive port: <(.+)>') | 
| class ToneThread(threading.Thread): | 
| """Wraps the running of test_tones in a thread.""" | 
| @@ -320,6 +332,9 @@ class audiovideo_PlaybackRecordSemiAuto(site_ui_test.UITest): | 
| def cleanup(self): | 
| + for device in self._playback_devices['info']: | 
| + if device['is_hardware']: | 
| + self.restore_playback_port(device) | 
| self._testServer.stop() | 
| site_ui_test.UITest.cleanup(self) | 
| @@ -446,7 +461,7 @@ class audiovideo_PlaybackRecordSemiAuto(site_ui_test.UITest): | 
| server.wfile.write(_VOLUME_INSTRUCTIONS) | 
| - self.render_single_device_summary(server, device) | 
| + self.render_single_device_summary(server, device, port) | 
| server.wfile.write(_VOLUME_TEST_DETAILS % device) | 
| if device.has_key('channel_map'): | 
| @@ -483,7 +498,7 @@ class audiovideo_PlaybackRecordSemiAuto(site_ui_test.UITest): | 
| server.wfile.write(_PLAYBACK_INSTRUCTIONS) | 
| - self.render_single_device_summary(server, device) | 
| + self.render_single_device_summary(server, device, port) | 
| self.render_channel_test_order(server, device, port) | 
| # End Page. | 
| @@ -517,7 +532,7 @@ class audiovideo_PlaybackRecordSemiAuto(site_ui_test.UITest): | 
| server.wfile.write(_RECORD_INSTRUCTIONS) | 
| - self.render_single_device_summary(server, device) | 
| + self.render_single_device_summary(server, device, port) | 
| self.render_channel_test_order(server, device, port) | 
| # End Page. | 
| @@ -600,11 +615,12 @@ class audiovideo_PlaybackRecordSemiAuto(site_ui_test.UITest): | 
| server.wfile.write(_HTML_FOOTER) | 
| - def render_single_device_summary(self, server, device): | 
| + def render_single_device_summary(self, server, device, port): | 
| """Output a HTML table with information on a single device""" | 
| server.wfile.write(_DEVICE_LIST_START) | 
| server.wfile.write(_DEVICE_SECTION_START) | 
| - server.wfile.write(_DEVICE_SECTION_ENTRY_TMPL % device) | 
| + server.wfile.write(_DEVICE_SECTION_ENTRY_PORT_START_TMPL % device) | 
| + server.wfile.write(_DEVICE_SECTION_ENTRY_PORT_END_TMPL % port) | 
| server.wfile.write(_DEVICE_SECTION_END) | 
| 
 
davejcool
2010/09/04 00:45:44
On the performing test page, it was listing ALL po
 
 | 
| server.wfile.write(_DEVICE_LIST_END) | 
| @@ -767,6 +783,10 @@ class audiovideo_PlaybackRecordSemiAuto(site_ui_test.UITest): | 
| for channel in m.group(1).split(','): | 
| channel_map.append(channel) | 
| current_sink['channel_map'] = channel_map | 
| + | 
| + m = _ACTIVE_PORT_RE.match(line) | 
| + if m is not None: | 
| + current_sink['active_port'] = m.group(1) | 
| def parse_device_info(self, device_info_output): | 
| @@ -850,6 +870,19 @@ class audiovideo_PlaybackRecordSemiAuto(site_ui_test.UITest): | 
| logging.info('-- setting port %s' % port) | 
| + def restore_playback_port(self, device): | 
| + """Restores the sink's active port to what it was before testing. | 
| + | 
| + Args: | 
| + device: A dictionary with the parsed device information. | 
| + """ | 
| + if device['active_port'] is not None: | 
| + self.do_pacmd('set-sink-port %d %s' % | 
| + (device['index'], device['active_port'])) | 
| + logging.info('Restoring device %d to port %s' % | 
| + (device['index'], device['active_port'])) | 
| + | 
| + | 
| def do_signal_test_end(self): | 
| """Play 3 short 1000Hz tones to signal a test case's completion. | 
| @@ -867,8 +900,8 @@ class audiovideo_PlaybackRecordSemiAuto(site_ui_test.UITest): | 
| This sets the default playback device is set to whatever device | 
| is returned first in enumerate_playback_devices(). The playback | 
| - device is set to use its first port, unmuted, and set to the | 
| - test_volume. | 
| + device is set to use the default port (active port before running | 
| + tests), unmuted, and set to the test_volume. | 
| For each channel on the given device and port, a sample is recorded | 
| and played-back at max source volume. Then once again with all | 
| @@ -890,7 +923,9 @@ class audiovideo_PlaybackRecordSemiAuto(site_ui_test.UITest): | 
| playback_device = self._playback_devices['info'][0] | 
| playback_volume = self.get_test_volume(playback_device) | 
| playback_port = None | 
| 
 
davejcool
2010/09/04 00:45:44
Setting playback port the the system default, most
 
 | 
| - if len(playback_device['ports']): | 
| + if playback_device['active_port'] is not None: | 
| + self.restore_playback_port(playback_device) | 
| + elif len(playback_device['ports']): | 
| playback_port = playback_device['ports'][0] | 
| self.set_default_device_and_port('sink', playback_device, | 
| playback_port) |