Author: nextgens
Date: 2008-10-23 09:43:15 +0000 (Thu, 23 Oct 2008)
New Revision: 23044
Modified:
trunk/freenet/src/freenet/client/async/SingleFileInserter.java
Log:
Interrupt compression if the output is already bigger than with a previous
algorithm
Modified: trunk/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleFileInserter.java
2008-10-23 09:42:45 UTC (rev 23043)
+++ trunk/freenet/src/freenet/client/async/SingleFileInserter.java
2008-10-23 09:43:15 UTC (rev 23044)
@@ -162,6 +162,7 @@
COMPRESSOR_TYPE bestCodec = null;
Bucket bestCompressedData = null;
+ long bestCompressedDataSize = origSize;
boolean tryCompress = (origSize > blockSize) &&
(!ctx.dontCompress) && (!dontCompress);
if(tryCompress) {
@@ -177,20 +178,23 @@
if(parent == cb)
ctx.eventProducer.produceEvent(new StartedCompressionEvent(comp));
Bucket result;
- result = comp.compress(origData, new
BucketChainBucketFactory(ctx.persistentBucketFactory, CHKBlock.DATA_LENGTH),
origData.size());
- if(result.size() <
oneBlockCompressedSize) {
+ result = comp.compress(origData, new
BucketChainBucketFactory(ctx.persistentBucketFactory, CHKBlock.DATA_LENGTH),
bestCompressedDataSize);
+ long resultSize = result.size();
+ if(resultSize < oneBlockCompressedSize)
{
bestCodec = comp;
if(bestCompressedData != null)
bestCompressedData.free();
bestCompressedData = result;
continue;
}
- if((bestCompressedData != null) &&
(result.size() < bestCompressedData.size())) {
+ if((bestCompressedData != null) &&
(resultSize < bestCompressedDataSize)) {
bestCompressedData.free();
bestCompressedData = result;
+ bestCompressedDataSize =
resultSize;
bestCodec = comp;
- } else if((bestCompressedData == null)
&& (result.size() < data.size())) {
+ } else if((bestCompressedData == null)
&& (resultSize < origSize)) {
bestCompressedData = result;
+ bestCompressedDataSize =
resultSize;
bestCodec = comp;
} else
result.free();
@@ -205,8 +209,7 @@
}
boolean shouldFreeData = false;
if(bestCompressedData != null) {
- long compressedSize = bestCompressedData.size();
- if(logMINOR) Logger.minor(this, "The best compression
algorithm is "+bestCodec+ " we have gained "+
(100-(compressedSize*100/origSize)) +"% ! ("+origSize+'/'+compressedSize+')');
+ if(logMINOR) Logger.minor(this, "The best compression
algorithm is "+bestCodec+ " we have gained "+
(100-(bestCompressedDataSize*100/origSize)) +"% !
("+origSize+'/'+bestCompressedDataSize+')');
data = bestCompressedData;
shouldFreeData = true;
compressorUsed = bestCodec;