Reduce logging work in STOB. Wrap logging calls with isLoggable and only create .rpc.log during web-compiles or DevMode with DEBUG logging. Review at http://gwt-code-reviews.appspot.com/1310806 Review by: jbrosenberg@google.com git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9688 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/rebind/rpc/ProblemReport.java b/user/src/com/google/gwt/user/rebind/rpc/ProblemReport.java index ef76913..c256636 100644 --- a/user/src/com/google/gwt/user/rebind/rpc/ProblemReport.java +++ b/user/src/com/google/gwt/user/rebind/rpc/ProblemReport.java
@@ -253,6 +253,9 @@ */ private void doReport(TreeLogger logger, Type level, Map<JClassType, List<Problem>> problems) { + if (!logger.isLoggable(level)) { + return; + } for (List<Problem> problemList : problems.values()) { for (Problem problem : problemList) { if (problem.hasSubMessages()) {
diff --git a/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java b/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java index da4e52e..498fcca 100644 --- a/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java +++ b/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
@@ -286,10 +286,10 @@ Event event = SpeedTracerLogger.start(CompilerEventType.GENERATOR_RPC_STOB); SerializableTypeOracleBuilder typesSentFromBrowserBuilder = new SerializableTypeOracleBuilder( - logger, propertyOracle, typeOracle); + logger, propertyOracle, context); typesSentFromBrowserBuilder.setTypeFilter(blacklistTypeFilter); SerializableTypeOracleBuilder typesSentToBrowserBuilder = new SerializableTypeOracleBuilder( - logger, propertyOracle, typeOracle); + logger, propertyOracle, context); typesSentToBrowserBuilder.setTypeFilter(blacklistTypeFilter); addRoots(logger, typeOracle, typesSentFromBrowserBuilder, @@ -359,11 +359,13 @@ srcWriter.commit(logger); - // Create an artifact explaining STOB's decisions. It will be emitted by - // RpcLogLinker - context.commitArtifact(logger, new RpcLogArtifact( - serviceIntf.getQualifiedSourceName(), serializationPolicyStrongName, - rpcLog)); + if (context.isProdMode() || logger.isLoggable(TreeLogger.DEBUG)) { + // Create an artifact explaining STOB's decisions. It will be emitted by + // RpcLogLinker + context.commitArtifact(logger, + new RpcLogArtifact(serviceIntf.getQualifiedSourceName(), + serializationPolicyStrongName, rpcLog)); + } return getProxyQualifiedName(); }
diff --git a/user/src/com/google/gwt/user/rebind/rpc/SerializableTypeOracleBuilder.java b/user/src/com/google/gwt/user/rebind/rpc/SerializableTypeOracleBuilder.java index d11b559..88f797d 100644 --- a/user/src/com/google/gwt/user/rebind/rpc/SerializableTypeOracleBuilder.java +++ b/user/src/com/google/gwt/user/rebind/rpc/SerializableTypeOracleBuilder.java
@@ -15,6 +15,7 @@ */ package com.google.gwt.user.rebind.rpc; +import com.google.gwt.core.ext.GeneratorContextExt; import com.google.gwt.core.ext.PropertyOracle; import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.core.ext.UnableToCompleteException; @@ -699,6 +700,9 @@ private static void logSerializableTypes(TreeLogger logger, Set<JClassType> fieldSerializableTypes) { + if (!logger.isLoggable(TreeLogger.DEBUG)) { + return; + } TreeLogger localLogger = logger.branch(TreeLogger.DEBUG, "Identified " + fieldSerializableTypes.size() + " serializable type" + ((fieldSerializableTypes.size() == 1) ? "" : "s"), null); @@ -716,6 +720,8 @@ */ private final JGenericType collectionClass; + private final GeneratorContextExt context; + private Set<String> enhancedClasses = null; private PrintWriter logOutputWriter; @@ -765,9 +771,10 @@ * types */ public SerializableTypeOracleBuilder(TreeLogger logger, - PropertyOracle propertyOracle, TypeOracle typeOracle) + PropertyOracle propertyOracle, GeneratorContextExt context) throws UnableToCompleteException { - this.typeOracle = typeOracle; + this.context = context; + this.typeOracle = context.getTypeOracle(); typeConstrainer = new TypeConstrainer(typeOracle); try { @@ -1125,9 +1132,11 @@ continue; } - covariantArrayLogger.branch( - TreeLogger.DEBUG, - getArrayType(typeOracle, array.getRank(), instantiableType).getParameterizedQualifiedSourceName()); + if (covariantArrayLogger.isLoggable(TreeLogger.DEBUG)) { + covariantArrayLogger.branch(TreeLogger.DEBUG, + getArrayType(typeOracle, array.getRank(), + instantiableType).getParameterizedQualifiedSourceName()); + } markArrayTypesInstantiable(instantiableType, array.getRank(), path); } @@ -1528,6 +1537,10 @@ } private void logReachableTypes(TreeLogger logger) { + if (!context.isProdMode() && !logger.isLoggable(TreeLogger.DEBUG)) { + return; + } + if (logOutputWriter != null) { // Route the TreeLogger output to an output stream. PrintWriterTreeLogger printWriterTreeLogger = new PrintWriterTreeLogger(
diff --git a/user/test/com/google/gwt/user/rebind/rpc/SerializableTypeOracleBuilderTest.java b/user/test/com/google/gwt/user/rebind/rpc/SerializableTypeOracleBuilderTest.java index efd381d..45a4a5b 100644 --- a/user/test/com/google/gwt/user/rebind/rpc/SerializableTypeOracleBuilderTest.java +++ b/user/test/com/google/gwt/user/rebind/rpc/SerializableTypeOracleBuilderTest.java
@@ -15,8 +15,12 @@ */ package com.google.gwt.user.rebind.rpc; +import com.google.gwt.core.ext.GeneratorContextExt; +import com.google.gwt.core.ext.PropertyOracle; import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.core.ext.UnableToCompleteException; +import com.google.gwt.core.ext.linker.Artifact; +import com.google.gwt.core.ext.linker.GeneratedResource; import com.google.gwt.core.ext.typeinfo.JArrayType; import com.google.gwt.core.ext.typeinfo.JClassType; import com.google.gwt.core.ext.typeinfo.JGenericType; @@ -37,7 +41,9 @@ import com.google.gwt.dev.javac.impl.JavaResourceBase; import com.google.gwt.dev.javac.impl.MockJavaResource; import com.google.gwt.dev.javac.impl.StaticJavaResource; +import com.google.gwt.dev.javac.rebind.CachedRebindResult; import com.google.gwt.dev.resource.Resource; +import com.google.gwt.dev.resource.ResourceOracle; import com.google.gwt.dev.util.log.PrintWriterTreeLogger; import com.google.gwt.user.rebind.rpc.testcases.client.AbstractSerializableTypes; import com.google.gwt.user.rebind.rpc.testcases.client.ClassWithTypeParameterThatErasesToObject; @@ -47,6 +53,7 @@ import junit.framework.TestCase; +import java.io.OutputStream; import java.io.PrintWriter; import java.util.Arrays; import java.util.Comparator; @@ -61,7 +68,72 @@ * Used to test the {@link SerializableTypeOracleBuilder}. */ public class SerializableTypeOracleBuilderTest extends TestCase { + /** + * Just enough of a {@code GeneratorContextExt} to satisfy + * {@code SerializableTypeOracleBuilder}. + */ + static class MockContext implements GeneratorContextExt { + private TypeOracle typeOracle; + + MockContext(TypeOracle typeOracle) { + this.typeOracle = typeOracle; + } + public void commit(TreeLogger logger, PrintWriter pw) { + } + + public void commitArtifact(TreeLogger logger, Artifact<?> artifact) + throws UnableToCompleteException { + } + + public GeneratedResource commitResource(TreeLogger logger, OutputStream os) + throws UnableToCompleteException { + return null; + } + + public CachedRebindResult getCachedGeneratorResult() { + return null; + } + + public PropertyOracle getPropertyOracle() { + return null; + } + + public ResourceOracle getResourcesOracle() { + return null; + } + + public long getSourceLastModifiedTime(JClassType sourceType) { + return 0; + } + + public TypeOracle getTypeOracle() { + return typeOracle; + } + + public boolean isGeneratorResultCachingEnabled() { + return false; + } + + public boolean isProdMode() { + return true; + } + + public boolean reuseTypeFromCacheIfAvailable(String typeName) { + return false; + } + + public PrintWriter tryCreate(TreeLogger logger, String packageName, + String simpleName) { + return null; + } + + public OutputStream tryCreateResource(TreeLogger logger, String partialPath) + throws UnableToCompleteException { + return null; + } + } + /** * Used to test the results produced by the {@link SerializableTypeOracle}. */ @@ -188,7 +260,8 @@ // Make an empty property oracle. StaticPropertyOracle propertyOracle = new StaticPropertyOracle( new BindingProperty[0], new String[0], new ConfigurationProperty[0]); - return new SerializableTypeOracleBuilder(logger, propertyOracle, to); + return new SerializableTypeOracleBuilder(logger, propertyOracle, + new MockContext(to)); } private static TypeInfo[] getActualTypeInfo(SerializableTypeOracle sto) { @@ -1738,7 +1811,6 @@ */ public void testRawCollection() throws UnableToCompleteException, NotFoundException { - Set<Resource> resources = new HashSet<Resource>(); addStandardClasses(resources);