canvas.html 4.7 KB

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