Hi Lex,

all of what you say makes sense to me.  I think SoyLite is a great idea and
we should go ahead with it.

I do have one concern, however: as you mention below, some methods will
simply appear to disappear under SoyLite. For instance, in your first
example, Point.getX() will not appear to produce any output.  I'm a bit
afraid that this will also cause confusion (and, similarly to partial
billing, some people may think the SOYC report is wrong).  It is *less*
confusing than what's currently in trunk, but I am wondering whether there
could be a hybrid approach, where we record in a lightweight way, without
reverting back to the current expensive SOYC, where something gets inlined.

It appears that partial billing is mainly due to inlining.  Would it make
sense to annotate methods with inlining targets, so that the SOYC report
could show, for every method, all places where it was inlined into?  While
this would incur an additional cost during compilation, it could clear up
some confusion in the final report.  Is this too heavy-weight?

For right now, I think SoyLite is a great idea.  I would consider inlining
tracing a possible future enhancement.

kathrin




On Mon, Jun 29, 2009 at 12:20 PM, Lex Spoon <sp...@google.com> wrote:

>
> On Sun, Jun 28, 2009 at 12:19 AM, John Tamplin<j...@google.com> wrote:
> > On Fri, Jun 26, 2009 at 3:20 PM, Lex Spoon <sp...@google.com> wrote:
> >>
> >> I've been trying to think of ways to speed up the -soyc option, and
> >> here is the result of one attempt.  What do people think?
> >>
> >> The idea is to mimick some aspects of the speedy symbolMaps files.
> >> Instead of using the enhanced SourceInfo's to track links between
> >> before-optimization and after-optimization code, bill size information
> >> only to the program as it stands at the end of Java optimization.
> >> Additionally, be careful to avoid needing any massaging of the data
> >> in StoryRecorder; instead, make a single pass through all
> >> the size information.
> >
> > How much would it be skewed by JS-level optimizations?  What about JSNI
> > code?
>
> The basic framework is the same in both cases.  Output bytes get
> billed back to Java code.  That's final output bytes, after all
> optimization is complete.  Both would bill JSNI code to the associated
> Java native method.  The difference is whether to map each byte to
> multiple methods, or to pick just one.
>
> Let me give some examples.  Suppose Point is a class with a method
> getX() that is always inlined.  Thus, Point.getX() is inlined away
> during Java optimization.  Then suppose some method TextArea.getArea()
> calls Point.getX().
>
> In trunk, Point.getX() is billed for every place it gets inlined, so
> it will show up in the size breakdown.  TextArea.getArea(), meanwhile,
> will not be billed for all of its output bytes; the ones that it got
> by inlining Point.getX() will be partially billed back to
> Point.getX().  To contrast, with SoyLite, Point.getX() would not show
> up in the size output, and TextArea.getArea() would be billed slightly
> more.
>
> As another example, suppose Java method Integer.toString ends up
> compiling to JavaScript function toString_3.  Also, suppose the
> compiler creates a static version Integer.toString$, which then
> compiles to function toString_4.  In trunk, Integer.toString is given
> full blame for toString_3 and half blame for toString_4;
> Integer.toString$ is given half blame for toString_4.  With SoyLite,
> Integer.toString is given full blame for toString_3, and
> Integer.toString$ is given full blame for toString_4.
>
> Does that clear things up better?  If not, perhaps we should examine
> Showaces in more detail to find real examples of differences to look
> at.
>
> Lex
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to