canvas.html 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Canvas Performance Test</title>
  5. <!--
  6. <script type='text/javascript'
  7. src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
  8. -->
  9. <script src="../include/util.js"></script>
  10. <script src="../include/webutil.js"></script>
  11. <script src="../include/base64.js"></script>
  12. <script src="../include/display.js"></script>
  13. <script src="face.png.js"></script>
  14. </head>
  15. <body>
  16. Iterations: <input id='iterations' style='width:50' value="100">&nbsp;
  17. Width: <input id='width' style='width:50' value="640">&nbsp;
  18. Height: <input id='height' style='width:50' value="480">&nbsp;
  19. <input id='startButton' type='button' value='Do Performance Test'
  20. style='width:150px' onclick="begin();">&nbsp;
  21. <br><br>
  22. <b>Canvas</b> (should see three squares and two happy faces):<br>
  23. <canvas id="canvas" width="200" height="100"
  24. style="border-style: dotted; border-width: 1px;">
  25. Canvas not supported.
  26. </canvas>
  27. <br>
  28. Results:<br>
  29. <textarea id="messages" style="font-size: 9;" cols=80 rows=25></textarea>
  30. </body>
  31. <script>
  32. var msg_cnt = 0;
  33. var display, start_width = 300, start_height = 100;
  34. var iterations;
  35. function message(str) {
  36. console.log(str);
  37. cell = $D('messages');
  38. cell.innerHTML += msg_cnt + ": " + str + "\n";
  39. cell.scrollTop = cell.scrollHeight;
  40. msg_cnt += 1;
  41. }
  42. function test_functions () {
  43. var img, x, y, w, h, ctx = display.get_context();
  44. w = display.get_width();
  45. h = display.get_height();
  46. display.fillRect(0, 0, w, h, [240,240,240]);
  47. display.blitStringImage("data:image/png;base64," + face64, 150, 10);
  48. var himg = new Image();
  49. himg.onload = function () {
  50. ctx.drawImage(himg, 200, 40); };
  51. himg.src = "face.png";
  52. /* Test array image data */
  53. data = [];
  54. for (y=0; y< 50; y++) {
  55. for (x=0; x< 50; x++) {
  56. data[(y*50 + x)*4 + 0] = 255 - parseInt((255 / 50) * y, 10);
  57. data[(y*50 + x)*4 + 1] = parseInt((255 / 50) * y, 10);
  58. data[(y*50 + x)*4 + 2] = parseInt((255 / 50) * x, 10);
  59. data[(y*50 + x)*4 + 3] = 255;
  60. }
  61. }
  62. display.blitImage(30, 10, 50, 50, data, 0);
  63. img = display.getTile(5,5,16,16,[0,128,128]);
  64. display.putTile(img);
  65. img = display.getTile(90,15,16,16,[0,0,0]);
  66. display.setSubTile(img, 0,0,16,16,[128,128,0]);
  67. display.putTile(img);
  68. }
  69. function begin () {
  70. $D('startButton').value = "Running";
  71. $D('startButton').disabled = true;
  72. setTimeout(start_delayed, 250);
  73. iterations = $D('iterations').value;
  74. }
  75. function start_delayed () {
  76. var ret;
  77. ret = display.set_prefer_js(true);
  78. if (ret) {
  79. message("Running test: prefer Javascript ops");
  80. var time1 = run_test();
  81. message("prefer Javascript ops: " + time1 + "ms total, " +
  82. (time1 / iterations) + "ms per frame");
  83. } else {
  84. message("Could not run: prefer Javascript ops");
  85. }
  86. display.set_prefer_js(false);
  87. message("Running test: prefer Canvas ops");
  88. var time2 = run_test();
  89. message("prefer Canvas ops: " + time2 + "ms total, " +
  90. (time2 / iterations) + "ms per frame");
  91. if (Util.get_logging() !== 'debug') {
  92. display.resize(start_width, start_height, true);
  93. test_functions();
  94. }
  95. $D('startButton').disabled = false;
  96. $D('startButton').value = "Do Performance Test";
  97. }
  98. function run_test () {
  99. var width, height;
  100. width = $D('width').value;
  101. height = $D('height').value;
  102. display.resize(width, height);
  103. var color, start_time = (new Date()).getTime(), w, h;
  104. for (var i=0; i < iterations; i++) {
  105. color = [128, 128, (255 / iterations) * i, 0];
  106. for (var x=0; x < width; x = x + 16) {
  107. for (var y=0; y < height; y = y + 16) {
  108. w = Math.min(16, width - x);
  109. h = Math.min(16, height - y);
  110. var tile = display.getTile(x, y, w, h, color);
  111. display.setSubTile(tile, 0, 0, w, h, color);
  112. display.putTile(tile);
  113. }
  114. }
  115. }
  116. var end_time = (new Date()).getTime();
  117. return (end_time - start_time);
  118. }
  119. window.onload = function() {
  120. message("in onload");
  121. $D('iterations').value = 10;
  122. display = new Display({'target' : $D('canvas')});
  123. display.resize(start_width, start_height, true);
  124. message("Canvas initialized");
  125. test_functions();
  126. }
  127. </script>
  128. </html>