Index: chrome/test/data/media/canvas_capture_test.html |
diff --git a/chrome/test/data/media/canvas_capture_test.html b/chrome/test/data/media/canvas_capture_test.html |
deleted file mode 100644 |
index bb2ac4cd857e242abcb0f1dae75864ee73d8aaa0..0000000000000000000000000000000000000000 |
--- a/chrome/test/data/media/canvas_capture_test.html |
+++ /dev/null |
@@ -1,143 +0,0 @@ |
-<!DOCTYPE html> |
-<html> |
-<head> |
-<title>Canvas Capture FPS Test</title> |
-</head> |
-<body> |
- <div> Canvas capture FPS test.</div> |
- <video id='local-video' muted='true' hidden loop autoplay> |
- <source src='bear-640x360.webm' type='video/webm'> |
- </video> |
- <br></br> |
- <label>Canvas</label> |
- <canvas id='canvas' width=640 height=360></canvas> |
- <br></br> |
- <label>Captured canvas stream</label> |
- <video id='captured-video' autoplay></video> |
-<script> |
- |
-'use strict'; |
- |
-var DEFAULT_FRAME_RATE = 10; |
-var TOLERANCE_PERCENT = 15 / 100; |
- |
-// Define video event listener when window is loaded. |
-window.onload = function() { |
- var video = document.getElementById('local-video'); |
- var canvas = document.getElementById('canvas'); |
- var context = canvas.getContext('2d'); |
- video.addEventListener('play', function() { |
- draw(this, context, canvas.clientWidth, canvas.clientHeight); |
- }, false); |
- }; |
- |
-// This function draws the video frame on the canvas. |
-function draw(video, context, width, height) { |
- window.requestAnimationFrame(draw.bind(null, video, context, width, |
- height)); |
- if (video.paused || video.ended) return false; |
- context.drawImage(video, 0, 0, width, height); |
-} |
- |
-// Test class that measures the frame rate of a stream originated from |
-// canvas capture. |
-function CanvasFpsTest() { |
- this.theCanvasStream = null; |
- this.decodedFrames = 0; |
- this.droppedFrames = 0; |
- this.decodedFPS = []; |
- this.droppedFPS = []; |
- this.startTime = {}; |
- this.interval = {}; |
- this.targetFPS = 0; |
-} |
- |
-// This function starts the canvas capture of the local video stream. |
-CanvasFpsTest.prototype.startCanvasCapture = function(frameRate) { |
- var test = this; |
- test.targetFPS = frameRate ? frameRate : DEFAULT_FRAME_RATE; |
- test.theCanvasStream = document.getElementById('canvas').captureStream( |
- test.targetFPS); |
- var testVideo = document.getElementById('captured-video'); |
- testVideo.addEventListener('play', function(event) { |
- test.startTime = new Date().getTime(); |
- test.interval = setInterval(test.calculateStats.bind(test, testVideo), |
- 1000); |
- }); |
- testVideo.src = URL.createObjectURL(test.theCanvasStream); |
-}; |
- |
-// This function calculates the FPS for decoded frames and dropped frames. |
-CanvasFpsTest.prototype.calculateStats = function(video) { |
- // We calculate stats on 6 seconds worth of video, that should be |
- // reasonable. |
- if (this.decodedFPS.length == 6) { |
- clearInterval(this.interval); |
- return this.validateResults(); |
- } |
- if (video.readyState <= HTMLMediaElement.HAVE_CURRENT_DATA || |
- video.paused || video.ended) |
- return; |
- var currentTime = new Date().getTime(); |
- var deltaTime = (currentTime - this.startTime) / 1000; |
- |
- this.startTime = currentTime; |
- |
- // Calculate decoded frames per second. |
- var fps = (video.webkitDecodedFrameCount - this.decodedFrames) / deltaTime; |
- this.decodedFrames = video.webkitDecodedFrameCount; |
- this.decodedFPS.push(fps); |
- |
- // Calculate dropped frames per second. |
- fps = (video.webkitDroppedFrameCount - this.droppedFrames) / deltaTime; |
- this.droppedFrames = video.webkitDroppedFrameCount; |
- this.droppedFPS.push(fps); |
-}; |
- |
-// This function validates the frame rate against accepted error tolerance. |
-CanvasFpsTest.prototype.validateResults = function() { |
- // Pop out the first value as it could be a bit off. |
- this.decodedFPS.shift; |
- this.droppedFPS.shift; |
- var averageFPS = average(this.decodedFPS); |
- var averageDroppedFPS = average(this.droppedFPS); |
- var errorFPS = Math.abs(averageFPS - this.targetFPS) / this.targetFPS; |
- var minFPS = this.targetFPS * (1 - TOLERANCE_PERCENT); |
- var maxFPS = this.targetFPS * (1 + TOLERANCE_PERCENT); |
- console.log('Average dropped FPS:', averageDroppedFPS); |
- if (errorFPS > TOLERANCE_PERCENT) { |
- reportResult('ERROR: Expected FPS between ' + minFPS + ' and ' + maxFPS + |
- ' (' + 100 * TOLERANCE_PERCENT + '% tolerance) but got ' + averageFPS + |
- ' instead'); |
- } else { |
- reportResult('OK'); |
- } |
-}; |
- |
-// This function calculates average of array values. |
-function average(array) { |
- var count = array.length; |
- var total = 0; |
- for (var i = 0; i < count; i++) { |
- total += parseInt(array[i]); |
- } |
- return Math.floor(total / count); |
-} |
- |
-// This function logs and reports result to Test Environment. |
-function reportResult(message) { |
- console.log(message); |
- if (!window.domAutomationController) |
- throw 'Expected to run in an automated context.'; |
- window.domAutomationController.send(message); |
-} |
- |
-// Tests that canvas capture will approximately honor the given frame rate. |
-function testFrameRateOfCanvasCapture(frameRate) { |
- var fpsTest = new CanvasFpsTest(); |
- fpsTest.startCanvasCapture(frameRate); |
-} |
- |
-</script> |
-</body> |
-</html> |