Fix CompilationStateBuilder's speed tracer logs. Currently, CompilationStateBuilder produces a tree like: Process - Process Where the top node has almost no time in it at all, and serves no purpose. This jiggles things so you get a trace more like: Process - JdtCompile - Process (many, smaller ones) http://gwt-code-reviews.appspot.com/1338803/show Review by: zundel@google.com git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9670 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java b/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java index 8926cc7..d3e4f26 100644 --- a/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java +++ b/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java
@@ -62,67 +62,72 @@ public void process(CompilationUnitBuilder builder, CompilationUnitDeclaration cud, List<CompiledClass> compiledClasses) { - Map<MethodDeclaration, JsniMethod> jsniMethods = JsniCollector.collectJsniMethods( - cud, builder.getSource(), jsProgram); + Event compilationStateBuilderProcess = SpeedTracerLogger.start(DevModeEventType.COMPILATION_STATE_BUILDER_PROCESS); + try { + Map<MethodDeclaration, JsniMethod> jsniMethods = JsniCollector.collectJsniMethods( + cud, builder.getSource(), jsProgram); - JSORestrictionsChecker.check(jsoState, cud); + JSORestrictionsChecker.check(jsoState, cud); - // JSNI check + collect dependencies. - final Set<String> jsniDeps = new HashSet<String>(); - Map<String, Binding> jsniRefs = new HashMap<String, Binding>(); - JsniChecker.check(cud, jsoState, jsniMethods, jsniRefs, - new JsniChecker.TypeResolver() { - public ReferenceBinding resolveType(String typeName) { - ReferenceBinding resolveType = compiler.resolveType(typeName); - if (resolveType != null) { - jsniDeps.add(String.valueOf(resolveType.qualifiedSourceName())); + // JSNI check + collect dependencies. + final Set<String> jsniDeps = new HashSet<String>(); + Map<String, Binding> jsniRefs = new HashMap<String, Binding>(); + JsniChecker.check(cud, jsoState, jsniMethods, jsniRefs, + new JsniChecker.TypeResolver() { + public ReferenceBinding resolveType(String typeName) { + ReferenceBinding resolveType = compiler.resolveType(typeName); + if (resolveType != null) { + jsniDeps.add(String.valueOf(resolveType.qualifiedSourceName())); + } + return resolveType; } - return resolveType; - } - }); + }); - ArtificialRescueChecker.check(cud, builder.isGenerated()); - BinaryTypeReferenceRestrictionsChecker.check(cud); + ArtificialRescueChecker.check(cud, builder.isGenerated()); + BinaryTypeReferenceRestrictionsChecker.check(cud); - MethodArgNamesLookup methodArgs = MethodParamCollector.collect(cud); + MethodArgNamesLookup methodArgs = MethodParamCollector.collect(cud); - StringInterner interner = StringInterner.get(); - String packageName = interner.intern(Shared.getPackageName(builder.getTypeName())); - List<String> unresolvedQualified = new ArrayList<String>(); - List<String> unresolvedSimple = new ArrayList<String>(); - for (char[] simpleRef : cud.compilationResult().simpleNameReferences) { - unresolvedSimple.add(interner.intern(String.valueOf(simpleRef))); - } - for (char[][] qualifiedRef : cud.compilationResult().qualifiedReferences) { - unresolvedQualified.add(interner.intern(CharOperation.toString(qualifiedRef))); - } - for (String jsniDep : jsniDeps) { - unresolvedQualified.add(interner.intern(jsniDep)); - } - ArrayList<String> apiRefs = compiler.collectApiRefs(cud); - for (int i = 0; i < apiRefs.size(); ++i) { - apiRefs.set(i, interner.intern(apiRefs.get(i))); - } - Dependencies dependencies = new Dependencies(packageName, - unresolvedQualified, unresolvedSimple, apiRefs); + StringInterner interner = StringInterner.get(); + String packageName = interner.intern(Shared.getPackageName(builder.getTypeName())); + List<String> unresolvedQualified = new ArrayList<String>(); + List<String> unresolvedSimple = new ArrayList<String>(); + for (char[] simpleRef : cud.compilationResult().simpleNameReferences) { + unresolvedSimple.add(interner.intern(String.valueOf(simpleRef))); + } + for (char[][] qualifiedRef : cud.compilationResult().qualifiedReferences) { + unresolvedQualified.add(interner.intern(CharOperation.toString(qualifiedRef))); + } + for (String jsniDep : jsniDeps) { + unresolvedQualified.add(interner.intern(jsniDep)); + } + ArrayList<String> apiRefs = compiler.collectApiRefs(cud); + for (int i = 0; i < apiRefs.size(); ++i) { + apiRefs.set(i, interner.intern(apiRefs.get(i))); + } + Dependencies dependencies = new Dependencies(packageName, + unresolvedQualified, unresolvedSimple, apiRefs); - CompilationUnit unit = builder.build(compiledClasses, dependencies, - jsniMethods.values(), methodArgs, - cud.compilationResult().getProblems()); - addValidUnit(unit); - // Cache the valid unit for future compiles. - ContentId contentId = builder.getContentId(); - unitCache.put(contentId, unit); - if (builder instanceof ResourceCompilationUnitBuilder) { - ResourceCompilationUnitBuilder rcub = (ResourceCompilationUnitBuilder) builder; - ResourceTag resourceTag = new ResourceTag(rcub.getLastModifed(), - contentId); - resourceContentCache.put(builder.getLocation(), resourceTag); - keepAliveLatestVersion.put(resourceTag, unit); - } else if (builder instanceof GeneratedCompilationUnitBuilder) { - keepAliveRecentlyGenerated.put(unit.getTypeName(), unit); + CompilationUnit unit = builder.build(compiledClasses, dependencies, + jsniMethods.values(), methodArgs, + cud.compilationResult().getProblems()); + addValidUnit(unit); + // Cache the valid unit for future compiles. + ContentId contentId = builder.getContentId(); + unitCache.put(contentId, unit); + if (builder instanceof ResourceCompilationUnitBuilder) { + ResourceCompilationUnitBuilder rcub = (ResourceCompilationUnitBuilder) builder; + ResourceTag resourceTag = new ResourceTag(rcub.getLastModifed(), + contentId); + resourceContentCache.put(builder.getLocation(), resourceTag); + keepAliveLatestVersion.put(resourceTag, unit); + } else if (builder instanceof GeneratedCompilationUnitBuilder) { + keepAliveRecentlyGenerated.put(unit.getTypeName(), unit); + } + newlyBuiltUnits.add(unit); + } finally { + compilationStateBuilderProcess.end(); } - newlyBuiltUnits.add(unit); } } @@ -352,43 +357,37 @@ */ public synchronized CompilationState doBuildFrom(TreeLogger logger, Set<Resource> resources, AdditionalTypeProviderDelegate compilerDelegate) { - Event compilationStateBuilderProcess = SpeedTracerLogger.start(DevModeEventType.COMPILATION_STATE_BUILDER_PROCESS); + // Units we definitely want to build. + List<CompilationUnitBuilder> builders = new ArrayList<CompilationUnitBuilder>(); - try { - // Units we definitely want to build. - List<CompilationUnitBuilder> builders = new ArrayList<CompilationUnitBuilder>(); + // Units we don't want to rebuild unless we have to. + Map<CompilationUnitBuilder, CompilationUnit> cachedUnits = new IdentityHashMap<CompilationUnitBuilder, CompilationUnit>(); - // Units we don't want to rebuild unless we have to. - Map<CompilationUnitBuilder, CompilationUnit> cachedUnits = new IdentityHashMap<CompilationUnitBuilder, CompilationUnit>(); + CompileMoreLater compileMoreLater = new CompileMoreLater(compilerDelegate); - CompileMoreLater compileMoreLater = new CompileMoreLater(compilerDelegate); - - // For each incoming Java source file... - for (Resource resource : resources) { - String typeName = Shared.toTypeName(resource.getPath()); - // Create a builder for all incoming units. - ResourceCompilationUnitBuilder builder = new ResourceCompilationUnitBuilder( - typeName, resource); - // 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) { - cachedUnits.put(builder, existingUnit); - compileMoreLater.addValidUnit(existingUnit); - continue; - } + // For each incoming Java source file... + for (Resource resource : resources) { + String typeName = Shared.toTypeName(resource.getPath()); + // Create a builder for all incoming units. + ResourceCompilationUnitBuilder builder = new ResourceCompilationUnitBuilder( + typeName, resource); + // 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) { + cachedUnits.put(builder, existingUnit); + compileMoreLater.addValidUnit(existingUnit); + continue; } - builders.add(builder); } - Collection<CompilationUnit> resultUnits = compileMoreLater.compile( - logger, builders, cachedUnits); - return new CompilationState(logger, resultUnits, compileMoreLater); - } finally { - compilationStateBuilderProcess.end(); + builders.add(builder); } + Collection<CompilationUnit> resultUnits = compileMoreLater.compile(logger, + builders, cachedUnits); + return new CompilationState(logger, resultUnits, compileMoreLater); } /**