Index: third_party/lzma/v4_65/files/CS/7zip/Compress/LzmaAlone/LzmaBench.cs |
diff --git a/third_party/lzma/v4_65/files/CS/7zip/Compress/LzmaAlone/LzmaBench.cs b/third_party/lzma/v4_65/files/CS/7zip/Compress/LzmaAlone/LzmaBench.cs |
deleted file mode 100644 |
index f7b6bd016f62e05ff24c8f91a6d0787e71fc2024..0000000000000000000000000000000000000000 |
--- a/third_party/lzma/v4_65/files/CS/7zip/Compress/LzmaAlone/LzmaBench.cs |
+++ /dev/null |
@@ -1,340 +0,0 @@ |
-// LzmaBench.cs |
- |
-using System; |
-using System.IO; |
- |
-namespace SevenZip |
-{ |
- /// <summary> |
- /// LZMA Benchmark |
- /// </summary> |
- internal abstract class LzmaBench |
- { |
- const UInt32 kAdditionalSize = (6 << 20); |
- const UInt32 kCompressedAdditionalSize = (1 << 10); |
- const UInt32 kMaxLzmaPropSize = 10; |
- |
- class CRandomGenerator |
- { |
- UInt32 A1; |
- UInt32 A2; |
- public CRandomGenerator() { Init(); } |
- public void Init() { A1 = 362436069; A2 = 521288629; } |
- public UInt32 GetRnd() |
- { |
- return |
- ((A1 = 36969 * (A1 & 0xffff) + (A1 >> 16)) << 16) ^ |
- ((A2 = 18000 * (A2 & 0xffff) + (A2 >> 16))); |
- } |
- }; |
- |
- class CBitRandomGenerator |
- { |
- CRandomGenerator RG = new CRandomGenerator(); |
- UInt32 Value; |
- int NumBits; |
- public void Init() |
- { |
- Value = 0; |
- NumBits = 0; |
- } |
- public UInt32 GetRnd(int numBits) |
- { |
- UInt32 result; |
- if (NumBits > numBits) |
- { |
- result = Value & (((UInt32)1 << numBits) - 1); |
- Value >>= numBits; |
- NumBits -= numBits; |
- return result; |
- } |
- numBits -= NumBits; |
- result = (Value << numBits); |
- Value = RG.GetRnd(); |
- result |= Value & (((UInt32)1 << numBits) - 1); |
- Value >>= numBits; |
- NumBits = 32 - numBits; |
- return result; |
- } |
- }; |
- |
- class CBenchRandomGenerator |
- { |
- CBitRandomGenerator RG = new CBitRandomGenerator(); |
- UInt32 Pos; |
- UInt32 Rep0; |
- |
- public UInt32 BufferSize; |
- public Byte[] Buffer = null; |
- |
- public CBenchRandomGenerator() { } |
- |
- public void Set(UInt32 bufferSize) |
- { |
- Buffer = new Byte[bufferSize]; |
- Pos = 0; |
- BufferSize = bufferSize; |
- } |
- UInt32 GetRndBit() { return RG.GetRnd(1); } |
- UInt32 GetLogRandBits(int numBits) |
- { |
- UInt32 len = RG.GetRnd(numBits); |
- return RG.GetRnd((int)len); |
- } |
- UInt32 GetOffset() |
- { |
- if (GetRndBit() == 0) |
- return GetLogRandBits(4); |
- return (GetLogRandBits(4) << 10) | RG.GetRnd(10); |
- } |
- UInt32 GetLen1() { return RG.GetRnd(1 + (int)RG.GetRnd(2)); } |
- UInt32 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 |
- { |
- UInt32 len; |
- if (RG.GetRnd(3) == 0) |
- len = 1 + GetLen1(); |
- else |
- { |
- do |
- Rep0 = GetOffset(); |
- while (Rep0 >= Pos); |
- Rep0++; |
- len = 2 + GetLen2(); |
- } |
- for (UInt32 i = 0; i < len && Pos < BufferSize; i++, Pos++) |
- Buffer[Pos] = Buffer[Pos - Rep0]; |
- } |
- } |
- } |
- }; |
- |
- class CrcOutStream : System.IO.Stream |
- { |
- public CRC CRC = new CRC(); |
- public void Init() { CRC.Init(); } |
- public UInt32 GetDigest() { return CRC.GetDigest(); } |
- |
- public override bool CanRead { get { return false; } } |
- public override bool CanSeek { get { return false; } } |
- public override bool CanWrite { get { return true; } } |
- public override Int64 Length { get { return 0; } } |
- public override Int64 Position { get { return 0; } set { } } |
- public override void Flush() { } |
- public override long Seek(long offset, SeekOrigin origin) { return 0; } |
- public override void SetLength(long value) { } |
- public override int Read(byte[] buffer, int offset, int count) { return 0; } |
- |
- public override void WriteByte(byte b) |
- { |
- CRC.UpdateByte(b); |
- } |
- public override void Write(byte[] buffer, int offset, int count) |
- { |
- CRC.Update(buffer, (uint)offset, (uint)count); |
- } |
- }; |
- |
- class CProgressInfo : ICodeProgress |
- { |
- public Int64 ApprovedStart; |
- public Int64 InSize; |
- public System.DateTime Time; |
- public void Init() { InSize = 0; } |
- public void SetProgress(Int64 inSize, Int64 outSize) |
- { |
- if (inSize >= ApprovedStart && InSize == 0) |
- { |
- Time = DateTime.UtcNow; |
- InSize = inSize; |
- } |
- } |
- } |
- const int kSubBits = 8; |
- |
- static UInt32 GetLogSize(UInt32 size) |
- { |
- for (int i = kSubBits; i < 32; i++) |
- for (UInt32 j = 0; j < (1 << kSubBits); j++) |
- if (size <= (((UInt32)1) << i) + (j << (i - kSubBits))) |
- return (UInt32)(i << kSubBits) + j; |
- return (32 << kSubBits); |
- } |
- |
- static UInt64 MyMultDiv64(UInt64 value, UInt64 elapsedTime) |
- { |
- UInt64 freq = TimeSpan.TicksPerSecond; |
- UInt64 elTime = elapsedTime; |
- while (freq > 1000000) |
- { |
- freq >>= 1; |
- elTime >>= 1; |
- } |
- if (elTime == 0) |
- elTime = 1; |
- return value * freq / elTime; |
- } |
- |
- static UInt64 GetCompressRating(UInt32 dictionarySize, UInt64 elapsedTime, UInt64 size) |
- { |
- UInt64 t = GetLogSize(dictionarySize) - (18 << kSubBits); |
- UInt64 numCommandsForOne = 1060 + ((t * t * 10) >> (2 * kSubBits)); |
- UInt64 numCommands = (UInt64)(size) * numCommandsForOne; |
- return MyMultDiv64(numCommands, elapsedTime); |
- } |
- |
- static UInt64 GetDecompressRating(UInt64 elapsedTime, UInt64 outSize, UInt64 inSize) |
- { |
- UInt64 numCommands = inSize * 220 + outSize * 20; |
- return MyMultDiv64(numCommands, elapsedTime); |
- } |
- |
- static UInt64 GetTotalRating( |
- UInt32 dictionarySize, |
- UInt64 elapsedTimeEn, UInt64 sizeEn, |
- UInt64 elapsedTimeDe, |
- UInt64 inSizeDe, UInt64 outSizeDe) |
- { |
- return (GetCompressRating(dictionarySize, elapsedTimeEn, sizeEn) + |
- GetDecompressRating(elapsedTimeDe, inSizeDe, outSizeDe)) / 2; |
- } |
- |
- static void PrintValue(UInt64 v) |
- { |
- string s = v.ToString(); |
- for (int i = 0; i + s.Length < 6; i++) |
- System.Console.Write(" "); |
- System.Console.Write(s); |
- } |
- |
- static void PrintRating(UInt64 rating) |
- { |
- PrintValue(rating / 1000000); |
- System.Console.Write(" MIPS"); |
- } |
- |
- static void PrintResults( |
- UInt32 dictionarySize, |
- UInt64 elapsedTime, |
- UInt64 size, |
- bool decompressMode, UInt64 secondSize) |
- { |
- UInt64 speed = MyMultDiv64(size, elapsedTime); |
- PrintValue(speed / 1024); |
- System.Console.Write(" KB/s "); |
- UInt64 rating; |
- if (decompressMode) |
- rating = GetDecompressRating(elapsedTime, size, secondSize); |
- else |
- rating = GetCompressRating(dictionarySize, elapsedTime, size); |
- PrintRating(rating); |
- } |
- |
- static public int LzmaBenchmark(Int32 numIterations, UInt32 dictionarySize) |
- { |
- if (numIterations <= 0) |
- return 0; |
- if (dictionarySize < (1 << 18)) |
- { |
- System.Console.WriteLine("\nError: dictionary size for benchmark must be >= 19 (512 KB)"); |
- return 1; |
- } |
- System.Console.Write("\n Compressing Decompressing\n\n"); |
- |
- Compression.LZMA.Encoder encoder = new Compression.LZMA.Encoder(); |
- Compression.LZMA.Decoder decoder = new Compression.LZMA.Decoder(); |
- |
- |
- CoderPropID[] propIDs = |
- { |
- CoderPropID.DictionarySize, |
- }; |
- object[] properties = |
- { |
- (Int32)(dictionarySize), |
- }; |
- |
- UInt32 kBufferSize = dictionarySize + kAdditionalSize; |
- UInt32 kCompressedBufferSize = (kBufferSize / 2) + kCompressedAdditionalSize; |
- |
- encoder.SetCoderProperties(propIDs, properties); |
- System.IO.MemoryStream propStream = new System.IO.MemoryStream(); |
- encoder.WriteCoderProperties(propStream); |
- byte[] propArray = propStream.ToArray(); |
- |
- 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; |
- |
- UInt64 totalBenchSize = 0; |
- UInt64 totalEncodeTime = 0; |
- UInt64 totalDecodeTime = 0; |
- UInt64 totalCompressedSize = 0; |
- |
- MemoryStream inStream = new MemoryStream(rg.Buffer, 0, (int)rg.BufferSize); |
- MemoryStream compressedStream = new MemoryStream((int)kCompressedBufferSize); |
- CrcOutStream crcOutStream = new CrcOutStream(); |
- for (Int32 i = 0; i < numIterations; i++) |
- { |
- progressInfo.Init(); |
- inStream.Seek(0, SeekOrigin.Begin); |
- compressedStream.Seek(0, SeekOrigin.Begin); |
- encoder.Code(inStream, compressedStream, -1, -1, progressInfo); |
- TimeSpan sp2 = DateTime.UtcNow - progressInfo.Time; |
- UInt64 encodeTime = (UInt64)sp2.Ticks; |
- |
- long compressedSize = compressedStream.Position; |
- if (progressInfo.InSize == 0) |
- throw (new Exception("Internal ERROR 1282")); |
- |
- UInt64 decodeTime = 0; |
- for (int j = 0; j < 2; j++) |
- { |
- compressedStream.Seek(0, SeekOrigin.Begin); |
- crcOutStream.Init(); |
- |
- decoder.SetDecoderProperties(propArray); |
- UInt64 outSize = kBufferSize; |
- System.DateTime startTime = DateTime.UtcNow; |
- decoder.Code(compressedStream, crcOutStream, 0, (Int64)outSize, null); |
- TimeSpan sp = (DateTime.UtcNow - startTime); |
- decodeTime = (ulong)sp.Ticks; |
- if (crcOutStream.GetDigest() != crc.GetDigest()) |
- throw (new Exception("CRC Error")); |
- } |
- UInt64 benchSize = kBufferSize - (UInt64)progressInfo.InSize; |
- PrintResults(dictionarySize, encodeTime, benchSize, false, 0); |
- System.Console.Write(" "); |
- PrintResults(dictionarySize, decodeTime, kBufferSize, true, (ulong)compressedSize); |
- System.Console.WriteLine(); |
- |
- totalBenchSize += benchSize; |
- totalEncodeTime += encodeTime; |
- totalDecodeTime += decodeTime; |
- totalCompressedSize += (ulong)compressedSize; |
- } |
- System.Console.WriteLine("---------------------------------------------------"); |
- PrintResults(dictionarySize, totalEncodeTime, totalBenchSize, false, 0); |
- System.Console.Write(" "); |
- PrintResults(dictionarySize, totalDecodeTime, |
- kBufferSize * (UInt64)numIterations, true, totalCompressedSize); |
- System.Console.WriteLine(" Average"); |
- return 0; |
- } |
- } |
-} |