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 2008/04/14 08:57:11 UTC

svn commit: r647674 - /mina/trunk/core/src/main/java/org/apache/mina/filter/executor/DefaultIoEventSizeEstimator.java

Author: trustin
Date: Sun Apr 13 23:57:07 2008
New Revision: 647674

URL: http://svn.apache.org/viewvc?rev=647674&view=rev
Log:
Improved DefaultIoEventSizeEstimator to understand WriteRequest

Modified:
    mina/trunk/core/src/main/java/org/apache/mina/filter/executor/DefaultIoEventSizeEstimator.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/executor/DefaultIoEventSizeEstimator.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/executor/DefaultIoEventSizeEstimator.java?rev=647674&r1=647673&r2=647674&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/executor/DefaultIoEventSizeEstimator.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/executor/DefaultIoEventSizeEstimator.java Sun Apr 13 23:57:07 2008
@@ -28,6 +28,7 @@
 
 import org.apache.mina.common.IoBuffer;
 import org.apache.mina.common.IoEvent;
+import org.apache.mina.common.WriteRequest;
 
 /**
  * A default {@link IoEventSizeEstimator} implementation.
@@ -39,14 +40,14 @@
  * (default: 64).
  * <p>
  * All the estimated sizes of classes are cached for performance improvement.
- * 
+ *
  * @author The Apache MINA Project (dev@mina.apache.org)
  * @version $Rev$, $Date$
  */
 public class DefaultIoEventSizeEstimator implements IoEventSizeEstimator {
 
     private final ConcurrentMap<Class<?>, Integer> class2size = new ConcurrentHashMap<Class<?>, Integer>();
-    
+
     public DefaultIoEventSizeEstimator() {
         class2size.put(boolean.class, 4); // Probably an integer.
         class2size.put(byte.class, 1);
@@ -58,20 +59,22 @@
         class2size.put(double.class, 8);
         class2size.put(void.class, 0);
     }
-    
+
     public int estimateSize(IoEvent event) {
         return estimateSize((Object) event) + estimateSize(event.getParameter());
     }
-    
+
     public int estimateSize(Object message) {
         if (message == null) {
             return 8;
         }
 
         int answer = 8 + estimateSize(message.getClass(), null);
-        
+
         if (message instanceof IoBuffer) {
             answer += ((IoBuffer) message).remaining();
+        } else if (message instanceof WriteRequest) {
+            answer += estimateSize(((WriteRequest) message).getMessage());
         } else if (message instanceof CharSequence) {
             answer += ((CharSequence) message).length() << 1;
         } else if (message instanceof Iterable) {
@@ -79,16 +82,16 @@
                 answer += estimateSize(m);
             }
         }
-        
+
         return align(answer);
     }
-    
+
     private int estimateSize(Class<?> clazz, Set<Class<?>> visitedClasses) {
         Integer objectSize = class2size.get(clazz);
         if (objectSize != null) {
             return objectSize;
         }
-        
+
         if (visitedClasses != null) {
             if (visitedClasses.contains(clazz)) {
                 return 0;
@@ -96,9 +99,9 @@
         } else {
             visitedClasses = new HashSet<Class<?>>();
         }
-        
+
         visitedClasses.add(clazz);
-        
+
         int answer = 8; // Basic overhead.
         for (Class<?> c = clazz; c != null; c = c.getSuperclass()) {
             Field[] fields = c.getDeclaredFields();
@@ -107,21 +110,21 @@
                     // Ignore static fields.
                     continue;
                 }
-                
+
                 answer += estimateSize(f.getType(), visitedClasses);
             }
         }
-            
+
         visitedClasses.remove(clazz);
-        
+
         // Some alignment.
         answer = align(answer);
-        
+
         // Put the final answer.
         class2size.putIfAbsent(clazz, answer);
         return answer;
     }
-    
+
     private static int align(int size) {
         if (size % 8 != 0) {
             size /= 8;