Re: [flexcoders] Automation and Application Domains

2013-10-03 Thread Nigel Magnay
Yes, it does seem a problem - hence me trying to figure out if it was a
'burned in' limitation of the flash runtime, or something I could find a
workaround for.



On Wed, Oct 2, 2013 at 6:58 PM, Alex Harui aha...@adobe.com wrote:

 **


 Even generating shim classes would result in conflicts if you have more
 than one definition of a class you are trying to shim into the main
 applicationdomain.

 But if you can guarantee there isn't conflicts for a particular test
 scenario, then maybe you can test by loading into the main app domain.

 From: Nigel Magnay nigel.mag...@gmail.com
 Reply-To: flexcoders@yahoogroups.com flexcoders@yahoogroups.com
 Date: Tuesday, October 1, 2013 4:38 AM
 To: flexcoders@yahoogroups.com flexcoders@yahoogroups.com
 Subject: Re: [flexcoders] Automation and Application Domains



 Yes, it seems to fail.

 RIAtest has a component 'inspector', which shows the component tree. If my
 UI component is in a different (child) application domain, it never appears
 in the inspector (and events from manipulating it never get received).

 When I raised a ticket against it (and asked if there were some API that I
 could use to perhaps inform it more directly to my new application
 domains), they pointed me to the supposed flex automation restriction -
 hence me starting to dig to see if I might be able to overcome the
 restriction - perhaps by generating shim classes or delegates..



 On Fri, Sep 27, 2013 at 7:25 PM, Alex Harui aha...@adobe.com wrote:

 **


 Did you actually try it and found that it fails?  I would think it should
 be able to introspect child appdomains.

 From: Nigel Magnay nigel.mag...@gmail.com
 Reply-To: flexcoders@yahoogroups.com flexcoders@yahoogroups.com
 Date: Friday, September 27, 2013 6:36 AM
 To: flexcoders@yahoogroups.com flexcoders@yahoogroups.com
 Subject: [flexcoders] Automation and Application Domains



 We are using RIAtest, which uses flex automation to test some
 applications.

 Reading the flex documentation, it contains the following:

 Testing applications that load external libraries

 ... A library that is loaded at run time (including run-time shared
 libraries (RSLs)) must be loaded into the ApplicationDomain of the loading
 application. If the SWF file used in the application is loaded in a
 different application domain, automated testing record and playback will
 not function properly.


 This is particularly inconvenient for us; we load UI controls into
 separate ApplicationDomains (all children of
 ApplicationDomain.currentDomain) because they can have conflicting
 classnames, and this allows each form to be generated in isolation, and
 they cannot interfere with each other. The thought of having to refactor
 hundreds of classes is not appealing.


 This seems to prevent RIAtest's inspector from finding child controls
 sourced from that loader.

 Is there any way around this restriction, perhaps by implementing some
 kind of delegate class, or overriding the automation provider to allow it
 to callback to discover the applicationdomains it needs to search?


  



Re: [flexcoders] Automation and Application Domains

2013-10-01 Thread Nigel Magnay
Yes, it seems to fail.

RIAtest has a component 'inspector', which shows the component tree. If my
UI component is in a different (child) application domain, it never appears
in the inspector (and events from manipulating it never get received).

When I raised a ticket against it (and asked if there were some API that I
could use to perhaps inform it more directly to my new application
domains), they pointed me to the supposed flex automation restriction -
hence me starting to dig to see if I might be able to overcome the
restriction - perhaps by generating shim classes or delegates..



On Fri, Sep 27, 2013 at 7:25 PM, Alex Harui aha...@adobe.com wrote:

 **


 Did you actually try it and found that it fails?  I would think it should
 be able to introspect child appdomains.

 From: Nigel Magnay nigel.mag...@gmail.com
 Reply-To: flexcoders@yahoogroups.com flexcoders@yahoogroups.com
 Date: Friday, September 27, 2013 6:36 AM
 To: flexcoders@yahoogroups.com flexcoders@yahoogroups.com
 Subject: [flexcoders] Automation and Application Domains



 We are using RIAtest, which uses flex automation to test some applications.

 Reading the flex documentation, it contains the following:

 Testing applications that load external libraries

 ... A library that is loaded at run time (including run-time shared
 libraries (RSLs)) must be loaded into the ApplicationDomain of the loading
 application. If the SWF file used in the application is loaded in a
 different application domain, automated testing record and playback will
 not function properly.


 This is particularly inconvenient for us; we load UI controls into
 separate ApplicationDomains (all children of
 ApplicationDomain.currentDomain) because they can have conflicting
 classnames, and this allows each form to be generated in isolation, and
 they cannot interfere with each other. The thought of having to refactor
 hundreds of classes is not appealing.


 This seems to prevent RIAtest's inspector from finding child controls
 sourced from that loader.

 Is there any way around this restriction, perhaps by implementing some
 kind of delegate class, or overriding the automation provider to allow it
 to callback to discover the applicationdomains it needs to search?

  



