blob: 08d6f645309581f056c6f7c4efe5eeccdb78639e [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
//
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
////////////////////////////////////////////////////////////////////////////////
package
{
import flash.display.*;
import flash.events.Event;
import flash.text.*;
import flash.utils.*;
/**
* An app to test function call performance
*/
public class FunctionPerformanceTest extends Base implements IInterface
{
private function privateFunction(): void {}
protected function protectedFunction(): void {}
internal function internalFunction(): void {}
public function publicFunction(): void {}
private function get privateGetFunction(): int { return 0; }
protected function get protectedGetFunction(): int { return 0; }
internal function get internalGetFunction(): int { return 0; }
public function get publicGetFunction(): int { return 0; }
private function set privateSetFunction(val:int): void {}
protected function set protectedSetFunction(val:int): void {}
internal function set internalSetFunction(val:int): void {}
public function set publicSetFunction(val:int): void {}
private static function staticPrivateFunction(): void {}
protected static function staticProtectedFunction(): void {}
internal static function staticInternalFunction(): void {}
public static function staticPublicFunction(): void {}
override protected function overrideProtectedFunction(): void {}
override internal function overrideInternalFunction(): void {}
override public function overridePublicFunction(): void {}
final private function finalPrivateFunction(): void {}
final protected function finalProtectedFunction(): void {}
final internal function finalInternalFunction(): void {}
final public function finalPublicFunction(): void {}
final override protected function finalOverrideProtectedFunction(): void {}
final override internal function finalOverrideInternalFunction(): void {}
final override public function finalOverridePublicFunction(): void {}
public function interfaceFunction(): void {}
private var __logger:TextField;
/**
* Application entry point
*/
public function FunctionPerformanceTest()
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
__logger = new TextField();
__logger.autoSize = TextFieldAutoSize.LEFT;
addChild(__logger);
addEventListener(Event.ENTER_FRAME, testDynamicFunctions);
}
private function testDynamicFunctions(ev:Event): void
{
var beforeTime:int;
var i:int;
const NUM_ITERATIONS:int = 10000000;
function localFunction(): void {}
var functionVarFunction:Function = function(): void {}
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
plainFunction();
}
log("Plain: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
localFunction();
}
log("Local: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
functionVarFunction();
}
log("Function var: " + (getTimer()-beforeTime));
log("");
removeEventListener(Event.ENTER_FRAME, testDynamicFunctions);
addEventListener(Event.ENTER_FRAME, testMethods);
}
private function testMethods(ev:Event): void
{
var beforeTime:int;
var i:int;
const NUM_ITERATIONS:int = 10000000;
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
privateFunction();
}
log("Private: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
protectedFunction();
}
log("Protected: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
internalFunction();
}
log("Internal: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
publicFunction();
}
log("Public: " + (getTimer()-beforeTime));
log("");
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
this.privateFunction();
}
log("this.Private: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
this.protectedFunction();
}
log("this.Protected: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
this.internalFunction();
}
log("this.Internal: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
this.publicFunction();
}
log("this.Public: " + (getTimer()-beforeTime));
log("");
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
staticPrivateFunction();
}
log("Static private: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
staticProtectedFunction();
}
log("Static protected: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
staticInternalFunction();
}
log("Static internal: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
staticPublicFunction();
}
log("Static public: " + (getTimer()-beforeTime));
log("");
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
overrideProtectedFunction();
}
log("Override protected: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
overrideInternalFunction();
}
log("Override internal: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
overridePublicFunction();
}
log("Override public: " + (getTimer()-beforeTime));
log("");
removeEventListener(Event.ENTER_FRAME, testMethods);
addEventListener(Event.ENTER_FRAME, testSupersAndInterfaces);
}
private function testSupersAndInterfaces(ev:Event): void
{
var beforeTime:int;
var i:int;
const NUM_ITERATIONS:int = 10000000;
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
super.overrideProtectedFunction();
}
log("Super protected: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
super.overrideInternalFunction();
}
log("Super internal: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
super.overridePublicFunction();
}
log("Super public: " + (getTimer()-beforeTime));
log("");
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
interfaceFunction();
}
log("Interface direct: " + (getTimer()-beforeTime));
var inter:IInterface = this;
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
inter.interfaceFunction();
}
log("Interface via interface: " + (getTimer()-beforeTime));
var clazz:FunctionPerformanceTest = this;
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
clazz.interfaceFunction();
}
log("Interface via class: " + (getTimer()-beforeTime));
log("");
removeEventListener(Event.ENTER_FRAME, testSupersAndInterfaces);
addEventListener(Event.ENTER_FRAME, testGettersAndSetters);
}
private function testGettersAndSetters(ev:Event): void
{
var beforeTime:int;
var i:int;
const NUM_ITERATIONS:int = 10000000;
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
privateGetFunction;
}
log("Private Get: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
protectedGetFunction;
}
log("Protected Get: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
internalGetFunction;
}
log("Internal Get: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
publicGetFunction;
}
log("Public Get: " + (getTimer()-beforeTime));
log("");
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
privateSetFunction = 0;
}
log("Private Set: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
protectedSetFunction = 0;
}
log("Protected Set: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
internalSetFunction = 0;
}
log("Internal Set: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
publicSetFunction = 0;
}
log("Public Set: " + (getTimer()-beforeTime));
log("");
removeEventListener(Event.ENTER_FRAME, testGettersAndSetters);
addEventListener(Event.ENTER_FRAME, testFinals);
}
private function testFinals(ev:Event): void
{
var beforeTime:int;
var i:int;
const NUM_ITERATIONS:int = 10000000;
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
finalPrivateFunction();
}
log("Final Private: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
finalProtectedFunction();
}
log("Final Protected: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
finalInternalFunction();
}
log("Final Internal: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
finalPublicFunction();
}
log("Final Public: " + (getTimer()-beforeTime));
log("");
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
finalOverrideProtectedFunction();
}
log("Final Override protected: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
finalOverrideInternalFunction();
}
log("Final Override internal: " + (getTimer()-beforeTime));
beforeTime = getTimer();
for (i = 0; i < NUM_ITERATIONS; ++i)
{
finalOverridePublicFunction();
}
log("Final Override public: " + (getTimer()-beforeTime));
removeEventListener(Event.ENTER_FRAME, testFinals);
}
private function log(msg:*): void
{
__logger.appendText(msg + "\n");
}
}
}
function plainFunction(): void {}
interface IInterface
{
function interfaceFunction(): void;
}