Author: orudyy
Date: Wed Nov 11 17:53:07 2015
New Revision: 1713904

URL: http://svn.apache.org/viewvc?rev=1713904&view=rev
Log:
QPID-6832: Use direct memory more efficiently in AMQP 1.0 impelementation

Modified:
    
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/amqp_1_0/codec/FrameWriter.java
    
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/amqp_1_0/framing/FrameHandler.java
    
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java

Modified: 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/amqp_1_0/codec/FrameWriter.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/amqp_1_0/codec/FrameWriter.java?rev=1713904&r1=1713903&r2=1713904&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/amqp_1_0/codec/FrameWriter.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/amqp_1_0/codec/FrameWriter.java
 Wed Nov 11 17:53:07 2015
@@ -24,8 +24,6 @@ package org.apache.qpid.amqp_1_0.codec;
 import org.apache.qpid.amqp_1_0.framing.AMQFrame;
 import org.apache.qpid.bytebuffer.QpidByteBuffer;
 
-import java.nio.ByteBuffer;
-
 public class FrameWriter implements ValueWriter<AMQFrame>
 {
     private Registry _registry;
@@ -82,7 +80,7 @@ public class FrameWriter implements Valu
 
                     if(_typeWriter!=null)
                     {
-                        _typeWriter.setValue(_frame.getFrameBody());
+
 
                         QpidByteBuffer qpidByteBuffer = remaining > 8
                                 ? 
buffer.duplicate().position(buffer.position() + 8)
@@ -253,10 +251,6 @@ public class FrameWriter implements Valu
             }
         }
 
-        if(_size == -1)
-        {
-            _size =  
_typeWriter.writeToBuffer(QpidByteBuffer.wrap(EMPTY_BYTE_ARRAY)) + 8 + 
(_payload == null ? 0 : _payload.remaining());
-        }
         return _size;
     }
 
@@ -264,17 +258,26 @@ public class FrameWriter implements Valu
     {
         _frame = frame;
         _state = State.SIZE_0;
-        _size = -1;
-        _payload = null;
+        _payload = frame.getPayload() == null ? null : 
frame.getPayload().duplicate();
+
+        final int payloadLength = _payload == null ? 0 : _payload.remaining();
         final Object frameBody = frame.getFrameBody();
-        if(frameBody!=null)
+
+        _typeWriter = frameBody == null ? null : 
_registry.getValueWriter(frameBody);
+        if (_typeWriter == null)
         {
-            _typeWriter = _registry.getValueWriter(frameBody);
+            _size = 8 + payloadLength;
         }
         else
         {
-            _typeWriter = null;
+            _typeWriter.setValue(_frame.getFrameBody());
+            QpidByteBuffer qpidByteBuffer = 
QpidByteBuffer.wrap(EMPTY_BYTE_ARRAY);
+            _size = _typeWriter.writeToBuffer(qpidByteBuffer) + 8 + 
payloadLength;
         }
-        _payload = frame.getPayload() == null ? null : 
frame.getPayload().duplicate();
+    }
+
+    public int getSize()
+    {
+        return _size;
     }
 }

Modified: 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/amqp_1_0/framing/FrameHandler.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/amqp_1_0/framing/FrameHandler.java?rev=1713904&r1=1713903&r2=1713904&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/amqp_1_0/framing/FrameHandler.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/amqp_1_0/framing/FrameHandler.java
 Wed Nov 11 17:53:07 2015
@@ -235,10 +235,7 @@ public class FrameHandler implements Pro
                         {
                             if(val instanceof Transfer)
                             {
-                                QpidByteBuffer buf = 
QpidByteBuffer.allocateDirect(in.remaining());
-                                buf.put(in);
-                                buf.flip();
-                                ((Transfer)val).setPayload(buf);
+                                ((Transfer)val).setPayload(in.slice());
                             }
                         }
 

Modified: 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java?rev=1713904&r1=1713903&r2=1713904&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java
 Wed Nov 11 17:53:07 2015
@@ -498,7 +498,7 @@ public class AMQPConnection_1_0 extends
 
             _frameWriter.setValue(amqFrame);
 
-            QpidByteBuffer buffer = 
QpidByteBuffer.allocateDirect(_endpoint.getMaxFrameSize());
+            QpidByteBuffer buffer = 
QpidByteBuffer.allocateDirect(_frameWriter.getSize());
 
             try
             {



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to