aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorTeravus Ovares2008-01-16 02:48:39 +0000
committerTeravus Ovares2008-01-16 02:48:39 +0000
commit314c554ed40fe015397cf0fa6981e47b5025b6f8 (patch)
tree7337f1b63bc207809306c1967559577479e448ec /OpenSim
parent* Restore non dash asset UUID persistence which was made dashed in r3069 (diff)
downloadopensim-SC-314c554ed40fe015397cf0fa6981e47b5025b6f8.zip
opensim-SC-314c554ed40fe015397cf0fa6981e47b5025b6f8.tar.gz
opensim-SC-314c554ed40fe015397cf0fa6981e47b5025b6f8.tar.bz2
opensim-SC-314c554ed40fe015397cf0fa6981e47b5025b6f8.tar.xz
* Refactored the SimStatsReporter to reuse the same packet and packet blocks over and over again instead of creating 1 a second.
* Added frame Milliseconds, Physics Milliseconds and Other Milliseconds to the Sim Stats Reporter so we can start to figure out what the slowdowns are. (these were the most convenient to get and had just about no overhead.
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs23
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPart.cs2
-rw-r--r--OpenSim/Region/Environment/Scenes/SimStatsReporter.cs110
3 files changed, 110 insertions, 25 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 86f43b3..9af43f5 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -125,6 +125,12 @@ namespace OpenSim.Region.Environment.Scenes
125 private int m_update_land = 1; 125 private int m_update_land = 1;
126 private int m_update_avatars = 1; 126 private int m_update_avatars = 1;
127 127
128 private int frameMS = 0;
129 private int physicsMS2 = 0;
130 private int physicsMS = 0;
131 private int otherMS = 0;
132
133
128 #endregion 134 #endregion
129 135
130 #region Properties 136 #region Properties
@@ -551,6 +557,8 @@ namespace OpenSim.Region.Environment.Scenes
551 // Aquire a lock so only one update call happens at once 557 // Aquire a lock so only one update call happens at once
552 updateLock.WaitOne(); 558 updateLock.WaitOne();
553 float physicsFPS = 0; 559 float physicsFPS = 0;
560
561 frameMS = System.Environment.TickCount;
554 try 562 try
555 { 563 {
556 // Increment the frame counter 564 // Increment the frame counter
@@ -559,18 +567,26 @@ namespace OpenSim.Region.Environment.Scenes
559 // Loop it 567 // Loop it
560 if (m_frame == Int32.MaxValue) 568 if (m_frame == Int32.MaxValue)
561 m_frame = 0; 569 m_frame = 0;
570
562 571
572 physicsMS2 = System.Environment.TickCount;
563 if (m_frame%m_update_physics == 0) 573 if (m_frame%m_update_physics == 0)
564 m_innerScene.UpdatePreparePhysics(); 574 m_innerScene.UpdatePreparePhysics();
575 physicsMS2 = System.Environment.TickCount - physicsMS2;
565 576
566 if (m_frame%m_update_entitymovement == 0) 577 if (m_frame%m_update_entitymovement == 0)
567 m_innerScene.UpdateEntityMovement(); 578 m_innerScene.UpdateEntityMovement();
568 579
580 physicsMS = System.Environment.TickCount;
569 if (m_frame%m_update_physics == 0) 581 if (m_frame%m_update_physics == 0)
570 physicsFPS = m_innerScene.UpdatePhysics( 582 physicsFPS = m_innerScene.UpdatePhysics(
571 Math.Max(SinceLastFrame.TotalSeconds, m_timespan) 583 Math.Max(SinceLastFrame.TotalSeconds, m_timespan)
572 ); 584 );
585
586 physicsMS = System.Environment.TickCount - physicsMS;
587 physicsMS += physicsMS2;
573 588
589 otherMS = System.Environment.TickCount;
574 if (m_frame%m_update_entities == 0) 590 if (m_frame%m_update_entities == 0)
575 m_innerScene.UpdateEntities(); 591 m_innerScene.UpdateEntities();
576 592
@@ -585,7 +601,7 @@ namespace OpenSim.Region.Environment.Scenes
585 601
586 if (m_frame%m_update_land == 0) 602 if (m_frame%m_update_land == 0)
587 UpdateLand(); 603 UpdateLand();
588 604 otherMS = System.Environment.TickCount - otherMS;
589 // if (m_frame%m_update_avatars == 0) 605 // if (m_frame%m_update_avatars == 0)
590 // UpdateInWorldTime(); 606 // UpdateInWorldTime();
591 m_statsReporter.AddPhysicsFPS(physicsFPS); 607 m_statsReporter.AddPhysicsFPS(physicsFPS);
@@ -597,6 +613,11 @@ namespace OpenSim.Region.Environment.Scenes
597 m_statsReporter.SetChildAgents(m_innerScene.GetChildAgentCount()); 613 m_statsReporter.SetChildAgents(m_innerScene.GetChildAgentCount());
598 m_statsReporter.SetObjects(m_innerScene.GetTotalObjects()); 614 m_statsReporter.SetObjects(m_innerScene.GetTotalObjects());
599 m_statsReporter.SetActiveObjects(m_innerScene.GetActiveObjects()); 615 m_statsReporter.SetActiveObjects(m_innerScene.GetActiveObjects());
616 frameMS = System.Environment.TickCount - frameMS;
617 m_statsReporter.addFrameMS(frameMS);
618 m_statsReporter.addPhysicsMS(physicsMS);
619 m_statsReporter.addOtherMS(otherMS);
620
600 } 621 }
601 catch (NotImplementedException) 622 catch (NotImplementedException)
602 { 623 {
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index 60ea480..660deaf 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -327,7 +327,7 @@ namespace OpenSim.Region.Environment.Scenes
327 } 327 }
328 else 328 else
329 { 329 {
330 // Child prim we have to calculate it's world rotation 330 // Child prim we have to calculate it's world rotationwel
331 LLQuaternion resultingrotation = GetWorldRotation(); 331 LLQuaternion resultingrotation = GetWorldRotation();
332 PhysActor.Orientation = new Quaternion(resultingrotation.W, resultingrotation.X, resultingrotation.Y, resultingrotation.Z); 332 PhysActor.Orientation = new Quaternion(resultingrotation.W, resultingrotation.X, resultingrotation.Y, resultingrotation.Z);
333 //MainLog.Instance.Verbose("PART", "RO2:" + PhysActor.Orientation.ToString()); 333 //MainLog.Instance.Verbose("PART", "RO2:" + PhysActor.Orientation.ToString());
diff --git a/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs b/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs
index 1b2ff9a..36c2868 100644
--- a/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs
+++ b/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs
@@ -45,6 +45,12 @@ namespace OpenSim.Region.Environment.Scenes
45 SimFPS = 1, 45 SimFPS = 1,
46 PhysicsFPS = 2, 46 PhysicsFPS = 2,
47 AgentUpdates = 3, 47 AgentUpdates = 3,
48 FrameMS = 4,
49 NetMS = 5,
50 OtherMS = 6,
51 PhysicsMS = 7,
52 AgentMS = 8,
53 ImageMS = 9,
48 TotalPrim = 11, 54 TotalPrim = 11,
49 ActivePrim = 12, 55 ActivePrim = 12,
50 Agents = 13, 56 Agents = 13,
@@ -59,6 +65,11 @@ namespace OpenSim.Region.Environment.Scenes
59 private int m_fps = 0; 65 private int m_fps = 0;
60 private float m_pfps = 0; 66 private float m_pfps = 0;
61 private float m_agentUpdates = 0; 67 private float m_agentUpdates = 0;
68 private int m_frameMS = 0;
69 private int m_netMS = 0;
70 private int m_physicsMS = 0;
71 private int m_imageMS = 0;
72 private int m_otherMS = 0;
62 private int m_rootAgents = 0; 73 private int m_rootAgents = 0;
63 private int m_childAgents = 0; 74 private int m_childAgents = 0;
64 private int m_numPrim = 0; 75 private int m_numPrim = 0;
@@ -66,6 +77,12 @@ namespace OpenSim.Region.Environment.Scenes
66 private int m_outPacketsPerSecond = 0; 77 private int m_outPacketsPerSecond = 0;
67 private int m_activePrim = 0; 78 private int m_activePrim = 0;
68 private int m_unAckedBytes = 0; 79 private int m_unAckedBytes = 0;
80
81 SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[16];
82 SimStatsPacket.RegionBlock rb = new SimStatsPacket.RegionBlock();
83 SimStatsPacket statpack = (SimStatsPacket)PacketPool.Instance.GetPacket(PacketType.SimStats);
84
85
69 private RegionInfo ReportingRegion; 86 private RegionInfo ReportingRegion;
70 87
71 private Timer m_report = new Timer(); 88 private Timer m_report = new Timer();
@@ -74,6 +91,10 @@ namespace OpenSim.Region.Environment.Scenes
74 public SimStatsReporter(RegionInfo regionData) 91 public SimStatsReporter(RegionInfo regionData)
75 { 92 {
76 ReportingRegion = regionData; 93 ReportingRegion = regionData;
94 for (int i = 0; i<16;i++)
95 {
96 sb[i] = new SimStatsPacket.StatBlock();
97 }
77 m_report.AutoReset = true; 98 m_report.AutoReset = true;
78 m_report.Interval = statsUpdatesEveryMS; 99 m_report.Interval = statsUpdatesEveryMS;
79 m_report.Elapsed += new ElapsedEventHandler(statsHeartBeat); 100 m_report.Elapsed += new ElapsedEventHandler(statsHeartBeat);
@@ -83,11 +104,11 @@ namespace OpenSim.Region.Environment.Scenes
83 private void statsHeartBeat(object sender, EventArgs e) 104 private void statsHeartBeat(object sender, EventArgs e)
84 { 105 {
85 m_report.Enabled = false; 106 m_report.Enabled = false;
86 SimStatsPacket statpack = (SimStatsPacket) PacketPool.Instance.GetPacket(PacketType.SimStats); 107
87 // TODO: don't create new blocks if recycling an old packet 108 // Packet is already initialized and ready for data insert
88 109
89 SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[11]; 110
90 statpack.Region = new SimStatsPacket.RegionBlock(); 111 statpack.Region = rb;
91 statpack.Region.RegionX = ReportingRegion.RegionLocX; 112 statpack.Region.RegionX = ReportingRegion.RegionLocX;
92 statpack.Region.RegionY = ReportingRegion.RegionLocY; 113 statpack.Region.RegionY = ReportingRegion.RegionLocY;
93 try 114 try
@@ -119,49 +140,64 @@ namespace OpenSim.Region.Environment.Scenes
119 140
120 #endregion 141 #endregion
121 142
122 sb[0] = new SimStatsPacket.StatBlock(); 143 //sb[0] = sbb;
123 sb[0].StatID = (uint) Stats.TimeDilation; 144 sb[0].StatID = (uint) Stats.TimeDilation;
124 sb[0].StatValue = (m_timeDilation); 145 sb[0].StatValue = (m_timeDilation);
125 146
126 sb[1] = new SimStatsPacket.StatBlock(); 147 //sb[1] = sbb;
127 sb[1].StatID = (uint) Stats.SimFPS; 148 sb[1].StatID = (uint) Stats.SimFPS;
128 sb[1].StatValue = simfps; 149 sb[1].StatValue = simfps;
129 150
130 sb[2] = new SimStatsPacket.StatBlock(); 151 //sb[2] = sbb;
131 sb[2].StatID = (uint) Stats.PhysicsFPS; 152 sb[2].StatID = (uint) Stats.PhysicsFPS;
132 sb[2].StatValue = physfps; 153 sb[2].StatValue = physfps;
133 154
134 sb[3] = new SimStatsPacket.StatBlock(); 155 //sb[3] = sbb;
135 sb[3].StatID = (uint) Stats.AgentUpdates; 156 sb[3].StatID = (uint) Stats.AgentUpdates;
136 sb[3].StatValue = (m_agentUpdates/statsUpdatesEveryMS); 157 sb[3].StatValue = (m_agentUpdates);
137 158
138 sb[4] = new SimStatsPacket.StatBlock(); 159 //sb[4] = sbb;
139 sb[4].StatID = (uint) Stats.Agents; 160 //sb[4].StatID = (uint) Stats.Agents;
140 sb[4].StatValue = m_rootAgents; 161 sb[4].StatValue = m_rootAgents;
141 162
142 sb[5] = new SimStatsPacket.StatBlock(); 163 //sb[5] = sbb;
143 sb[5].StatID = (uint) Stats.ChildAgents; 164 sb[5].StatID = (uint) Stats.ChildAgents;
144 sb[5].StatValue = m_childAgents; 165 sb[5].StatValue = m_childAgents;
145 166
146 sb[6] = new SimStatsPacket.StatBlock(); 167 //sb[6] = sbb;
147 sb[6].StatID = (uint) Stats.TotalPrim; 168 sb[6].StatID = (uint) Stats.TotalPrim;
148 sb[6].StatValue = m_numPrim; 169 sb[6].StatValue = m_numPrim;
149 170
150 sb[7] = new SimStatsPacket.StatBlock(); 171 //sb[7] = sbb;
151 sb[7].StatID = (uint) Stats.ActivePrim; 172 sb[7].StatID = (uint) Stats.ActivePrim;
152 sb[7].StatValue = m_activePrim; 173 sb[7].StatValue = m_activePrim;
153 174
154 sb[8] = new SimStatsPacket.StatBlock(); 175 sb[8].StatID = (uint)Stats.FrameMS;
155 sb[8].StatID = (uint) Stats.InPacketsPerSecond; 176 sb[8].StatValue = m_frameMS;
156 sb[8].StatValue = (int) (m_inPacketsPerSecond/statsUpdatesEveryMS); 177
178 sb[9].StatID = (uint)Stats.NetMS;
179 sb[9].StatValue = m_netMS;
180
181 sb[10].StatID = (uint)Stats.PhysicsMS;
182 sb[10].StatValue = m_physicsMS;
157 183
158 sb[9] = new SimStatsPacket.StatBlock(); 184 sb[11].StatID = (uint)Stats.ImageMS ;
159 sb[9].StatID = (uint) Stats.OutPacketsPerSecond; 185 sb[11].StatValue = m_imageMS;
160 sb[9].StatValue = (int) (m_outPacketsPerSecond/statsUpdatesEveryMS);
161 186
162 sb[10] = new SimStatsPacket.StatBlock(); 187 sb[12].StatID = (uint)Stats.OtherMS;
163 sb[10].StatID = (uint) Stats.UnAckedBytes; 188 sb[12].StatValue = m_otherMS;
164 sb[10].StatValue = (int) (m_unAckedBytes/statsUpdatesEveryMS); 189
190 //sb[8] = sbb;
191 sb[13].StatID = (uint) Stats.InPacketsPerSecond;
192 sb[13].StatValue = (m_inPacketsPerSecond);
193
194 //sb[9] = sbb;
195 sb[14].StatID = (uint) Stats.OutPacketsPerSecond;
196 sb[14].StatValue = (m_outPacketsPerSecond);
197
198 //sb[10] = sbb;
199 sb[15].StatID = (uint) Stats.UnAckedBytes;
200 sb[15].StatValue = m_unAckedBytes;
165 201
166 statpack.Stat = sb; 202 statpack.Stat = sb;
167 203
@@ -181,8 +217,15 @@ namespace OpenSim.Region.Environment.Scenes
181 m_inPacketsPerSecond = 0; 217 m_inPacketsPerSecond = 0;
182 m_outPacketsPerSecond = 0; 218 m_outPacketsPerSecond = 0;
183 m_unAckedBytes = 0; 219 m_unAckedBytes = 0;
220 m_frameMS = 0;
221 m_netMS = 0;
222 m_physicsMS = 0;
223 m_imageMS = 0;
224 m_otherMS = 0;
184 } 225 }
185 226
227
228
186 public void SetTimeDilation(float td) 229 public void SetTimeDilation(float td)
187 { 230 {
188 m_timeDilation = td; 231 m_timeDilation = td;
@@ -242,5 +285,26 @@ namespace OpenSim.Region.Environment.Scenes
242 { 285 {
243 m_unAckedBytes += numBytes; 286 m_unAckedBytes += numBytes;
244 } 287 }
288
289 public void addFrameMS(int ms)
290 {
291 m_frameMS += ms;
292 }
293 public void addNetMS(int ms)
294 {
295 m_netMS += ms;
296 }
297 public void addPhysicsMS(int ms)
298 {
299 m_physicsMS += ms;
300 }
301 public void addImageMS(int ms)
302 {
303 m_imageMS += ms;
304 }
305 public void addOtherMS(int ms)
306 {
307 m_otherMS += ms;
308 }
245 } 309 }
246} 310}