Heute möchte ich kurz auf eine neue Veröffentlichung von Grant Skinner hinweisen. Performancetest dient für Performancetests in ActionScript 3 und liegt nun in überarbeiteten Version als zweite Beta vor.

Einige der Hauptfeatures sind:

  • Track time, memory usage and retained (unreleased) memory for functions.
  • Test rendering time for any display object.
  • Write simple one line tests, or build formal test suites.
  • Run multiple iterations of tests to get min, max, and deviation values.
  • Run tests synchronously, or queue them to run them asynchronously.

Beispiel

Das folgende Beispiel belegt, dass x = x + 3 schneller ist, als dreimal die 1 in drei Codezeile nacheinander zu addieren. Das Ergebnis wird so präsentiert:

[TestSuite name='Calculator' tareTime=0 time=-1]
[MethodTest name='variante1' time=21.0 min=20 max=24 ...
[MethodTest name='variante2' time=33.3 min=33 max=34 ...

Variante 1 dauert 21ms, während der Dreizeiler 33ms benötigt.

Der Quellcode ist in zwei Klassen aufgeteilt. Einmal die Hauptklasse und einmal die Klasse mit dem Test. Generell gibt es in PerformanceTest-Bibliothek auch noch einfacher Testmöglichkeiten, so dass diese Aufteilung nach zwangsweise notwendig ist.

Actionscript:
  1. package {
  2.     import tests.*;
  3.  
  4.     import com.gskinner.performance.*;
  5.  
  6.     import flash.display.Sprite;
  7.     import flash.text.TextField;
  8.  
  9.     public class PerformanceTestDemo extends Sprite {
  10.        
  11.         public var textField:TextField = new TextField();
  12.        
  13.         public function PerformanceTestDemo() {
  14.             // text field
  15.             new TextLog().out = out;
  16.             addChild(textField);
  17.             textField.width = 500;
  18.                        
  19.             // test   
  20.             PerformanceTest.queue(new Calculator());
  21.  
  22.         }
  23.    
  24.         protected function out(str:*):void {
  25.             textField.appendText(String(str)+"\n");
  26.         }
  27.        
  28.            
  29.     }
  30. }

Actionscript:
  1. package tests {
  2.    
  3.     import com.gskinner.performance.TestSuite;
  4.     import com.gskinner.performance.MethodTest;
  5.    
  6.     public class Calculator extends TestSuite {
  7.  
  8.         public var loops:uint = 100000;
  9.        
  10.         public function Calculator() {
  11.             name = "Calculator";
  12.             description = "Vergleiche Addition. "+loops+" loops.";
  13.             iterations = 4;
  14.             tests = [
  15.                 new MethodTest(variante1, null, "variante1", 0, 1, "x + 3"),
  16.                 new MethodTest(variante2, null, "variante2", 0, 1"x + 1; x + 1; x + 1")
  17.             ];
  18.         }
  19.    
  20.        
  21.         public function variante1():void {
  22.             for (var i:uint=0; i) {     
  23.                 var x:Number = 0;
  24.                 x = x + 3;
  25.             }
  26.         }
  27.        
  28.         public function variante2():void {
  29.             for (var i:uint=0; i) {       
  30.                 var x:Number = 0;
  31.                 x = x + 1;
  32.                 x = x + 1
  33.                 x = x + 1;             
  34.             }
  35.         }
  36.  
  37.     }
  38.    
  39. }

Link: Grant Skinner PerformanceTest