Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / PerformanceTests / Canvas / upload-video-to-texture.html
1 <!DOCTYPE html>
2 <html>
3 <body>
4 <video id="video" loop></video>
5 <script src="../resources/runner.js"></script>
6 <script src="resources/canvas_runner.js"></script>
7 <script>
8 var videoElement = document.getElementById("video");
9 var canvas3D = document.createElement('canvas');
10 var gl = canvas3D.getContext('experimental-webgl');
11 if(!gl)
12     CanvasRunner.logFatalError("\nWebGL is not supported or enabled on this platform!\n");
13
14 function setSize(width, height) {
15     canvas3D.width = width;
16     canvas3D.height = height;
17 }
18
19 function addPlayCallback(videoElement) {
20     // This logic makes sure this perf test starts after playing the video.
21     videoElement.addEventListener("canplaythrough", startVideo, true);
22     videoElement.addEventListener("play", startPerfTest, true);
23     videoElement.addEventListener('error', function(ev) {
24         CanvasRunner.logFatalError("\nmp4 codec is not supported on this platform. Received error event:" + ev.target.error.code + "\n");
25     }, false);
26     videoElement.src = "../resources/bear-1280x720.mp4";
27 }
28
29 function startVideo() {
30     // loop can emit this event again.
31     videoElement.removeEventListener("canplaythrough", startVideo, true);
32     videoElement.play();
33 }
34
35 function startPerfTest() {
36     CanvasRunner.start({
37         description: "This bench test checks the speed on texImage2D(Video) on Webgl.",
38         preRun: preRun,
39         doRun: doRun,
40         ensureComplete: ensureComplete,
41         postRun: postRun});
42 }
43
44 var flipYAndPremultipyAlphas =
45   [[ false, false ],
46    [ false, true  ],
47    [ true,  false ],
48    [ true,  true  ]];
49 var optionIndex = 0;
50 var tex = null;
51
52 function preRun() {
53     tex = gl.createTexture();
54     gl.bindTexture(gl.TEXTURE_2D, tex);
55     optionIndex = 0;
56 }
57
58 function doRun() {
59     var i = optionIndex++ % flipYAndPremultipyAlphas.length;
60     gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipYAndPremultipyAlphas[i][0]);
61     gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, flipYAndPremultipyAlphas[i][1]);
62     gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, videoElement);
63 }
64
65 function ensureComplete() {
66     gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array(4));
67 }
68
69 function postRun() {
70     gl.deleteTexture(tex);
71 }
72
73 window.onload = function () {
74     setSize(1, 1);
75     addPlayCallback(videoElement);
76 }
77
78 </script>
79 </body>
80 </html>