[flexcoders] Automation and Application Domains

2013-09-27 Thread Nigel Magnay
We are using RIAtest, which uses flex automation to test some applications.

Reading the flex documentation, it contains the following:

Testing applications that load external libraries

... A library that is loaded at run time (including run-time shared
libraries (RSLs)) must be loaded into the ApplicationDomain of the loading
application. If the SWF file used in the application is loaded in a
different application domain, automated testing record and playback will
not function properly.


This is particularly inconvenient for us; we load UI controls into
separate ApplicationDomains (all children of
ApplicationDomain.currentDomain) because they can have conflicting
classnames, and this allows each form to be generated in isolation, and
they cannot interfere with each other. The thought of having to refactor
hundreds of classes is not appealing.


This seems to prevent RIAtest's inspector from finding child controls
sourced from that loader.

Is there any way around this restriction, perhaps by implementing some kind
of delegate class, or overriding the automation provider to allow it to
callback to discover the applicationdomains it needs to search?


[flexcoders] Equivalent of editorUsesEnterKey in spark

2013-02-14 Thread Nigel Magnay
In mx:Datagrid, you can easily declare that a column uses the enter
key, so you can enter multiline text into it.

Basically, exactly this:
http://blog.flexexamples.com/2007/09/30/using-a-flex-textarea-control-as-a-drop-in-item-editor/

(see how you can hit enter in the grid cell, and enter multiline text).


How does one do this in Spark?

I've diagnosed the editor ending when it receives the keyboard ENTER
event into DatagridEditor::editor_keydownHandler.

I can't just cancel / stop propagation of the event / modify the
event, otherwise the textarea doesn't add the CR.

I can't override in some custom version DataGridEditor because
editor_keyDownHandler is declared private. The DataGridEditor anyway
is instantiated in an mx_internal function in DataGrid.


It seems like this behaviour is burnt in and can't easily be reversed... ?


Re: [flexcoders] Frustrations with the profiler - analyzing memory usage.

2013-02-06 Thread Nigel Magnay
Thanks for that - that's very helpful information.

I'm getting dragged into diagnosis because on very low-spec machines our
app is tending to eat memory causing it to heavily slow down. I've managed
to diagnose some of these (use of setTimeout, Bindings that never go away)
which is liable to help hugely.

What I'm having difficulty in is determining what things in the profiler
are *genuine leaks*, and what things are things the GC will eventually get
to as they're weak references (I do the System.gc() and
newLocalConnection().connect(
'foo'); tricks beforehand, but they don't feel like they're reliable. It's
a shame there isn't a System.reallyreallyfullGCandIDontCareHowLongItTakes()
)

A good example is mx.core:EmbeddedFont. When the app is in use, this number
doubles. So I analyse an instance, and find only 1 path - which it states
as simply mx.core:EmbeddedFont (1 Path), GC Root=YES and allocated in
mx.core:EmbeddedFontRegistry:GetAssociatedModuleFactory().

What I believe that's telling me is that the reference is there because of
the static EmbeddedFontRegistry in EmbeddedFont, and it's being stored in
that registry in a cache (cachedFontsForObjects) - which is a weak
dictionary.

My gut instinct at this point is this is irrelevant, it'll get GCed
eventually. Two things strike me though
  - I'm guessing that it's in that dictionary as the object reference view
stops at the EmbeddedFont, which seems a shame. That makes it difficult in
any code that's pretty complex
  - I'm guessing it'll be GCed. But I wonder now if *all* those things will
be GCed *eventually*. Why didn't the 'invoke GC' parts actually cause it to
be collected..



