Index: tools/perf/page_sets/webrtc_cases/canvas-capture.js |
diff --git a/tools/perf/page_sets/webrtc_cases/canvas-capture.js b/tools/perf/page_sets/webrtc_cases/canvas-capture.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ce7e11d3efe6f9758600eb9212be536e35549397 |
--- /dev/null |
+++ b/tools/perf/page_sets/webrtc_cases/canvas-capture.js |
@@ -0,0 +1,96 @@ |
+/* |
+ * Copyright 2017 The Chromium Authors. All rights reserved. |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+'use strict'; |
+ |
+const DEFAULT_FRAME_RATE = 30; |
+ |
+var canvas = document.getElementById('canvas'); |
+var context = canvas.getContext('2d'); |
+ |
+var remoteVideo = document.getElementById('remoteVideo'); |
+var startButton = document.getElementById('startButton'); |
+startButton.onclick = start; |
+ |
+var pc1; |
+var pc2; |
+var stream; |
+ |
+function logError(err) { |
+ console.error(err); |
+} |
+ |
+// This function draws a red rectangle on the canvas using |
+// requestAnimationFrame(). |
+function draw() { |
+ window.requestAnimationFrame(draw); |
+ context.rect(0, 0, canvas.clientWidth, canvas.clientHeight); |
+ var randomNumber = Math.random(); |
+ var hue; |
+ if (randomNumber < 0.33) |
+ hue = 'red'; |
+ else if (randomNumber < 0.66) |
+ hue = 'green'; |
+ else |
+ hue = 'blue'; |
+ context.fillStyle = hue; |
+ context.fill(); |
+} |
+ |
+function start() { |
+ startButton.onclick = hangup; |
+ startButton.className = 'red'; |
+ startButton.innerHTML = 'Stop test'; |
+ draw(); |
+ stream = canvas.captureStream(DEFAULT_FRAME_RATE); |
+ call(); |
+} |
+ |
+function call() { |
+ var servers = null; |
+ pc1 = new RTCPeerConnection(servers); |
+ pc1.onicecandidate = (event) => { |
+ if (event.candidate) { |
+ pc2.addIceCandidate(event.candidate); |
+ } |
+ }; |
+ |
+ pc2 = new RTCPeerConnection(servers); |
+ pc2.onicecandidate = (event) => { |
+ if (event.candidate) { |
+ pc1.addIceCandidate(event.candidate); |
+ } |
+ }; |
+ pc2.onaddstream = (event) => { |
+ remoteVideo.srcObject = event.stream; |
+ }; |
+ |
+ pc1.addStream(stream); |
+ pc1.createOffer({ |
+ offerToReceiveAudio: 1, |
+ offerToReceiveVideo: 1 |
+ }).then(onCreateOfferSuccess, logError); |
+} |
+ |
+function onCreateOfferSuccess(desc) { |
+ pc1.setLocalDescription(desc); |
+ pc2.setRemoteDescription(desc); |
+ pc2.createAnswer().then(onCreateAnswerSuccess, logError); |
+} |
+ |
+function onCreateAnswerSuccess(desc) { |
+ pc2.setLocalDescription(desc); |
+ pc1.setRemoteDescription(desc); |
+} |
+ |
+function hangup() { |
+ pc1.close(); |
+ pc2.close(); |
+ pc1 = null; |
+ pc2 = null; |
+ startButton.onclick = start; |
+ startButton.className = 'green'; |
+ startButton.innerHTML = 'Start test'; |
+} |