You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

221 lines
10 KiB

  1. using BenchmarkDotNet.Attributes;
  2. using BenchmarkDotNet.Configs;
  3. using BenchmarkDotNet.Environments;
  4. using BenchmarkDotNet.Jobs;
  5. using BenchmarkDotNet.Toolchains.CsProj;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Text;
  9. using JTNE.Protocol;
  10. using JTNE.Protocol.Extensions;
  11. using JTNE.Protocol.MessageBody;
  12. using JTNE.Protocol.Enums;
  13. namespace JTNE.Protocol.Benchmark
  14. {
  15. [Config(typeof(JTNESerializerConfig))]
  16. [MemoryDiagnoser]
  17. public class JTNESerializerContext
  18. {
  19. private byte[] bytes;
  20. [Params(100, 10000, 100000)]
  21. public int N;
  22. [GlobalSetup]
  23. public void Setup()
  24. {
  25. bytes = "2323020131323334353637383900000000000000000100D001040507003A00001A0A00640063030602007B02030202010201004100370300EC00640203020042023605085800650308AE006F0C9600030102030D1B221A0A560D086502040100CB006605010031AD030012D1CB061115007B0709000832124211320607110000159D03000003E8000003E9000003EA03000007D0000007D1000007D20300000BB800000BB900000BBA0300000FA000000FA100000FA20802010002007B0037006F03006F00DE014D03000504D2004200DE0301BC022B029A0902010004010203040200040506070867".ToHexBytes();
  26. }
  27. [Benchmark(Description = "JTNE_0x02_Serialize")]
  28. public void JTNE_0x02_Serialize()
  29. {
  30. for (int i = 0; i < N; i++)
  31. {
  32. JTNEPackage jTNEPackage = new JTNEPackage();
  33. jTNEPackage.AskId = JTNEAskId.Success;
  34. jTNEPackage.MsgId = JTNEMsgId.UploadIM;
  35. jTNEPackage.VIN = "123456789";
  36. JTNE_0x02 jTNE_0X02 = new JTNE_0x02();
  37. jTNE_0X02.Values = new Dictionary<byte, JTNE_0x02_Body>();
  38. JTNE_0x02_0x01 jTNE_0X02_0X01 = new JTNE_0x02_0x01();
  39. jTNE_0X02_0X01.Accelerator = 0x02;
  40. jTNE_0X02_0X01.Brakes = 0x03;
  41. jTNE_0X02_0X01.CarStatus = 0x04;
  42. jTNE_0X02_0X01.ChargeStatus = 0x05;
  43. jTNE_0X02_0X01.DCStatus = 0x06;
  44. jTNE_0X02_0X01.OperationMode = 0x07;
  45. jTNE_0X02_0X01.Resistance = 123;
  46. jTNE_0X02_0X01.SOC = 0x03;
  47. jTNE_0X02_0X01.Speed = 58;
  48. jTNE_0X02_0X01.Stall = 0x02;
  49. jTNE_0X02_0X01.TotalDis = 6666;
  50. jTNE_0X02_0X01.TotalTemp = 99;
  51. jTNE_0X02_0X01.TotalVoltage = 100;
  52. jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x01, jTNE_0X02_0X01);
  53. JTNE_0x02_0x02 jTNE_0X02_0X02 = new JTNE_0x02_0x02();
  54. jTNE_0X02_0X02.Electricals = new List<JTNE.Protocol.Metadata.Electrical>();
  55. JTNE.Protocol.Metadata.Electrical electrical1 = new JTNE.Protocol.Metadata.Electrical();
  56. electrical1.ElControlTemp = 0x01;
  57. electrical1.ElCurrent = 100;
  58. electrical1.ElNo = 0x01;
  59. electrical1.ElSpeed = 65;
  60. electrical1.ElStatus = 0x02;
  61. electrical1.ElTemp = 0x03;
  62. electrical1.ElTorque = 55;
  63. electrical1.ElVoltage = 236;
  64. JTNE.Protocol.Metadata.Electrical electrical2 = new JTNE.Protocol.Metadata.Electrical();
  65. electrical2.ElControlTemp = 0x02;
  66. electrical2.ElCurrent = 101;
  67. electrical2.ElNo = 0x02;
  68. electrical2.ElSpeed = 66;
  69. electrical2.ElStatus = 0x03;
  70. electrical2.ElTemp = 0x05;
  71. electrical2.ElTorque = 566;
  72. electrical2.ElVoltage = 2136;
  73. jTNE_0X02_0X02.Electricals.Add(electrical1);
  74. jTNE_0X02_0X02.Electricals.Add(electrical2);
  75. jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x02, jTNE_0X02_0X02);
  76. JTNE_0x02_0x03 jTNE_0X02_0X03 = new JTNE_0x02_0x03();
  77. jTNE_0X02_0X03.DCStatus = 0x02;
  78. jTNE_0X02_0X03.FuelBatteryCurrent = 111;
  79. jTNE_0X02_0X03.FuelBatteryVoltage = 2222;
  80. jTNE_0X02_0X03.FuelConsumptionRate = 3222;
  81. jTNE_0X02_0X03.HydrogenSystemMaxConcentrations = 6666;
  82. jTNE_0X02_0X03.HydrogenSystemMaxConcentrationsNo = 0x56;
  83. jTNE_0X02_0X03.HydrogenSystemMaxPressure = 3336;
  84. jTNE_0X02_0X03.HydrogenSystemMaxPressureNo = 0x65;
  85. jTNE_0X02_0X03.HydrogenSystemMaxTemp = 3355;
  86. jTNE_0X02_0X03.HydrogenSystemMaxTempNo = 0x22;
  87. jTNE_0X02_0X03.Temperatures = new byte[]
  88. {
  89. 0x01,0x02,0x03
  90. };
  91. jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x03, jTNE_0X02_0X03);
  92. JTNE_0x02_0x04 jTNE_0X02_0X04 = new JTNE_0x02_0x04();
  93. jTNE_0X02_0X04.EngineStatus = 0x01;
  94. jTNE_0X02_0X04.FuelRate = 102;
  95. jTNE_0X02_0X04.Revs = 203;
  96. jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x04, jTNE_0X02_0X04);
  97. JTNE_0x02_0x05 jTNE_0X02_0X05 = new JTNE_0x02_0x05();
  98. jTNE_0X02_0X05.Lat = 1233355;
  99. jTNE_0X02_0X05.Lng = 3255555;
  100. jTNE_0X02_0X05.PositioStatus = 0x01;
  101. jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x05, jTNE_0X02_0X05);
  102. JTNE_0x02_0x06 jTNE_0X02_0X06 = new JTNE_0x02_0x06();
  103. jTNE_0X02_0X06.MaxTempBatteryAssemblyNo = 0x12;
  104. jTNE_0X02_0X06.MaxTempProbeBatteryNo = 0x32;
  105. jTNE_0X02_0X06.MaxTempProbeBatteryValue = 0x42;
  106. jTNE_0X02_0X06.MaxVoltageBatteryAssemblyNo = 0x11;
  107. jTNE_0X02_0X06.MaxVoltageSingleBatteryNo = 0x15;
  108. jTNE_0X02_0X06.MaxVoltageSingleBatteryValue = 123;
  109. jTNE_0X02_0X06.MinTempBatteryAssemblyNo = 0x32;
  110. jTNE_0X02_0X06.MinTempProbeBatteryNo = 0x11;
  111. jTNE_0X02_0X06.MinTempProbeBatteryValue = 0x06;
  112. jTNE_0X02_0X06.MinVoltageBatteryAssemblyNo = 0x07;
  113. jTNE_0X02_0X06.MinVoltageSingleBatteryNo = 0x09;
  114. jTNE_0X02_0X06.MinVoltageSingleBatteryValue = 0x08;
  115. jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x06, jTNE_0X02_0X06);
  116. JTNE_0x02_0x07 jTNE_0X02_0X07 = new JTNE_0x02_0x07();
  117. jTNE_0X02_0X07.AlarmBatteryFlag = 5533;
  118. jTNE_0X02_0X07.AlarmLevel = 0x11;
  119. jTNE_0X02_0X07.AlarmBatteryOthers = new List<uint>
  120. {
  121. 1000,1001,1002
  122. };
  123. jTNE_0X02_0X07.AlarmEls = new List<uint>
  124. {
  125. 2000,2001,2002
  126. };
  127. jTNE_0X02_0X07.AlarmEngines = new List<uint>
  128. {
  129. 3000,3001,3002
  130. };
  131. jTNE_0X02_0X07.AlarmOthers = new List<uint>
  132. {
  133. 4000,4001,4002
  134. };
  135. jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x07, jTNE_0X02_0X07);
  136. JTNE_0x02_0x08 jTNE_0X02_0X08 = new JTNE_0x02_0x08();
  137. jTNE_0X02_0X08.BatteryAssemblies = new List<JTNE.Protocol.Metadata.BatteryAssembly>();
  138. JTNE.Protocol.Metadata.BatteryAssembly batteryAssembly1 = new JTNE.Protocol.Metadata.BatteryAssembly();
  139. batteryAssembly1.BatteryAssemblyCurrent = 123;
  140. batteryAssembly1.BatteryAssemblyNo = 0x01;
  141. batteryAssembly1.BatteryAssemblyVoltage = 0x02;
  142. batteryAssembly1.SingleBatteryCount = 55;
  143. batteryAssembly1.ThisSingleBatteryBeginCount = 0x02;
  144. batteryAssembly1.ThisSingleBatteryBeginNo = 111;
  145. batteryAssembly1.SingleBatteryVoltages = new List<ushort> {
  146. 111,222,333
  147. };
  148. JTNE.Protocol.Metadata.BatteryAssembly batteryAssembly2 = new JTNE.Protocol.Metadata.BatteryAssembly();
  149. batteryAssembly2.BatteryAssemblyCurrent = 1234;
  150. batteryAssembly2.BatteryAssemblyNo = 0x03;
  151. batteryAssembly2.BatteryAssemblyVoltage = 0x05;
  152. batteryAssembly2.SingleBatteryCount = 66;
  153. batteryAssembly2.ThisSingleBatteryBeginCount = 0x02;
  154. batteryAssembly2.ThisSingleBatteryBeginNo = 222;
  155. batteryAssembly2.SingleBatteryVoltages = new List<ushort> {
  156. 444,555,666
  157. };
  158. jTNE_0X02_0X08.BatteryAssemblies.Add(batteryAssembly1);
  159. jTNE_0X02_0X08.BatteryAssemblies.Add(batteryAssembly2);
  160. jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x08, jTNE_0X02_0X08);
  161. JTNE_0x02_0x09 jTNE_0X02_0X09 = new JTNE_0x02_0x09();
  162. jTNE_0X02_0X09.BatteryTemperatures = new List<JTNE.Protocol.Metadata.BatteryTemperature>();
  163. JTNE.Protocol.Metadata.BatteryTemperature batteryTemperature1 = new JTNE.Protocol.Metadata.BatteryTemperature();
  164. batteryTemperature1.BatteryAssemblyNo = 0x01;
  165. batteryTemperature1.Temperatures = new byte[]
  166. {
  167. 0x01,0x02,0x03,0x04
  168. };
  169. JTNE.Protocol.Metadata.BatteryTemperature batteryTemperature2 = new JTNE.Protocol.Metadata.BatteryTemperature();
  170. batteryTemperature2.BatteryAssemblyNo = 0x02;
  171. batteryTemperature2.Temperatures = new byte[]
  172. {
  173. 0x05,0x06,0x07,0x08
  174. };
  175. jTNE_0X02_0X09.BatteryTemperatures.Add(batteryTemperature1);
  176. jTNE_0X02_0X09.BatteryTemperatures.Add(batteryTemperature2);
  177. jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x09, jTNE_0X02_0X09);
  178. jTNEPackage.Bodies = jTNE_0X02;
  179. var hex = JTNESerializer.Serialize(jTNEPackage);
  180. }
  181. }
  182. [Benchmark(Description = "JTNE_0x02_Deserialize")]
  183. public void JTNE_0x02_Deserialize()
  184. {
  185. for (int i = 0; i < N; i++)
  186. {
  187. JTNEPackage jTNEPackage = JTNESerializer.Deserialize(bytes);
  188. }
  189. }
  190. }
  191. public class JTNESerializerConfig : ManualConfig
  192. {
  193. public JTNESerializerConfig()
  194. {
  195. Add(Job.Default.WithGcServer(false).With(Runtime.Clr).With(Platform.AnyCpu));
  196. Add(Job.Default.WithGcServer(false).With(CsProjCoreToolchain.NetCoreApp22).With(Platform.AnyCpu));
  197. }
  198. }
  199. }