Author: [EMAIL PROTECTED]
Date: Tue Sep 23 11:08:04 2008
New Revision: 3676
Modified:
changes/spoon/runAsync/dev/core/src/com/google/gwt/dev/jjs/impl/FragmentLoaderCreator.java
changes/spoon/runAsync/user/src/com/google/gwt/core/client/AsyncFragmentLoader.java
Log:
Log runAsync fragment-loading events to the
GWT lightweight metrics framework.
Modified:
changes/spoon/runAsync/dev/core/src/com/google/gwt/dev/jjs/impl/FragmentLoaderCreator.java
==============================================================================
---
changes/spoon/runAsync/dev/core/src/com/google/gwt/dev/jjs/impl/FragmentLoaderCreator.java
(original)
+++
changes/spoon/runAsync/dev/core/src/com/google/gwt/dev/jjs/impl/FragmentLoaderCreator.java
Tue Sep 23 11:08:04 2008
@@ -113,6 +113,8 @@
/**
* Generate the <code>load</code> method. Calls to
<code>GWT.runAsync</code>
* are replaced by calls to this method.
+ *
+ * TODO(spoon): rename to runAsync
*/
private void generateLoadMethod(PrintWriter srcWriter) {
srcWriter.println("public static void load(RunAsyncCallback callback)
{");
@@ -143,7 +145,13 @@
srcWriter.println("public static void onLoad() {");
srcWriter.println("loaded = true;");
srcWriter.println("instance = new " + getLoaderSimpleName() + "();");
+ srcWriter.println(ASYNC_FRAGMENT_LOADER
+ ".logEventProgress(\"download"
+ + entryNumber + "\", \"end\");");
+ srcWriter.println(ASYNC_FRAGMENT_LOADER
+ ".logEventProgress(\"runCallbacks"
+ + entryNumber + "\", \"begin\");");
srcWriter.println("instance.runCallbacks();");
+ srcWriter.println(ASYNC_FRAGMENT_LOADER
+ ".logEventProgress(\"runCallbacks"
+ + entryNumber + "\", \"end\");");
srcWriter.println("}");
}
Modified:
changes/spoon/runAsync/user/src/com/google/gwt/core/client/AsyncFragmentLoader.java
==============================================================================
---
changes/spoon/runAsync/user/src/com/google/gwt/core/client/AsyncFragmentLoader.java
(original)
+++
changes/spoon/runAsync/user/src/com/google/gwt/core/client/AsyncFragmentLoader.java
Tue Sep 23 11:08:04 2008
@@ -24,9 +24,12 @@
public class AsyncFragmentLoader {
/**
* Loads the specified fragment asynchronously.
+ *
* @param fragment the fragment to load
*/
public static void inject(int fragment) {
+ logEventProgress("download" + fragment, "begin");
+
Element head = getHeadElement();
Element script = createScriptElement();
DOM.setElementAttribute(script, "type", "text/javascript");
@@ -35,10 +38,34 @@
DOM.appendChild(head, script);
}
+ /**
+ * Logs an event with the GWT lightweight metrics framework.
+ */
+ public static void logEventProgress(String eventGroup, String type) {
+ @SuppressWarnings("unused")
+ boolean toss = isStatsAvailable()
+ && stats(createStatsEvent(eventGroup, type));
+ }
+
private static native Element createScriptElement() /*-{
return document.createElement("script");
}-*/;
+ /**
+ * Create an event object suitable for submitting to the lightweight
metrics
+ * framework.
+ */
+ private static native JavaScriptObject createStatsEvent(String
eventGroup,
+ String type) /*-{
+ return {
+ moduleName: @com.google.gwt.core.client.GWT::getModuleName()(),
+ subSystem: 'runAsync',
+ evtGroup: eventGroup,
+ millis: (new Date()).getTime(),
+ type: type
+ };
+ }-*/;
+
private static native String getFragmentName(int fragment) /*-{
return __gwt_getFragmentName(fragment);
}-*/;
@@ -49,5 +76,17 @@
return heads.item(0);
}
return null;
+ }-*/;
+
+ private static native boolean isStatsAvailable() /*-{
+ return !!$stats;
+ }-*/;
+
+ /**
+ * Always use this as [EMAIL PROTECTED] isStatsAvailable} &&
+ * [EMAIL PROTECTED] #stats(JavaScriptObject)}.
+ */
+ private static native boolean stats(JavaScriptObject data) /*-{
+ return $stats(data);
}-*/;
}
--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---