From b668ee95482fde9766d9b307467b20e22ec171b7 Mon Sep 17 00:00:00 2001 From: Damon Kohler <damonkohler@google.com> Date: Mon, 23 Jul 2012 13:44:25 +0200 Subject: [PATCH] Removes unnecessary buffer copy operation and decreases the size of the incomming message buffer. Previously the size was in excess of what could easily be handled by Android. --- .../ros/internal/transport/queue/IncomingMessageQueue.java | 6 +++--- .../org/ros/internal/transport/queue/MessageReceiver.java | 1 - .../ros/internal/transport/queue/OutgoingMessageQueue.java | 2 +- .../org/ros/internal/message/field/ChannelBufferField.java | 4 +--- 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/rosjava/src/main/java/org/ros/internal/transport/queue/IncomingMessageQueue.java b/rosjava/src/main/java/org/ros/internal/transport/queue/IncomingMessageQueue.java index e53ae673..95bdb303 100644 --- a/rosjava/src/main/java/org/ros/internal/transport/queue/IncomingMessageQueue.java +++ b/rosjava/src/main/java/org/ros/internal/transport/queue/IncomingMessageQueue.java @@ -37,14 +37,14 @@ public class IncomingMessageQueue<T> { * {@link IncomingMessageQueue#addListener(MessageListener, int)} which are * consumed by user provided {@link MessageListener}s. */ - private static final int QUEUE_CAPACITY = 128; + private static final int QUEUE_CAPACITY = 16; - private final CircularBlockingQueue<LazyMessage<T>> lazyMessages; private final MessageReceiver<T> messageReceiver; private final MessageDispatcher<T> messageDispatcher; public IncomingMessageQueue(MessageDeserializer<T> deserializer, ExecutorService executorService) { - lazyMessages = new CircularBlockingQueue<LazyMessage<T>>(QUEUE_CAPACITY); + CircularBlockingQueue<LazyMessage<T>> lazyMessages = + new CircularBlockingQueue<LazyMessage<T>>(QUEUE_CAPACITY); messageReceiver = new MessageReceiver<T>(lazyMessages, deserializer); messageDispatcher = new MessageDispatcher<T>(lazyMessages, executorService); executorService.execute(messageDispatcher); diff --git a/rosjava/src/main/java/org/ros/internal/transport/queue/MessageReceiver.java b/rosjava/src/main/java/org/ros/internal/transport/queue/MessageReceiver.java index 916469ab..2cd4f762 100644 --- a/rosjava/src/main/java/org/ros/internal/transport/queue/MessageReceiver.java +++ b/rosjava/src/main/java/org/ros/internal/transport/queue/MessageReceiver.java @@ -57,7 +57,6 @@ public class MessageReceiver<T> extends AbstractNamedChannelHandler { if (DEBUG) { log.info(String.format("Received %d byte message.", buffer.readableBytes())); } - // TODO(damonkohler): Use MessageBuffers pool. // We have to make a defensive copy of the buffer here because Netty does // not guarantee that the returned ChannelBuffer will not be reused. lazyMessages.add(new LazyMessage<T>(buffer.copy(), deserializer)); diff --git a/rosjava/src/main/java/org/ros/internal/transport/queue/OutgoingMessageQueue.java b/rosjava/src/main/java/org/ros/internal/transport/queue/OutgoingMessageQueue.java index 46e03574..c7ebe441 100644 --- a/rosjava/src/main/java/org/ros/internal/transport/queue/OutgoingMessageQueue.java +++ b/rosjava/src/main/java/org/ros/internal/transport/queue/OutgoingMessageQueue.java @@ -42,7 +42,7 @@ public class OutgoingMessageQueue<T> { private static final boolean DEBUG = false; private static final Log log = LogFactory.getLog(OutgoingMessageQueue.class); - private static final int QUEUE_CAPACITY = 128; + private static final int QUEUE_CAPACITY = 16; private final MessageSerializer<T> serializer; private final CircularBlockingQueue<T> queue; diff --git a/rosjava_bootstrap/src/main/java/org/ros/internal/message/field/ChannelBufferField.java b/rosjava_bootstrap/src/main/java/org/ros/internal/message/field/ChannelBufferField.java index 463bba17..a13f5425 100644 --- a/rosjava_bootstrap/src/main/java/org/ros/internal/message/field/ChannelBufferField.java +++ b/rosjava_bootstrap/src/main/java/org/ros/internal/message/field/ChannelBufferField.java @@ -73,9 +73,7 @@ public class ChannelBufferField extends Field { if (currentSize < 0) { currentSize = buffer.readInt(); } - // There are no guarantees this buffer won't be reused so we create a - // defensive copy. - value = buffer.readSlice(currentSize).copy(); + value = buffer.readSlice(currentSize); } @Override -- GitLab