Skip to content

Instantly share code, notes, and snippets.

@mikecann
Created December 13, 2011 09:57
Show Gist options
  • Save mikecann/1471467 to your computer and use it in GitHub Desktop.
Save mikecann/1471467 to your computer and use it in GitHub Desktop.
FP11 Performance Analytics
package
{
import com.google.analytics.GATracker;
import flash.display.Sprite;
import flash.display.Stage3D;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.display3D.Context3D;
import flash.display3D.Context3DRenderMode;
import flash.events.ErrorEvent;
import flash.events.Event;
import flash.system.ApplicationDomain;
import flash.system.Capabilities;
public class FP11PerformanceAnalytics extends Sprite
{
private var _tracker : GATracker;
public function FP11PerformanceAnalytics()
{
_tracker = new GATracker(this, 'XXXXXXXXXXXXX', 'AS3');
_tracker.trackPageview('/');
if (stage != null) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
if (hasEventListener(Event.ADDED_TO_STAGE))
removeEventListener(Event.ADDED_TO_STAGE, init);
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
// are we running Flash 11 with Stage3D available?
var stage3DAvailable:Boolean = ApplicationDomain.currentDomain.hasDefinition("flash.display.Stage3D");
if (stage3DAvailable)
{
stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, onContext3DCreate);
// detect when the swf is not using wmode=direct
stage.stage3Ds[0].addEventListener(ErrorEvent.ERROR, onStage3DError);
// request hardware 3d mode now
stage.stage3Ds[0].requestContext3D();
}
else
{
trace("stage3DAvailable is false! Older version of SDK?");
_tracker.trackEvent("Stage3D","Not Available","Older version of SDK?");
}
}
// this error is fired if the swf is not using wmode=direct
private function onStage3DError ( e:ErrorEvent ):void
{
trace("Embed Error Detected! Flash 11 settings have hardware 3D turned OFF. Is wmode=direct in the html?");
_tracker.trackEvent("Stage3D","Not Available","onStage3DError - Flash 11 settings have hardware 3D turned OFF. Is wmode=direct in the html?");
}
private function onContext3DCreate(event:Event):void
{
// Obtain the current context
var t:Stage3D = event.target as Stage3D;
var context3D : Context3D = t.context3D;
if (context3D == null)
{
// Currently no 3d context is available (error!)
trace('ERROR: no context3D - video driver problem?');
_tracker.trackEvent("Stage3D","Not Available","oERROR: no context3D - video driver problem?");_tracker
return;
}
// detect software mode (html might not have wmode=direct)
if ((context3D.driverInfo == Context3DRenderMode.SOFTWARE) || (context3D.driverInfo.indexOf('oftware')>-1))
{
//Context3DRenderMode.AUTO
trace("Software Rendering Detected!");
_tracker.trackEvent("Stage3D","Software Render",context3D.driverInfo);
}
trace("Flash 11 Stage3D working! Flash Version: "+Capabilities.version+", 3D mode: "+context3D.driverInfo);
_tracker.trackEvent("Flash11","Hardware Render",context3D.driverInfo);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment