From 081f4403ea2a2f8352d480910052bf5032e2e4a5 Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Wed, 12 Dec 2007 06:58:55 +0000 Subject: * Added some simstats to fill the simulator pane of the Statistics monitor. * I stress, this is an initial implementation and the Agents(Child and Root) are definately obviously incorrect. --- .../Region/Environment/Scenes/SimStatsReporter.cs | 158 +++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 OpenSim/Region/Environment/Scenes/SimStatsReporter.cs (limited to 'OpenSim/Region/Environment/Scenes/SimStatsReporter.cs') diff --git a/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs b/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs new file mode 100644 index 0000000..55bd6a7 --- /dev/null +++ b/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs @@ -0,0 +1,158 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Timers; +using libsecondlife.Packets; +using OpenSim.Framework; +using Timer = System.Timers.Timer; + +namespace OpenSim.Region.Environment.Scenes +{ + public class SimStatsReporter + { + public delegate void SendStatResult(SimStatsPacket pack); + + public event SendStatResult OnSendStatsResult; + + private enum Stats : uint + { + TimeDilation = 0, + SimFPS = 1, + PhysicsFPS = 2, + AgentUpdates = 3, + Agents = 13, + ChildAgents = 14, + InPacketsPerSecond = 17, + OutPacketsPerSecond = 18, + UnAckedBytes = 24 + } + + private int statsUpdatesEveryMS = 1000; + private float m_timeDilation = 0; + private int m_fps = 0; + private float m_pfps = 0; + private float m_agentUpdates = 0; + private int m_rootAgents = 0; + private int m_childAgents = 0; + private int m_inPacketsPerSecond = 0; + private int m_outPacketsPerSecond = 0; + private int m_unAckedBytes = 0; + private RegionInfo ReportingRegion; + + private Timer m_report = new Timer(); + + + public SimStatsReporter(RegionInfo regionData) + { + ReportingRegion = regionData; + m_report.AutoReset = true; + m_report.Interval = statsUpdatesEveryMS; + m_report.Elapsed += new ElapsedEventHandler(statsHeartBeat); + m_report.Enabled = true; + } + + private void statsHeartBeat(object sender, EventArgs e) + { + m_report.Enabled = false; + SimStatsPacket statpack = new SimStatsPacket(); + SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[9]; + statpack.Region = new SimStatsPacket.RegionBlock(); + statpack.Region.RegionX = ReportingRegion.RegionLocX; + statpack.Region.RegionY = ReportingRegion.RegionLocY; + statpack.Region.RegionFlags = (uint)21; + statpack.Region.ObjectCapacity = (uint)15000; + + sb[0] = new SimStatsPacket.StatBlock(); + sb[0].StatID = (uint)Stats.TimeDilation; + sb[0].StatValue = (m_timeDilation); + + sb[1] = new SimStatsPacket.StatBlock(); + sb[1].StatID = (uint)Stats.SimFPS; + sb[1].StatValue = (int)(m_fps); + + sb[2] = new SimStatsPacket.StatBlock(); + sb[2].StatID = (uint)Stats.PhysicsFPS; + sb[2].StatValue = (m_pfps / statsUpdatesEveryMS); + + sb[3] = new SimStatsPacket.StatBlock(); + sb[3].StatID = (uint)Stats.AgentUpdates; + sb[3].StatValue = (m_agentUpdates / statsUpdatesEveryMS); + + sb[4] = new SimStatsPacket.StatBlock(); + sb[4].StatID = (uint)Stats.Agents; + sb[4].StatValue = m_rootAgents; + + sb[5] = new SimStatsPacket.StatBlock(); + sb[5].StatID = (uint)Stats.ChildAgents; + sb[5].StatValue = m_childAgents; + + sb[6] = new SimStatsPacket.StatBlock(); + sb[6].StatID = (uint)Stats.InPacketsPerSecond; + sb[6].StatValue = (int)(m_inPacketsPerSecond / statsUpdatesEveryMS); + + sb[7] = new SimStatsPacket.StatBlock(); + sb[7].StatID = (uint)Stats.OutPacketsPerSecond; + sb[7].StatValue = (int)(m_outPacketsPerSecond / statsUpdatesEveryMS); + + sb[8] = new SimStatsPacket.StatBlock(); + sb[8].StatID = (uint)Stats.UnAckedBytes; + sb[8].StatValue = (int) (m_unAckedBytes / statsUpdatesEveryMS); + + statpack.Stat = sb; + + if (OnSendStatsResult != null) + { + OnSendStatsResult(statpack); + } + resetvalues(); + m_report.Enabled = true; + } + + private void resetvalues() + { + m_fps = 0; + m_pfps = 0; + m_agentUpdates = 0; + m_inPacketsPerSecond = 0; + m_outPacketsPerSecond = 0; + m_unAckedBytes = 0; + + } + public void SetTimeDilation(float td) + { + m_timeDilation = td; + } + public void SetRootAgents(int rootAgents) + { + m_rootAgents = rootAgents; + } + public void SetChildAgents(int childAgents) + { + m_childAgents = childAgents; + } + public void AddFPS(int frames) + { + m_fps += frames; + } + public void AddPhysicsFPS(float frames) + { + m_pfps += frames; + } + public void AddAgentUpdates(float numUpdates) + { + m_agentUpdates += numUpdates; + } + public void AddInPackets(int numPackets) + { + m_inPacketsPerSecond += numPackets; + } + public void AddOutPackets(int numPackets) + { + m_outPacketsPerSecond += numPackets; + } + public void AddunAckedBytes(int numBytes) + { + m_unAckedBytes += numBytes; + } + } +} -- cgit v1.1