You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/09/11 16:13:47 UTC
svn commit: r1521860 - in /tomcat/tc7.0.x/trunk: ./
java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
Author: markt
Date: Wed Sep 11 14:13:47 2013
New Revision: 1521860
URL: http://svn.apache.org/r1521860
Log:
Performance tuning after analysis with Yourkit
Use bulk write for the payload rather than a loop when there is no mask
to apply (i.e. on the client side).
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1521831
Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java?rev=1521860&r1=1521859&r2=1521860&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java Wed Sep 11 14:13:47 2013
@@ -715,10 +715,22 @@ public abstract class WsRemoteEndpointIm
}
// Write the payload
- while (payload.hasRemaining() && outputBuffer.hasRemaining()) {
- if (mask == null) {
- outputBuffer.put(payload.get());
- } else {
+ int payloadLeft = payload.remaining();
+ int payloadLimit = payload.limit();
+ int outputSpace = outputBuffer.remaining();
+ int toWrite = payloadLeft;
+
+ if (payloadLeft > outputSpace) {
+ toWrite = outputSpace;
+ // Temporarily reduce the limit
+ payload.limit(payload.position() + toWrite);
+ }
+
+ if (mask == null) {
+ // Use a bulk copy
+ outputBuffer.put(payload);
+ } else {
+ for (int i = 0; i < toWrite; i++) {
outputBuffer.put(
(byte) (payload.get() ^ (mask[maskIndex++] & 0xFF)));
if (maskIndex > 3) {
@@ -726,7 +738,10 @@ public abstract class WsRemoteEndpointIm
}
}
}
- if (payload.hasRemaining()) {
+
+ if (payloadLeft > outputSpace) {
+ // Restore the original limit
+ payload.limit(payloadLimit);
// Still more headers to write, need to flush
outputBuffer.flip();
endpoint.doWrite(this, outputBuffer);
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org