From 0506ccb51ad2857203d989559405a6d8089568e4 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Mon, 17 Oct 2011 21:09:56 +0100 Subject: [PATCH] Expose minimum frame time and update periods for experimentation. Settings are at bottom of [Startup] in OpenSimDefaults.ini, override in OpenSim.ini to change Defaults are the same as previously. More information to come on opensim-dev shortly. Feel free to tweak but if you do please don't expect any support unless feedback on certain tweaks is explicitly requested. --- OpenSim/Region/Framework/Scenes/Scene.cs | 88 +++++++++--------------- bin/OpenSimDefaults.ini | 42 +++++++++++ 2 files changed, 75 insertions(+), 55 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index bcef7e596f..d0bfa047cc 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -162,17 +162,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; @@ -196,6 +185,24 @@ namespace OpenSim.Region.Framework.Scenes private int landMS; private int lastCompletedFrame; + /// + /// 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; @@ -207,9 +214,6 @@ namespace OpenSim.Region.Framework.Scenes private bool m_firstHeartbeat = true; private object m_deleting_scene_object = new object(); - private object m_cleaningAttachments = new object(); - - private bool m_cleaningTemps = false; private UpdatePrioritizationSchemes m_priorityScheme = UpdatePrioritizationSchemes.Time; private bool m_reprioritizationEnabled = true; @@ -221,8 +225,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 @@ -646,10 +648,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 @@ -742,6 +740,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 { @@ -779,6 +788,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; } /// @@ -5061,41 +5074,6 @@ namespace OpenSim.Region.Framework.Scenes } } -// public void CleanDroppedAttachments() -// { -// List objectsToDelete = -// new List(); -// -// lock (m_cleaningAttachments) -// { -// ForEachSOG(delegate (SceneObjectGroup grp) -// { -// if (grp.RootPart.Shape.PCode == 0 && grp.RootPart.Shape.State != 0 && (!objectsToDelete.Contains(grp))) -// { -// UUID agentID = grp.OwnerID; -// if (agentID == UUID.Zero) -// { -// objectsToDelete.Add(grp); -// return; -// } -// -// ScenePresence sp = GetScenePresence(agentID); -// if (sp == null) -// { -// objectsToDelete.Add(grp); -// return; -// } -// } -// }); -// } -// -// foreach (SceneObjectGroup grp in objectsToDelete) -// { -// m_log.InfoFormat("[SCENE]: Deleting dropped attachment {0} of user {1}", grp.UUID, grp.OwnerID); -// DeleteSceneObject(grp, true); -// } -// } - // This method is called across the simulation connector to // determine if a given agent is allowed in this region // AS A ROOT AGENT. Returning false here will prevent them diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index 128e9702dd..b797e6c8f3 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini @@ -111,6 +111,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 ; ##