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