Revision: 8480
Author: [email protected]
Date: Wed Aug  4 12:18:06 2010
Log: Add SpeedTracerLogger instrumentation to DevMode

Review at http://gwt-code-reviews.appspot.com/704802

Review by: [email protected]
http://code.google.com/p/google-web-toolkit/source/detail?r=8480

Modified:
 /trunk/dev/core/src/com/google/gwt/dev/Compiler.java
 /trunk/dev/core/src/com/google/gwt/dev/DevMode.java
 /trunk/dev/core/src/com/google/gwt/dev/DevModeBase.java
 /trunk/dev/core/src/com/google/gwt/dev/cfg/ModuleDefLoader.java
 /trunk/dev/core/src/com/google/gwt/dev/javac/CompilationState.java
 /trunk/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java
 /trunk/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java
 /trunk/dev/core/src/com/google/gwt/dev/javac/TypeOracleMediator.java
 /trunk/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java
 /trunk/dev/core/src/com/google/gwt/dev/shell/ModuleSpaceOOPHM.java
 /trunk/dev/core/src/com/google/gwt/dev/shell/OophmSessionHandler.java
 /trunk/dev/core/src/com/google/gwt/dev/shell/ShellModuleSpaceHost.java
 /trunk/dev/core/src/com/google/gwt/dev/shell/StandardRebindOracle.java
/trunk/dev/core/src/com/google/gwt/dev/shell/rewrite/HostedModeClassRewriter.java /trunk/dev/core/src/com/google/gwt/dev/util/log/speedtracer/DevModeEventType.java

=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/Compiler.java Thu Jul 29 04:13:58 2010 +++ /trunk/dev/core/src/com/google/gwt/dev/Compiler.java Wed Aug 4 12:18:06 2010
@@ -171,9 +171,7 @@
     ModuleDef[] modules = new ModuleDef[options.getModuleNames().size()];
     int i = 0;
     for (String moduleName : options.getModuleNames()) {
- SpeedTracerLogger.start(CompilerEventType.MODULE_DEF, "phase", "loadFromClassPath", "moduleName", moduleName); modules[i++] = ModuleDefLoader.loadFromClassPath(logger, moduleName, true);
-      SpeedTracerLogger.end(CompilerEventType.MODULE_DEF);
     }
     return run(logger, modules);
   }
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/DevMode.java Fri Apr 23 06:39:33 2010 +++ /trunk/dev/core/src/com/google/gwt/dev/DevMode.java Wed Aug 4 12:18:06 2010
@@ -34,6 +34,8 @@
 import com.google.gwt.dev.util.arg.ArgHandlerModuleName;
 import com.google.gwt.dev.util.arg.ArgHandlerWarDir;
 import com.google.gwt.dev.util.arg.ArgHandlerWorkDirOptional;
+import com.google.gwt.dev.util.log.speedtracer.DevModeEventType;
+import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger;
 import com.google.gwt.util.tools.ArgHandlerString;
 import com.google.gwt.util.tools.Utility;

@@ -362,23 +364,26 @@

     TreeLogger branch = getTopLogger().branch(TreeLogger.TRACE,
         "Loading modules");
-    for (String moduleName : options.getModuleNames()) {
- TreeLogger moduleBranch = branch.branch(TreeLogger.TRACE, moduleName);
-      try {
-        ModuleDef module = loadModule(moduleBranch, moduleName, false);
- // Create a hard reference to the module to avoid gc-ing it until we
-        // actually load the module from the browser.
-        startupModules.put(module.getName(), module);
-        if (!options.isNoServer()) {
- validateServletTags(moduleBranch, servletValidator, module, webXml);
-        }
-        TreeLogger loadLogger = moduleBranch.branch(TreeLogger.DEBUG,
-            "Bootstrap link for command-line module '" + moduleName + "'");
-        link(loadLogger, module);
-      } catch (UnableToCompleteException e) {
-        // Already logged.
-        return false;
-      }
+    SpeedTracerLogger.start(DevModeEventType.SLOW_STARTUP);
+    try {
+      for (String moduleName : options.getModuleNames()) {
+ TreeLogger moduleBranch = branch.branch(TreeLogger.TRACE, moduleName);
+          ModuleDef module = loadModule(moduleBranch, moduleName, false);
+ // Create a hard reference to the module to avoid gc-ing it until we
+          // actually load the module from the browser.
+          startupModules.put(module.getName(), module);
+          if (!options.isNoServer()) {
+ validateServletTags(moduleBranch, servletValidator, module, webXml);
+          }
+          TreeLogger loadLogger = moduleBranch.branch(TreeLogger.DEBUG,
+ "Bootstrap link for command-line module '" + moduleName + "'");
+          link(loadLogger, module);
+      }
+    } catch (UnableToCompleteException e) {
+      // Already logged.
+      return false;
+    } finally {
+      SpeedTracerLogger.end(DevModeEventType.SLOW_STARTUP);
     }
     return true;
   }
@@ -393,6 +398,7 @@
       return -1;
     }

