You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ti...@apache.org on 2020/04/08 08:22:16 UTC

[maven-surefire] 08/18: improved performance from 320s to 54s.

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 f3aa9c295bba96380f0ce7ca85e0b3e7c5610212
Author: tibordigana <ti...@apache.org>
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();
     }