Home | History | Annotate | Download | only in Canvas
      1 <!DOCTYPE html>
      2 <html>
      3 <body>
      4 <script src="../resources/runner.js"></script>
      5 <script>
      6 
      7 var canvas2D = document.createElement("canvas");
      8 var ctx2D = canvas2D.getContext("2d");
      9 var canvas3D = document.createElement('canvas');
     10 var gl = canvas3D.getContext('experimental-webgl');
     11 if(!gl)
     12     PerfTestRunner.log("\nWebGL is not supported or enabled on this platform!\n");
     13 var MEASURE_DRAW_TIMES = 1000;
     14 var MAX_COUNT = 60000;
     15 var count = 0;
     16 
     17 function setSize(width, height) {
     18     canvas2D.width = width;
     19     canvas2D.height = height;
     20     canvas3D.width = width;
     21     canvas3D.height = height;
     22 }
     23 
     24 function rand(range) {
     25     return Math.floor(Math.random() * range);
     26 }
     27 
     28 function fillCanvas(ctx2d, canvas2d) {
     29     ctx2d.fillStyle = "rgba(" + rand(255) + "," + rand(255) + "," + rand(255)  + "," + rand(255) + ")";
     30     ctx2d.fillRect(0, 0, canvas2d.width, canvas2d.height);
     31 }
     32 
     33 function uploadCanvas2DToWebGLTexture() {
     34     if (gl) {
     35         var tex = gl.createTexture();
     36         gl.bindTexture(gl.TEXTURE_2D, tex);
     37 
     38         var start = PerfTestRunner.now();
     39         for (var i = 0; i < MEASURE_DRAW_TIMES; i++) {
     40             gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, canvas2D);
     41         }
     42         gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array(4));
     43         gl.deleteTexture(tex);
     44         count++;
     45 
     46         var elapsedTime = PerfTestRunner.now() - start;
     47         PerfTestRunner.measureValueAsync(MEASURE_DRAW_TIMES * 1000 / elapsedTime);
     48     } else
     49         PerfTestRunner.measureValueAsync(0);
     50     if (count < MAX_COUNT)
     51         requestAnimationFrame(uploadCanvas2DToWebGLTexture);
     52 }
     53 
     54 function onCompletedRun() {
     55     count = MAX_COUNT;
     56 }
     57 
     58 window.onload = function () {
     59     PerfTestRunner.prepareToMeasureValuesAsync({done: onCompletedRun, unit: 'runs/s',
     60         description: "This bench test checks the speed on uploading 2d Canvas(1024x1024) to Webgl Texture(1024x1024)."});
     61     setSize(1024, 1024);
     62     fillCanvas(ctx2D, canvas2D);
     63     uploadCanvas2DToWebGLTexture();
     64 }
     65 
     66 </script>
     67 </body>
     68 </html>
     69