t
On Tue, Feb 5, 2013 at 7:32 PM, Alex Harui aha...@adobe.com wrote:

 **


 The true test of a leak is whether your OS’s process manager says that
 memory consumption keeps going up.

 Before we had a profiler, we would add code to the app to exercise some
 sequence (by faking button events, etc), force garbage collection, and
 report System.totalMemory over and over again and run it overnight.  Due to
 the way Flash manages memory, just manually exercising the sequence a few
 dozen times may show increasing memory even though there isn’t a leak,
 although really bad leaks will show up in System.totalMemory or in the OS
 process manager pretty quickly.  Leaky apps will eventualy crash the
 browser, or just report an endless increase in memory, way past what you
 would expect for an app of that size and complexity.

 Historically, the profiler has shown a dependency on the version of the
 Flash Player.  Whatever version of Flash Player is recommended for the
 default SDK in your version of Flash Builder should be the one to use when
 profiling.  Newer and older versions may report memory slightly differently
 and fool the profiler.

 HTH,
 -Alex


 On 2/5/13 5:57 AM, Nigel Magnay nigel.mag...@gmail.com wrote:






 We have an application that is leaking memory. Sadly, trying to diagnose
 this with the flex profiler (4.6, 4.7) is proving to be a frustrating
 experience.

 I've picked on one object class to try and understand what is going on. We
 have a wizard-style dialog box with a sidebar control 'wizardlinks' which
 adds 'wizardlink' objects to it. Both are Spark group controls. The links
 are being added to the group with an 'addElement' call.

 The WizardLink instances are growing in memory and do not seem to be being
 released. I've pared them right down to try and eliminate possible
 listeners.

 If I immediately remove the link, Something still seems to hold on to it.
 If I view it in the profiler object view, it expands saying (1 Path) but
 won't describe what it is. Even more mysteriously - if I run with Watch
 live memory data, I can see the instances going up -- but if I then do a
 memory dump, those instances are now missing. If I don't run with 'watch
 live memory data', they are there.

 Part of this feels like chasing shadows - are these real leaks, or just
 things the collector will eventually get round to?







 --
 Alex Harui
 Flex SDK Team
 Adobe Systems, Inc.
 http://blogs.adobe.com/aharui

  



[flexcoders] Frustrations with the profiler - analyzing memory usage.

2013-02-05 Thread Nigel Magnay
We have an application that is leaking memory. Sadly, trying to diagnose
this with the flex profiler (4.6, 4.7) is proving to be a frustrating
experience.

I've picked on one object class to try and understand what is going on. We
have a wizard-style dialog box with a sidebar control 'wizardlinks' which
adds 'wizardlink' objects to it. Both are Spark group controls. The links
are being added to the group with an 'addElement' call.

The WizardLink instances are growing in memory and do not seem to be being
released. I've pared them right down to try and eliminate possible
listeners.

If I immediately remove the link, Something still seems to hold on to it.
If I view it in the profiler object view, it expands saying (1 Path) but
won't describe what it is. Even more mysteriously - if I run with Watch
live memory data, I can see the instances going up -- but if I then do a
memory dump, those instances are now missing. If I don't run with 'watch
live memory data', they are there.

Part of this feels like chasing shadows - are these real leaks, or just
things the collector will eventually get round to?


Re: [flexcoders] Re: Flex alternatives

2012-12-17 Thread Nigel Magnay

 Adobe’s focus for FlashBuilder is on building ActionScript gaming and
 premium video projects that run on the Flash player.

I think many people assumed that the driver was legacy in-browser flex
apps, plus AIR apps for mobile devices. That the older, legacy support had
been farmed out to Apache, leaving the Flash Builder products as 'premium
value-added design tools' fit consistently with what Adobe does elsewhere.

The (baffling) removal of design view in 4.7 puts that impression to the
sword, however.

I'm not saying it's the wrong way to go - it's after all up to Adobe to
choose where to invest their product development. It's in a sense good to
know that Adobe has ceded all hope of competing with Google or Microsoft
for HTML5 application building - that makes the choices a bit easier.


[flexcoders] Flex, updateDisplayList and clipping.

2011-12-07 Thread Nigel Magnay
Hi.

I have a component that uses the Graphics primitives in the
updateDisplayList. It does lots of text outputting, so it uses the
technique of having a single UITextField, getting the bitmap data and
bitmapFill-ing it to the canvas. Adding multiple first-class components to
the canvas is just way, way too slow to be viable.

This all works great. However, we now want to draw other things - things
that are not so easy to clip - eg: Circles!

I was surprised to see that Graphics offers no clipping. Is the only way
around this to draw the component to something like a Sprite, then to
bitmapFill that to the screen doing manual clipping calculations ?


[flexcoders] 3rd party RSLs ?

