GWT-RPC: don't waste memory doing DEBUG logging when not enabled
ProxyCreator should not set
SerializableTypeOracleBuilder.setLogOutputWriter(..)
if logging level is not reachable from DEBUG.
Bug: issue 8183
Change-Id: I02afbda0bea4e9288eef1cffbc6b7ddc1e68a2a4
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 4f924c8..088401e 100644
--- a/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
+++ b/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
@@ -285,7 +285,7 @@
Event event = SpeedTracerLogger.start(CompilerEventType.GENERATOR_RPC_STOB);
SerializableTypeOracle typesSentFromBrowser;
SerializableTypeOracle typesSentToBrowser;
- String rpcLog;
+ String rpcLog = null;
try {
SerializableTypeOracleBuilder typesSentFromBrowserBuilder =
new SerializableTypeOracleBuilder(logger, propertyOracle, context);
@@ -297,28 +297,33 @@
addRoots(logger, typeOracle, typesSentFromBrowserBuilder, typesSentToBrowserBuilder);
// Decide what types to send in each direction.
- // Log the decisions to a string that will be written later in this method
{
- StringWriter stringWriter = new StringWriter();
- PrintWriter writer = new PrintWriter(stringWriter);
+ if (logger.isLoggable(TreeLogger.Type.DEBUG)) {
+ // Log the decisions to a string that will be written later in this method
+ StringWriter stringWriter = new StringWriter();
+ PrintWriter writer = new PrintWriter(stringWriter);
- typesSentFromBrowserBuilder.setLogOutputWriter(writer);
- typesSentToBrowserBuilder.setLogOutputWriter(writer);
+ typesSentFromBrowserBuilder.setLogOutputWriter(writer);
+ typesSentToBrowserBuilder.setLogOutputWriter(writer);
- writer.write("====================================\n");
- writer.write("Types potentially sent from browser:\n");
- writer.write("====================================\n\n");
- writer.flush();
- typesSentFromBrowser = typesSentFromBrowserBuilder.build(logger);
-
- writer.write("===================================\n");
- writer.write("Types potentially sent from server:\n");
- writer.write("===================================\n\n");
- writer.flush();
- typesSentToBrowser = typesSentToBrowserBuilder.build(logger);
-
- writer.close();
- rpcLog = stringWriter.toString();
+ writer.write("====================================\n");
+ writer.write("Types potentially sent from browser:\n");
+ writer.write("====================================\n\n");
+ writer.flush();
+ typesSentFromBrowser = typesSentFromBrowserBuilder.build(logger);
+
+ writer.write("===================================\n");
+ writer.write("Types potentially sent from server:\n");
+ writer.write("===================================\n\n");
+ writer.flush();
+ typesSentToBrowser = typesSentToBrowserBuilder.build(logger);
+
+ writer.close();
+ rpcLog = stringWriter.toString();
+ } else {
+ typesSentFromBrowser = typesSentFromBrowserBuilder.build(logger);
+ typesSentToBrowser = typesSentToBrowserBuilder.build(logger);
+ }
}
} finally {
event.end();
@@ -370,7 +375,7 @@
srcWriter.commit(logger);
- if (logger.isLoggable(TreeLogger.DEBUG)) {
+ if (rpcLog != null) {
// Create an artifact explaining STOB's decisions. It will be emitted by
// RpcLogLinker
context.commitArtifact(logger, new RpcLogArtifact(serviceIntf.getQualifiedSourceName(),