Monthly Archives: August 2008

Profiling Flash Applications with Flex Builder 3

If you use to create Flex Apps I’m almost sure you profile your applications with Flex Builder or with another tool related to. This time I’ll talk about profiling applications.
Profiling an application means to inspect the elements that your application is running, how much memory you application is consuming, how many instances of each class your application is executing and more information. You can compare memory snapshots of the same application but in different execution time, etc.
You can profile with Flex Builder any application generated as swf file, this includes Flex Applications, Flash Applications/Web sites/animations and any swf created with any tool that has the capability to export the project as swf file.
Before you profile an application you must ensure that the swf file has been compiled with debugging capabilities. Flex does this job for you every time you run, debug or profile your application from Flex Builder, but in Flash this doesn’t happen. You must explicitly tell Flash that your swf must be compiled for debugging. You can do this from the publish settings panel. In the flash tab you have a checkbox unselected by default which says “Permit debugging” and you must turn it on.
Flash debug option
When you turn on this option your application will be compiled with the compiler argument “debug=true”. (You can also compile your application directly with that compile argument if you have a Flash Compiler). The compiler will embed to the swf file information needed for debugging the application, also it will try to connect the application by socket to a socket server when it starts. Flex Builder starts up that socket server when you profile or debug a swf file from Flex Builder with the green buttons in the toolbar, so, as you can imagine, you should first start up the server and then execute the swf file.
From Flex builder you have to profile an external application. You will find this option in the Menu bar – Profile – Profile External Application. This will launch a pop up window that will ask you for the swf file of the application you want to profile. You also have the option to just prepare Flex Builder for profiling and let it wait for the application to execute and connect to Flex Builder (for this you have to choose “Launch the application manually outside Flex Builder”). I will emphasize the first option which profiles directly the selected application. In this window you can browse for the swf file compiled previously in Flash or Flex with the debug option and then you just launch the profiling process and that’s all.
Flex Profile External Option
Select swf file
Don’t forget to turn off the “Permit debug” option from Flash or clear the “debug” compile argument in production mode because someone could debug you application remotely from his computer.
Enjoy it.

ActionScript 3.0 tips, tricks and how tos…

Today I decided to make some posts about tips, tricks and how to do some useful things in ActionScript 3.0 for Flash CS3 and Flex 3, also for LiveCycle Data Services with Java and PHP.
This happened because I’ve been receiving some technical questions about ActionScript 3.0 in general and Flex integration with other technologies. After that, a friend of mine told me that It’ll be useful that I post those answers and some tips/tricks in my blog.
I’ll try to post once a day about this topics but I can’t promise that I will. So lets start…
I will start with one of the first things I realized that it is more difficult to do than in past versions of ActionScript. This is the generation of class instances when the class name is dynamically generated.
I will create an sample environment.Imagine that you have an application where the graphic elements in this app are created based on user decisions. This example is very common, but… What you really have to do is to create instances of a Class that, at the moment of the application initialization, you still don’t know.
Lets see…You have three classes

BlueButtonOrangeButtonGreenButton

You dont know what type of class instance will be created so you just let it to be dynamically generated. You can do this with a method inside “flash.utils” package named getDefinitionByName.
getDefinitionByName takes a string argument and try to get the whole class reference, so you could create a new instance based on this new class reference.

import flash.utils.getDefinitionByName;var ClassReference:Class = getDefinitionByName("BlueButton") as Class;var newInstance:* = new ClassReference();

You could have the “BlueButton” string inside a variable.Because at compile time you still don’t know what data type will have the “newInstance” variable, I recommend not to specify it yet. You could then get the class name and cast the variable to the correct datatype.
You can get the class name with another function inside the same package. The function name is “getQualifiedClassName”. You can pass an instance reference as the only argument and the function will give you a string with the name of the class that the instance belongs to.
Also, there is another function named “getQualifiedSuperclassName” which acts almost the same as getQualifiedClassName. The only difference is that this function gives you the name of the super class instead of the class.

import flash.utils.getQualifiedClassName;import flash.utils.getQualifiedSuperclassName;trace(getQualifiedClassName(newInstance)); // BlueButtontrace(getQualifiedSuperclassName(newInstance)); // SimpleButton

This is an example. The source code is in the “files” section of this blog.Hope you find it usefull.
Regards

[kml_flashembed movie=”https://albertx.mx/wp-content/uploads/2008/08/main1.swf” height=”150″ width=”300″ /]