2011-11-02 Thread Nigel Magnay
Would I be correct in saying that any RSLs that my SWF uses must be
compiled with (exactly) the same version of the SDK ?

I have an SWC that I'm using as an RSL rather than linking directly, and
it's bombing out with

VerifyError: Error #1053: Illegal override of getPollSyncMessageResponder
in mx.messaging.channels.NetConnectionChannel.

I believe that's because it was built with an (older) version of the SDK;
but I wanted to verify this.

Is there any way of forcing an RSL to become compatible with a different
SDK, or am I stuck recompiling from source ?


[flexcoders] Diagnosing a TypeError #1034 with RSLs

2011-11-02 Thread Nigel Magnay
I've just been updating our build to use the latest Flexmojos 4.1-beta, and
to use RSL versions of the 4.5.1 flex framework. To do this, I've included
all the dependencies in a manual, correct order, so that the RSL load order
is correct. I've even manually added entries to get the
correct application-domain-targetdefault/application-domain-target
entries for the runtime-shared-library-path elements, and validated against
the flash builder generated -config xml.

It works. Mostly.

I have one rather frustrating error - a TypeError. I believe I understand
what it is telling me, but
I can find no way of getting anything sensible out of flash to help me
figure out why the domains
are screwed up. The link reports and config outputs all look OK to me.

The error is:

TypeError: Error #1034: Type Coercion failed: cannot convert  to
xreader.converters.reflection.ReflectionProvider.
at xreader::xreader()
at
xreader::Modelxreader()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/xreader/Modelxreader.as:33]
at
Function/anonymous()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/managers/SystemManager.as:65]
at
Function/anonymous()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/rpc/AdminService.as:96]
at Function/http://adobe.com/AS3/2006/builtin::call()
at
Function/anonymous()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/rpc/BaseWebService.as:82]
at
net.mycorp.mycorp.util::Timing/time()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/net/mycorp/mycorp/util/Timing.as:61]
at
rpc::BaseWebService/resultHandler()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/rpc/BaseWebService.as:80]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.rpc::AbstractOperation/
http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[E
:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AbstractOperation.as:249]
at mx.rpc::AbstractInvoker/
http://www.adobe.com/2006/flex/mx/internal::resultHandler()[E
:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:318]
at
mx.rpc::Responder/result()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\Responder.as:56]
at
mx.rpc::AsyncRequest/acknowledge()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:84]
at
DirectHTTPMessageResponder/completeHandler()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\messaging\channels\DirectHTTPChannel.as:451]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()

