misc/libphysfs/lzma/CS/7zip/Compress/LzmaAlone/LzmaBench.cs
branchui-scaling
changeset 15283 c4fd2813b127
parent 13390 0135e64c6c66
parent 15279 7ab5cf405686
child 15663 d92eeb468dad
--- a/misc/libphysfs/lzma/CS/7zip/Compress/LzmaAlone/LzmaBench.cs	Wed May 16 18:22:28 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -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;
-		}
-	}
-}