2bam

AS3 calls vs member access benchmark

Apr 25th, 2014
633
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package {
  2.     import flash.utils.getTimer;
  3.     /**
  4.      * ...
  5.      * @author 2bam
  6.      */
  7.     public class PerfTestCallAccess {
  8.         static public var out:String = "";
  9.  
  10.         static public function run(Count:uint = 1000000):void {
  11.             var dummies:Vector.<Dummy> = new Vector.<Dummy>;
  12.             var start:uint;
  13.             var end:uint;
  14.             var dummy:Dummy;
  15.             //const Count:int = 1000000;
  16.             var i:int;
  17.             for(i=Count; i>=0; i--) {
  18.                 dummies.push(new Dummy);
  19.             }
  20.            
  21.             var dt:Number = 0.1;
  22.             var pvx:Number = 0;
  23.             var pvy:Number = 0;
  24.            
  25.             start = getTimer();
  26.             for(i=Count; i>=0; i--) {
  27.                 dummy = dummies[i];
  28.                 dummy.update(dt, pvx, pvy);
  29.             }          
  30.             end = getTimer();
  31.             myTrace("CALL   ", (end-start)/1000.0,Count);
  32.                
  33.             start = getTimer();
  34.             for(i=Count; i>=0; i--) {
  35.                 dummy = dummies[i];
  36.                 //////////////////////////////////////////
  37.                 dummy.dx = dt*(dummy.vx+pvx);
  38.                 dummy.dy = dt*(dummy.vy+pvy);
  39.                
  40.                 dummy.x += dummy.dx;
  41.                 dummy.y += dummy.dy;
  42.                
  43.                 if(dummy.damp!=0) {
  44.                     dummy.ax -= dummy.damp*dummy.ax*dt;     //TESTING
  45.                     dummy.ay -= dummy.damp*dummy.ay*dt;
  46.                 }
  47.                    
  48.                 if(dummy.ax==0 && dummy.ay==0) {
  49.                     if(dummy.damp!=0) {
  50.                         dummy.vx -= dummy.damp*dummy.vx*dt;
  51.                         dummy.vy -= dummy.damp*dummy.vy*dt;
  52.                     }
  53.                     else if(dummy.dragX!=0 || dummy.dragY !=0) {
  54.                         if(dummy.vx>0) {
  55.                             dummy.vx -= dt*dummy.dragX;
  56.                             if(dummy.vx<0) dummy.vx = 0;
  57.                         }
  58.                         else if(dummy.vx<0) {
  59.                             dummy.vx += dt*dummy.dragX;
  60.                             if(dummy.vx>0) dummy.vx = 0;
  61.                         }
  62.                         if(dummy.vy>0) {
  63.                             dummy.vy -= dt*dummy.dragY;
  64.                             if(dummy.vy<0) dummy.vy = 0;
  65.                         }
  66.                         else if(dummy.vx<0) {
  67.                             dummy.vy += dt*dummy.dragY;
  68.                             if(dummy.vy>0) dummy.vy = 0;
  69.                         }
  70.                     }
  71.                 }
  72.                 else {
  73.                     dummy.vx += dt*dummy.ax;
  74.                     dummy.vy += dt*dummy.ay;
  75.                 }
  76.                
  77.                 dummy.t+=dt;
  78.                 if(dummy.ttl > 0 && dummy.t>=dummy.ttl) {
  79.                     dummy.t = dummy.ttl;
  80.                     dummy.dead = true;
  81.                 }
  82.                 //////////////////////////////////////////
  83.             }
  84.             end = getTimer();
  85.             myTrace("ACCESS ", (end-start)/1000.0,Count);
  86.  
  87.  
  88.             start = getTimer();
  89.             for(i=Count; i>=0; i--) {
  90.                 dummy = dummies[i];
  91.                 dummy.update4(dt, pvx, pvy);
  92.             }          
  93.             end = getTimer();
  94.             myTrace("CALL4  ", (end-start)/1000.0,Count);
  95.                
  96.             start = getTimer();
  97.             for(i=Count; i>=0; i--) {
  98.                 dummy = dummies[i];
  99.                 //////////////////////////////////////////
  100.                 dummy.dx = dt*(dummy.vx+pvx);
  101.                 dummy.dy = dt*(dummy.vy+pvy);
  102.                
  103.                 dummy.x += dummy.dx;
  104.                 dummy.y += dummy.dy;
  105.                
  106.                 if(dummy.damp!=0) {
  107.                     dummy.ax -= dummy.damp*dummy.ax*dt;     //TESTING
  108.                     dummy.ay -= dummy.damp*dummy.ay*dt;
  109.                 }
  110.                    
  111.                 if(dummy.ax==0 && dummy.ay==0) {
  112.                     if(dummy.damp!=0) {
  113.                         dummy.vx -= dummy.damp*dummy.vx*dt;
  114.                         dummy.vy -= dummy.damp*dummy.vy*dt;
  115.                     }
  116.                     else if(dummy.dragX!=0 || dummy.dragY !=0) {
  117.                         if(dummy.vx>0) {
  118.                             dummy.vx -= dt*dummy.dragX;
  119.                             if(dummy.vx<0) dummy.vx = 0;
  120.                         }
  121.                         else if(dummy.vx<0) {
  122.                             dummy.vx += dt*dummy.dragX;
  123.                             if(dummy.vx>0) dummy.vx = 0;
  124.                         }
  125.                         if(dummy.vy>0) {
  126.                             dummy.vy -= dt*dummy.dragY;
  127.                             if(dummy.vy<0) dummy.vy = 0;
  128.                         }
  129.                         else if(dummy.vx<0) {
  130.                             dummy.vy += dt*dummy.dragY;
  131.                             if(dummy.vy>0) dummy.vy = 0;
  132.                         }
  133.                     }
  134.                 }
  135.                 else {
  136.                     dummy.vx += dt*dummy.ax;
  137.                     dummy.vy += dt*dummy.ay;
  138.                 }
  139.                
  140.                 dummy.t+=dt;
  141.                 if(dummy.ttl > 0 && dummy.t>=dummy.ttl) {
  142.                     dummy.t = dummy.ttl;
  143.                     dummy.dead = true;
  144.                 }
  145.                 //////////////////////////////////////////
  146.                 dummy.dx = dt*(dummy.vx+pvx);
  147.                 dummy.dy = dt*(dummy.vy+pvy);
  148.                
  149.                 dummy.x += dummy.dx;
  150.                 dummy.y += dummy.dy;
  151.                
  152.                 if(dummy.damp!=0) {
  153.                     dummy.ax -= dummy.damp*dummy.ax*dt;     //TESTING
  154.                     dummy.ay -= dummy.damp*dummy.ay*dt;
  155.                 }
  156.                    
  157.                 if(dummy.ax==0 && dummy.ay==0) {
  158.                     if(dummy.damp!=0) {
  159.                         dummy.vx -= dummy.damp*dummy.vx*dt;
  160.                         dummy.vy -= dummy.damp*dummy.vy*dt;
  161.                     }
  162.                     else if(dummy.dragX!=0 || dummy.dragY !=0) {
  163.                         if(dummy.vx>0) {
  164.                             dummy.vx -= dt*dummy.dragX;
  165.                             if(dummy.vx<0) dummy.vx = 0;
  166.                         }
  167.                         else if(dummy.vx<0) {
  168.                             dummy.vx += dt*dummy.dragX;
  169.                             if(dummy.vx>0) dummy.vx = 0;
  170.                         }
  171.                         if(dummy.vy>0) {
  172.                             dummy.vy -= dt*dummy.dragY;
  173.                             if(dummy.vy<0) dummy.vy = 0;
  174.                         }
  175.                         else if(dummy.vx<0) {
  176.                             dummy.vy += dt*dummy.dragY;
  177.                             if(dummy.vy>0) dummy.vy = 0;
  178.                         }
  179.                     }
  180.                 }
  181.                 else {
  182.                     dummy.vx += dt*dummy.ax;
  183.                     dummy.vy += dt*dummy.ay;
  184.                 }
  185.                
  186.                 dummy.t+=dt;
  187.                 if(dummy.ttl > 0 && dummy.t>=dummy.ttl) {
  188.                     dummy.t = dummy.ttl;
  189.                     dummy.dead = true;
  190.                 }
  191.                 //////////////////////////////////////////
  192.                 dummy.dx = dt*(dummy.vx+pvx);
  193.                 dummy.dy = dt*(dummy.vy+pvy);
  194.                
  195.                 dummy.x += dummy.dx;
  196.                 dummy.y += dummy.dy;
  197.                
  198.                 if(dummy.damp!=0) {
  199.                     dummy.ax -= dummy.damp*dummy.ax*dt;     //TESTING
  200.                     dummy.ay -= dummy.damp*dummy.ay*dt;
  201.                 }
  202.                    
  203.                 if(dummy.ax==0 && dummy.ay==0) {
  204.                     if(dummy.damp!=0) {
  205.                         dummy.vx -= dummy.damp*dummy.vx*dt;
  206.                         dummy.vy -= dummy.damp*dummy.vy*dt;
  207.                     }
  208.                     else if(dummy.dragX!=0 || dummy.dragY !=0) {
  209.                         if(dummy.vx>0) {
  210.                             dummy.vx -= dt*dummy.dragX;
  211.                             if(dummy.vx<0) dummy.vx = 0;
  212.                         }
  213.                         else if(dummy.vx<0) {
  214.                             dummy.vx += dt*dummy.dragX;
  215.                             if(dummy.vx>0) dummy.vx = 0;
  216.                         }
  217.                         if(dummy.vy>0) {
  218.                             dummy.vy -= dt*dummy.dragY;
  219.                             if(dummy.vy<0) dummy.vy = 0;
  220.                         }
  221.                         else if(dummy.vx<0) {
  222.                             dummy.vy += dt*dummy.dragY;
  223.                             if(dummy.vy>0) dummy.vy = 0;
  224.                         }
  225.                     }
  226.                 }
  227.                 else {
  228.                     dummy.vx += dt*dummy.ax;
  229.                     dummy.vy += dt*dummy.ay;
  230.                 }
  231.                
  232.                 dummy.t+=dt;
  233.                 if(dummy.ttl > 0 && dummy.t>=dummy.ttl) {
  234.                     dummy.t = dummy.ttl;
  235.                     dummy.dead = true;
  236.                 }
  237.                 //////////////////////////////////////////
  238.                 dummy.dx = dt*(dummy.vx+pvx);
  239.                 dummy.dy = dt*(dummy.vy+pvy);
  240.                
  241.                 dummy.x += dummy.dx;
  242.                 dummy.y += dummy.dy;
  243.                
  244.                 if(dummy.damp!=0) {
  245.                     dummy.ax -= dummy.damp*dummy.ax*dt;     //TESTING
  246.                     dummy.ay -= dummy.damp*dummy.ay*dt;
  247.                 }
  248.                    
  249.                 if(dummy.ax==0 && dummy.ay==0) {
  250.                     if(dummy.damp!=0) {
  251.                         dummy.vx -= dummy.damp*dummy.vx*dt;
  252.                         dummy.vy -= dummy.damp*dummy.vy*dt;
  253.                     }
  254.                     else if(dummy.dragX!=0 || dummy.dragY !=0) {
  255.                         if(dummy.vx>0) {
  256.                             dummy.vx -= dt*dummy.dragX;
  257.                             if(dummy.vx<0) dummy.vx = 0;
  258.                         }
  259.                         else if(dummy.vx<0) {
  260.                             dummy.vx += dt*dummy.dragX;
  261.                             if(dummy.vx>0) dummy.vx = 0;
  262.                         }
  263.                         if(dummy.vy>0) {
  264.                             dummy.vy -= dt*dummy.dragY;
  265.                             if(dummy.vy<0) dummy.vy = 0;
  266.                         }
  267.                         else if(dummy.vx<0) {
  268.                             dummy.vy += dt*dummy.dragY;
  269.                             if(dummy.vy>0) dummy.vy = 0;
  270.                         }
  271.                     }
  272.                 }
  273.                 else {
  274.                     dummy.vx += dt*dummy.ax;
  275.                     dummy.vy += dt*dummy.ay;
  276.                 }
  277.                
  278.                 dummy.t+=dt;
  279.                 if(dummy.ttl > 0 && dummy.t>=dummy.ttl) {
  280.                     dummy.t = dummy.ttl;
  281.                     dummy.dead = true;
  282.                 }
  283.                 //////////////////////////////////////////
  284.             }
  285.             end = getTimer();
  286.             myTrace("ACCESS4", (end-start)/1000.0, Count);
  287.  
  288.         }
  289.        
  290.         static private function myTrace(ID:String, time:Number, count:int):void {
  291.             out += [ID, "TOOK", time, "COUNT=",count].join("      ")+"\n";
  292.         }
  293.        
  294.     }
  295.  
  296. }
  297.  
  298. class Dummy {
  299.     public var dead:Boolean = false;
  300.     public var t:Number = 0;
  301.    
  302.     public var dx:Number = 7;
  303.     public var dy:Number = 7;
  304.    
  305.     public var ttl:Number = 10000000;
  306.            
  307.     //Physics
  308.     public var x:Number = 7;
  309.     public var y:Number = 7;       
  310.  
  311.     public var vx:Number = 77777;
  312.     public var vy:Number = 77777;
  313.  
  314.     public var ax:Number = 777;
  315.     public var ay:Number = 777;
  316.    
  317.     public var dragX:Number = 7;
  318.     public var dragY:Number = 7;
  319.    
  320.     public var damp:Number = 0.7;
  321.    
  322.     public function update(dt:Number,pvx:Number,pvy:Number):void {
  323.         dx = dt*(vx+pvx);
  324.         dy = dt*(vy+pvy);
  325.        
  326.         x += dx;
  327.         y += dy;
  328.        
  329.         if(damp!=0) {
  330.             ax -= damp*ax*dt;       //TESTING
  331.             ay -= damp*ay*dt;
  332.         }
  333.            
  334.         if(ax==0 && ay==0) {
  335.             if(damp!=0) {
  336.                 vx -= damp*vx*dt;
  337.                 vy -= damp*vy*dt;
  338.             }
  339.             else if(dragX!=0 || dragY !=0) {
  340.                 if(vx>0) {
  341.                     vx -= dt*dragX;
  342.                     if(vx<0) vx = 0;
  343.                 }
  344.                 else if(vx<0) {
  345.                     vx += dt*dragX;
  346.                     if(vx>0) vx = 0;
  347.                 }
  348.                 if(vy>0) {
  349.                     vy -= dt*dragY;
  350.                     if(vy<0) vy = 0;
  351.                 }
  352.                 else if(vx<0) {
  353.                     vy += dt*dragY;
  354.                     if(vy>0) vy = 0;
  355.                 }
  356.             }
  357.         }
  358.         else {
  359.             vx += dt*ax;
  360.             vy += dt*ay;
  361.         }
  362.        
  363.         t+=dt;
  364.         if(ttl > 0 && t>=ttl) {
  365.             t = ttl;
  366.             dead = true;
  367.         }
  368.     }
  369.    
  370.     public function update4(dt:Number,pvx:Number,pvy:Number):void {
  371.         dx = dt*(vx+pvx);
  372.         dy = dt*(vy+pvy);
  373.        
  374.         x += dx;
  375.         y += dy;
  376.        
  377.         if(damp!=0) {
  378.             ax -= damp*ax*dt;       //TESTING
  379.             ay -= damp*ay*dt;
  380.         }
  381.            
  382.         if(ax==0 && ay==0) {
  383.             if(damp!=0) {
  384.                 vx -= damp*vx*dt;
  385.                 vy -= damp*vy*dt;
  386.             }
  387.             else if(dragX!=0 || dragY !=0) {
  388.                 if(vx>0) {
  389.                     vx -= dt*dragX;
  390.                     if(vx<0) vx = 0;
  391.                 }
  392.                 else if(vx<0) {
  393.                     vx += dt*dragX;
  394.                     if(vx>0) vx = 0;
  395.                 }
  396.                 if(vy>0) {
  397.                     vy -= dt*dragY;
  398.                     if(vy<0) vy = 0;
  399.                 }
  400.                 else if(vx<0) {
  401.                     vy += dt*dragY;
  402.                     if(vy>0) vy = 0;
  403.                 }
  404.             }
  405.         }
  406.         else {
  407.             vx += dt*ax;
  408.             vy += dt*ay;
  409.         }
  410.        
  411.         t+=dt;
  412.         if(ttl > 0 && t>=ttl) {
  413.             t = ttl;
  414.             dead = true;
  415.         }
  416.         /////////////////
  417.         dx = dt*(vx+pvx);
  418.         dy = dt*(vy+pvy);
  419.        
  420.         x += dx;
  421.         y += dy;
  422.        
  423.         if(damp!=0) {
  424.             ax -= damp*ax*dt;       //TESTING
  425.             ay -= damp*ay*dt;
  426.         }
  427.            
  428.         if(ax==0 && ay==0) {
  429.             if(damp!=0) {
  430.                 vx -= damp*vx*dt;
  431.                 vy -= damp*vy*dt;
  432.             }
  433.             else if(dragX!=0 || dragY !=0) {
  434.                 if(vx>0) {
  435.                     vx -= dt*dragX;
  436.                     if(vx<0) vx = 0;
  437.                 }
  438.                 else if(vx<0) {
  439.                     vx += dt*dragX;
  440.                     if(vx>0) vx = 0;
  441.                 }
  442.                 if(vy>0) {
  443.                     vy -= dt*dragY;
  444.                     if(vy<0) vy = 0;
  445.                 }
  446.                 else if(vx<0) {
  447.                     vy += dt*dragY;
  448.                     if(vy>0) vy = 0;
  449.                 }
  450.             }
  451.         }
  452.         else {
  453.             vx += dt*ax;
  454.             vy += dt*ay;
  455.         }
  456.        
  457.         t+=dt;
  458.         if(ttl > 0 && t>=ttl) {
  459.             t = ttl;
  460.             dead = true;
  461.         }
  462.         /////////////////
  463.         dx = dt*(vx+pvx);
  464.         dy = dt*(vy+pvy);
  465.        
  466.         x += dx;
  467.         y += dy;
  468.        
  469.         if(damp!=0) {
  470.             ax -= damp*ax*dt;       //TESTING
  471.             ay -= damp*ay*dt;
  472.         }
  473.            
  474.         if(ax==0 && ay==0) {
  475.             if(damp!=0) {
  476.                 vx -= damp*vx*dt;
  477.                 vy -= damp*vy*dt;
  478.             }
  479.             else if(dragX!=0 || dragY !=0) {
  480.                 if(vx>0) {
  481.                     vx -= dt*dragX;
  482.                     if(vx<0) vx = 0;
  483.                 }
  484.                 else if(vx<0) {
  485.                     vx += dt*dragX;
  486.                     if(vx>0) vx = 0;
  487.                 }
  488.                 if(vy>0) {
  489.                     vy -= dt*dragY;
  490.                     if(vy<0) vy = 0;
  491.                 }
  492.                 else if(vx<0) {
  493.                     vy += dt*dragY;
  494.                     if(vy>0) vy = 0;
  495.                 }
  496.             }
  497.         }
  498.         else {
  499.             vx += dt*ax;
  500.             vy += dt*ay;
  501.         }
  502.        
  503.         t+=dt;
  504.         if(ttl > 0 && t>=ttl) {
  505.             t = ttl;
  506.             dead = true;
  507.         }
  508.         /////////////////
  509.         dx = dt*(vx+pvx);
  510.         dy = dt*(vy+pvy);
  511.        
  512.         x += dx;
  513.         y += dy;
  514.        
  515.         if(damp!=0) {
  516.             ax -= damp*ax*dt;       //TESTING
  517.             ay -= damp*ay*dt;
  518.         }
  519.            
  520.         if(ax==0 && ay==0) {
  521.             if(damp!=0) {
  522.                 vx -= damp*vx*dt;
  523.                 vy -= damp*vy*dt;
  524.             }
  525.             else if(dragX!=0 || dragY !=0) {
  526.                 if(vx>0) {
  527.                     vx -= dt*dragX;
  528.                     if(vx<0) vx = 0;
  529.                 }
  530.                 else if(vx<0) {
  531.                     vx += dt*dragX;
  532.                     if(vx>0) vx = 0;
  533.                 }
  534.                 if(vy>0) {
  535.                     vy -= dt*dragY;
  536.                     if(vy<0) vy = 0;
  537.                 }
  538.                 else if(vx<0) {
  539.                     vy += dt*dragY;
  540.                     if(vy>0) vy = 0;
  541.                 }
  542.             }
  543.         }
  544.         else {
  545.             vx += dt*ax;
  546.             vy += dt*ay;
  547.         }
  548.        
  549.         t+=dt;
  550.         if(ttl > 0 && t>=ttl) {
  551.             t = ttl;
  552.             dead = true;
  553.         }
  554.         /////////////////
  555.        
  556.     }
  557.  
  558.    
  559. }
Advertisement
Add Comment
Please, Sign In to add comment