Guest User

Untitled

a guest
Oct 8th, 2011
109
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package
  2. {
  3.     import flash.display.*;
  4.     import flash.events.Event;
  5.     import flash.events.MouseEvent;
  6.     import flash.system.Capabilities;
  7.     import flash.text.*;
  8.     import flash.utils.*;
  9.  
  10.     /**
  11.     *   An app to test function call performance
  12.     *   @author Jackson Dunstan
  13.     */
  14.     public class FunctionPerformanceTest extends Base implements IInterface
  15.     {
  16.         private function privateFunction(): void {}
  17.         protected function protectedFunction(): void {}
  18.         internal function internalFunction(): void {}
  19.         public function publicFunction(): void {}
  20.  
  21.         private function get privateGetFunction(): int { return 0; }
  22.         protected function get protectedGetFunction(): int { return 0; }
  23.         internal function get internalGetFunction(): int { return 0; }
  24.         public function get publicGetFunction(): int { return 0; }
  25.  
  26.         private function set privateSetFunction(val:int): void {}
  27.         protected function set protectedSetFunction(val:int): void {}
  28.         internal function set internalSetFunction(val:int): void {}
  29.         public function set publicSetFunction(val:int): void {}
  30.  
  31.         private static function staticPrivateFunction(): void {}
  32.         protected static function staticProtectedFunction(): void {}
  33.         internal static function staticInternalFunction(): void {}
  34.         public static function staticPublicFunction(): void {}
  35.  
  36.         override protected function overrideProtectedFunction(): void {}
  37.         override internal function overrideInternalFunction(): void {}
  38.         override public function overridePublicFunction(): void {}
  39.  
  40.         final private function finalPrivateFunction(): void {}
  41.         final protected function finalProtectedFunction(): void {}
  42.         final internal function finalInternalFunction(): void {}
  43.         final public function finalPublicFunction(): void {}
  44.  
  45.         final override protected function finalOverrideProtectedFunction(): void {}
  46.         final override internal function finalOverrideInternalFunction(): void {}
  47.         final override public function finalOverridePublicFunction(): void {}
  48.  
  49.         public function interfaceFunction(): void {}
  50.  
  51.         private var logger:TextField;
  52.         private const ITERATIONS:int = 10000000;
  53.         private var testing:Boolean;
  54.  
  55.         /**
  56.         *   Application entry point
  57.         */
  58.         public function FunctionPerformanceTest() {
  59.             stage.align = StageAlign.TOP_LEFT;
  60.             stage.scaleMode = StageScaleMode.NO_SCALE;
  61.             logger = new TextField();
  62.             logger.autoSize = TextFieldAutoSize.LEFT;
  63.             addChild(logger);
  64.             log("          Click to test.");
  65.             graphics.beginFill(0xFFFFFF);
  66.             graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
  67.             graphics.endFill();
  68.  
  69.             addEventListener(MouseEvent.CLICK, init);
  70.         }
  71.        
  72.         private function setVersionString():void {
  73.             logger.text = "  ";
  74.             logger.appendText((Capabilities.supports64BitProcesses ? "64" : Capabilities.supports32BitProcesses ? "32" : "16") + " bit ");
  75.             logger.appendText(Capabilities.os + " ");
  76.             logger.appendText(Capabilities.cpuArchitecture + " ");
  77.             logger.appendText(Capabilities.version.split(",").join(".").split(" ")[1] + " ");
  78.             logger.appendText(Capabilities.isDebugger ? "Debug " : "Release ");
  79.             logger.appendText(Capabilities.playerType);
  80.             logger.appendText("\n");
  81.         }
  82.        
  83.         private function init(ev:Event = null):void {
  84.             if (!testing) {
  85.                 testing = true;
  86.                 setVersionString();
  87.                 addEventListener(Event.ENTER_FRAME, testDynamicFunctions);
  88.             }
  89.         }
  90.  
  91.         private function testDynamicFunctions(ev:Event): void {
  92.             removeEventListener(Event.ENTER_FRAME, testDynamicFunctions);
  93.             var beforeTime:int;
  94.             var i:int;
  95.             const NUM_ITERATIONS:int = ITERATIONS;
  96.  
  97.             function localFunction(): void {}
  98.             var functionVarFunction:Function = function(): void {}
  99.  
  100.             beforeTime = getTimer();
  101.             for (i = 0; i < NUM_ITERATIONS; ++i)
  102.             {
  103.                 localFunction();
  104.             }
  105.             beforeTime = getTimer()-beforeTime;
  106.             log("Local  " + beforeTime);
  107.  
  108.             beforeTime = getTimer();
  109.             for (i = 0; i < NUM_ITERATIONS; ++i)
  110.             {
  111.                 functionVarFunction();
  112.             }
  113.             beforeTime = getTimer()-beforeTime;
  114.             log("Local Function var " + beforeTime);
  115.  
  116.             log("");
  117.  
  118.             addEventListener(Event.ENTER_FRAME, testCalls);
  119.         }
  120.  
  121.         private function testCalls(ev:Event):void {
  122.             removeEventListener(Event.ENTER_FRAME, testCalls);
  123.             var beforeTime:int;
  124.             var i:int;
  125.             const NUM_ITERATIONS:int = ITERATIONS;
  126.  
  127.             var functionVarFunction:Function = this.finalPrivateFunction;
  128.             var functionVarFunction2:Function = functionVarFunction.apply;
  129.  
  130.             beforeTime = getTimer();
  131.             for (i = 0; i < NUM_ITERATIONS; ++i)
  132.             {
  133.                 plainFunction();
  134.             }
  135.             beforeTime = getTimer()-beforeTime;
  136.             log("Plain  " + beforeTime);
  137.  
  138.             beforeTime = getTimer();
  139.             for (i = 0; i < NUM_ITERATIONS; ++i)
  140.             {
  141.                 functionVarFunction();
  142.             }
  143.             beforeTime = getTimer()-beforeTime;
  144.             log("NonLocal Function var  " + beforeTime);
  145.  
  146.             beforeTime = getTimer();
  147.             for (i = 0; i < NUM_ITERATIONS; ++i)
  148.             {
  149.                 functionVarFunction();
  150.             }
  151.             beforeTime = getTimer()-beforeTime;
  152.             log("NonLocal Function var 'call' direct    " + beforeTime);
  153.  
  154.             beforeTime = getTimer();
  155.             for (i = 0; i < NUM_ITERATIONS; ++i)
  156.             {
  157.                 functionVarFunction();
  158.             }
  159.             beforeTime = getTimer()-beforeTime;
  160.             log("NonLocal Function var 'apply' direct   " + beforeTime);
  161.  
  162.             functionVarFunction = functionVarFunction.call;
  163.  
  164.             beforeTime = getTimer();
  165.             for (i = 0; i < NUM_ITERATIONS; ++i)
  166.             {
  167.                 functionVarFunction(null);
  168.             }
  169.             beforeTime = getTimer()-beforeTime;
  170.             log("NonLocal Function var 'call' indirect  " + beforeTime);
  171.  
  172.             beforeTime = getTimer();
  173.             for (i = 0; i < NUM_ITERATIONS; ++i)
  174.             {
  175.                 functionVarFunction2(null);
  176.             }
  177.             beforeTime = getTimer()-beforeTime;
  178.             log("NonLocal Function var 'apply' indirect " + beforeTime);
  179.  
  180.             log("");
  181.  
  182.             addEventListener(Event.ENTER_FRAME, testMethods);
  183.         }
  184.  
  185.         private function testMethods(ev:Event): void {
  186.             removeEventListener(Event.ENTER_FRAME, testMethods);
  187.             var beforeTime:int;
  188.             var i:int;
  189.             const NUM_ITERATIONS:int = ITERATIONS;
  190.  
  191.             beforeTime = getTimer();
  192.             for (i = 0; i < NUM_ITERATIONS; ++i)
  193.             {
  194.                 privateFunction();
  195.             }
  196.             beforeTime = getTimer()-beforeTime;
  197.             log("Private    " + beforeTime);
  198.  
  199.             beforeTime = getTimer();
  200.             for (i = 0; i < NUM_ITERATIONS; ++i)
  201.             {
  202.                 protectedFunction();
  203.             }
  204.             beforeTime = getTimer()-beforeTime;
  205.             log("Protected  " + beforeTime);
  206.  
  207.             beforeTime = getTimer();
  208.             for (i = 0; i < NUM_ITERATIONS; ++i)
  209.             {
  210.                 internalFunction();
  211.             }
  212.             beforeTime = getTimer()-beforeTime;
  213.             log("Internal   " + beforeTime);
  214.  
  215.             beforeTime = getTimer();
  216.             for (i = 0; i < NUM_ITERATIONS; ++i)
  217.             {
  218.                 publicFunction();
  219.             }
  220.             beforeTime = getTimer()-beforeTime;
  221.             log("Public " + beforeTime);
  222.  
  223.             log("");
  224.  
  225.             beforeTime = getTimer();
  226.             for (i = 0; i < NUM_ITERATIONS; ++i)
  227.             {
  228.                 this.privateFunction();
  229.             }
  230.             beforeTime = getTimer()-beforeTime;
  231.             log("this.Private   " + beforeTime);
  232.  
  233.             beforeTime = getTimer();
  234.             for (i = 0; i < NUM_ITERATIONS; ++i)
  235.             {
  236.                 this.protectedFunction();
  237.             }
  238.             beforeTime = getTimer()-beforeTime;
  239.             log("this.Protected " + beforeTime);
  240.  
  241.             beforeTime = getTimer();
  242.             for (i = 0; i < NUM_ITERATIONS; ++i)
  243.             {
  244.                 this.internalFunction();
  245.             }
  246.             beforeTime = getTimer()-beforeTime;
  247.             log("this.Internal  " + beforeTime);
  248.  
  249.             beforeTime = getTimer();
  250.             for (i = 0; i < NUM_ITERATIONS; ++i)
  251.             {
  252.                 this.publicFunction();
  253.             }
  254.             beforeTime = getTimer()-beforeTime;
  255.             log("this.Public    " + beforeTime);
  256.  
  257.             log("");
  258.  
  259.             beforeTime = getTimer();
  260.             for (i = 0; i < NUM_ITERATIONS; ++i)
  261.             {
  262.                 staticPrivateFunction();
  263.             }
  264.             beforeTime = getTimer()-beforeTime;
  265.             log("Static private " + beforeTime);
  266.  
  267.             beforeTime = getTimer();
  268.             for (i = 0; i < NUM_ITERATIONS; ++i)
  269.             {
  270.                 staticProtectedFunction();
  271.             }
  272.             beforeTime = getTimer()-beforeTime;
  273.             log("Static protected   " + beforeTime);
  274.  
  275.             beforeTime = getTimer();
  276.             for (i = 0; i < NUM_ITERATIONS; ++i)
  277.             {
  278.                 staticInternalFunction();
  279.             }
  280.             beforeTime = getTimer()-beforeTime;
  281.             log("Static internal    " + beforeTime);
  282.  
  283.             beforeTime = getTimer();
  284.             for (i = 0; i < NUM_ITERATIONS; ++i)
  285.             {
  286.                 staticPublicFunction();
  287.             }
  288.             beforeTime = getTimer()-beforeTime;
  289.             log("Static public  " + beforeTime);
  290.  
  291.             log("");
  292.  
  293.             beforeTime = getTimer();
  294.             for (i = 0; i < NUM_ITERATIONS; ++i)
  295.             {
  296.                 overrideProtectedFunction();
  297.             }
  298.             beforeTime = getTimer()-beforeTime;
  299.             log("Override protected " + beforeTime);
  300.  
  301.             beforeTime = getTimer();
  302.             for (i = 0; i < NUM_ITERATIONS; ++i)
  303.             {
  304.                 overrideInternalFunction();
  305.             }
  306.             beforeTime = getTimer()-beforeTime;
  307.             log("Override internal  " + beforeTime);
  308.  
  309.             beforeTime = getTimer();
  310.             for (i = 0; i < NUM_ITERATIONS; ++i)
  311.             {
  312.                 overridePublicFunction();
  313.             }
  314.             beforeTime = getTimer()-beforeTime;
  315.             log("Override public    " + beforeTime);
  316.  
  317.             log("");
  318.  
  319.             addEventListener(Event.ENTER_FRAME, testSupersAndInterfaces);
  320.         }
  321.  
  322.         private function testSupersAndInterfaces(ev:Event): void {
  323.             removeEventListener(Event.ENTER_FRAME, testSupersAndInterfaces);
  324.             var beforeTime:int;
  325.             var i:int;
  326.             const NUM_ITERATIONS:int = ITERATIONS;
  327.  
  328.             beforeTime = getTimer();
  329.             for (i = 0; i < NUM_ITERATIONS; ++i)
  330.             {
  331.                 super.overrideProtectedFunction();
  332.             }
  333.             beforeTime = getTimer()-beforeTime;
  334.             log("Super protected    " + beforeTime);
  335.  
  336.             beforeTime = getTimer();
  337.             for (i = 0; i < NUM_ITERATIONS; ++i)
  338.             {
  339.                 super.overrideInternalFunction();
  340.             }
  341.             beforeTime = getTimer()-beforeTime;
  342.             log("Super internal " + beforeTime);
  343.  
  344.             beforeTime = getTimer();
  345.             for (i = 0; i < NUM_ITERATIONS; ++i)
  346.             {
  347.                 super.overridePublicFunction();
  348.             }
  349.             beforeTime = getTimer()-beforeTime;
  350.             log("Super public   " + beforeTime);
  351.  
  352.             log("");
  353.  
  354.             beforeTime = getTimer();
  355.             for (i = 0; i < NUM_ITERATIONS; ++i)
  356.             {
  357.                 interfaceFunction();
  358.             }
  359.             beforeTime = getTimer()-beforeTime;
  360.             log("Interface direct   " + beforeTime);
  361.  
  362.             var inter:IInterface = this;
  363.             beforeTime = getTimer();
  364.             for (i = 0; i < NUM_ITERATIONS; ++i)
  365.             {
  366.                 inter.interfaceFunction();
  367.             }
  368.             beforeTime = getTimer()-beforeTime;
  369.             log("Interface via interface    " + beforeTime);
  370.  
  371.             var clazz:FunctionPerformanceTest = this;
  372.             beforeTime = getTimer();
  373.             for (i = 0; i < NUM_ITERATIONS; ++i)
  374.             {
  375.                 clazz.interfaceFunction();
  376.             }
  377.             beforeTime = getTimer()-beforeTime;
  378.             log("Interface via class    " + beforeTime);
  379.  
  380.             log("");
  381.            
  382.             addEventListener(Event.ENTER_FRAME, testGettersAndSetters);
  383.         }
  384.  
  385.         private function testGettersAndSetters(ev:Event): void {
  386.             removeEventListener(Event.ENTER_FRAME, testGettersAndSetters);
  387.             var beforeTime:int;
  388.             var i:int;
  389.             const NUM_ITERATIONS:int = ITERATIONS;
  390.  
  391.             beforeTime = getTimer();
  392.             for (i = 0; i < NUM_ITERATIONS; ++i)
  393.             {
  394.                 privateGetFunction;
  395.             }
  396.             beforeTime = getTimer()-beforeTime;
  397.             log("Private Get    " + beforeTime);
  398.  
  399.             beforeTime = getTimer();
  400.             for (i = 0; i < NUM_ITERATIONS; ++i)
  401.             {
  402.                 protectedGetFunction;
  403.             }
  404.             beforeTime = getTimer()-beforeTime;
  405.             log("Protected Get  " + beforeTime);
  406.  
  407.             beforeTime = getTimer();
  408.             for (i = 0; i < NUM_ITERATIONS; ++i)
  409.             {
  410.                 internalGetFunction;
  411.             }
  412.             beforeTime = getTimer()-beforeTime;
  413.             log("Internal Get   " + beforeTime);
  414.  
  415.             beforeTime = getTimer();
  416.             for (i = 0; i < NUM_ITERATIONS; ++i)
  417.             {
  418.                 publicGetFunction;
  419.             }
  420.             beforeTime = getTimer()-beforeTime;
  421.             log("Public Get " + beforeTime);
  422.  
  423.             log("");
  424.  
  425.             beforeTime = getTimer();
  426.             for (i = 0; i < NUM_ITERATIONS; ++i)
  427.             {
  428.                 privateSetFunction = 0;
  429.             }
  430.             beforeTime = getTimer()-beforeTime;
  431.             log("Private Set    " + beforeTime);
  432.  
  433.             beforeTime = getTimer();
  434.             for (i = 0; i < NUM_ITERATIONS; ++i)
  435.             {
  436.                 protectedSetFunction = 0;
  437.             }
  438.             beforeTime = getTimer()-beforeTime;
  439.             log("Protected Set  " + beforeTime);
  440.  
  441.             beforeTime = getTimer();
  442.             for (i = 0; i < NUM_ITERATIONS; ++i)
  443.             {
  444.                 internalSetFunction = 0;
  445.             }
  446.             beforeTime = getTimer()-beforeTime;
  447.             log("Internal Set   " + beforeTime);
  448.  
  449.             beforeTime = getTimer();
  450.             for (i = 0; i < NUM_ITERATIONS; ++i)
  451.             {
  452.                 publicSetFunction = 0;
  453.             }
  454.             beforeTime = getTimer()-beforeTime;
  455.             log("Public Set " + beforeTime);
  456.  
  457.             log("");
  458.  
  459.             addEventListener(Event.ENTER_FRAME, testFinals);
  460.         }
  461.  
  462.         private function testFinals(ev:Event): void {
  463.             removeEventListener(Event.ENTER_FRAME, testFinals);
  464.             var beforeTime:int;
  465.             var i:int;
  466.             const NUM_ITERATIONS:int = ITERATIONS;
  467.  
  468.             beforeTime = getTimer();
  469.             for (i = 0; i < NUM_ITERATIONS; ++i)
  470.             {
  471.                 finalPrivateFunction();
  472.             }
  473.             beforeTime = getTimer()-beforeTime;
  474.             log("Final Private  " + beforeTime);
  475.  
  476.             beforeTime = getTimer();
  477.             for (i = 0; i < NUM_ITERATIONS; ++i)
  478.             {
  479.                 finalProtectedFunction();
  480.             }
  481.             beforeTime = getTimer()-beforeTime;
  482.             log("Final Protected    " + beforeTime);
  483.  
  484.             beforeTime = getTimer();
  485.             for (i = 0; i < NUM_ITERATIONS; ++i)
  486.             {
  487.                 finalInternalFunction();
  488.             }
  489.             beforeTime = getTimer()-beforeTime;
  490.             log("Final Internal " + beforeTime);
  491.  
  492.             beforeTime = getTimer();
  493.             for (i = 0; i < NUM_ITERATIONS; ++i)
  494.             {
  495.                 finalPublicFunction();
  496.             }
  497.             beforeTime = getTimer()-beforeTime;
  498.             log("Final Public   " + beforeTime);
  499.  
  500.             log("");
  501.  
  502.             beforeTime = getTimer();
  503.             for (i = 0; i < NUM_ITERATIONS; ++i)
  504.             {
  505.                 finalOverrideProtectedFunction();
  506.             }
  507.             beforeTime = getTimer()-beforeTime;
  508.             log("Final Override protected   " + beforeTime);
  509.  
  510.             beforeTime = getTimer();
  511.             for (i = 0; i < NUM_ITERATIONS; ++i)
  512.             {
  513.                 finalOverrideInternalFunction();
  514.             }
  515.             beforeTime = getTimer()-beforeTime;
  516.             log("Final Override internal    " + beforeTime);
  517.  
  518.             beforeTime = getTimer();
  519.             for (i = 0; i < NUM_ITERATIONS; ++i)
  520.             {
  521.                 finalOverridePublicFunction();
  522.             }
  523.             beforeTime = getTimer()-beforeTime;
  524.             log("Final Override public  " + beforeTime);
  525.  
  526.             testing = false;
  527.         }
  528.  
  529.         private function log(msg:*): void {
  530.             logger.appendText(msg + "\n");
  531.         }
  532.     }
  533. }
  534. internal function plainFunction(): void {}
  535. internal interface IInterface {
  536.     function interfaceFunction(): void;
  537. }
  538.  
  539.  
  540.  
RAW Paste Data