+    SpeedTracerLogger.start(DevModeEventType.JETTY_STARTUP);
     boolean clearCallback = true;
     try {
       ui.setCallback(RestartServerEvent.getType(), this);
@@ -435,6 +441,7 @@
       System.err.println("Unable to start embedded HTTP server");
       e.printStackTrace();
     } finally {
+      SpeedTracerLogger.end(DevModeEventType.JETTY_STARTUP);
       if (clearCallback) {
         // Clear the callback if we failed to start the server
         ui.setCallback(RestartServerEvent.getType(), null);
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/DevModeBase.java Tue Aug 3 17:01:46 2010 +++ /trunk/dev/core/src/com/google/gwt/dev/DevModeBase.java Wed Aug 4 12:18:06 2010
@@ -42,6 +42,8 @@
 import com.google.gwt.dev.util.arg.ArgHandlerLogLevel;
 import com.google.gwt.dev.util.arg.OptionGenDir;
 import com.google.gwt.dev.util.arg.OptionLogLevel;
+import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger;
+import com.google.gwt.dev.util.log.speedtracer.DevModeEventType;
 import com.google.gwt.util.tools.ArgHandlerFlag;
 import com.google.gwt.util.tools.ArgHandlerString;

@@ -87,6 +89,7 @@

     public ModuleSpaceHost createModuleSpaceHost(ModuleHandle module,
         String moduleName) throws UnableToCompleteException {
+      SpeedTracerLogger.start(DevModeEventType.MODULE_SPACE_HOST_CREATE);
       // TODO(jat): add support for closing an active module
       TreeLogger logger = module.getLogger();
       try {
@@ -101,6 +104,8 @@
         logger.log(TreeLogger.ERROR, "Exception initializing module", e);
         module.unload();
         throw e;
+      } finally {
+        SpeedTracerLogger.end(DevModeEventType.MODULE_SPACE_HOST_CREATE);
       }
     }
   }
@@ -1025,6 +1030,7 @@
       throw new IllegalStateException("Startup code has already been run");
     }

+    SpeedTracerLogger.start(DevModeEventType.STARTUP);
     // See if there was a UI specified by command-line args
     ui = createUI();

@@ -1035,6 +1041,7 @@
        * TODO (amitmanjhi): Adding this redundant logging to narrow down a
        * failure. Remove soon.
        */
+      SpeedTracerLogger.end(DevModeEventType.STARTUP);
getTopLogger().log(TreeLogger.ERROR, "shell failed in doStartup method");
       return false;
     }
@@ -1073,11 +1080,13 @@
        * TODO (amitmanjhi): Adding this redundant logging to narrow down a
        * failure. Remove soon.
        */
+      SpeedTracerLogger.end(DevModeEventType.STARTUP);
       getTopLogger().log(TreeLogger.ERROR,
           "shell failed in doSlowStartup method");
       return false;
     }

+    SpeedTracerLogger.end(DevModeEventType.STARTUP);
     return true;
   }

@@ -1104,6 +1113,8 @@
   private DevModeUI createUI() {
     DevModeUI newUI = null;

+    SpeedTracerLogger.start(DevModeEventType.CREATE_UI);
+
     if (headlessMode) {
       newUI = new HeadlessUI(options);
     } else {
@@ -1128,6 +1139,7 @@
       baseLogLevelForUI = TreeLogger.Type.INFO;
     }

+    SpeedTracerLogger.end(DevModeEventType.CREATE_UI);
     return newUI;
   }

=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/cfg/ModuleDefLoader.java Wed Nov 18 11:51:07 2009 +++ /trunk/dev/core/src/com/google/gwt/dev/cfg/ModuleDefLoader.java Wed Aug 4 12:18:06 2010
@@ -18,6 +18,8 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.UnableToCompleteException;
 import com.google.gwt.dev.util.Util;
+import com.google.gwt.dev.util.log.speedtracer.CompilerEventType;
+import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger;
 import com.google.gwt.dev.util.xml.ReflectiveParser;
 import com.google.gwt.util.tools.Utility;