(suspicious that there is no class mentioned in the 'cannot convert  to'
part.

The flex-app includes mycorp-flex-components and mycorp-flex-xreader as
RSLs. mycorp-flex-components references mycorp-flex-xreaderas an
'external', and at the point of the error is passing an object which is a
subclass of one defined within mycorp-flex-xreader
(ReflectionProvider), but the class there doesn't think the type is
correct. I can only assume that for some reason there's something wierd
going on with domains, but I cannot figure out what.

Is there any tooling that could help to figure this out?


Re: [flexcoders] Diagnosing a TypeError #1034 with RSLs

2011-11-02 Thread Nigel Magnay
It's just passing classes that are constructed in the normal way; -

mycorp-flex-xreader rsl defines

public class XReader {
 ...
   public function XReader(reflectionProvider:ReflectionProvider) {}
 where
 public interface ReflectionProvider { ... }

public class ASReflectionProvider implements ReflectionProvider { .. }
mycorp-flex-components defines

  public class ModelXReader extends XReader {
  ...
 public function ModelXReader() {
   ..
super( new ModelReflectionProvider() );
}

public class ModelReflectionProvider extends ASReflectionProvider {
 ...
}

mycorp-flex-xreader and mycorp-flex-components are RSLs in mycorp-flex-app;
mycorp-flex-xreader is an external in mycorp-flex-components.

It's bombing out here trying to call the super() constructor, which I can
only think means that there are 1 definitions for ReflectionProvider,
which I don't understand..






On Wed, Nov 2, 2011 at 8:06 PM, Alex Harui aha...@adobe.com wrote:

 **


 What is the code doing?  If it is trying to find a class definition by
 name and can’t that might be the issue.



 On 11/2/11 12:21 PM, Nigel Magnay nigel.mag...@gmail.com wrote:







 I've just been updating our build to use the latest Flexmojos 4.1-beta,
 and to use RSL versions of the 4.5.1 flex framework. To do this, I've
 included all the dependencies in a manual, correct order, so that the RSL
 load order is correct. I've even manually added entries to get the correct
 application-domain-targetdefault/application-domain-target entries for
 the runtime-shared-library-path elements, and validated against the flash
 builder generated -config xml.

 It works. Mostly.

 I have one rather frustrating error - a TypeError. I believe I understand
 what it is telling me, but
 I can find no way of getting anything sensible out of flash to help me
 figure out why the domains
 are screwed up. The link reports and config outputs all look OK to me.

 The error is:

 TypeError: Error #1034: Type Coercion failed: cannot convert  to
 xreader.converters.reflection.ReflectionProvider.
 at xreader::xreader()
 at
 xreader::Modelxreader()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/xreader/Modelxreader.as:33]
 at
 Function/anonymous()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/managers/SystemManager.as:65]
 at
 Function/anonymous()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/rpc/AdminService.as:96]
 at Function/http://adobe.com/AS3/2006/builtin::call()
 at
 Function/anonymous()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/rpc/BaseWebService.as:82]
 at
 net.mycorp.mycorp.util::Timing/time()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/net/mycorp/mycorp/util/Timing.as:61]
 at
 rpc::BaseWebService/resultHandler()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/rpc/BaseWebService.as:80]
 at flash.events::EventDispatcher/dispatchEventFunction()
 at flash.events::EventDispatcher/dispatchEvent()
 at mx.rpc::AbstractOperation/
 http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AbstractOperation.as:249]
 at mx.rpc::AbstractInvoker/
 http://www.adobe.com/2006/flex/mx/internal::resultHandler()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:318]
 at
 mx.rpc::Responder/result()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\Responder.as:56]
 at
 mx.rpc::AsyncRequest/acknowledge()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:84]
 at
 DirectHTTPMessageResponder/completeHandler()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\messaging\channels\DirectHTTPChannel.as:451]
 at flash.events::EventDispatcher/dispatchEventFunction()
 at flash.events::EventDispatcher/dispatchEvent()
 at flash.net::URLLoader/onComplete()

 (suspicious that there is no class mentioned in the 'cannot convert  to'
 part.

 The flex-app includes mycorp-flex-components and mycorp-flex-xreader as
 RSLs. mycorp-flex-components references mycorp-flex-xreaderas an
 'external', and at the point of the error is passing an object which is a
 subclass of one defined within mycorp-flex-xreader (ReflectionProvider),
 but the class there doesn't think the type is correct. I can only assume
 that for some reason there's something wierd going on with domains, but I
 cannot figure out what.

 Is there any tooling that could help to figure this out?





 --
 Alex Harui
 Flex SDK Team
 Adobe System, Inc.
 http://blogs.adobe.com/aharui

  



[flexcoders] Stupid issue with Error #2173: Unable to read object in stream.

2011-08-08 Thread Nigel Magnay
Business objects defined in SWC; linked as RSL.

All classes included.

Occasional errors, of this form:

ArgumentError: Error #2173: Unable to read object in stream.  The class
my.klass.MyClass does not implement flash.utils.IExternalizable but is
aliased to an externalizable class.

I know I can fix this in the RSL with

var flex_is_lame:Object = [ MyClass, MyOtherClass, MyYetAnotherClass, ]

But that feels a stupid solution to persuading the environment not to throw
away classes.

Is there a better way?


Re: [flexcoders] Re: Performance feedback PLEASE

2010-04-09 Thread Nigel Magnay
Some figures:

Mac Pro 2008, 8 cores @ 2.8Ghz; NVidia 8800 GT.

Under flash 10.0 : ~23fps
Under flash 10.1 : ~46fps

Here's the kicker

On the same machine, running Windows in VMWare fusion in a window :

Under flash 10.0 : ~64fps

Yep. That's right. It's much quicker in a Windows VM.

Little wonder Apple has such distaste for Adobe these days.


--- In flexcoders@yahoogroups.com flexcoders%40yahoogroups.com, Allan
 Pichler dreamc...@... wrote:
 
  I was wondering if anyone could take a quick glance at my AS3 3d renderer
  http://api.pluton.webhouse.dk/pool3d/pool3d.html and reply what FPS they
 get
  on their gear. If you could also provide your CPU info that would be
  extremely helpful.
 
 
 
  For the curious the engine sports the following features:
 
 
 
  Subpixel positioning (1/4 pixel on both x  y)
 
  Antialiasing
 
  Ambient light
 
  Specular light
 
 
 
 
 
  Best regards and have a wonderful day!
 
 
 
  Allan Pichler
 
  RIA Architect - ColdFusion/Flex/Ajax/UI
 
 
 
  Email: dreamc...@...

 
  Phone DK: +45 22 68 08 88
 
  Phone US: +1 (415) 683 0313
 
  Skype: apichler
 
  Yahoo: allan_pichler
 
  Facebook: www.facebook.com/apichler
 
  LinkedIn: www.linkedin.com/in/apichler
 

  



[flexcoders] Flex4 Tile performance very slow?

2010-03-31 Thread Nigel Magnay
Hi

We have a flex3 app, part of which has a dialog box from which the
user can pick a particular graph-type component to add to their
display.

Internally, this is generated with an mx:Tile list, where the
dynamic list of children is created then addChild()-ed to the tile.

This seems fine - but in certain circumstances seems appallingly slow.
To illustrate - if we have a test doing

   mx:Tile id = theTile left=10 right=10 top=10 bottom=10/

Then if you do something like the following:

for(var i:int=0;i50;i++)
{
  var j:Button = new Button();

  j.width = 100;
  j.height = 75;

  theTile.addChild(j);  

}   


Then it executes very very fast - too fast to even notice. But if I
replace a 'button' with an mx.charts.LineChart it slows down to be a
couple of seconds, which is on the boundary of being acceptable. But
if I change it to be a (degrafa-based)
com.brightPoint.controls.DegrafaGauge, it's 5 seconds; not what you
want when a user should be flipping through pages quickly.

I tried replacing the mx:Tile with a new Spark BorderContainer, and
it's no better. It feels slower than flex3 was (but that's just a
vague impression).

