From 1fdfb841a9787d0f5bacee5489a963aaf522c332 Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Wed, 16 Apr 2008 11:43:37 +0000 Subject: QPID-933 : performance tweaks git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/M2.1@648672 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/qpid/framing/ContentBody.java | 11 +++- .../java/org/apache/qpid/framing/FieldTable.java | 17 ++++--- .../qpid/framing/amqp_0_9/MethodConverter_0_9.java | 58 +++++++++++++++------- 3 files changed, 59 insertions(+), 27 deletions(-) (limited to 'java/common/src/main') diff --git a/java/common/src/main/java/org/apache/qpid/framing/ContentBody.java b/java/common/src/main/java/org/apache/qpid/framing/ContentBody.java index 969df954ce..9d39f8aa86 100644 --- a/java/common/src/main/java/org/apache/qpid/framing/ContentBody.java +++ b/java/common/src/main/java/org/apache/qpid/framing/ContentBody.java @@ -65,8 +65,15 @@ public class ContentBody implements AMQBody { if (payload != null) { - ByteBuffer copy = payload.duplicate(); - buffer.put(copy.rewind()); + if(payload.isDirect() || payload.isReadOnly()) + { + ByteBuffer copy = payload.duplicate(); + buffer.put(copy.rewind()); + } + else + { + buffer.put(payload.array(),payload.arrayOffset(),payload.limit()); + } } } diff --git a/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java b/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java index ee6762181d..9ba9b53b13 100644 --- a/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java +++ b/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java @@ -957,16 +957,21 @@ public class FieldTable if (_encodedForm != null) { + if(buffer.isDirect() || buffer.isReadOnly()) + { + ByteBuffer encodedForm = _encodedForm.duplicate(); - ByteBuffer encodedForm = _encodedForm.duplicate(); + if (encodedForm.position() != 0) + { + encodedForm.flip(); + } - if (encodedForm.position() != 0) + buffer.put(encodedForm); + } + else { - encodedForm.flip(); + buffer.put(_encodedForm.array(),_encodedForm.arrayOffset(),(int)_encodedSize); } - // _encodedForm.limit((int)getEncodedSize()); - - buffer.put(encodedForm); } else if (_properties != null) { diff --git a/java/common/src/main/java/org/apache/qpid/framing/amqp_0_9/MethodConverter_0_9.java b/java/common/src/main/java/org/apache/qpid/framing/amqp_0_9/MethodConverter_0_9.java index 2049797619..2fd4f70138 100644 --- a/java/common/src/main/java/org/apache/qpid/framing/amqp_0_9/MethodConverter_0_9.java +++ b/java/common/src/main/java/org/apache/qpid/framing/amqp_0_9/MethodConverter_0_9.java @@ -45,31 +45,21 @@ public class MethodConverter_0_9 extends AbstractMethodConverter implements Prot public AMQBody convertToBody(ContentChunk contentChunk) { - return new ContentBody(contentChunk.getData()); + if(contentChunk instanceof ContentChunk_0_9) + { + return ((ContentChunk_0_9)contentChunk).toBody(); + } + else + { + return new ContentBody(contentChunk.getData()); + } } public ContentChunk convertToContentChunk(AMQBody body) { final ContentBody contentBodyChunk = (ContentBody) body; - return new ContentChunk() - { - - public int getSize() - { - return contentBodyChunk.getSize(); - } - - public ByteBuffer getData() - { - return contentBodyChunk.payload; - } - - public void reduceToFit() - { - contentBodyChunk.reduceBufferToFit(); - } - }; + return new ContentChunk_0_9(contentBodyChunk); } @@ -149,4 +139,34 @@ public class MethodConverter_0_9 extends AbstractMethodConverter implements Prot return _routingKey; } } + + private static class ContentChunk_0_9 implements ContentChunk + { + private final ContentBody _contentBodyChunk; + + public ContentChunk_0_9(final ContentBody contentBodyChunk) + { + _contentBodyChunk = contentBodyChunk; + } + + public int getSize() + { + return _contentBodyChunk.getSize(); + } + + public ByteBuffer getData() + { + return _contentBodyChunk.payload; + } + + public void reduceToFit() + { + _contentBodyChunk.reduceBufferToFit(); + } + + public AMQBody toBody() + { + return _contentBodyChunk; + } + } } -- cgit v1.2.1