You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/07/16 09:48:37 UTC

svn commit: r556539 - in /mina/branches: 1.0/core/src/main/java/org/apache/mina/transport/socket/nio/ 1.1/core/src/main/java/org/apache/mina/transport/socket/nio/

Author: trustin
Date: Mon Jul 16 00:48:36 2007
New Revision: 556539

URL: http://svn.apache.org/viewvc?view=rev&rev=556539
Log:
* Backported dynamic read buffer size determination from trunk for much much much better performance


Modified:
    mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
    mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
    mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
    mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java

Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?view=diff&rev=556539&r1=556538&r2=556539
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java Mon Jul 16 00:48:36 2007
@@ -222,8 +222,6 @@
         SocketChannel ch = session.getChannel();
 
         try {
-            buf.clear();
-
             int readBytes = 0;
             int ret;
 
@@ -240,6 +238,14 @@
             if (readBytes > 0) {
                 session.getFilterChain().fireMessageReceived(session, buf);
                 buf = null;
+                
+                if (readBytes * 2 < session.getReadBufferSize()) {
+                    if (session.getReadBufferSize() > 64) {
+                        session.setReadBufferSize(session.getReadBufferSize() >>> 1);
+                    }
+                } else if (readBytes == session.getReadBufferSize()) {
+                    session.setReadBufferSize(session.getReadBufferSize() << 1);
+                }
             }
             if (ret < 0) {
                 scheduleRemove(session);

Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java?view=diff&rev=556539&r1=556538&r2=556539
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java Mon Jul 16 00:48:36 2007
@@ -71,7 +71,7 @@
 
     private SelectionKey key;
 
-    private int readBufferSize;
+    private int readBufferSize = 1024;
 
     /**
      * Creates a new instance.
@@ -197,6 +197,10 @@
     int getReadBufferSize() {
         return readBufferSize;
     }
+    
+    void setReadBufferSize(int readBufferSize) {
+        this.readBufferSize = readBufferSize;
+    }
 
     private class SessionConfigImpl extends BaseIoSessionConfig implements
             SocketSessionConfig {
@@ -339,9 +343,6 @@
             if (SocketSessionConfigImpl.isSetReceiveBufferSizeAvailable()) {
                 try {
                     ch.socket().setReceiveBufferSize(size);
-                    // Re-retrieve the effective receive buffer size.
-                    size = ch.socket().getReceiveBufferSize();
-                    SocketSessionImpl.this.readBufferSize = size;
                 } catch (SocketException e) {
                     throw new RuntimeIOException(e);
                 }

Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?view=diff&rev=556539&r1=556538&r2=556539
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java Mon Jul 16 00:48:36 2007
@@ -193,8 +193,6 @@
         SocketChannel ch = session.getChannel();
 
         try {
-            buf.clear();
-
             int readBytes = 0;
             int ret;
 
@@ -211,6 +209,14 @@
             if (readBytes > 0) {
                 session.getFilterChain().fireMessageReceived(session, buf);
                 buf = null;
+                
+                if (readBytes * 2 < session.getReadBufferSize()) {
+                    if (session.getReadBufferSize() > 64) {
+                        session.setReadBufferSize(session.getReadBufferSize() >>> 1);
+                    }
+                } else if (readBytes == session.getReadBufferSize()) {
+                    session.setReadBufferSize(session.getReadBufferSize() << 1);
+                }
             }
             if (ret < 0) {
                 scheduleRemove(session);

Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java?view=diff&rev=556539&r1=556538&r2=556539
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java Mon Jul 16 00:48:36 2007
@@ -73,7 +73,7 @@
 
     private SelectionKey key;
 
-    private int readBufferSize;
+    private int readBufferSize = 1024;
 
     /**
      * Creates a new instance.
@@ -210,6 +210,10 @@
     int getReadBufferSize() {
         return readBufferSize;
     }
+    
+    void setReadBufferSize(int readBufferSize) {
+        this.readBufferSize = readBufferSize;
+    }
 
     private class SessionConfigImpl extends BaseIoSessionConfig implements
             SocketSessionConfig {
@@ -352,9 +356,6 @@
             if (SocketSessionConfigImpl.isSetReceiveBufferSizeAvailable()) {
                 try {
                     ch.socket().setReceiveBufferSize(size);
-                    // Re-retrieve the effective receive buffer size.
-                    size = ch.socket().getReceiveBufferSize();
-                    SocketSessionImpl.this.readBufferSize = size;
                 } catch (SocketException e) {
                     throw new RuntimeIOException(e);
                 }