@@ -127,18 +129,24 @@
    */
   public static ModuleDef loadFromClassPath(TreeLogger logger,
String moduleName, boolean refresh) throws UnableToCompleteException { - // Look up the module's physical name; if null, we are either encountering
-    // the module for the first time, or else the name is already physical
- String physicalName = moduleEffectiveNameToPhysicalName.get(moduleName);
-    if (physicalName != null) {
-      moduleName = physicalName;
-    }
-    ModuleDef moduleDef = tryGetLoadedModule(logger, moduleName, refresh);
-    if (moduleDef != null) {
-      return moduleDef;
-    }
-    ModuleDefLoader loader = new ModuleDefLoader();
-    return loader.doLoadModule(logger, moduleName);
+    SpeedTracerLogger.start(
+ CompilerEventType.MODULE_DEF, "phase", "loadFromClassPath", "moduleName", moduleName);
+    try {
+ // Look up the module's physical name; if null, we are either encountering + // the module for the first time, or else the name is already physical + String physicalName = moduleEffectiveNameToPhysicalName.get(moduleName);
+      if (physicalName != null) {
+        moduleName = physicalName;
+      }
+ ModuleDef moduleDef = tryGetLoadedModule(logger, moduleName, refresh);
+      if (moduleDef != null) {
+        return moduleDef;
+      }
+      ModuleDefLoader loader = new ModuleDefLoader();
+      return loader.doLoadModule(logger, moduleName);
+    } finally {
+      SpeedTracerLogger.end(CompilerEventType.MODULE_DEF);
+    }
   }

   private static ModuleDef tryGetLoadedModule(TreeLogger logger,
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/javac/CompilationState.java Tue Nov 10 20:42:30 2009 +++ /trunk/dev/core/src/com/google/gwt/dev/javac/CompilationState.java Wed Aug 4 12:18:06 2010
@@ -18,6 +18,8 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.typeinfo.TypeOracle;
 import com.google.gwt.dev.javac.CompilationStateBuilder.CompileMoreLater;
+import com.google.gwt.dev.util.log.speedtracer.DevModeEventType;
+import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger;

 import java.util.Collection;
 import java.util.Collections;
@@ -81,11 +83,17 @@

   public void addGeneratedCompilationUnits(TreeLogger logger,
       Collection<GeneratedUnit> generatedUnits) {
- logger = logger.branch(TreeLogger.DEBUG, "Adding '" + generatedUnits.size()
-        + "' new generated units");
- Collection<CompilationUnit> newUnits = compileMoreLater.addGeneratedTypes(
-        logger, generatedUnits);
-    assimilateUnits(logger, newUnits);
+    SpeedTracerLogger.start(DevModeEventType.GENERATED_UNITS_ADD);
+
+    try {
+      logger = logger.branch(TreeLogger.DEBUG, "Adding '"
+          + generatedUnits.size() + "' new generated units");
+ Collection<CompilationUnit> newUnits = compileMoreLater.addGeneratedTypes(
+          logger, generatedUnits);
+      assimilateUnits(logger, newUnits);
+    } finally {
+      SpeedTracerLogger.end(DevModeEventType.GENERATED_UNITS_ADD);
+    }
   }

   /**
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java Mon Aug 2 12:33:56 2010 +++ /trunk/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java Wed Aug 4 12:18:06 2010
@@ -22,6 +22,8 @@
 import com.google.gwt.dev.javac.JdtCompiler.UnitProcessor;
 import com.google.gwt.dev.js.ast.JsProgram;
 import com.google.gwt.dev.resource.Resource;
+import com.google.gwt.dev.util.log.speedtracer.DevModeEventType;
+import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger;

 import org.apache.commons.collections.map.AbstractReferenceMap;
 import org.apache.commons.collections.map.ReferenceIdentityMap;
@@ -54,7 +56,6 @@

       public void process(CompilationUnitBuilder builder,
CompilationUnitDeclaration cud, List<CompiledClass> compiledClasses) {
-
Map<AbstractMethodDeclaration, JsniMethod> jsniMethods = JsniCollector.collectJsniMethods(
             cud, builder.getSource(), jsProgram);

@@ -133,7 +134,12 @@

     public Collection<CompilationUnit> addGeneratedTypes(TreeLogger logger,
         Collection<GeneratedUnit> generatedUnits) {
-      return doBuildGeneratedTypes(logger, generatedUnits, this);
+ SpeedTracerLogger.start(DevModeEventType.COMPILATION_STATE_BUILDER_PROCESS);
+      try {
+        return doBuildGeneratedTypes(logger, generatedUnits, this);
+      } finally {
+ SpeedTracerLogger.end(DevModeEventType.COMPILATION_STATE_BUILDER_PROCESS);
+      }
     }

     void addValidUnit(CompilationUnit unit) {
@@ -188,12 +194,22 @@

   public static CompilationState buildFrom(TreeLogger logger,
       Set<Resource> resources) {
-    return instance.doBuildFrom(logger, resources, null);
+ SpeedTracerLogger.start(DevModeEventType.COMPILATION_STATE_BUILDER_PROCESS);
+     try {
+       return instance.doBuildFrom(logger, resources, null);
+     } finally {
+ SpeedTracerLogger.end(DevModeEventType.COMPILATION_STATE_BUILDER_PROCESS);
+     }
   }

   public static CompilationState buildFrom(TreeLogger logger,
       Set<Resource> resources, AdditionalTypeProviderDelegate delegate) {
-    return instance.doBuildFrom(logger, resources, delegate);
+ SpeedTracerLogger.start(DevModeEventType.COMPILATION_STATE_BUILDER_PROCESS);
+    try {
+      return instance.doBuildFrom(logger, resources, delegate);
+    } finally {
+ SpeedTracerLogger.end(DevModeEventType.COMPILATION_STATE_BUILDER_PROCESS);
+    }
   }

   public static CompilationStateBuilder get() {
@@ -267,46 +283,52 @@
    */
   public synchronized CompilationState doBuildFrom(TreeLogger logger,
Set<Resource> resources, AdditionalTypeProviderDelegate compilerDelegate) { - Map<String, CompilationUnit> resultUnits = new HashMap<String, CompilationUnit>();
-
-    // For each incoming Java source file...
-    for (Resource resource : resources) {
-      // Try to get an existing unit from the cache.
-      String location = resource.getLocation();
-      ResourceTag tag = resourceContentCache.get(location);
- if (tag != null && tag.getLastModified() == resource.getLastModified()) {
-        ContentId contentId = tag.getContentId();
-        CompilationUnit existingUnit = unitCache.get(contentId);
-        if (existingUnit != null && existingUnit.isCompiled()) {
-          resultUnits.put(existingUnit.getTypeName(), existingUnit);
+ SpeedTracerLogger.start(DevModeEventType.COMPILATION_STATE_BUILDER_PROCESS);
+
+    try {
+ Map<String, CompilationUnit> resultUnits = new HashMap<String, CompilationUnit>();
+
+      // For each incoming Java source file...
+      for (Resource resource : resources) {
+        // Try to get an existing unit from the cache.
+        String location = resource.getLocation();
+        ResourceTag tag = resourceContentCache.get(location);
+ if (tag != null && tag.getLastModified() == resource.getLastModified()) {
+          ContentId contentId = tag.getContentId();
+          CompilationUnit existingUnit = unitCache.get(contentId);
+          if (existingUnit != null && existingUnit.isCompiled()) {
+            resultUnits.put(existingUnit.getTypeName(), existingUnit);
+          }
         }
       }
-    }
-
-    // Winnow the reusable set of units down to those still valid.
-    CompilationUnitInvalidator.retainValidUnits(TreeLogger.NULL,
-        resultUnits.values());
-
-    // Compile everything else.
- CompileMoreLater compileMoreLater = new CompileMoreLater(compilerDelegate); - List<CompilationUnitBuilder> builders = new ArrayList<CompilationUnitBuilder>();
-    for (Resource resource : resources) {
-      String typeName = Shared.toTypeName(resource.getPath());
-      CompilationUnit validUnit = resultUnits.get(typeName);
-      if (validUnit != null) {
-        compileMoreLater.addValidUnit(validUnit);
-        // Report any existing errors as if the unit were recompiled.
-        CompilationUnitInvalidator.reportErrors(logger, validUnit);
-      } else {
- builders.add(new ResourceCompilationUnitBuilder(typeName, resource));
-      }
-    }
-    compileMoreLater.compile(logger, builders, resultUnits);
-
-    // Invalidate units with invalid refs.
-    invalidateUnitsWithInvalidRefs(logger, resultUnits,
-        Collections.<ContentId> emptySet());
- return new CompilationState(logger, resultUnits.values(), compileMoreLater);
+
+      // Winnow the reusable set of units down to those still valid.
+      CompilationUnitInvalidator.retainValidUnits(TreeLogger.NULL,
+                                                  resultUnits.values());
+
+      // Compile everything else.
+ CompileMoreLater compileMoreLater = new CompileMoreLater(compilerDelegate); + List<CompilationUnitBuilder> builders = new ArrayList<CompilationUnitBuilder>();
+      for (Resource resource : resources) {
+        String typeName = Shared.toTypeName(resource.getPath());
+        CompilationUnit validUnit = resultUnits.get(typeName);
+        if (validUnit != null) {
+          compileMoreLater.addValidUnit(validUnit);
+          // Report any existing errors as if the unit were recompiled.
+          CompilationUnitInvalidator.reportErrors(logger, validUnit);
+        } else {
+ builders.add(new ResourceCompilationUnitBuilder(typeName, resource));
+        }
+      }
+      compileMoreLater.compile(logger, builders, resultUnits);
+
+      // Invalidate units with invalid refs.
+      invalidateUnitsWithInvalidRefs(logger, resultUnits,
+                                     Collections.<ContentId> emptySet());
+ return new CompilationState(logger, resultUnits.values(), compileMoreLater);
+    } finally {
+ SpeedTracerLogger.end(DevModeEventType.COMPILATION_STATE_BUILDER_PROCESS);
+    }
   }

   /**
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java Mon Aug 2 12:33:56 2010 +++ /trunk/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java Wed Aug 4 12:18:06 2010
@@ -317,11 +317,17 @@
    */
   public static List<CompilationUnit> compile(
       Collection<CompilationUnitBuilder> builders) {
-    DefaultUnitProcessor processor = new DefaultUnitProcessor();
-    JdtCompiler compiler = new JdtCompiler(processor);
-    processor.setCompiler(compiler);
-    compiler.doCompile(builders);
-    return processor.getResults();
+    SpeedTracerLogger.start(CompilerEventType.JDT_COMPILER);
+
+    try {
+      DefaultUnitProcessor processor = new DefaultUnitProcessor();
+      JdtCompiler compiler = new JdtCompiler(processor);
+      processor.setCompiler(compiler);
+      compiler.doCompile(builders);
+      return processor.getResults();
+    } finally {
+      SpeedTracerLogger.end(CompilerEventType.JDT_COMPILER);
+    }
   }

   public static CompilerOptions getCompilerOptions() {
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/javac/TypeOracleMediator.java Thu Jul 29 04:13:58 2010 +++ /trunk/dev/core/src/com/google/gwt/dev/javac/TypeOracleMediator.java Wed Aug 4 12:18:06 2010
@@ -56,6 +56,7 @@
 import com.google.gwt.dev.util.Name;
 import com.google.gwt.dev.util.Name.InternalName;
 import com.google.gwt.dev.util.log.speedtracer.CompilerEventType;
+import com.google.gwt.dev.util.log.speedtracer.DevModeEventType;
 import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger;

 import java.io.PrintWriter;
@@ -546,6 +547,8 @@
    * creating JRealClassType/JGenericType objects.
    */
   private CollectClassData processClass(CompiledClass compiledClass) {
+    SpeedTracerLogger.start(DevModeEventType.VISIT_CLASS_FILE);
+
     byte[] classBytes = compiledClass.getBytes();
     ClassReader reader = new ClassReader(classBytes);
     CollectClassData mcv = new CollectClassData();
@@ -554,6 +557,8 @@
       cv = new TraceClassVisitor(cv, new PrintWriter(System.out));
     }
     reader.accept(cv, 0);
+
+    SpeedTracerLogger.end(DevModeEventType.VISIT_CLASS_FILE);
     return mcv;
   }

=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java Tue Jun 15 15:09:25 2010 +++ /trunk/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java Wed Aug 4 12:18:06 2010
@@ -19,6 +19,8 @@
 import com.google.gwt.core.ext.UnableToCompleteException;
 import com.google.gwt.dev.util.Name;
 import com.google.gwt.dev.util.Name.BinaryName;
+import com.google.gwt.dev.util.log.speedtracer.DevModeEventType;
+import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger;

 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
@@ -313,6 +315,8 @@
    * Runs the module's user startup code.
    */
public final void onLoad(TreeLogger logger) throws UnableToCompleteException {
+    SpeedTracerLogger.start(DevModeEventType.MODULE_SPACE_LOAD);
+
     // Tell the host we're ready for business.
     //
     host.onModuleReady(this);
@@ -369,7 +373,13 @@
             onModuleLoad.setAccessible(true);
             invokeNativeVoid("fireOnModuleLoadStart", null,
new Class[] {String.class}, new Object[] {entryPointTypeName});
-            onModuleLoad.invoke(module);
+
+            SpeedTracerLogger.start(DevModeEventType.ON_MODULE_LOAD);
+            try {
+              onModuleLoad.invoke(module);
+            } finally {
+              SpeedTracerLogger.end(DevModeEventType.ON_MODULE_LOAD);
+            }
           }
         } finally {
           Method exit = implClass.getDeclaredMethod("exit", boolean.class);
@@ -400,6 +410,8 @@
       }
       logger.log(TreeLogger.ERROR, unableToLoadMessage, caught);
       throw new UnableToCompleteException();
+    } finally {
+      SpeedTracerLogger.end(DevModeEventType.MODULE_SPACE_LOAD);
     }
   }

