diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 503b745113..935cac5b62 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -165,17 +165,6 @@ namespace OpenSim.Region.Framework.Scenes /// protected DateTime m_lastFrameUpdate = DateTime.UtcNow; - // TODO: Possibly stop other classes being able to manipulate this directly. - private SceneGraph m_sceneGraph; - private volatile int m_bordersLocked; -// private int m_RestartTimerCounter; - private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing -// private int m_incrementsof15seconds; - private volatile bool m_backingup; - private Dictionary m_returns = new Dictionary(); - private Dictionary m_groupsWithTargets = new Dictionary(); - private Object m_heartbeatLock = new Object(); - private int m_update_physics = 1; private int m_update_entitymovement = 1; private int m_update_objects = 1; @@ -200,6 +189,24 @@ namespace OpenSim.Region.Framework.Scenes private int lastCompletedFrame; public bool CombineRegions = false; + /// + /// Signals whether temporary objects are currently being cleaned up. Needed because this is launched + /// asynchronously from the update loop. + /// + private bool m_cleaningTemps = false; + + private Object m_heartbeatLock = new Object(); + + // TODO: Possibly stop other classes being able to manipulate this directly. + private SceneGraph m_sceneGraph; + private volatile int m_bordersLocked; +// private int m_RestartTimerCounter; + private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing +// private int m_incrementsof15seconds; + private volatile bool m_backingup; + private Dictionary m_returns = new Dictionary(); + private Dictionary m_groupsWithTargets = new Dictionary(); + private bool m_physics_enabled = true; private bool m_scripts_enabled = true; private string m_defaultScriptEngine; @@ -213,8 +220,6 @@ namespace OpenSim.Region.Framework.Scenes private bool m_firstHeartbeat = true; private object m_deleting_scene_object = new object(); - - private bool m_cleaningTemps = false; private UpdatePrioritizationSchemes m_priorityScheme = UpdatePrioritizationSchemes.Time; private bool m_reprioritizationEnabled = true; @@ -226,8 +231,6 @@ namespace OpenSim.Region.Framework.Scenes private bool m_generateMaptiles; private bool m_useBackup = true; -// private Dictionary m_UserNamesCache = new Dictionary(); - #endregion Fields #region Properties @@ -667,10 +670,6 @@ namespace OpenSim.Region.Framework.Scenes m_physics_enabled = !RegionInfo.RegionSettings.DisablePhysics; - StatsReporter = new SimStatsReporter(this); - StatsReporter.OnSendStatsResult += SendSimStatsPackets; - StatsReporter.OnStatsIncorrect += m_sceneGraph.RecalculateStats; - // Old /* m_simulatorVersion = simulatorVersion @@ -767,6 +766,17 @@ namespace OpenSim.Region.Framework.Scenes RegionInfo.RegionSettings.TerrainImageID = tileID; } } + + MinFrameTime = startupConfig.GetFloat( "MinFrameTime", MinFrameTime); + m_update_backup = startupConfig.GetInt( "UpdateStorageEveryNFrames", m_update_backup); + m_update_coarse_locations = startupConfig.GetInt( "UpdateCoarseLocationsEveryNFrames", m_update_coarse_locations); + m_update_entitymovement = startupConfig.GetInt( "UpdateEntityMovementEveryNFrames", m_update_entitymovement); + m_update_events = startupConfig.GetInt( "UpdateEventsEveryNFrames", m_update_events); + m_update_objects = startupConfig.GetInt( "UpdateObjectsEveryNFrames", m_update_objects); + m_update_physics = startupConfig.GetInt( "UpdatePhysicsEveryNFrames", m_update_physics); + m_update_presences = startupConfig.GetInt( "UpdateAgentsEveryNFrames", m_update_presences); + m_update_terrain = startupConfig.GetInt( "UpdateTerrainEveryNFrames", m_update_terrain); + m_update_temp_cleaning = startupConfig.GetInt( "UpdateTempCleaningEveryNFrames", m_update_temp_cleaning); } catch (Exception e) { @@ -804,6 +814,10 @@ namespace OpenSim.Region.Framework.Scenes m_log.Info("[SCENE]: Using the " + m_priorityScheme + " prioritization scheme"); #endregion Interest Management + + StatsReporter = new SimStatsReporter(this); + StatsReporter.OnSendStatsResult += SendSimStatsPackets; + StatsReporter.OnStatsIncorrect += m_sceneGraph.RecalculateStats; } /// diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index 9cedd980ec..f2f8e4f341 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini @@ -115,6 +115,48 @@ ; into a restart. InworldRestartShutsDown = false + ; The minimum proportion of a second that any particular frame can take to execute. + ; Only change this if you really know what you're doing, and be prepared to change UpdatePhysicsEveryNFrames + ; (and other Frames params) to match! For instance, halving MinFrameTime to 0.0445 require + ; UpdatePhysicsEveryNFrames = 2 unless you don't mind your avatar walking like Benny Hill. + MinFrameTime = 0.089 + + ; Send scheduled updates to objects in the scene + ; This must be a whole number + UpdateObjectsEveryNFrames = 1; + + ; Send position/velocity, etc. updates to agents in the scene + ; This must be a whole number + UpdateAgentsEveryNFrames = 1; + + ; Apply pending forces from physics calculations to an entity. + ; This must be a whole number + UpdateEntityMovementEveryNFrames = 1; + + ; Send coarse location updates to viewers. In a classic viewer, this updates the minimap. + ; This must be a whole number + UpdateCoarseLocationsEveryNFrames = 50; + + ; Update physics. Within each update physics also updates in a series of contigous mini-steps + ; This must be a whole number + UpdatePhysicsEveryNFrames = 1; + + ; Clean up temp on rez objects. + ; This must be a whole number + UpdateTempCleaningEveryNFrames = 1000; + + ; Send out the on frame event to modules and other listeners. This should probably never deviate from 1. + ; This must be a whole number + UpdateEventsEveryNFrames = 1; + + ; Send terrain updates to viewers + ; This must be a whole number + UpdateTerrainEveryNFrames = 50; + + ; Persitently store any objects which meet the PRIM STORAGE criteria + ; This must be a whole number + UpdateStorageEveryNFrames = 200; + ; ## ; ## PRIM STORAGE ; ##