Quoting Alex Harui <aha...@adobe.com>:




On 12/29/12 8:52 AM, "Michael Schmalle" <apa...@teotigraphix.com> wrote:

I know when I wrote ASDoc, I was able to resolve everything but I used
the MXML compiler as a base. I just need to really understand what is
going on now. I takled the multithreading in FalconJx, but when I
debug, the multithreading is over after;


                 final File outputFolder = new File(outputFile.getParent());
                 List<ICompilationUnit> reachableCompilationUnits = project
.getReachableCompilationUnitsInSWFOrder(ImmutableSet
                                 .of(mainCU));

Once this returns I swear it's synced back on 1 thread. After that
call I loop through all reachable units and produce .js files for each.
Interesting.  I agree by the time you get here we're back on one thread.
But I'm pretty sure the reducers and emitters have been called at least for
some threads by then.

I hadn't noticed that was when you were starting your tree walk for
FalconJx.  I thought you were walking in response to the abcbytes request,
but I'm pretty sure when I'm debugging FalconJS, that happens while many
threads are spinning.

Yes, this is true. I spent 2 hours on this now and have figured it out.

Really, I think there are multiple ways you can implement things here. With the current FalconJS they utilized the existing production framework.

Honestly, the way I first did it, I don't see a real problem with it other than not using the multiple threads to create the actual javascript source code (String) like I am doing.

So yeah, I can see where I could implement the same strategy now and get the string source production in the multple spawned threads.

What confused me in the beginning was the loop using the JSWriter, that is single threaded. What it's going is looping through each compilation unit, taking the ABC bytes which are ACTUALLY String bytes (created in the buildAndCollectProblems() of the JSTarget) and then writing them to disk synchronously.

There is obviously a need for tooling that requires access to the AST in the middle of a compile. We CAN do this since all requests are async, just because we want to compile async first, adjust AST or analyze, update compilation units or projects, dosn't mean we could then go and call handleABCRequest async after all that is done.

It's important to note that all the;

- handleABCBytesRequest()
- handleFileScopeRequest()
- handleOutgoingDependenciesRequest()
- handleSWFTagsRequest()
- handleSyntaxTreeRequest()

Can all be called at different times. That is why they abstract the the ITarget because different targets (SWC, SWF, JS etc.) need to execute these requests in different orders.

I'm not talking about messing around with how SWF production works either right now. Experiementing with this stuff in the JS cross compiler will show results and if people want to adjust the SWF compiler to allow the compiler hooks we will have positivly figured out where it's safe to add them.

Mike



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



--
Michael Schmalle - Teoti Graphix, LLC
http://www.teotigraphix.com
http://blog.teotigraphix.com

Reply via email to