@@ -410,6 +422,8 @@
     Throwable caught = null;
     String msg = null;
     String resultName = null;
+
+ SpeedTracerLogger.start(DevModeEventType.MODULE_SPACE_REBIND_AND_CREATE);
     try {
       // Rebind operates on source-level names.
       //
@@ -439,6 +453,8 @@
       caught = e;
     } catch (InvocationTargetException e) {
       caught = e.getTargetException();
+    } finally {
+ SpeedTracerLogger.end(DevModeEventType.MODULE_SPACE_REBIND_AND_CREATE);
     }

// Always log here because sometimes this method gets called from static
@@ -577,20 +593,25 @@
    */
   private Class<?> loadClassFromSourceName(String sourceName)
       throws ClassNotFoundException {
-    String toTry = sourceName;
-    while (true) {
-      try {
-        return Class.forName(toTry, true, getIsolatedClassLoader());
-      } catch (ClassNotFoundException e) {
-        // Assume that the last '.' should be '$' and try again.
-        //
-        int i = toTry.lastIndexOf('.');
-        if (i == -1) {
-          throw e;
-        }
-
-        toTry = toTry.substring(0, i) + "$" + toTry.substring(i + 1);
-      }
+    SpeedTracerLogger.start(DevModeEventType.MODULE_SPACE_CLASS_LOAD);
+    try {
+      String toTry = sourceName;
+      while (true) {
+        try {
+          return Class.forName(toTry, true, getIsolatedClassLoader());
+        } catch (ClassNotFoundException e) {
+          // Assume that the last '.' should be '$' and try again.
+          //
+          int i = toTry.lastIndexOf('.');
+          if (i == -1) {
+            throw e;
+          }
+
+          toTry = toTry.substring(0, i) + "$" + toTry.substring(i + 1);
+        }
+      }
+    } finally {
+      SpeedTracerLogger.end(DevModeEventType.MODULE_SPACE_CLASS_LOAD);
     }
   }

=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/shell/ModuleSpaceOOPHM.java Mon Nov 23 16:21:36 2009 +++ /trunk/dev/core/src/com/google/gwt/dev/shell/ModuleSpaceOOPHM.java Wed Aug 4 12:18:06 2010
@@ -18,6 +18,8 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.dev.javac.JsniMethod;
 import com.google.gwt.dev.shell.JsValue.DispatchObject;
+import com.google.gwt.dev.util.log.speedtracer.DevModeEventType;
+import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger;

 import java.util.List;
 import java.util.Set;
@@ -102,6 +104,8 @@
       Object[] args) throws Throwable {
     TreeLogger branch = host.getLogger().branch(TreeLogger.SPAM,
         "Invoke native method " + name, null);
+    SpeedTracerLogger.start(DevModeEventType.JAVA_TO_JS_CALL);
+
     CompilingClassLoader isolatedClassLoader = getIsolatedClassLoader();
     JsValueOOPHM jsthis = new JsValueOOPHM();
     Class<?> jthisType = (jthis == null) ? Object.class : jthis.getClass();
@@ -120,11 +124,13 @@
       channel.invokeJavascript(isolatedClassLoader, jsthis, name, argv,
           returnVal);
       branch.log(TreeLogger.SPAM, "  returned " + returnVal);
+      return returnVal;
     } catch (Throwable t) {
       branch.log(TreeLogger.SPAM, "exception thrown", t);
       throw t;
-    }
-    return returnVal;
+    } finally {
+      SpeedTracerLogger.end(DevModeEventType.JAVA_TO_JS_CALL);
+    }
   }

   @Override
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/shell/OophmSessionHandler.java Fri Feb 19 06:35:15 2010 +++ /trunk/dev/core/src/com/google/gwt/dev/shell/OophmSessionHandler.java Wed Aug 4 12:18:06 2010
@@ -21,7 +21,8 @@
 import com.google.gwt.dev.shell.BrowserChannelServer.SessionHandlerServer;
 import com.google.gwt.dev.shell.JsValue.DispatchMethod;
 import com.google.gwt.dev.shell.JsValue.DispatchObject;
