Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(366)

Side by Side Diff: content/test/data/media/getusermedia.html

Issue 640253002: Speeding up TwoGetUserMediaAndStop WebRTC test (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | content/test/data/media/webrtc_test_utilities.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 <html> 1 <html>
2 <head> 2 <head>
3 <script type="text/javascript" src="webrtc_test_utilities.js"></script> 3 <script type="text/javascript" src="webrtc_test_utilities.js"></script>
4 <script type="text/javascript"> 4 <script type="text/javascript">
5 $ = function(id) { 5 $ = function(id) {
6 return document.getElementById(id); 6 return document.getElementById(id);
7 }; 7 };
8 8
9 setAllEventsOccuredHandler(function() { 9 setAllEventsOccuredHandler(function() {
10 reportTestSuccess(); 10 reportTestSuccess();
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 // This test that a MediaStream can be cloned and that the clone can 156 // This test that a MediaStream can be cloned and that the clone can
157 // be rendered. 157 // be rendered.
158 function getUserMediaAndClone() { 158 function getUserMediaAndClone() {
159 console.log('Calling getUserMediaAndClone.'); 159 console.log('Calling getUserMediaAndClone.');
160 navigator.webkitGetUserMedia({video: true, audio: true}, 160 navigator.webkitGetUserMedia({video: true, audio: true},
161 createAndRenderClone, failedCallback); 161 createAndRenderClone, failedCallback);
162 } 162 }
163 163
164 // Creates two MediaStream and renders them locally. When the video of both 164 // Creates two MediaStream and renders them locally. When the video of both
165 // streams are detected to be rolling, we stop the local video tracks one at 165 // streams are detected to be rolling, we stop the local video tracks one at
166 // the time. 166 // the time. In particular, we verify that stopping one track does not stop
167 // the other.
167 function twoGetUserMediaAndStop(constraints) { 168 function twoGetUserMediaAndStop(constraints) {
168 // TODO(phoglund): make gUM requests in parallel; this test is too slow
169 // and flakes on slow bots (http://crbug.com/417756). The current cycle of
170 // detect - gum - detect - gum - stop - detect - stop - detect contains too
171 // many detection phases. On bots with GPU emulation this looks to be really
172 // slow, so I was thinking we could at least get video up for both streams
173 // simultaneously and thereby run the first two detects in parallel.
174 var stream1 = null; 169 var stream1 = null;
phoglund_chromium 2014/10/09 12:20:07 Unless of course you see a problem with doing the
175 var stream2 = null; 170 var stream2 = null;
176 navigator.webkitGetUserMedia( 171 navigator.webkitGetUserMedia(
177 constraints, 172 constraints,
178 function(stream) { 173 function(stream) {
179 stream1 = stream; 174 stream1 = stream;
180 detectVideoInLocalView1(stream, requestSecondGetUserMedia); 175 detectVideoInLocalView1(stream, maybeStopBothVideoTracksAndVerify);
181 }, 176 },
182 failedCallback); 177 failedCallback);
183 var requestSecondGetUserMedia = function() { 178 navigator.webkitGetUserMedia(
184 navigator.webkitGetUserMedia( 179 constraints,
185 constraints, 180 function(stream) {
186 function(stream) { 181 stream2 = stream;
187 stream2 = stream; 182 attachMediaStream(stream, 'local-view-2');
188 attachMediaStream(stream, 'local-view-2'); 183 detectVideoPlaying('local-view-2', maybeStopBothVideoTracksAndVerify);
189 detectVideoPlaying('local-view-2', stopBothVideoTracksAndVerify); 184 },
190 }, 185 failedCallback);
191 failedCallback);
192 };
193 186
194 var stopBothVideoTracksAndVerify = function() { 187 var maybeStopBothVideoTracksAndVerify = function() {
195 // Stop track 2, ensure that stops track 2 but not track 1, then stop 188 if (stream1 == null || stream2 == null)
196 // track 1. 189 return;
190
191 // Stop track 2, ensure track 2 stops but not track 1, then stop track 1.
197 stream2.getVideoTracks()[0].stop(); 192 stream2.getVideoTracks()[0].stop();
198 waitForVideoToStop('local-view-1'); 193 waitForVideoToStop('local-view-1');
199 waitForVideoToStop('local-view-2'); 194 waitForVideoToStop('local-view-2');
200 detectVideoInLocalView1(stream1, function() { 195 detectVideoInLocalView1(stream1, function() {
201 stream1.getVideoTracks()[0].stop(); 196 stream1.getVideoTracks()[0].stop();
202 }); 197 });
203 }; 198 };
204 } 199 }
205 200
206 function twoGetUserMedia(constraints1, 201 // Makes to getUserMedia calls in parallel and detects the aspect ratio for
207 constraints2) { 202 // both. The two aspect ratios are returned to the test separated by a dash,
208 // TODO(phoglund): see TODO on twoGetUserMediaAndStop. 203 // like for instance w=640:h=480-w=640:h=480.
209 var result=""; 204 function twoGetUserMedia(constraints1, constraints2) {
205 var aspectRatio1 = null;
206 var aspectRatio2 = null;
210 navigator.webkitGetUserMedia( 207 navigator.webkitGetUserMedia(
211 constraints1, 208 constraints1,
212 function(stream) { 209 function(stream) {
213 displayDetectAndAnalyzeVideoInElement( 210 displayDetectAndAnalyzeVideoInElement(
214 stream, 211 stream,
215 function(aspectRatio) { 212 function(aspectRatio) {
216 result = aspectRatio; 213 aspectRatio1 = aspectRatio;
217 requestSecondGetUserMedia(); 214 maybeFinishTest();
218 }, 215 },
219 'local-view-1'); 216 'local-view-1');
220 }, 217 },
221 failedCallback); 218 failedCallback);
222 var requestSecondGetUserMedia = function() { 219 navigator.webkitGetUserMedia(
223 navigator.webkitGetUserMedia( 220 constraints2,
224 constraints2, 221 function(stream) {
225 function(stream) { 222 displayDetectAndAnalyzeVideoInElement(
226 displayDetectAndAnalyzeVideoInElement( 223 stream,
227 stream, 224 function(aspectRatio) {
228 function(aspectRatio) { 225 aspectRatio2 = aspectRatio;
229 result = result + '-' + aspectRatio; 226 maybeFinishTest();
230 sendValueToTest(result); 227 },
231 }, 228 'local-view-2');
232 'local-view-2'); 229 },
233 }, 230 failedCallback);
234 failedCallback); 231
232 var maybeFinishTest = function() {
233 if (aspectRatio1 == null || aspectRatio2 == null)
234 return;
235 sendValueToTest(aspectRatio1 + '-' + aspectRatio2);
235 } 236 }
236 } 237 }
237 238
238 // Calls GetUserMedia twice and verify that the frame rate is as expected for 239 // Calls GetUserMedia twice and verify that the frame rate is as expected for
239 // both streams. 240 // both streams.
240 function twoGetUserMediaAndVerifyFrameRate(constraints1, 241 function twoGetUserMediaAndVerifyFrameRate(constraints1,
241 constraints2, 242 constraints2,
242 expected_frame_rate1, 243 expected_frame_rate1,
243 expected_frame_rate2) { 244 expected_frame_rate2) {
244 // TODO(phoglund): see TODO on twoGetUserMediaAndStop.
245 addExpectedEvent(); 245 addExpectedEvent();
246 addExpectedEvent(); 246 addExpectedEvent();
247 var validateFrameRateCallback = function (success) { 247 var validateFrameRateCallback = function (result) {
248 if (!success) 248 if (result != 'OK')
249 failTest("Failed to validate frameRate."); 249 failTest(result);
phoglund_chromium 2014/10/09 12:20:07 I've been annoyed by this rather bare error messag
250 eventOccured(); 250 eventOccured();
251 }; 251 };
252 252
253 navigator.webkitGetUserMedia( 253 navigator.webkitGetUserMedia(
254 constraints1, 254 constraints1,
255 function(stream) { 255 function(stream) {
256 requestSecondGetUserMedia();
257 attachMediaStream(stream, 'local-view-1'); 256 attachMediaStream(stream, 'local-view-1');
258 detectVideoPlaying('local-view-1', 257 detectVideoPlaying('local-view-1',
259 function() { 258 function() {
260 validateFrameRate('local-view-1', expected_frame_rate1, 259 validateFrameRate('local-view-1', expected_frame_rate1,
261 validateFrameRateCallback); 260 validateFrameRateCallback);
262 }); 261 });
263 }, 262 },
264 failedCallback); 263 failedCallback);
265 var requestSecondGetUserMedia = function() { 264 navigator.webkitGetUserMedia(
266 navigator.webkitGetUserMedia( 265 constraints2,
267 constraints2, 266 function(stream) {
268 function(stream) { 267 attachMediaStream(stream, 'local-view-2');
269 attachMediaStream(stream, 'local-view-2'); 268 detectVideoPlaying('local-view-2',
270 detectVideoPlaying('local-view-2', 269 function() {
271 function() { 270 validateFrameRate('local-view-2', expected_frame_rate2,
272 validateFrameRate('local-view-2', expected_frame_rate2, 271 validateFrameRateCallback);
273 validateFrameRateCallback); 272 });
274 }); 273 },
275 }, 274 failedCallback);
276 failedCallback);
277 }
278 } 275 }
279 276
280 function failedCallback(error) { 277 function failedCallback(error) {
281 failTest('GetUserMedia call failed with code ' + error.code); 278 failTest('GetUserMedia call failed with code ' + error.code);
282 } 279 }
283 280
284 function attachMediaStream(stream, videoElement) { 281 function attachMediaStream(stream, videoElement) {
285 var localStreamUrl = URL.createObjectURL(stream); 282 var localStreamUrl = URL.createObjectURL(stream);
286 $(videoElement).src = localStreamUrl; 283 $(videoElement).src = localStreamUrl;
287 } 284 }
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 </tr> 461 </tr>
465 <tr> 462 <tr>
466 <td><video id="local-view-2" width="320" height="240" autoplay 463 <td><video id="local-view-2" width="320" height="240" autoplay
467 style="display:none"></video></td> 464 style="display:none"></video></td>
468 <td><canvas id="local-view-2-canvas" width="320" height="240" 465 <td><canvas id="local-view-2-canvas" width="320" height="240"
469 style="display:none"></canvas></td> 466 style="display:none"></canvas></td>
470 </tr> 467 </tr>
471 </table> 468 </table>
472 </body> 469 </body>
473 </html> 470 </html>
OLDNEW
« no previous file with comments | « no previous file | content/test/data/media/webrtc_test_utilities.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698