diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SimStatsReporter.cs')
-rwxr-xr-x | OpenSim/Region/Framework/Scenes/SimStatsReporter.cs | 142 |
1 files changed, 109 insertions, 33 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs index 2174e51..52e3ff1 100755 --- a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs +++ b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs | |||
@@ -184,7 +184,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
184 | 184 | ||
185 | // saved last reported value so there is something available for llGetRegionFPS | 185 | // saved last reported value so there is something available for llGetRegionFPS |
186 | private float lastReportedSimFPS; | 186 | private float lastReportedSimFPS; |
187 | <<<<<<< HEAD | ||
187 | private float[] lastReportedSimStats = new float[m_statisticArraySize]; | 188 | private float[] lastReportedSimStats = new float[m_statisticArraySize]; |
189 | ======= | ||
190 | private float[] lastReportedSimStats = new float[23]; | ||
191 | >>>>>>> avn/ubitvar | ||
188 | private float m_pfps; | 192 | private float m_pfps; |
189 | 193 | ||
190 | /// <summary> | 194 | /// <summary> |
@@ -198,13 +202,20 @@ namespace OpenSim.Region.Framework.Scenes | |||
198 | private int m_objectUpdates; | 202 | private int m_objectUpdates; |
199 | 203 | ||
200 | private int m_frameMS; | 204 | private int m_frameMS; |
201 | private int m_spareMS; | 205 | |
202 | private int m_netMS; | 206 | private int m_netMS; |
203 | private int m_agentMS; | 207 | private int m_agentMS; |
204 | private int m_physicsMS; | 208 | private int m_physicsMS; |
205 | private int m_imageMS; | 209 | private int m_imageMS; |
206 | private int m_otherMS; | 210 | private int m_otherMS; |
211 | <<<<<<< HEAD | ||
207 | private int m_scriptMS; | 212 | private int m_scriptMS; |
213 | ======= | ||
214 | private int m_sleeptimeMS; | ||
215 | |||
216 | //Ckrinke: (3-21-08) Comment out to remove a compiler warning. Bring back into play when needed. | ||
217 | //Ckrinke private int m_scriptMS = 0; | ||
218 | >>>>>>> avn/ubitvar | ||
208 | 219 | ||
209 | private int m_rootAgents; | 220 | private int m_rootAgents; |
210 | private int m_childAgents; | 221 | private int m_childAgents; |
@@ -355,11 +366,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
355 | if (!m_scene.Active) | 366 | if (!m_scene.Active) |
356 | return; | 367 | return; |
357 | 368 | ||
369 | <<<<<<< HEAD | ||
358 | // Create arrays to hold the statistics for this current scene, | 370 | // Create arrays to hold the statistics for this current scene, |
359 | // these will be passed to the SimExtraStatsCollector, they are also | 371 | // these will be passed to the SimExtraStatsCollector, they are also |
360 | // sent to the SimStats class | 372 | // sent to the SimStats class |
361 | SimStatsPacket.StatBlock[] sb = new | 373 | SimStatsPacket.StatBlock[] sb = new |
362 | SimStatsPacket.StatBlock[m_statisticArraySize]; | 374 | SimStatsPacket.StatBlock[m_statisticArraySize]; |
375 | ======= | ||
376 | SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[23]; | ||
377 | >>>>>>> avn/ubitvar | ||
363 | SimStatsPacket.RegionBlock rb = new SimStatsPacket.RegionBlock(); | 378 | SimStatsPacket.RegionBlock rb = new SimStatsPacket.RegionBlock(); |
364 | 379 | ||
365 | // Know what's not thread safe in Mono... modifying timers. | 380 | // Know what's not thread safe in Mono... modifying timers. |
@@ -404,6 +419,35 @@ namespace OpenSim.Region.Framework.Scenes | |||
404 | physfps = 0; | 419 | physfps = 0; |
405 | 420 | ||
406 | #endregion | 421 | #endregion |
422 | float factor = 1 / m_statsUpdateFactor; | ||
423 | |||
424 | if (reportedFPS <= 0) | ||
425 | reportedFPS = 1; | ||
426 | |||
427 | float perframe = 1.0f / (float)reportedFPS; | ||
428 | |||
429 | float TotalFrameTime = m_frameMS * perframe; | ||
430 | |||
431 | float targetframetime = 1100.0f / (float)m_nominalReportedFps; | ||
432 | |||
433 | float sparetime; | ||
434 | float sleeptime; | ||
435 | |||
436 | if (TotalFrameTime > targetframetime) | ||
437 | { | ||
438 | sparetime = 0; | ||
439 | sleeptime = 0; | ||
440 | } | ||
441 | else | ||
442 | { | ||
443 | sparetime = m_frameMS - m_physicsMS - m_agentMS; | ||
444 | sparetime *= perframe; | ||
445 | if (sparetime < 0) | ||
446 | sparetime = 0; | ||
447 | else if (sparetime > TotalFrameTime) | ||
448 | sparetime = TotalFrameTime; | ||
449 | sleeptime = m_sleeptimeMS * perframe; | ||
450 | } | ||
407 | 451 | ||
408 | m_rootAgents = m_scene.SceneGraph.GetRootAgentCount(); | 452 | m_rootAgents = m_scene.SceneGraph.GetRootAgentCount(); |
409 | m_childAgents = m_scene.SceneGraph.GetChildAgentCount(); | 453 | m_childAgents = m_scene.SceneGraph.GetChildAgentCount(); |
@@ -417,16 +461,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
417 | // so that stat numbers are always consistent. | 461 | // so that stat numbers are always consistent. |
418 | CheckStatSanity(); | 462 | CheckStatSanity(); |
419 | 463 | ||
420 | //Our time dilation is 0.91 when we're running a full speed, | 464 | // other MS is actually simulation time |
421 | // therefore to make sure we get an appropriate range, | 465 | // m_otherMS = m_frameMS - m_physicsMS - m_imageMS - m_netMS - m_agentMS; |
422 | // we have to factor in our error. (0.10f * statsUpdateFactor) | 466 | // m_imageMS m_netMS are not included in m_frameMS |
423 | // multiplies the fix for the error times the amount of times it'll occur a second | ||
424 | // / 10 divides the value by the number of times the sim heartbeat runs (10fps) | ||
425 | // Then we divide the whole amount by the amount of seconds pass in between stats updates. | ||
426 | |||
427 | // 'statsUpdateFactor' is how often stats packets are sent in seconds. Used below to change | ||
428 | // values to X-per-second values. | ||
429 | 467 | ||
468 | <<<<<<< HEAD | ||
430 | uint thisFrame = m_scene.Frame; | 469 | uint thisFrame = m_scene.Frame; |
431 | uint numFrames = thisFrame - m_lastUpdateFrame; | 470 | uint numFrames = thisFrame - m_lastUpdateFrame; |
432 | float framesUpdated = (float)numFrames * m_reportedFpsCorrectionFactor; | 471 | float framesUpdated = (float)numFrames * m_reportedFpsCorrectionFactor; |
@@ -437,6 +476,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
437 | framesUpdated = 1; | 476 | framesUpdated = 1; |
438 | 477 | ||
439 | for (int i = 0; i < m_statisticArraySize; i++) | 478 | for (int i = 0; i < m_statisticArraySize; i++) |
479 | ======= | ||
480 | m_otherMS = m_frameMS - m_physicsMS - m_agentMS - m_sleeptimeMS; | ||
481 | if (m_otherMS < 0) | ||
482 | m_otherMS = 0; | ||
483 | |||
484 | for (int i = 0; i < 23; i++) | ||
485 | >>>>>>> avn/ubitvar | ||
440 | { | 486 | { |
441 | sb[i] = new SimStatsPacket.StatBlock(); | 487 | sb[i] = new SimStatsPacket.StatBlock(); |
442 | } | 488 | } |
@@ -501,6 +547,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
501 | // ORIGINAL code commented out until we have time to add our own | 547 | // ORIGINAL code commented out until we have time to add our own |
502 | // statistics to the statistics window | 548 | // statistics to the statistics window |
503 | sb[8].StatID = (uint)Stats.FrameMS; | 549 | sb[8].StatID = (uint)Stats.FrameMS; |
550 | <<<<<<< HEAD | ||
504 | //sb[8].StatValue = m_frameMS / framesUpdated; | 551 | //sb[8].StatValue = m_frameMS / framesUpdated; |
505 | sb[8].StatValue = (float) totalSumFrameTime / m_numberFramesStored; | 552 | sb[8].StatValue = (float) totalSumFrameTime / m_numberFramesStored; |
506 | 553 | ||
@@ -511,13 +558,26 @@ namespace OpenSim.Region.Framework.Scenes | |||
511 | sb[10].StatID = (uint)Stats.PhysicsMS; | 558 | sb[10].StatID = (uint)Stats.PhysicsMS; |
512 | //sb[10].StatValue = m_physicsMS / framesUpdated; | 559 | //sb[10].StatValue = m_physicsMS / framesUpdated; |
513 | sb[10].StatValue = (float) physicsSumFrameTime / m_numberFramesStored; | 560 | sb[10].StatValue = (float) physicsSumFrameTime / m_numberFramesStored; |
561 | ======= | ||
562 | sb[8].StatValue = TotalFrameTime; | ||
563 | |||
564 | sb[9].StatID = (uint)Stats.NetMS; | ||
565 | sb[9].StatValue = m_netMS * perframe; | ||
566 | |||
567 | sb[10].StatID = (uint)Stats.PhysicsMS; | ||
568 | sb[10].StatValue = m_physicsMS * perframe; | ||
569 | >>>>>>> avn/ubitvar | ||
514 | 570 | ||
515 | sb[11].StatID = (uint)Stats.ImageMS ; | 571 | sb[11].StatID = (uint)Stats.ImageMS ; |
516 | sb[11].StatValue = m_imageMS / framesUpdated; | 572 | sb[11].StatValue = m_imageMS * perframe; |
517 | 573 | ||
518 | sb[12].StatID = (uint)Stats.OtherMS; | 574 | sb[12].StatID = (uint)Stats.OtherMS; |
575 | <<<<<<< HEAD | ||
519 | //sb[12].StatValue = m_otherMS / framesUpdated; | 576 | //sb[12].StatValue = m_otherMS / framesUpdated; |
520 | sb[12].StatValue = (float) simulationSumFrameTime / m_numberFramesStored; | 577 | sb[12].StatValue = (float) simulationSumFrameTime / m_numberFramesStored; |
578 | ======= | ||
579 | sb[12].StatValue = m_otherMS * perframe; | ||
580 | >>>>>>> avn/ubitvar | ||
521 | 581 | ||
522 | sb[13].StatID = (uint)Stats.InPacketsPerSecond; | 582 | sb[13].StatID = (uint)Stats.InPacketsPerSecond; |
523 | sb[13].StatValue = (m_inPacketsPerSecond / m_statsUpdateFactor); | 583 | sb[13].StatValue = (m_inPacketsPerSecond / m_statsUpdateFactor); |
@@ -529,7 +589,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
529 | sb[15].StatValue = m_unAckedBytes; | 589 | sb[15].StatValue = m_unAckedBytes; |
530 | 590 | ||
531 | sb[16].StatID = (uint)Stats.AgentMS; | 591 | sb[16].StatID = (uint)Stats.AgentMS; |
532 | sb[16].StatValue = m_agentMS / framesUpdated; | 592 | sb[16].StatValue = m_agentMS * perframe; |
533 | 593 | ||
534 | sb[17].StatID = (uint)Stats.PendingDownloads; | 594 | sb[17].StatID = (uint)Stats.PendingDownloads; |
535 | sb[17].StatValue = m_pendingDownloads; | 595 | sb[17].StatValue = m_pendingDownloads; |
@@ -544,7 +604,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
544 | sb[20].StatValue = m_scriptLinesPerSecond / m_statsUpdateFactor; | 604 | sb[20].StatValue = m_scriptLinesPerSecond / m_statsUpdateFactor; |
545 | 605 | ||
546 | sb[21].StatID = (uint)Stats.SimSpareMs; | 606 | sb[21].StatID = (uint)Stats.SimSpareMs; |
547 | sb[21].StatValue = m_spareMS / framesUpdated; | 607 | sb[21].StatValue = sparetime; |
608 | |||
609 | sb[22].StatID = (uint)Stats.SimSleepMs; | ||
610 | sb[22].StatValue = sleeptime; | ||
548 | 611 | ||
549 | // Current ratio between the sum of physics and sim rate, and the | 612 | // Current ratio between the sum of physics and sim rate, and the |
550 | // minimum time to run a scene's frame | 613 | // minimum time to run a scene's frame |
@@ -587,28 +650,32 @@ namespace OpenSim.Region.Framework.Scenes | |||
587 | } | 650 | } |
588 | 651 | ||
589 | // Extra statistics that aren't currently sent to clients | 652 | // Extra statistics that aren't currently sent to clients |
590 | lock (m_lastReportedExtraSimStats) | 653 | if (m_scene.PhysicsScene != null) |
591 | { | 654 | { |
592 | m_lastReportedExtraSimStats[LastReportedObjectUpdateStatName] = m_objectUpdates / m_statsUpdateFactor; | 655 | lock (m_lastReportedExtraSimStats) |
593 | m_lastReportedExtraSimStats[SlowFramesStat.ShortName] = (float)SlowFramesStat.Value; | ||
594 | |||
595 | Dictionary<string, float> physicsStats = m_scene.PhysicsScene.GetStats(); | ||
596 | |||
597 | if (physicsStats != null) | ||
598 | { | 656 | { |
599 | foreach (KeyValuePair<string, float> tuple in physicsStats) | 657 | m_lastReportedExtraSimStats[LastReportedObjectUpdateStatName] = m_objectUpdates / m_statsUpdateFactor; |
658 | m_lastReportedExtraSimStats[SlowFramesStat.ShortName] = (float)SlowFramesStat.Value; | ||
659 | |||
660 | Dictionary<string, float> physicsStats = m_scene.PhysicsScene.GetStats(); | ||
661 | |||
662 | if (physicsStats != null) | ||
600 | { | 663 | { |
601 | // FIXME: An extremely dirty hack to divide MS stats per frame rather than per second | 664 | foreach (KeyValuePair<string, float> tuple in physicsStats) |
602 | // Need to change things so that stats source can indicate whether they are per second or | 665 | { |
603 | // per frame. | 666 | // FIXME: An extremely dirty hack to divide MS stats per frame rather than per second |
604 | if (tuple.Key.EndsWith("MS")) | 667 | // Need to change things so that stats source can indicate whether they are per second or |
605 | m_lastReportedExtraSimStats[tuple.Key] = tuple.Value / framesUpdated; | 668 | // per frame. |
606 | else | 669 | if (tuple.Key.EndsWith("MS")) |
607 | m_lastReportedExtraSimStats[tuple.Key] = tuple.Value / m_statsUpdateFactor; | 670 | m_lastReportedExtraSimStats[tuple.Key] = tuple.Value * perframe; |
671 | else | ||
672 | m_lastReportedExtraSimStats[tuple.Key] = tuple.Value / m_statsUpdateFactor; | ||
673 | } | ||
608 | } | 674 | } |
609 | } | 675 | } |
610 | } | 676 | } |
611 | 677 | ||
678 | // LastReportedObjectUpdates = m_objectUpdates / m_statsUpdateFactor; | ||
612 | ResetValues(); | 679 | ResetValues(); |
613 | } | 680 | } |
614 | } | 681 | } |
@@ -635,8 +702,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
635 | m_physicsMS = 0; | 702 | m_physicsMS = 0; |
636 | m_imageMS = 0; | 703 | m_imageMS = 0; |
637 | m_otherMS = 0; | 704 | m_otherMS = 0; |
705 | <<<<<<< HEAD | ||
638 | m_scriptMS = 0; | 706 | m_scriptMS = 0; |
639 | m_spareMS = 0; | 707 | m_spareMS = 0; |
708 | ======= | ||
709 | // m_spareMS = 0; | ||
710 | m_sleeptimeMS = 0; | ||
711 | |||
712 | //Ckrinke This variable is not used, so comment to remove compiler warning until it is used. | ||
713 | //Ckrinke m_scriptMS = 0; | ||
714 | >>>>>>> avn/ubitvar | ||
640 | } | 715 | } |
641 | 716 | ||
642 | # region methods called from Scene | 717 | # region methods called from Scene |
@@ -717,11 +792,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
717 | SlowFramesStat.Value++; | 792 | SlowFramesStat.Value++; |
718 | } | 793 | } |
719 | 794 | ||
720 | public void AddSpareMS(int ms) | ||
721 | { | ||
722 | m_spareMS += ms; | ||
723 | } | ||
724 | |||
725 | public void addNetMS(int ms) | 795 | public void addNetMS(int ms) |
726 | { | 796 | { |
727 | m_netMS += ms; | 797 | m_netMS += ms; |
@@ -747,6 +817,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
747 | m_otherMS += ms; | 817 | m_otherMS += ms; |
748 | } | 818 | } |
749 | 819 | ||
820 | <<<<<<< HEAD | ||
750 | public void AddScriptMS(int ms) | 821 | public void AddScriptMS(int ms) |
751 | { | 822 | { |
752 | m_scriptMS += ms; | 823 | m_scriptMS += ms; |
@@ -776,6 +847,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
776 | // first, the next location needs to loop back to the beginning of the | 847 | // first, the next location needs to loop back to the beginning of the |
777 | // list whenever it reaches the end | 848 | // list whenever it reaches the end |
778 | m_nextLocation = m_nextLocation % m_numberFramesStored; | 849 | m_nextLocation = m_nextLocation % m_numberFramesStored; |
850 | ======= | ||
851 | public void addSleepMS(int ms) | ||
852 | { | ||
853 | m_sleeptimeMS += ms; | ||
854 | >>>>>>> avn/ubitvar | ||
779 | } | 855 | } |
780 | 856 | ||
781 | public void AddPendingDownloads(int count) | 857 | public void AddPendingDownloads(int count) |