-import com.google.gwt.dev.util.PerfLogger;
+import com.google.gwt.dev.util.log.speedtracer.DevModeEventType;
+import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger;

 import java.lang.reflect.Member;
 import java.util.Collections;
@@ -61,8 +62,8 @@
   }

   @Override
- public ExceptionOrReturnValue getProperty(BrowserChannelServer channel, int refId,
-      int dispId) {
+  public ExceptionOrReturnValue getProperty(BrowserChannelServer channel,
+      int refId, int dispId) {
     ModuleSpace moduleSpace = moduleMap.get(channel);
     ModuleHandle moduleHandle = moduleHandleMap.get(channel);
     assert moduleSpace != null && moduleHandle != null;
@@ -95,8 +96,9 @@
    * Invoke a method on a server object in from client code.
    */
   @Override
- public ExceptionOrReturnValue invoke(BrowserChannelServer channel, Value thisVal,
-      int methodDispatchId, Value[] args) {
+  public ExceptionOrReturnValue invoke(BrowserChannelServer channel,
+      Value thisVal, int methodDispatchId, Value[] args) {
+    SpeedTracerLogger.start(DevModeEventType.JS_TO_JAVA_CALL);
ServerObjectsTable localObjects = channel.getJavaObjectsExposedInBrowser();
     ModuleSpace moduleSpace = moduleMap.get(channel);
     ModuleHandle moduleHandle = moduleHandleMap.get(channel);
@@ -158,6 +160,7 @@
           t.getClass(), t);
     }
     Value retVal = channel.convertFromJsValue(localObjects, jsRetVal);
+    SpeedTracerLogger.end(DevModeEventType.JS_TO_JAVA_CALL);
     return new ExceptionOrReturnValue(exception, retVal);
   }

@@ -165,7 +168,7 @@
   public synchronized TreeLogger loadModule(BrowserChannelServer channel,
       String moduleName, String userAgent, String url, String tabKey,
       String sessionKey, byte[] userAgentIcon) {
-    PerfLogger.start("OophmSessionHandler.loadModule " + moduleName);
+    SpeedTracerLogger.start(DevModeEventType.MODULE_INIT);
ModuleHandle moduleHandle = host.createModuleLogger(moduleName, userAgent,
         url, tabKey, sessionKey, channel, userAgentIcon);
     TreeLogger logger = moduleHandle.getLogger();
@@ -173,11 +176,9 @@
     ModuleSpace moduleSpace = null;
     try {
       // Attach a new ModuleSpace to make it programmable.
-      ModuleSpaceHost msh = host.createModuleSpaceHost(moduleHandle,
-          moduleName);
+ ModuleSpaceHost msh = host.createModuleSpaceHost(moduleHandle, moduleName);
       moduleSpace = new ModuleSpaceOOPHM(msh, moduleName, channel);
       moduleMap.put(channel, moduleSpace);
-      PerfLogger.start("ModuleSpace.onLoad");
       moduleSpace.onLoad(logger);
       moduleHandle.getLogger().log(TreeLogger.INFO,
           "Module " + moduleName + " has been loaded");
@@ -186,26 +187,26 @@
       // that can go wrong trying to load a module, including Error-derived
       // things like NoClassDefFoundError.
       //
- moduleHandle.getLogger().log(TreeLogger.ERROR, "Failed to load module '"
-          + moduleName + "' from user agent '" + userAgent + "' at "
-          + channel.getRemoteEndpoint(), e);
+      moduleHandle.getLogger().log(
+          TreeLogger.ERROR,
+          "Failed to load module '" + moduleName + "' from user agent '"
+              + userAgent + "' at " + channel.getRemoteEndpoint(), e);
       if (moduleSpace != null) {
-        moduleSpace.dispose();
+        moduleSpace.dispose();
       }
       moduleHandle.unload();
       moduleMap.remove(channel);
       moduleHandleMap.remove(channel);
       return null;
     } finally {
-      PerfLogger.end();
-      PerfLogger.end();
+      SpeedTracerLogger.end(DevModeEventType.MODULE_INIT);
     }
     return moduleHandle.getLogger();
   }

   @Override
- public ExceptionOrReturnValue setProperty(BrowserChannelServer channel, int refId,
-      int dispId, Value newValue) {
+  public ExceptionOrReturnValue setProperty(BrowserChannelServer channel,
+      int refId, int dispId, Value newValue) {
     ModuleSpace moduleSpace = moduleMap.get(channel);
     ModuleHandle moduleHandle = moduleHandleMap.get(channel);
     assert moduleSpace != null && moduleHandle != null;
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/shell/ShellModuleSpaceHost.java Tue Mar 30 09:15:42 2010 +++ /trunk/dev/core/src/com/google/gwt/dev/shell/ShellModuleSpaceHost.java Wed Aug 4 12:18:06 2010
@@ -22,6 +22,8 @@
 import com.google.gwt.dev.cfg.Rules;
 import com.google.gwt.dev.javac.CompilationState;
 import com.google.gwt.dev.javac.StandardGeneratorContext;
+import com.google.gwt.dev.util.log.speedtracer.DevModeEventType;
+import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger;

 import java.io.File;

@@ -82,31 +84,36 @@
       throws UnableToCompleteException {
     this.space = readySpace;

-    // Establish an environment for JavaScript property providers to run.
-    //
-    ModuleSpacePropertyOracle propOracle = new ModuleSpacePropertyOracle(
-        module.getProperties(), module.getActiveLinkerNames(), readySpace);
-
-    // Set up the rebind oracle for the module.
-    // It has to wait until now because we need to inject javascript.
-    //
-    Rules rules = module.getRules();
-    StandardGeneratorContext genCtx = new StandardGeneratorContext(
-        compilationState, module, genDir, new ArtifactSet());
-    rebindOracle = new StandardRebindOracle(propOracle, rules, genCtx);
-
-    // Create a completely isolated class loader which owns all classes
-    // associated with a particular module. This effectively builds a
- // separate 'domain' for each running module, so that they all behave as
-    // though they are running separately. This allows the shell to run
- // multiple modules, both in succession and simultaneously, without getting
-    // confused.
-    //
- // Note that the compiling class loader has no parent. This keeps it from - // accidentally 'escaping' its domain and loading classes from the system
-    // class loader (the one that loaded the shell itself).
-    //
- classLoader = new CompilingClassLoader(logger, compilationState, readySpace);
+    SpeedTracerLogger.start(DevModeEventType.MODULE_SPACE_HOST_READY);
+    try {
+      // Establish an environment for JavaScript property providers to run.
+      //
+      ModuleSpacePropertyOracle propOracle = new ModuleSpacePropertyOracle(
+ module.getProperties(), module.getActiveLinkerNames(), readySpace);
+
+      // Set up the rebind oracle for the module.
+      // It has to wait until now because we need to inject javascript.
+      //
+      Rules rules = module.getRules();
+      StandardGeneratorContext genCtx = new StandardGeneratorContext(
+          compilationState, module, genDir, new ArtifactSet());
+      rebindOracle = new StandardRebindOracle(propOracle, rules, genCtx);
+
+      // Create a completely isolated class loader which owns all classes
+      // associated with a particular module. This effectively builds a
+ // separate 'domain' for each running module, so that they all behave as
+      // though they are running separately. This allows the shell to run
+ // multiple modules, both in succession and simultaneously, without getting
+      // confused.
+      //
+ // Note that the compiling class loader has no parent. This keeps it from + // accidentally 'escaping' its domain and loading classes from the system
+      // class loader (the one that loaded the shell itself).
+      //
+ classLoader = new CompilingClassLoader(logger, compilationState, readySpace);
+    } finally {
+      SpeedTracerLogger.end(DevModeEventType.MODULE_SPACE_HOST_READY);
+    }
   }

   public String rebind(TreeLogger logger, String sourceTypeName)
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/shell/StandardRebindOracle.java Tue Jul 28 21:11:02 2009 +++ /trunk/dev/core/src/com/google/gwt/dev/shell/StandardRebindOracle.java Wed Aug 4 12:18:06 2010
@@ -24,6 +24,8 @@
 import com.google.gwt.dev.javac.StandardGeneratorContext;
 import com.google.gwt.dev.jdt.RebindOracle;
 import com.google.gwt.dev.util.Util;
+import com.google.gwt.dev.util.log.speedtracer.DevModeEventType;
+import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger;

 import java.util.ArrayList;
 import java.util.HashMap;
@@ -49,20 +51,24 @@

     public String rebind(TreeLogger logger, String typeName,
ArtifactAcceptor artifactAcceptor) throws UnableToCompleteException {
-
-      genCtx.setPropertyOracle(propOracle);
-      String result = tryRebind(logger, typeName);
-      if (artifactAcceptor != null) {
-        // Go ahead and call finish() to accept new artifacts.
-        ArtifactSet newlyGeneratedArtifacts = genCtx.finish(logger);
-        if (!newlyGeneratedArtifacts.isEmpty()) {
-          artifactAcceptor.accept(logger, newlyGeneratedArtifacts);
-        }
-      }
-      if (result == null) {
-        result = typeName;
-      }
-      return result;
+      SpeedTracerLogger.start(DevModeEventType.REBIND);
+      try {
+        genCtx.setPropertyOracle(propOracle);
+        String result = tryRebind(logger, typeName);
+        if (artifactAcceptor != null) {
+          // Go ahead and call finish() to accept new artifacts.
+          ArtifactSet newlyGeneratedArtifacts = genCtx.finish(logger);
+          if (!newlyGeneratedArtifacts.isEmpty()) {
+            artifactAcceptor.accept(logger, newlyGeneratedArtifacts);
+          }
+        }
+        if (result == null) {
+          result = typeName;
+        }
+        return result;
+      } finally {
+        SpeedTracerLogger.end(DevModeEventType.REBIND);
+      }
     }

     private String tryRebind(TreeLogger logger, String typeName)
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/shell/rewrite/HostedModeClassRewriter.java Tue Aug 3 17:01:46 2010 +++ /trunk/dev/core/src/com/google/gwt/dev/shell/rewrite/HostedModeClassRewriter.java Wed Aug 4 12:18:06 2010
@@ -22,6 +22,8 @@
 import com.google.gwt.dev.asm.Opcodes;
 import com.google.gwt.dev.asm.commons.Method;
 import com.google.gwt.dev.shell.JsValueGlue;
+import com.google.gwt.dev.util.log.speedtracer.DevModeEventType;
+import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger;

 import java.util.Collections;
 import java.util.HashMap;
@@ -217,6 +219,7 @@
    */
   public byte[] rewrite(TypeOracle typeOracle, String className,
       byte[] classBytes, Map<String, String> anonymousClassMap) {
+    SpeedTracerLogger.start(DevModeEventType.CLASS_BYTES_REWRITE);
     String desc = toDescriptor(className);
     assert (!jsoIntfDescs.contains(desc));

@@ -244,6 +247,7 @@
     }

     new ClassReader(classBytes).accept(v, 0);
+    SpeedTracerLogger.end(DevModeEventType.CLASS_BYTES_REWRITE);
     return writer.toByteArray();
   }

=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/util/log/speedtracer/DevModeEventType.java Thu Jul 22 13:05:55 2010 +++ /trunk/dev/core/src/com/google/gwt/dev/util/log/speedtracer/DevModeEventType.java Wed Aug 4 12:18:06 2010
@@ -22,26 +22,25 @@
  * {...@link com.google.gwt.dev.DevMode}
  */
 public enum DevModeEventType implements EventType {
-  CLASS_BYTES_REWRITE("Class bytes rewrite", "DarkBlue"), // foil Eclipse
+  CLASS_BYTES_REWRITE("Class bytes rewrite", "DarkBlue"), //
   COMPILATION_STATE_BUILDER_PROCESS("CompilationStateBuilder process",
-      "CornflowerBlue"), //
+      "Teal"), //
   CREATE_UI("Create UI", "BlueViolet"), //
-  GENERATED_UNITS_ADD("Generated units add", "FireBrick"), //
-  GENERATOR_RUN("Generator run", "Red"), //
-  JAVA_TO_JS_CALL("Java to JS call", "LightSteelBlue"), //
-  JDT_COMPILE("JDT compile", "Blue"), //
-  JETTY_STARTUP("Jetty startup", "Chartreuse"), //
-  JS_TO_JAVA_CALL("JS to Java call", "LightSlateGray"), //
-  MODULE_DEF_LOAD("ModuleDef load", "Yellow"), //
-  MODULE_DEF_NORMALIZE("ModuleDef normalize", "GoldenRod"), //
-  MODULE_DEF_REFRESH("ModuleDef refresh", "GoldenRod"), //
-  MODULE_INIT("Module init", "LightGoldenRodYellow"), //
+  GENERATED_UNITS_ADD("Generated units add", "Brown"), //
+  GENERATOR_RUN("Generator run", "Tomato"), //
+  JAVA_TO_JS_CALL("Java to JS call", "LightSkyBlue"), //
+  JETTY_STARTUP("Jetty startup", "Orchid"), //
+  JS_TO_JAVA_CALL("JS to Java call", "OrangeRed"), //
+  MODULE_DEF_LOAD("ModuleDef load", "Peru"), //
+  MODULE_DEF_NORMALIZE("ModuleDef normalize", "DarkKhaki"), //
+  MODULE_DEF_REFRESH("ModuleDef refresh", "DarkKhaki"), //
+  MODULE_INIT("Module init", "Khaki"), //
   MODULE_SPACE_CLASS_LOAD("ModuleSpace class load", "Ivory"), //
-  MODULE_SPACE_HOST_CREATE("ModuleSpaceHost create", "Yellow"), //
-  MODULE_SPACE_HOST_READY("ModuleSpaceHost ready", "Moccasin"), //
+  MODULE_SPACE_HOST_CREATE("ModuleSpaceHost create", "Peachpuff"), //
+  MODULE_SPACE_HOST_READY("ModuleSpaceHost ready", "Linen"), //
   MODULE_SPACE_LOAD("ModuleSpace load", "LemonChiffon"), //
MODULE_SPACE_REBIND_AND_CREATE("ModuleSpace rebindAndCreate", "Crimson"), //
-  ON_MODULE_LOAD("onModuleLoad", "LawnGreen"), //
+  ON_MODULE_LOAD("onModuleLoad", "LightGreen"), //
   REBIND("Rebind", "Tomato"), //
   REBOUND_TYPE_CREATE("Rebound type create", "Crimson"), //
   RESOURCE_ORACLE_REFRESH("ResourceOracle refresh", "Orange"), //

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

Reply via email to