[email protected] | e04331c | 2014-04-17 17:10:26 | [diff] [blame] | 1 | # Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 | # Use of this source code is governed by a BSD-style license that can be |
| 3 | # found in the LICENSE file. |
phoglund | 1d2d8d71 | 2014-10-20 11:40:50 | [diff] [blame] | 4 | |
nednguyen | b82df29 | 2015-07-01 20:17:15 | [diff] [blame] | 5 | from telemetry import story |
cpaulin | 1531a18 | 2016-04-15 22:22:02 | [diff] [blame] | 6 | from telemetry.page import page as page_module |
[email protected] | e04331c | 2014-04-17 17:10:26 | [diff] [blame] | 7 | |
| 8 | |
mcasas | 3a51d5e | 2015-12-08 01:37:07 | [diff] [blame] | 9 | class WebrtcPage(page_module.Page): |
[email protected] | e04331c | 2014-04-17 17:10:26 | [diff] [blame] | 10 | |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 11 | def __init__(self, url, page_set, name, tags): |
ehmaldonado | 78eee2ed | 2017-03-28 13:16:54 | [diff] [blame] | 12 | assert url.startswith('file://webrtc_cases/') |
mcasas | 3a51d5e | 2015-12-08 01:37:07 | [diff] [blame] | 13 | super(WebrtcPage, self).__init__( |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 14 | url=url, page_set=page_set, name=name, tags=tags) |
phoglund | 1d2d8d71 | 2014-10-20 11:40:50 | [diff] [blame] | 15 | |
[email protected] | e04331c | 2014-04-17 17:10:26 | [diff] [blame] | 16 | |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 17 | class GetUserMedia(WebrtcPage): |
cpaulin | 1531a18 | 2016-04-15 22:22:02 | [diff] [blame] | 18 | """Why: Acquires a high definition (720p) local stream.""" |
[email protected] | e04331c | 2014-04-17 17:10:26 | [diff] [blame] | 19 | |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 20 | def __init__(self, page_set, tags): |
| 21 | super(GetUserMedia, self).__init__( |
ehmaldonado | 78eee2ed | 2017-03-28 13:16:54 | [diff] [blame] | 22 | url='file://webrtc_cases/resolution.html', |
cpaulin | 1531a18 | 2016-04-15 22:22:02 | [diff] [blame] | 23 | name='hd_local_stream_10s', |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 24 | page_set=page_set, tags=tags) |
phoglund | 01f80ea | 2014-09-25 12:28:32 | [diff] [blame] | 25 | |
nednguyen | 2cdf37c | 2014-10-14 22:58:35 | [diff] [blame] | 26 | def RunPageInteractions(self, action_runner): |
phoglund | 01f80ea | 2014-09-25 12:28:32 | [diff] [blame] | 27 | action_runner.ClickElement('button[id="hd"]') |
| 28 | action_runner.Wait(10) |
| 29 | |
[email protected] | e04331c | 2014-04-17 17:10:26 | [diff] [blame] | 30 | |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 31 | class DataChannel(WebrtcPage): |
Edward Lemur | eca336ec | 2017-06-30 20:34:56 | [diff] [blame] | 32 | """Why: Transfer as much data as possible through a data channel in 10s.""" |
phoglund | b88c29d6 | 2015-04-17 09:17:30 | [diff] [blame] | 33 | |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 34 | def __init__(self, page_set, tags): |
| 35 | super(DataChannel, self).__init__( |
ehmaldonado | 78eee2ed | 2017-03-28 13:16:54 | [diff] [blame] | 36 | url='file://webrtc_cases/datatransfer.html', |
Edward Lemur | eca336ec | 2017-06-30 20:34:56 | [diff] [blame] | 37 | name='10s_datachannel_transfer', |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 38 | page_set=page_set, tags=tags) |
phoglund | b88c29d6 | 2015-04-17 09:17:30 | [diff] [blame] | 39 | |
| 40 | def RunPageInteractions(self, action_runner): |
Edward Lemur | eca336ec | 2017-06-30 20:34:56 | [diff] [blame] | 41 | action_runner.ExecuteJavaScript('megsToSend.value = 100;') |
phoglund | b88c29d6 | 2015-04-17 09:17:30 | [diff] [blame] | 42 | action_runner.ClickElement('button[id="sendTheData"]') |
Edward Lemur | eca336ec | 2017-06-30 20:34:56 | [diff] [blame] | 43 | action_runner.Wait(10) |
phoglund | b88c29d6 | 2015-04-17 09:17:30 | [diff] [blame] | 44 | |
| 45 | |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 46 | class AudioCall(WebrtcPage): |
| 47 | """Why: Sets up a WebRTC audio call.""" |
mcasas | 3a51d5e | 2015-12-08 01:37:07 | [diff] [blame] | 48 | |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 49 | def __init__(self, page_set, codec, tags): |
| 50 | super(AudioCall, self).__init__( |
| 51 | url='file://webrtc_cases/audio.html?codec=%s' % codec, |
| 52 | name='audio_call_%s_10s' % codec.lower(), |
| 53 | page_set=page_set, tags=tags) |
| 54 | self.codec = codec |
mcasas | 3a51d5e | 2015-12-08 01:37:07 | [diff] [blame] | 55 | |
| 56 | def RunPageInteractions(self, action_runner): |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 57 | action_runner.ExecuteJavaScript('codecSelector.value="%s";' % self.codec) |
mcasas | 3a51d5e | 2015-12-08 01:37:07 | [diff] [blame] | 58 | action_runner.ClickElement('button[id="callButton"]') |
| 59 | action_runner.Wait(10) |
| 60 | |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 61 | class CanvasCapturePeerConnection(WebrtcPage): |
cpaulin | 1531a18 | 2016-04-15 22:22:02 | [diff] [blame] | 62 | """Why: Sets up a canvas capture stream connection to a peer connection.""" |
| 63 | |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 64 | def __init__(self, page_set, tags): |
| 65 | super(CanvasCapturePeerConnection, self).__init__( |
ehmaldonado | 78eee2ed | 2017-03-28 13:16:54 | [diff] [blame] | 66 | url='file://webrtc_cases/canvas-capture.html', |
cpaulin | 1531a18 | 2016-04-15 22:22:02 | [diff] [blame] | 67 | name='canvas_capture_peer_connection', |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 68 | page_set=page_set, tags=tags) |
cpaulin | 1531a18 | 2016-04-15 22:22:02 | [diff] [blame] | 69 | |
| 70 | def RunPageInteractions(self, action_runner): |
| 71 | with action_runner.CreateInteraction('Action_Canvas_PeerConnection', |
| 72 | repeatable=False): |
ehmaldonado | 78eee2ed | 2017-03-28 13:16:54 | [diff] [blame] | 73 | action_runner.ClickElement('button[id="startButton"]') |
cpaulin | 1531a18 | 2016-04-15 22:22:02 | [diff] [blame] | 74 | action_runner.Wait(10) |
| 75 | |
| 76 | |
charujain | 3d5fa21 | 2017-08-16 17:10:41 | [diff] [blame] | 77 | class VideoCodecConstraints(WebrtcPage): |
| 78 | """Why: Sets up a video codec to a peer connection.""" |
| 79 | |
| 80 | def __init__(self, page_set, video_codec, tags): |
| 81 | super(VideoCodecConstraints, self).__init__( |
| 82 | url='file://webrtc_cases/codec_constraints.html', |
| 83 | name='codec_constraints_%s' % video_codec.lower(), |
| 84 | page_set=page_set, tags=tags) |
| 85 | self.video_codec = video_codec |
| 86 | |
| 87 | def RunPageInteractions(self, action_runner): |
| 88 | with action_runner.CreateInteraction('Action_Codec_Constraints', |
| 89 | repeatable=False): |
| 90 | action_runner.ClickElement('input[id="%s"]' % self.video_codec) |
| 91 | action_runner.ClickElement('button[id="startButton"]') |
| 92 | action_runner.ClickElement('button[id="callButton"]') |
| 93 | action_runner.Wait(20) |
| 94 | action_runner.ClickElement('button[id="hangupButton"]') |
| 95 | |
| 96 | |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 97 | class MultiplePeerConnections(WebrtcPage): |
| 98 | """Why: Sets up several peer connections in the same page.""" |
ehmaldonado | 1d38116 | 2016-11-02 09:31:00 | [diff] [blame] | 99 | |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 100 | def __init__(self, page_set, tags): |
| 101 | super(MultiplePeerConnections, self).__init__( |
ehmaldonado | 78eee2ed | 2017-03-28 13:16:54 | [diff] [blame] | 102 | url='file://webrtc_cases/multiple-peerconnections.html', |
ehmaldonado | 1d38116 | 2016-11-02 09:31:00 | [diff] [blame] | 103 | name='multiple_peerconnections', |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 104 | page_set=page_set, tags=tags) |
ehmaldonado | 1d38116 | 2016-11-02 09:31:00 | [diff] [blame] | 105 | |
| 106 | def RunPageInteractions(self, action_runner): |
| 107 | with action_runner.CreateInteraction('Action_Create_PeerConnection', |
| 108 | repeatable=False): |
ehmaldonado | 09f36709 | 2017-05-26 23:40:17 | [diff] [blame] | 109 | # Set the number of peer connections to create to 10. |
perezju | d42421be | 2017-02-28 09:40:20 | [diff] [blame] | 110 | action_runner.ExecuteJavaScript( |
ehmaldonado | 09f36709 | 2017-05-26 23:40:17 | [diff] [blame] | 111 | 'document.getElementById("num-peerconnections").value=10') |
perezju | d42421be | 2017-02-28 09:40:20 | [diff] [blame] | 112 | action_runner.ExecuteJavaScript( |
ehmaldonado | 967024f | 2016-11-08 17:21:55 | [diff] [blame] | 113 | 'document.getElementById("cpuoveruse-detection").checked=false') |
| 114 | action_runner.ClickElement('button[id="start-test"]') |
ehmaldonado | 09f36709 | 2017-05-26 23:40:17 | [diff] [blame] | 115 | action_runner.Wait(20) |
ehmaldonado | 1d38116 | 2016-11-02 09:31:00 | [diff] [blame] | 116 | |
| 117 | |
Edward Lemur | 702d0a7 | 2017-07-12 19:19:04 | [diff] [blame] | 118 | class PausePlayPeerConnections(WebrtcPage): |
| 119 | """Why: Ensures frequent pause and plays of peer connection streams work.""" |
| 120 | |
| 121 | def __init__(self, page_set, tags): |
| 122 | super(PausePlayPeerConnections, self).__init__( |
| 123 | url='file://webrtc_cases/pause-play.html', |
| 124 | name='pause_play_peerconnections', |
| 125 | page_set=page_set, tags=tags) |
| 126 | |
| 127 | def RunPageInteractions(self, action_runner): |
| 128 | action_runner.ExecuteJavaScript( |
| 129 | 'startTest({test_runtime_s}, {num_peerconnections},' |
| 130 | '{iteration_delay_ms}, "video");'.format( |
| 131 | test_runtime_s=20, num_peerconnections=10, iteration_delay_ms=20)) |
| 132 | action_runner.Wait(20) |
| 133 | |
| 134 | |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 135 | class WebrtcPageSet(story.StorySet): |
[email protected] | e04331c | 2014-04-17 17:10:26 | [diff] [blame] | 136 | def __init__(self): |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 137 | super(WebrtcPageSet, self).__init__( |
ashleymarie | c3c82af | 2017-06-14 02:21:54 | [diff] [blame] | 138 | cloud_storage_bucket=story.PUBLIC_BUCKET) |
[email protected] | e04331c | 2014-04-17 17:10:26 | [diff] [blame] | 139 | |
Edward Lemur | 702d0a7 | 2017-07-12 19:19:04 | [diff] [blame] | 140 | self.AddStory(PausePlayPeerConnections(self, tags=['pauseplay'])) |
rnephew | f9fab93 | 2017-05-25 17:15:09 | [diff] [blame] | 141 | self.AddStory(MultiplePeerConnections(self, tags=['stress'])) |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 142 | self.AddStory(DataChannel(self, tags=['datachannel'])) |
ehmaldonado | 09f36709 | 2017-05-26 23:40:17 | [diff] [blame] | 143 | self.AddStory(GetUserMedia(self, tags=['getusermedia'])) |
Edward Lemur | db22596 | 2017-05-17 19:51:40 | [diff] [blame] | 144 | self.AddStory(CanvasCapturePeerConnection(self, tags=['smoothness'])) |
ehmaldonado | 09f36709 | 2017-05-26 23:40:17 | [diff] [blame] | 145 | self.AddStory(AudioCall(self, 'OPUS', tags=['audio'])) |
| 146 | self.AddStory(AudioCall(self, 'G772', tags=['audio'])) |
| 147 | self.AddStory(AudioCall(self, 'PCMU', tags=['audio'])) |
| 148 | self.AddStory(AudioCall(self, 'ISAC/1600', tags=['audio'])) |
charujain | 3d5fa21 | 2017-08-16 17:10:41 | [diff] [blame] | 149 | self.AddStory(VideoCodecConstraints(self, 'H264', tags=['videoConstraints'])) |
| 150 | self.AddStory(VideoCodecConstraints(self, 'VP8', tags=['videoConstraints'])) |
| 151 | self.AddStory(VideoCodecConstraints(self, 'VP9', tags=['videoConstraints'])) |