Hi everyone, We have a class for capturing events in our Java code for performance monitoring, which I have ported to our GWT client code. Unfortunately, getting it to play nice with the Lightweight Metrics System has been a little frustrating.
By itself, our performance monitoring classes work as expected; basically it consists of a ProfileEvent class which has a String description and a long time (designed for currentTimeMillis), and a Profiler class which creates ProfileEvents and puts them into an ArrayList. By comparing the times of the various ProfileEvents, I can get a rough idea of the time taken between any two events in the ArrayList. Over the weekend I decided to wire up the Lightweight Metrics System to a Profiler in my GWT module. I did this by adapting the Javascript over at http://code.google.com/webtoolkit/doc/latest/DevGuideLightweightMetrics.html, but instead of sending my events to a div, I send them to my GWT Profiler class. My JSNI looks like this: private static native void publish() /*-{ $wnd.addPerfEvent = function (event) { // called by window.__gwtStatsEvent instead of the div example if (event) { @com.mycompany.Profiler::logProfilerEvent(Ljava/lang/ String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/ lang/String;) (event.moduleName,event.subSystem,event.evtGroup,event.type,'' + event.millis); } }; }-*/; My GWT code is something like: public static void logProfilerEvent (String moduleName, String subsystem, String eventGroup, String type, String millis) { Double milliValue = NumberFormat.getDecimalFormat().parse(millis); long milliTime = milliValue.longValue(); Profiler profiler = getProfiler (); profiler.logEvent (new ProfileEvent (moduleName + "." + subsystem + "." + type, milliTime)); } To get this to work I had to cast the event.millis field, a native Javascript number, to a String by appending an empty String. Then, on the GWT side, I am parsing the String and converting it to the long I would have preferred. Passing the millis as a Long worked up to a point, but eventually it would throw a Javascript exception because millis, despite being passed as a "Long", did not conform to the Long format GWT was expecting (something like e[0] + e[1]; in the compiled Javascript; one or the other would be undefined)... hence the workaround. So now it appears to work like a charm. My question is: Is my little hack actually necessary, or is there some JSNI trick or GWT tip that I missed that would make this code more elegant? Should passing millis as a Long work, perhaps there is an issue in the compiler? I saw recently that there have been contributions made to the Lightweight Metrics System that look like it may play nice with the GWT code in the future, and I look forward to seeing that day. Thanks. -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
