This is an automated email from the ASF dual-hosted git repository. tibordigana pushed a commit to branch maven2surefire-jvm-communication in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
commit f4bb445fef2bb32d5281bc793ac96326fab693d9 Author: tibordigana <[email protected]> AuthorDate: Tue Mar 24 00:57:22 2020 +0100 improved performance from 320s to 54s. --- .../surefire/extensions/EventConsumerThread.java | 26 +++++++++++++++++----- .../surefire/extensions/SurefireForkChannel.java | 4 +--- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/EventConsumerThread.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/EventConsumerThread.java index cc33c6c..b92a238 100644 --- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/EventConsumerThread.java +++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/EventConsumerThread.java @@ -126,8 +126,9 @@ public class EventConsumerThread extends CloseableDaemonThread List<String> tokens = new ArrayList<>(); StringBuilder line = new StringBuilder(); StringBuilder token = new StringBuilder( MAGIC_NUMBER.length() ); - ByteBuffer buffer = ByteBuffer.allocate( 1 ); - boolean endOfStream; + ByteBuffer buffer = ByteBuffer.allocate( 1024 ); + buffer.position( buffer.limit() ); + boolean streamContinues; start: do @@ -136,11 +137,9 @@ public class EventConsumerThread extends CloseableDaemonThread tokens.clear(); token.setLength( 0 ); FrameCompletion completion = null; - for ( boolean frameStarted = false; !( endOfStream = channel.read( buffer ) == -1 ) ; completion = null ) + for ( boolean frameStarted = false; streamContinues = read( buffer ); completion = null ) { - buffer.flip(); char c = (char) buffer.get(); - buffer.clear(); if ( c == '\n' || c == '\r' ) { @@ -193,7 +192,7 @@ public class EventConsumerThread extends CloseableDaemonThread } } - if ( endOfStream ) + if ( !streamContinues ) { printExistingLine( line ); return; @@ -202,6 +201,21 @@ public class EventConsumerThread extends CloseableDaemonThread while ( true ); } + private boolean read( ByteBuffer buffer ) throws IOException + { + if ( buffer.hasRemaining() ) + { + return true; + } + else + { + buffer.clear(); + boolean isEndOfStream = channel.read( buffer ) == -1; + buffer.flip(); + return !isEndOfStream; + } + } + private void printExistingLine( StringBuilder line ) { if ( line.length() != 0 ) diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/SurefireForkChannel.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/SurefireForkChannel.java index 0aa790c..e11b03f 100644 --- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/SurefireForkChannel.java +++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/SurefireForkChannel.java @@ -60,8 +60,6 @@ import static java.nio.channels.ServerSocketChannel.open; */ final class SurefireForkChannel extends ForkChannel { - private static final byte[] LOCAL_LOOPBACK_IP_ADDRESS = new byte[]{127, 0, 0, 1}; - private final ConsoleLogger logger; private final ServerSocketChannel server; private final int localPort; @@ -73,7 +71,7 @@ final class SurefireForkChannel extends ForkChannel this.logger = logger; server = open(); setTrueOptions( SO_REUSEADDR, TCP_NODELAY, SO_KEEPALIVE ); - InetAddress ip = Inet4Address.getByAddress( LOCAL_LOOPBACK_IP_ADDRESS ); + InetAddress ip = Inet4Address.getLoopbackAddress(); server.bind( new InetSocketAddress( ip, 0 ), 1 ); localPort = ( (InetSocketAddress) server.getLocalAddress() ).getPort(); }
