{"id":25,"date":"2008-12-21T16:45:30","date_gmt":"2008-12-21T21:45:30","guid":{"rendered":"http:\/\/www.stephencalenderblog.com\/?p=25"},"modified":"2021-12-31T18:28:52","modified_gmt":"2021-12-31T23:28:52","slug":"benchmarking-results","status":"publish","type":"post","link":"https:\/\/www.stephencalenderblog.com\/?p=25","title":{"rendered":"Benchmarking: Results"},"content":{"rendered":"<table cellspacing=\"4\" cellpadding=\"4\" width=\"470\" border=\"0\">\n<tbody>\n<tr>\n<td width=\"210\" align=\"center\" valign=\"top\"><img decoding=\"async\" src=\"https:\/\/www.stephencalenderblog.com\/images\/BenchmarkingResultsTeaser.jpg\" alt=\"Sweet Sweet Benchmarking\"><\/td>\n<td width=\"260\" align=\"left\" valign=\"top\">\n A speed comparison across all trials. If you would like to view the full results they are available in <a href=\"https:\/\/www.stephencalenderblog.com\/benchmarks\/BenchmarkResults.cvs\">cvs<\/a>, <a href=\"https:\/\/www.stephencalenderblog.com\/benchmarks\/BenchmarkResults.htm\">htm<\/a>, and <a href=\"https:\/\/www.stephencalenderblog.com\/benchmarks\/BenchmarkResults.xls\">xls<\/a> formats.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><!--more--><\/p>\n<p>Computer A<\/p>\n<table cellspacing=\"0\" cellpadding=\"4\" width=\"470\" rules=\"groups\">\n<tbody>\n<tr>\n<th align=\"center\">Speed<br \/>\n(milliseconds)<\/th>\n<th align=\"center\">Possible executions<br \/>\ninside a frame<br \/>\n(a frame = 1\/60 second)<\/th>\n<th align=\"center\">Relative Speed<\/th>\n<th align=\"center\">Operation(s)<\/th>\n<\/tr>\n<\/tbody>\n<colgroup style=\"color:#000000;\"><\/colgroup>\n<tbody>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">1.3749<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">12<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">343,725<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Drawing a 250&#215;250 png<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.7711<\/td>\n<td align=\"right\">21<\/td>\n<td align=\"right\">192,775<\/td>\n<td align=\"left\">\n<ul>\n<li>Drawing a 250&#215;250 jpg<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">0.65<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">25<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">162,500<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Drawing a 250&#215;250 vector w\/ alpha<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.35<\/td>\n<td align=\"right\">47<\/td>\n<td align=\"right\">87,500<\/td>\n<td align=\"left\">\n<ul>\n<li>Drawing a 250&#215;250 vector<\/li>\n<li>Drawing a 50&#215;50 png<\/li>\n<li>Drawing a 50&#215;50 jpg<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">0.27<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">61<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">67,500<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Drawing a 10&#215;10 jpg<\/li>\n<li>Drawing a 10&#215;10 png<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.15<\/td>\n<td align=\"right\">111<\/td>\n<td align=\"right\">37,500<\/td>\n<td align=\"left\">\n<ul>\n<li>Drawing a 50&#215;50 vector<\/li>\n<li>Drawing a 50&#215;50 vector w\/ alpha<\/li>\n<li>Drawing a 10&#215;10 vector<\/li>\n<li>Drawing a 10&#215;10 vector w\/ alpha<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">0.055<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">302<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">13,750<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Initializing a sprite<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.0036<\/td>\n<td align=\"right\">4,627<\/td>\n<td align=\"right\">900<\/td>\n<td align=\"left\">\n<ul>\n<li>Sprite.getRect()<\/li>\n<li>Sprite.getBounds()<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">0.0022<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">7,575<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">550<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Sprite.hitTestPoint()<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.0008<\/td>\n<td align=\"right\">20,825<\/td>\n<td align=\"right\">200<\/td>\n<td align=\"left\">\n<ul>\n<li>Sprite.dispatchEvent()<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">0.00055<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">30,290<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">137.5<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Sprite.width<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.0005<\/td>\n<td align=\"right\">33,320<\/td>\n<td align=\"right\">125<\/td>\n<td align=\"left\">\n<ul>\n<li>Sprite.swapChildren()<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">0.00032<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">52,062<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">80<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Sprite.name<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.00015<\/td>\n<td align=\"right\">111,066<\/td>\n<td align=\"right\">37.5<\/td>\n<td align=\"left\">\n<ul>\n<li>Math.random()<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">0.000055<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">302,909<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">13.75<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Array write<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.000025<\/td>\n<td align=\"right\">666,400<\/td>\n<td align=\"right\">6.25<\/td>\n<td align=\"left\">\n<ul>\n<li>Array read<\/li>\n<li>BitmapData.getPixel32()<\/li>\n<li>Sprite.x<\/li>\n<li>Sprite.numChildren<\/li>\n<li>Sprite.alpha<\/li>\n<li>Sprite.visible<\/li>\n<li>Sprite.contains()<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">0.000018<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">925,555<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">5.5<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Division<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.000012<\/td>\n<td align=\"right\">1,388,333<\/td>\n<td align=\"right\">3<\/td>\n<td align=\"left\">\n<ul>\n<li>Simple function call<\/li>\n<li>Operations including promotion<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">&lt;= 0.000004<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">4,165,000<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">1<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Addition<\/li>\n<li>Multiplication<\/li>\n<li>Iterating<\/li>\n<li>Bit shifting<\/li>\n<li>Casting<\/li>\n<li>Declaring a variable<\/li>\n<li>Directly accessing a class variable<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Computer D<\/p>\n<table cellspacing=\"0\" cellpadding=\"4\" width=\"470\" rules=\"groups\">\n<tbody>\n<tr>\n<th align=\"center\">Speed<br \/>\n(milliseconds)<\/th>\n<th align=\"center\">Possible executions<br \/>\ninside a frame<br \/>\n(a frame = 1\/60 second)<\/th>\n<th align=\"center\">Relative Speed<\/th>\n<th align=\"center\">Operation(s)<\/th>\n<\/tr>\n<\/tbody>\n<colgroup style=\"color:#000000;\"><\/colgroup>\n<tbody>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">0.3<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">55<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">75,000<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Drawing a 250&#215;250 png<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.2<\/td>\n<td align=\"right\">83<\/td>\n<td align=\"right\">50,000<\/td>\n<td align=\"left\">\n<ul>\n<li>Drawing a 250&#215;250 jpg<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">0.17<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">98<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">42,500<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Drawing a 250&#215;250 vector w\/ alpha<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.125<\/td>\n<td align=\"right\">133<\/td>\n<td align=\"right\">31,250<\/td>\n<td align=\"left\">\n<ul>\n<li>Drawing a 10&#215;10 jpg<\/li>\n<li>Drawing a 10&#215;10 png<\/li>\n<li>Drawing a 50&#215;50 jpg<\/li>\n<li>Drawing a 50&#215;50 png<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">0.1<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">167<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">25,000<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Drawing a 250&#215;250 vector<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.05<\/td>\n<td align=\"right\">333<\/td>\n<td align=\"right\">12,500<\/td>\n<td align=\"left\">\n<ul>\n<li>Drawing a 50&#215;50 vector<\/li>\n<li>Drawing a 50&#215;50 vector w\/ alpha<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">0.04<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">416<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">10,000<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Drawing a 10&#215;10 vector<\/li>\n<li>Drawing a 10&#215;10 vector w\/ alpha<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.018<\/td>\n<td align=\"right\">926<\/td>\n<td align=\"right\">4500<\/td>\n<td align=\"left\">\n<ul>\n<li>Initializing a sprite<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">0.0016<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">10,417<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">400<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Sprite.getRect()<\/li>\n<li>Sprite.getBounds()<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.00107<\/td>\n<td align=\"right\">15,567<\/td>\n<td align=\"right\">267.5<\/td>\n<td align=\"left\">\n<ul>\n<li>Sprite.hitTestPoint()<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">0.00042<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">39,683<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">105<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Sprite.swapChildren()<\/li>\n<li>Sprite.dispatchEvent()<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.00032<\/td>\n<td align=\"right\">52,062<\/td>\n<td align=\"right\">80<\/td>\n<td align=\"left\">\n<ul>\n<li>Sprite.name<\/li>\n<li>Sprite.width<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">0.000062<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">268,817<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">15.5<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Math.random()<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.000030<\/td>\n<td align=\"right\">555,555<\/td>\n<td align=\"right\">7.5<\/td>\n<td align=\"left\">\n<ul>\n<li>Array write<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">0.000025<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">666,400<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">6.25<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>BitmapData.getPixel32()<\/li>\n<li>Sprite.x<\/li>\n<li>Sprite.numChildren<\/li>\n<li>Sprite.alpha<\/li>\n<li>Sprite.visible<\/li>\n<li>Sprite.contains()<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">0.000012<\/td>\n<td align=\"right\">1,388,333<\/td>\n<td align=\"right\">3<\/td>\n<td align=\"left\">\n<ul>\n<li>Simple function call<\/li>\n<li>Operations including promotion<\/li>\n<li>Array Read<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" bgcolor=\"#D8D8D8\">&lt;= 0.000004<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">4,165,000<\/td>\n<td align=\"right\" bgcolor=\"#D8D8D8\">1<\/td>\n<td align=\"left\" bgcolor=\"#D8D8D8\">\n<ul>\n<li>Addition<\/li>\n<li>Multiplication<\/li>\n<li>Division<\/li>\n<li>Iterating<\/li>\n<li>Bit shifting<\/li>\n<li>Casting<\/li>\n<li>Declaring a variable<\/li>\n<li>Directly accessing a class variable<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>This table does not have the results from every trial; it would particularly do a disservice to the trials with significant overhead.  Nor does this table address optimizations or alternatives that you can implement.  However, a relative comparison across the bulk of the trials puts cost in perspective.  The 19 most expensive operations are all concerning graphics.  Due note that the speed at which vectors are drawn is based on graphic complexity &#8211; not size.  These vector objects were squares, so the render speed should be a minimum.  Conversely, png and jpg render speed is based on image size regardless of contents so its speed should be constant.<\/p>\n<p>Optimization practices and an appropriate art strategy should be planed from the beginning of any project.  At the same time, we live in an imperfect world and work under changing demands.  If a project\u2019s performance starts to decrease during development, the most efficient optimizations you can make are to your graphics.  With experience, you will get better at striking the balance between optimizing artwork and ActionScript.  Inevitably, performance bugs will happen, hopefully now you should be able to quickly diagnose the problem and be able to implement some alternatives.<\/p>\n<p>Thanks for reading, and remember, we are all in this together.<\/p>\n<p>This post is part of a series:<br \/>\n<a href=\"https:\/\/www.stephencalenderblog.com\/?p=7\">Introduction<\/a><br \/>\n<a href=\"https:\/\/www.stephencalenderblog.com\/?p=9\">Methodology<\/a><br \/>\n<a href=\"https:\/\/www.stephencalenderblog.com\/?p=12\">Operation Speed<\/a><br \/>\n<a href=\"https:\/\/www.stephencalenderblog.com\/?p=19\">Data Structure Speed<\/a><br \/>\n<a href=\"https:\/\/www.stephencalenderblog.com\/?p=22\">Graphics Speed<\/a><br \/>\n<a href=\"https:\/\/www.stephencalenderblog.com\/?p=25\">Results<\/a> &lt;&#8211; You are here<\/p>\n<table cellspacing=\"15\">\n<tbody>\n<tr>\n<td>\n<a class=\"DiggThisButton DiggMedium\"><\/a><\/td>\n<td>\n<a href=\"http:\/\/reddit.com\/submit\" onclick=\"window.location = 'http:\/\/reddit.com\/submit?url=' + encodeURIComponent(window.location); return false\"> <img decoding=\"async\" src=\"http:\/\/reddit.com\/static\/spreddit7.gif\" alt=\"submit to reddit\" border=\"0\"> <\/a><\/td>\n<td>\n<table>\n<tbody>\n<tr>\n<td>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/static.delicious.com\/img\/delicious.small.gif\" height=\"10\" width=\"10\" alt=\"Delicious\"><\/td>\n<td>\n<a href=\"http:\/\/delicious.com\/save\" onclick=\"window.open('http:\/\/delicious.com\/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent(location.href)+'&amp;title='+encodeURIComponent(document.title), 'delicious','toolbar=no,width=550,height=550'); return false;\"> Bookmark this on Delicious<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/td>\n<td>\n<script src=\"http:\/\/www.stumbleupon.com\/hostedbadge.php?s=2\"><\/script><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>A speed comparison across all trials. <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,8],"tags":[],"class_list":["post-25","post","type-post","status-publish","format-standard","hentry","category-actionscript-30","category-optimization"],"_links":{"self":[{"href":"https:\/\/www.stephencalenderblog.com\/index.php?rest_route=\/wp\/v2\/posts\/25","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.stephencalenderblog.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.stephencalenderblog.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.stephencalenderblog.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.stephencalenderblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=25"}],"version-history":[{"count":17,"href":"https:\/\/www.stephencalenderblog.com\/index.php?rest_route=\/wp\/v2\/posts\/25\/revisions"}],"predecessor-version":[{"id":837,"href":"https:\/\/www.stephencalenderblog.com\/index.php?rest_route=\/wp\/v2\/posts\/25\/revisions\/837"}],"wp:attachment":[{"href":"https:\/\/www.stephencalenderblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=25"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.stephencalenderblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.stephencalenderblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}