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();
     }

Reply via email to