I suspect I need to be fiddling with ItemRenderers, but I'm not sure
it's going to really help. Are these just badly implemented
components? Is there something else I can do to mitigate the initial
render slowness (e.g: is it actually burning time trying to lay
something out) ?


[flexcoders] Popup focus issue, seems very broken

2010-03-09 Thread Nigel Magnay
I have a very odd issue in my Flex3 app.

I have a popup that is an mx:TitleWindow, instantiated with the
popupManager in the normal way. It has a number of buttons, and a
canvas. On creationComplete, an additional control is dynamically
added to the canvas using childCanvas.addChild().

Everything works perfectly, *except* that the focus does not arrive in
the popup; it remains in the background application window (which is
blurred out as normal). On tabbing, I can observe the blue focus
rectangle moving about the old top-level window.

This doesn't always happen- but in about 75% of cases it does. If I
manually set the focus into the popup (e.g into a textfield or a
button), then tabbing continues to only have an effect in the wrong
window.

I've tried explicitly setting the focus in the creationComplete method
(setFocus), both in the popup and from the outer container but no
dice. I've tried making the added component trivially simple, and it
still seems to cause it to break.

Any good ideas, or is this just terminally broken?


[flexcoders] XML performance and getting sensible / useable Profiler information

2009-05-05 Thread Nigel Magnay
Hello

I have a flex project that is consuming XML data from a web service;
(the detail of which is that  it's coming across in an XStream
serialised form).

In flex, I can parse this, and convert it into native objects (with
effectively an ActionScript implementation of XStream). Unfortunately,
the performance is horrible. For around 1Mb of data, representing
about 3500 objects to be created, takes around 5 seconds. If 1Mb was
the largest document size, I could probably live with it... but of
course it isn't.

Now, I had hoped to use the flex profiler in order to try and
determine which bit is actually slow, as quite a bit of effort has
gone into caching things that are known to be slow (e.g. class
definition lookups). Unfortunately, again, the flex profiler seems to
not be very useful. Firstly it doesn't often report on some classes at
all, it often reports obviously bogus values (e.g. methods with
cumulative time, but no actual calls (!)). It looks as if internal VM
time, perhaps doing things like XML.getAttribute aren't being included
(my gut feel is that my code is running reasonably fast, it's just
coming up against VM performance that just isn't terribly good)., or
perhaps that it's not recording in anything like a useful level of
granularity. And because there's no threading, I can't even mitigate
it by putting it in a background updater thread.

I could probably add some AMF3 support. There's a variety of reasons
why I didn't want to do that, as it's yet another output format to
have to add on the server, which has already quite a bit of extra code
to deal with things like removing hibernate proxies. TBH, it's
disappointing the performance is so poor and is likely to add to the
calls to be switching to silverlight.

Are there any better profilers? Are there any details on the
performance characteristics of the XML support, that I might use to
speed it up?