diff options
author | brendandouglas <brendandouglas@google.com> | 2018-06-27 08:58:01 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-06-27 08:59:30 -0700 |
commit | 2e7125529178144e50f10fc60e37d35003770fce (patch) | |
tree | fb6f03da71c5f0d239c0ece6ab3e10f5453f0030 /src/main/java/com/google/devtools/build/lib/skylarkdebug | |
parent | 49eaa8f01065ee12e4726d818e24a8c594878e10 (diff) |
Debug server logging: don't construct expensive debug-level log strings unless necessary.
PiperOrigin-RevId: 202317115
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skylarkdebug')
2 files changed, 26 insertions, 24 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkdebug/server/DebugServerTransport.java b/src/main/java/com/google/devtools/build/lib/skylarkdebug/server/DebugServerTransport.java index 34b2f3abec..e8c3852acb 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkdebug/server/DebugServerTransport.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkdebug/server/DebugServerTransport.java @@ -33,7 +33,8 @@ final class DebugServerTransport { /** Sets up the server transport and blocks while waiting for an incoming connection. */ static DebugServerTransport createAndWaitForClient( - EventHandler eventHandler, ServerSocket serverSocket) throws IOException { + EventHandler eventHandler, ServerSocket serverSocket, boolean verboseLogging) + throws IOException { // TODO(bazel-team): reject all connections after the first eventHandler.handle(Event.progress("Waiting for debugger...")); Socket clientSocket = serverSocket.accept(); @@ -43,7 +44,8 @@ final class DebugServerTransport { serverSocket, clientSocket, clientSocket.getInputStream(), - clientSocket.getOutputStream()); + clientSocket.getOutputStream(), + verboseLogging); } private final EventHandler eventHandler; @@ -51,18 +53,21 @@ final class DebugServerTransport { private final Socket clientSocket; private final InputStream requestStream; private final OutputStream eventStream; + private final boolean verboseLogging; private DebugServerTransport( EventHandler eventHandler, ServerSocket serverSocket, Socket clientSocket, InputStream requestStream, - OutputStream eventStream) { + OutputStream eventStream, + boolean verboseLogging) { this.eventHandler = eventHandler; this.serverSocket = serverSocket; this.clientSocket = clientSocket; this.requestStream = requestStream; this.eventStream = eventStream; + this.verboseLogging = verboseLogging; } /** @@ -74,7 +79,9 @@ final class DebugServerTransport { synchronized (requestStream) { try { DebugRequest request = DebugRequest.parseDelimitedFrom(requestStream); - eventHandler.handle(Event.debug("Received debug client request:\n" + request)); + if (verboseLogging) { + eventHandler.handle(Event.debug("Received debug client request:\n" + request)); + } return request; } catch (IOException e) { handleParsingError(e); @@ -95,7 +102,9 @@ final class DebugServerTransport { /** Posts a debug event. */ void postEvent(DebugEvent event) { - eventHandler.handle(Event.debug("Sending debug event:\n" + event)); + if (verboseLogging) { + eventHandler.handle(Event.debug("Sending debug event:\n" + event)); + } synchronized (eventStream) { try { event.writeDelimitedTo(eventStream); diff --git a/src/main/java/com/google/devtools/build/lib/skylarkdebug/server/SkylarkDebugServer.java b/src/main/java/com/google/devtools/build/lib/skylarkdebug/server/SkylarkDebugServer.java index 26f31793c2..6e605895ef 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkdebug/server/SkylarkDebugServer.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkdebug/server/SkylarkDebugServer.java @@ -19,7 +19,6 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Throwables; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; -import com.google.devtools.build.lib.events.EventKind; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.skylarkdebugging.SkylarkDebuggingProtos; import com.google.devtools.build.lib.syntax.DebugServer; @@ -41,7 +40,7 @@ public final class SkylarkDebugServer implements DebugServer { * debug server socket and blocks waiting for an incoming connection. * * @param port the port on which the server should listen for connections - * @param verboseLogging if false, debug-level events will be suppressed + * @param verboseLogging if true, debug-level events will be logged * @throws IOException if an I/O error occurs while opening the socket or waiting for a connection */ public static SkylarkDebugServer createAndWaitForConnection( @@ -54,28 +53,16 @@ public final class SkylarkDebugServer implements DebugServer { * Initializes debugging support, setting up any debugging-specific overrides, then opens the * debug server socket and blocks waiting for an incoming connection. * - * @param verboseLogging if false, debug-level events will be suppressed + * @param verboseLogging if true, debug-level events will be logged * @throws IOException if an I/O error occurs while waiting for a connection */ @VisibleForTesting static SkylarkDebugServer createAndWaitForConnection( EventHandler eventHandler, ServerSocket serverSocket, boolean verboseLogging) throws IOException { - if (!verboseLogging) { - eventHandler = getHandlerSuppressingDebugEvents(eventHandler); - } DebugServerTransport transport = - DebugServerTransport.createAndWaitForClient(eventHandler, serverSocket); - return new SkylarkDebugServer(eventHandler, transport); - } - - /** Wraps an event handler, suppressing debug-level events. */ - private static EventHandler getHandlerSuppressingDebugEvents(EventHandler handler) { - return event -> { - if (event.getKind() != EventKind.DEBUG) { - handler.handle(event); - } - }; + DebugServerTransport.createAndWaitForClient(eventHandler, serverSocket, verboseLogging); + return new SkylarkDebugServer(eventHandler, transport, verboseLogging); } private final EventHandler eventHandler; @@ -84,10 +71,14 @@ public final class SkylarkDebugServer implements DebugServer { /** The server socket for the debug server. */ private final DebugServerTransport transport; - private SkylarkDebugServer(EventHandler eventHandler, DebugServerTransport transport) { + private final boolean verboseLogging; + + private SkylarkDebugServer( + EventHandler eventHandler, DebugServerTransport transport, boolean verboseLogging) { this.eventHandler = eventHandler; this.threadHandler = new ThreadHandler(); this.transport = transport; + this.verboseLogging = verboseLogging; listenForClientRequests(); } @@ -133,7 +124,9 @@ public final class SkylarkDebugServer implements DebugServer { @Override public void close() { try { - eventHandler.handle(Event.debug("Closing debug server")); + if (verboseLogging) { + eventHandler.handle(Event.debug("Closing debug server")); + } transport.close(); } catch (IOException e) { |