Fix packetpool for ImprovedTerseObjectUpdate packets.
These were neither being returned or in many places reused. Getting packets from a pool rather than deallocating and reallocating reduces memory churn which in turn reduces garbage collection time and frequency.0.7.4-extended
							parent
							
								
									6c3eceb197
								
							
						
					
					
						commit
						813778b39e
					
				|  | @ -126,8 +126,7 @@ namespace OpenSim.Framework.Monitoring | |||
|             { | ||||
|                 foreach (Stat stat in container.Values) | ||||
|                 { | ||||
|                     con.OutputFormat( | ||||
|                         "{0}.{1}.{2} : {3}{4}", stat.Category, stat.Container, stat.ShortName, stat.Value, stat.UnitName); | ||||
|                     con.Output(stat.ToConsoleString()); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | @ -330,6 +329,12 @@ namespace OpenSim.Framework.Monitoring | |||
|         { | ||||
|             return string.Format("{0}+{1}+{2}", container, category, shortName); | ||||
|         } | ||||
| 
 | ||||
|         public virtual string ToConsoleString() | ||||
|         { | ||||
|             return string.Format( | ||||
|                 "{0}.{1}.{2} : {3}{4}", Category, Container, ShortName, Value, UnitName); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public class PercentageStat : Stat | ||||
|  | @ -358,8 +363,13 @@ namespace OpenSim.Framework.Monitoring | |||
| 
 | ||||
|         public PercentageStat( | ||||
|             string shortName, string name, string category, string container, StatVerbosity verbosity, string description) | ||||
|             : base(shortName, name, "%", category, container, verbosity, description) | ||||
|             : base(shortName, name, "%", category, container, verbosity, description) {} | ||||
| 
 | ||||
|         public override string ToConsoleString() | ||||
|         { | ||||
|             return string.Format( | ||||
|                 "{0}.{1}.{2} : {3:0.###}{4} ({5}/{6})", | ||||
|                 Category, Container, ShortName, Value, UnitName, Antecedent, Consequent); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -3921,7 +3921,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|                 { | ||||
|                     List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock> blocks = terseAgentUpdateBlocks.Value; | ||||
| 
 | ||||
|                     ImprovedTerseObjectUpdatePacket packet = new ImprovedTerseObjectUpdatePacket(); | ||||
|                     ImprovedTerseObjectUpdatePacket packet | ||||
|                         = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ImprovedTerseObjectUpdate); | ||||
| 
 | ||||
|                     packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle; | ||||
|                     packet.RegionData.TimeDilation = timeDilation; | ||||
|                     packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[blocks.Count]; | ||||
|  | @ -3966,7 +3968,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|                 { | ||||
|                     List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock> blocks = terseUpdateBlocks.Value; | ||||
|          | ||||
|                     ImprovedTerseObjectUpdatePacket packet = new ImprovedTerseObjectUpdatePacket(); | ||||
|                     ImprovedTerseObjectUpdatePacket packet | ||||
|                         = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket( | ||||
|                             PacketType.ImprovedTerseObjectUpdate); | ||||
| 
 | ||||
|                     packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle; | ||||
|                     packet.RegionData.TimeDilation = timeDilation; | ||||
|                     packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[blocks.Count]; | ||||
|  | @ -12284,7 +12289,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|                 ushort timeDilation = Utils.FloatToUInt16(TIME_DILATION, 0.0f, 1.0f); | ||||
| 
 | ||||
| 
 | ||||
|                 ImprovedTerseObjectUpdatePacket packet = new ImprovedTerseObjectUpdatePacket(); | ||||
|                 ImprovedTerseObjectUpdatePacket packet | ||||
|                     = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket( | ||||
|                         PacketType.ImprovedTerseObjectUpdate); | ||||
| 
 | ||||
|                 packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle; | ||||
|                 packet.RegionData.TimeDilation = timeDilation; | ||||
|                 packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; | ||||
|  |  | |||
|  | @ -420,6 +420,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|                 byte[] data = packet.ToBytes(); | ||||
|                 SendPacketData(udpClient, data, packet.Type, category, method); | ||||
|             } | ||||
| 
 | ||||
|             PacketPool.Instance.ReturnPacket(packet); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|  |  | |||
|  | @ -47,7 +47,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|         private PercentageStat m_packetsReusedStat = new PercentageStat( | ||||
|             "PacketsReused", | ||||
|             "Packets reused", | ||||
|             "simulator", | ||||
|             "clientstack", | ||||
|             "simulator", | ||||
|             StatVerbosity.Debug, | ||||
|             "Number of packets reused out of all requests to the packet pool"); | ||||
|  | @ -55,7 +55,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|         private PercentageStat m_blocksReusedStat = new PercentageStat( | ||||
|             "BlocksReused", | ||||
|             "Blocks reused", | ||||
|             "simulator", | ||||
|             "clientstack", | ||||
|             "simulator", | ||||
|             StatVerbosity.Debug, | ||||
|             "Number of data blocks reused out of all requests to the packet pool"); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Justin Clark-Casey (justincc)
						Justin Clark-Casey (justincc)