Skip to content

Commit 4da0258

Browse files
committed
Revert "Remove PerMessageDeflateExtension#getCompressionRatio()"
This reverts commit c465a9a.
1 parent c465a9a commit 4da0258

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

src/main/java/org/java_websocket/extensions/permessage_deflate/PerMessageDeflateExtension.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ public class PerMessageDeflateExtension extends CompressionExtension {
9696
private boolean isDecompressorResetAllowed;
9797
private boolean isCompressing;
9898
private boolean isDecompressing;
99+
private long compressedBytes;
100+
private long decompressedBytes;
99101

100102
public PerMessageDeflateExtension() {
101103
this(DEFAULT_COMPRESSION);
@@ -126,6 +128,8 @@ public PerMessageDeflateExtension(int compressionLevel, int maxFragmentSize) {
126128
isDecompressorResetAllowed = false;
127129
isCompressing = false;
128130
isDecompressing = false;
131+
compressedBytes = 0;
132+
decompressedBytes = 0;
129133
}
130134

131135
public int getCompressionLevel() {
@@ -160,6 +164,21 @@ public void setServerNoContextTakeover(boolean serverNoContextTakeover) {
160164
this.serverNoContextTakeover = serverNoContextTakeover;
161165
}
162166

167+
/**
168+
* Returns the overall compression ratio of all incoming and outgoing payloads which were
169+
* compressed.
170+
*
171+
* <p>Values below 1 mean the compression is effective, the lower, the better. If you get values
172+
* above 1, look into increasing the compression level or the threshold. If that does not help,
173+
* consider not using this extension.
174+
*
175+
* @return the overall compression ratio of all incoming and outgoing payloads
176+
*/
177+
public double getCompressionRatio() {
178+
double decompressed = decompressedBytes;
179+
return decompressed > 0 ? compressedBytes / decompressed : 1;
180+
}
181+
163182
@Override
164183
public void isFrameValid(Framedata inputFrame) throws InvalidDataException {
165184
// RFC 7692: RSV1 may only be set for the first fragment of a message
@@ -194,7 +213,9 @@ public void decodeFrame(Framedata inputFrame) throws InvalidDataException {
194213
// decompress the frame payload
195214
DataFrame dataFrame = (DataFrame) inputFrame;
196215
ByteBuffer payload = dataFrame.getPayloadData();
216+
compressedBytes += payload.remaining();
197217
byte[] decompressed = decompress(payload, dataFrame.isFin());
218+
decompressedBytes += decompressed.length;
198219
dataFrame.setPayload(ByteBuffer.wrap(decompressed));
199220

200221
// payload is no longer compressed, clear the RFC 7692 compression marker RSV1
@@ -277,7 +298,9 @@ public void encodeFrame(Framedata inputFrame) {
277298
// compress the frame payload
278299
DataFrame dataFrame = (DataFrame) inputFrame;
279300
ByteBuffer payload = dataFrame.getPayloadData();
301+
decompressedBytes += payload.remaining();
280302
byte[] compressed = compress(payload, dataFrame.isFin());
303+
compressedBytes += compressed.length;
281304
dataFrame.setPayload(ByteBuffer.wrap(compressed));
282305

283306
// payload is compressed now, set the RFC 7692 compression marker RSV1
@@ -545,9 +568,10 @@ public IExtension copyInstance() {
545568

546569
@Override
547570
public void reset() {
548-
super.reset();
549571
isCompressing = false;
550572
isDecompressing = false;
573+
compressedBytes = 0;
574+
decompressedBytes = 0;
551575
}
552576

553577
@Override

0 commit comments

Comments
 (0)