diff -r 0135e64c6c66 -r c4fd2813b127 misc/libphysfs/lzma/Java/SevenZip/LzmaBench.java --- a/misc/libphysfs/lzma/Java/SevenZip/LzmaBench.java Wed May 16 18:22:28 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,392 +0,0 @@ -package SevenZip; - -import java.io.ByteArrayOutputStream; -import java.io.ByteArrayInputStream; -import java.io.IOException; - -public class LzmaBench -{ - static final int kAdditionalSize = (1 << 21); - static final int kCompressedAdditionalSize = (1 << 10); - - static class CRandomGenerator - { - int A1; - int A2; - public CRandomGenerator() { Init(); } - public void Init() { A1 = 362436069; A2 = 521288629; } - public int GetRnd() - { - return - ((A1 = 36969 * (A1 & 0xffff) + (A1 >>> 16)) << 16) ^ - ((A2 = 18000 * (A2 & 0xffff) + (A2 >>> 16))); - } - }; - - static class CBitRandomGenerator - { - CRandomGenerator RG = new CRandomGenerator(); - int Value; - int NumBits; - public void Init() - { - Value = 0; - NumBits = 0; - } - public int GetRnd(int numBits) - { - int result; - if (NumBits > numBits) - { - result = Value & ((1 << numBits) - 1); - Value >>>= numBits; - NumBits -= numBits; - return result; - } - numBits -= NumBits; - result = (Value << numBits); - Value = RG.GetRnd(); - result |= Value & (((int)1 << numBits) - 1); - Value >>>= numBits; - NumBits = 32 - numBits; - return result; - } - }; - - static class CBenchRandomGenerator - { - CBitRandomGenerator RG = new CBitRandomGenerator(); - int Pos; - int Rep0; - - public int BufferSize; - public byte[] Buffer = null; - - public CBenchRandomGenerator() { } - public void Set(int bufferSize) - { - Buffer = new byte[bufferSize]; - Pos = 0; - BufferSize = bufferSize; - } - int GetRndBit() { return RG.GetRnd(1); } - int GetLogRandBits(int numBits) - { - int len = RG.GetRnd(numBits); - return RG.GetRnd((int)len); - } - int GetOffset() - { - if (GetRndBit() == 0) - return GetLogRandBits(4); - return (GetLogRandBits(4) << 10) | RG.GetRnd(10); - } - int GetLen1() { return RG.GetRnd(1 + (int)RG.GetRnd(2)); } - int GetLen2() { return RG.GetRnd(2 + (int)RG.GetRnd(2)); } - public void Generate() - { - RG.Init(); - Rep0 = 1; - while (Pos < BufferSize) - { - if (GetRndBit() == 0 || Pos < 1) - Buffer[Pos++] = (byte)(RG.GetRnd(8)); - else - { - int len; - if (RG.GetRnd(3) == 0) - len = 1 + GetLen1(); - else - { - do - Rep0 = GetOffset(); - while (Rep0 >= Pos); - Rep0++; - len = 2 + GetLen2(); - } - for (int i = 0; i < len && Pos < BufferSize; i++, Pos++) - Buffer[Pos] = Buffer[Pos - Rep0]; - } - } - } - }; - - static class CrcOutStream extends java.io.OutputStream - { - public CRC CRC = new CRC(); - - public void Init() - { - CRC.Init(); - } - public int GetDigest() - { - return CRC.GetDigest(); - } - public void write(byte[] b) - { - CRC.Update(b); - } - public void write(byte[] b, int off, int len) - { - CRC.Update(b, off, len); - } - public void write(int b) - { - CRC.UpdateByte(b); - } - }; - - static class MyOutputStream extends java.io.OutputStream - { - byte[] _buffer; - int _size; - int _pos; - - public MyOutputStream(byte[] buffer) - { - _buffer = buffer; - _size = _buffer.length; - } - - public void reset() - { - _pos = 0; - } - - public void write(int b) throws IOException - { - if (_pos >= _size) - throw new IOException("Error"); - _buffer[_pos++] = (byte)b; - } - - public int size() - { - return _pos; - } - }; - - static class MyInputStream extends java.io.InputStream - { - byte[] _buffer; - int _size; - int _pos; - - public MyInputStream(byte[] buffer, int size) - { - _buffer = buffer; - _size = size; - } - - public void reset() - { - _pos = 0; - } - - public int read() - { - if (_pos >= _size) - return -1; - return _buffer[_pos++] & 0xFF; - } - }; - - static class CProgressInfo implements ICodeProgress - { - public long ApprovedStart; - public long InSize; - public long Time; - public void Init() - { InSize = 0; } - public void SetProgress(long inSize, long outSize) - { - if (inSize >= ApprovedStart && InSize == 0) - { - Time = System.currentTimeMillis(); - InSize = inSize; - } - } - } - static final int kSubBits = 8; - - static int GetLogSize(int size) - { - for (int i = kSubBits; i < 32; i++) - for (int j = 0; j < (1 << kSubBits); j++) - if (size <= ((1) << i) + (j << (i - kSubBits))) - return (i << kSubBits) + j; - return (32 << kSubBits); - } - - static long MyMultDiv64(long value, long elapsedTime) - { - long freq = 1000; // ms - long elTime = elapsedTime; - while (freq > 1000000) - { - freq >>>= 1; - elTime >>>= 1; - } - if (elTime == 0) - elTime = 1; - return value * freq / elTime; - } - - static long GetCompressRating(int dictionarySize, long elapsedTime, long size) - { - long t = GetLogSize(dictionarySize) - (18 << kSubBits); - long numCommandsForOne = 1060 + ((t * t * 10) >> (2 * kSubBits)); - long numCommands = (long)(size) * numCommandsForOne; - return MyMultDiv64(numCommands, elapsedTime); - } - - static long GetDecompressRating(long elapsedTime, long outSize, long inSize) - { - long numCommands = inSize * 220 + outSize * 20; - return MyMultDiv64(numCommands, elapsedTime); - } - - static long GetTotalRating( - int dictionarySize, - long elapsedTimeEn, long sizeEn, - long elapsedTimeDe, - long inSizeDe, long outSizeDe) - { - return (GetCompressRating(dictionarySize, elapsedTimeEn, sizeEn) + - GetDecompressRating(elapsedTimeDe, inSizeDe, outSizeDe)) / 2; - } - - static void PrintValue(long v) - { - String s = ""; - s += v; - for (int i = 0; i + s.length() < 6; i++) - System.out.print(" "); - System.out.print(s); - } - - static void PrintRating(long rating) - { - PrintValue(rating / 1000000); - System.out.print(" MIPS"); - } - - static void PrintResults( - int dictionarySize, - long elapsedTime, - long size, - boolean decompressMode, long secondSize) - { - long speed = MyMultDiv64(size, elapsedTime); - PrintValue(speed / 1024); - System.out.print(" KB/s "); - long rating; - if (decompressMode) - rating = GetDecompressRating(elapsedTime, size, secondSize); - else - rating = GetCompressRating(dictionarySize, elapsedTime, size); - PrintRating(rating); - } - - static public int LzmaBenchmark(int numIterations, int dictionarySize) throws Exception - { - if (numIterations <= 0) - return 0; - if (dictionarySize < (1 << 18)) - { - System.out.println("\nError: dictionary size for benchmark must be >= 18 (256 KB)"); - return 1; - } - System.out.print("\n Compressing Decompressing\n\n"); - - SevenZip.Compression.LZMA.Encoder encoder = new SevenZip.Compression.LZMA.Encoder(); - SevenZip.Compression.LZMA.Decoder decoder = new SevenZip.Compression.LZMA.Decoder(); - - if (!encoder.SetDictionarySize(dictionarySize)) - throw new Exception("Incorrect dictionary size"); - - int kBufferSize = dictionarySize + kAdditionalSize; - int kCompressedBufferSize = (kBufferSize / 2) + kCompressedAdditionalSize; - - ByteArrayOutputStream propStream = new ByteArrayOutputStream(); - encoder.WriteCoderProperties(propStream); - byte[] propArray = propStream.toByteArray(); - decoder.SetDecoderProperties(propArray); - - CBenchRandomGenerator rg = new CBenchRandomGenerator(); - - rg.Set(kBufferSize); - rg.Generate(); - CRC crc = new CRC(); - crc.Init(); - crc.Update(rg.Buffer, 0, rg.BufferSize); - - CProgressInfo progressInfo = new CProgressInfo(); - progressInfo.ApprovedStart = dictionarySize; - - long totalBenchSize = 0; - long totalEncodeTime = 0; - long totalDecodeTime = 0; - long totalCompressedSize = 0; - - MyInputStream inStream = new MyInputStream(rg.Buffer, rg.BufferSize); - - byte[] compressedBuffer = new byte[kCompressedBufferSize]; - MyOutputStream compressedStream = new MyOutputStream(compressedBuffer); - CrcOutStream crcOutStream = new CrcOutStream(); - MyInputStream inputCompressedStream = null; - int compressedSize = 0; - for (int i = 0; i < numIterations; i++) - { - progressInfo.Init(); - inStream.reset(); - compressedStream.reset(); - encoder.Code(inStream, compressedStream, -1, -1, progressInfo); - long encodeTime = System.currentTimeMillis() - progressInfo.Time; - - if (i == 0) - { - compressedSize = compressedStream.size(); - inputCompressedStream = new MyInputStream(compressedBuffer, compressedSize); - } - else if (compressedSize != compressedStream.size()) - throw (new Exception("Encoding error")); - - if (progressInfo.InSize == 0) - throw (new Exception("Internal ERROR 1282")); - - long decodeTime = 0; - for (int j = 0; j < 2; j++) - { - inputCompressedStream.reset(); - crcOutStream.Init(); - - long outSize = kBufferSize; - long startTime = System.currentTimeMillis(); - if (!decoder.Code(inputCompressedStream, crcOutStream, outSize)) - throw (new Exception("Decoding Error"));; - decodeTime = System.currentTimeMillis() - startTime; - if (crcOutStream.GetDigest() != crc.GetDigest()) - throw (new Exception("CRC Error")); - } - long benchSize = kBufferSize - (long)progressInfo.InSize; - PrintResults(dictionarySize, encodeTime, benchSize, false, 0); - System.out.print(" "); - PrintResults(dictionarySize, decodeTime, kBufferSize, true, compressedSize); - System.out.println(); - - totalBenchSize += benchSize; - totalEncodeTime += encodeTime; - totalDecodeTime += decodeTime; - totalCompressedSize += compressedSize; - } - System.out.println("---------------------------------------------------"); - PrintResults(dictionarySize, totalEncodeTime, totalBenchSize, false, 0); - System.out.print(" "); - PrintResults(dictionarySize, totalDecodeTime, - kBufferSize * (long)numIterations, true, totalCompressedSize); - System.out.println(" Average"); - return 0; - } -}