tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From r...@apache.org
Subject svn commit: r411577 - /tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/OutputBuffer.java
Date Sun, 04 Jun 2006 15:05:19 GMT
Author: remm
Date: Sun Jun  4 08:05:19 2006
New Revision: 411577

URL: http://svn.apache.org/viewvc?rev=411577&view=rev
Log:
- Remove usage of the CharChunk buffer (converters already use buffers). C2B converters could
most
  likely be optimized (since they should probably rely on the byte chunk that they are writing
to).
  This does not seem to reduce performance in a noticeable way, but I did not benchmark that
much.

Modified:
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/OutputBuffer.java

Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/OutputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/OutputBuffer.java?rev=411577&r1=411576&r2=411577&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/OutputBuffer.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/OutputBuffer.java Sun Jun  4 08:05:19
2006
@@ -24,12 +24,10 @@
 import java.security.PrivilegedExceptionAction;
 import java.util.HashMap;
 
-import org.apache.catalina.security.SecurityUtil;
 import org.apache.coyote.ActionCode;
 import org.apache.coyote.Response;
 import org.apache.tomcat.util.buf.ByteChunk;
 import org.apache.tomcat.util.buf.C2BConverter;
-import org.apache.tomcat.util.buf.CharChunk;
 
 
 /**
@@ -41,7 +39,7 @@
  * @author Remy Maucherat
  */
 public class OutputBuffer extends Writer
-    implements ByteChunk.ByteOutputChannel, CharChunk.CharOutputChannel {
+    implements ByteChunk.ByteOutputChannel {
 
 
     // -------------------------------------------------------------- Constants
@@ -52,14 +50,6 @@
     public static final int DEFAULT_BUFFER_SIZE = 8*1024;
 
 
-    // The buffer can be used for byte[] and char[] writing
-    // ( this is needed to support ServletOutputStream and for
-    // efficient implementations of templating systems )
-    public final int INITIAL_STATE = 0;
-    public final int CHAR_STATE = 1;
-    public final int BYTE_STATE = 2;
-
-
     // ----------------------------------------------------- Instance Variables
 
 
@@ -70,15 +60,9 @@
 
 
     /**
-     * The chunk buffer.
-     */
-    private CharChunk cb;
-
-
-    /**
      * State of the output buffer.
      */
-    private int state = 0;
+    private boolean initial = true;
 
 
     /**
@@ -170,9 +154,6 @@
         bb = new ByteChunk(size);
         bb.setLimit(size);
         bb.setByteOutputChannel(this);
-        cb = new CharChunk(size);
-        cb.setCharOutputChannel(this);
-        cb.setLimit(size);
 
     }
 
@@ -228,11 +209,10 @@
      */
     public void recycle() {
         
-        state = INITIAL_STATE;
+        initial = true;
         bytesWritten = 0;
         charsWritten = 0;
         
-        cb.recycle();
         bb.recycle(); 
         closed = false;
         suspended = false;
@@ -263,11 +243,6 @@
 
         if ((!coyoteResponse.isCommitted()) 
             && (coyoteResponse.getContentLengthLong() == -1)) {
-            // Flushing the char buffer
-            if (state == CHAR_STATE) {
-                cb.flushBuffer();
-                state = BYTE_STATE;
-            }
             // If this didn't cause a commit of the response, the final content
             // length can be calculated
             if (!coyoteResponse.isCommitted()) {
@@ -306,15 +281,12 @@
             return;
 
         doFlush = true;
-        if (state == CHAR_STATE) {
-            cb.flushBuffer();
-            bb.flushBuffer();
-            state = BYTE_STATE;
-        } else if (state == BYTE_STATE) {
-            bb.flushBuffer();
-        } else if (state == INITIAL_STATE) {
-            // If the buffers are empty, commit the response header
+        if (initial) {
             coyoteResponse.sendHeaders();
+            initial = false;
+        }
+        if (bb.getLength() > 0) {
+            bb.flushBuffer();
         }
         doFlush = false;
 
@@ -375,9 +347,6 @@
         if (suspended)
             return;
 
-        if (state == CHAR_STATE)
-            cb.flushBuffer();
-        state = BYTE_STATE;
         writeBytes(b, off, len);
 
     }
@@ -407,11 +376,7 @@
         if (suspended)
             return;
 
-        if (state == CHAR_STATE)
-            cb.flushBuffer();
-        state = BYTE_STATE;
-
-        bb.append( (byte)b );
+        bb.append((byte) b);
         bytesWritten++;
 
     }
@@ -426,11 +391,10 @@
         if (suspended)
             return;
 
-        state = CHAR_STATE;
-
-        cb.append((char) c);
+        conv.convert((char) c);
+        conv.flushBuffer();
         charsWritten++;
-
+        
     }
 
 
@@ -451,25 +415,9 @@
         if (suspended)
             return;
 
-        state = CHAR_STATE;
-
-        cb.append(c, off, len);
-        charsWritten += len;
-
-    }
-
-
-    public void write(StringBuffer sb)
-        throws IOException {
-
-        if (suspended)
-            return;
-
-        state = CHAR_STATE;
-
-        int len = sb.length();
+        conv.convert(c, off, len);
+        conv.flushBuffer();
         charsWritten += len;
-        cb.append(sb);
 
     }
 
@@ -483,12 +431,11 @@
         if (suspended)
             return;
 
-        state=CHAR_STATE;
-
         charsWritten += len;
-        if (s==null)
-            s="null";
-        cb.append( s, off, len );
+        if (s == null)
+            s = "null";
+        conv.convert(s, off, len);
+        conv.flushBuffer();
 
     }
 
@@ -499,45 +446,19 @@
         if (suspended)
             return;
 
-        state = CHAR_STATE;
-        if (s==null)
-            s="null";
-        write(s, 0, s.length());
+        if (s == null)
+            s = "null";
+        conv.convert(s);
+        conv.flushBuffer();
 
     } 
 
 
-    public void flushChars()
-        throws IOException {
-
-        cb.flushBuffer();
-        state = BYTE_STATE;
-
-    }
-
-
-    public boolean flushCharsNeeded() {
-        return state == CHAR_STATE;
-    }
-
-
     public void setEncoding(String s) {
         enc = s;
     }
 
 
-    public void realWriteChars(char c[], int off, int len) 
-        throws IOException {
-
-        if (!gotEnc)
-            setConverter();
-
-        conv.convert(c, off, len);
-        conv.flushBuffer();	// ???
-
-    }
-
-
     public void checkConverter() 
         throws IOException {
 
@@ -625,26 +546,25 @@
 
     public void setBufferSize(int size) {
         if (size > bb.getLimit()) {// ??????
-	    bb.setLimit(size);
-	}
+            bb.setLimit(size);
+        }
     }
 
 
     public void reset() {
 
-        //count=0;
         bb.recycle();
         bytesWritten = 0;
-        cb.recycle();
         charsWritten = 0;
         gotEnc = false;
         enc = null;
-        state = INITIAL_STATE;
+        initial = true;
+        
     }
 
 
     public int getBufferSize() {
-	return bb.getLimit();
+        return bb.getLimit();
     }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Mime
View raw message