From f6f7585ec583788b11960cf5a1ac36409e6583aa Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Tue, 29 Jul 2014 00:13:29 +0100 Subject: Add a "debug scene set child-repri " command that allows child reprioritization distance to be changed on the fly. This governs when child agent position changes are sent to neighbouring regions. Corresponding config parameter is ChildReprioritizationDistance in [InterestManagement] in OpenSim.ini For test purposes. --- OpenSim/Framework/Console/ConsoleUtil.cs | 44 +++++++++++++++++++++- OpenSim/Region/Framework/Scenes/Scene.cs | 8 ++-- .../Framework/Scenes/SceneCommunicationService.cs | 4 ++ .../World/SceneCommands/SceneCommandsModule.cs | 44 ++++++++++++++-------- 4 files changed, 79 insertions(+), 21 deletions(-) diff --git a/OpenSim/Framework/Console/ConsoleUtil.cs b/OpenSim/Framework/Console/ConsoleUtil.cs index 744f652..44f6dc1 100644 --- a/OpenSim/Framework/Console/ConsoleUtil.cs +++ b/OpenSim/Framework/Console/ConsoleUtil.cs @@ -156,7 +156,7 @@ namespace OpenSim.Framework.Console } /// - /// Convert a console integer to an int, automatically complaining if a console is given. + /// Convert a console input to a bool, automatically complaining if a console is given. /// /// Can be null if no console is available. /// /param> @@ -176,7 +176,7 @@ namespace OpenSim.Framework.Console } /// - /// Convert a console integer to an int, automatically complaining if a console is given. + /// Convert a console input to an int, automatically complaining if a console is given. /// /// Can be null if no console is available. /// /param> @@ -196,6 +196,46 @@ namespace OpenSim.Framework.Console } /// + /// Convert a console input to a float, automatically complaining if a console is given. + /// + /// Can be null if no console is available. + /// /param> + /// + /// + public static bool TryParseConsoleFloat(ICommandConsole console, string rawConsoleInput, out float i) + { + if (!float.TryParse(rawConsoleInput, out i)) + { + if (console != null) + console.OutputFormat("ERROR: {0} is not a valid float", rawConsoleInput); + + return false; + } + + return true; + } + + /// + /// Convert a console input to a double, automatically complaining if a console is given. + /// + /// Can be null if no console is available. + /// /param> + /// + /// + public static bool TryParseConsoleDouble(ICommandConsole console, string rawConsoleInput, out double i) + { + if (!double.TryParse(rawConsoleInput, out i)) + { + if (console != null) + console.OutputFormat("ERROR: {0} is not a valid double", rawConsoleInput); + + return false; + } + + return true; + } + + /// /// Convert a console integer to a natural int, automatically complaining if a console is given. /// /// Can be null if no console is available. diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 27929c6..f87ae47 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -413,7 +413,6 @@ namespace OpenSim.Region.Framework.Scenes private bool m_reprioritizationEnabled = true; private double m_reprioritizationInterval = 5000.0; private double m_rootReprioritizationDistance = 10.0; - private double m_childReprioritizationDistance = 20.0; private Timer m_mapGenerationTimer = new Timer(); private bool m_generateMaptiles; @@ -650,7 +649,7 @@ namespace OpenSim.Region.Framework.Scenes public bool IsReprioritizationEnabled { get { return m_reprioritizationEnabled; } } public double ReprioritizationInterval { get { return m_reprioritizationInterval; } } public double RootReprioritizationDistance { get { return m_rootReprioritizationDistance; } } - public double ChildReprioritizationDistance { get { return m_childReprioritizationDistance; } } + public double ChildReprioritizationDistance { get; set; } public AgentCircuitManager AuthenticateHandler { @@ -1002,7 +1001,8 @@ namespace OpenSim.Region.Framework.Scenes m_reprioritizationEnabled = interestConfig.GetBoolean("ReprioritizationEnabled", true); m_reprioritizationInterval = interestConfig.GetDouble("ReprioritizationInterval", 5000.0); m_rootReprioritizationDistance = interestConfig.GetDouble("RootReprioritizationDistance", 10.0); - m_childReprioritizationDistance = interestConfig.GetDouble("ChildReprioritizationDistance", 20.0); + ChildReprioritizationDistance + = interestConfig.GetDouble("ChildReprioritizationDistance", ChildReprioritizationDistance); } m_log.DebugFormat("[SCENE]: Using the {0} prioritization scheme", m_priorityScheme); @@ -1023,6 +1023,8 @@ namespace OpenSim.Region.Framework.Scenes PeriodicBackup = true; UseBackup = true; + ChildReprioritizationDistance = 20.0; + m_eventManager = new EventManager(); m_permissions = new ScenePermissions(this); diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs index 45c3348..bfa3b9a 100644 --- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs @@ -150,6 +150,10 @@ namespace OpenSim.Region.Framework.Scenes public void SendChildAgentDataUpdate(AgentPosition cAgentData, ScenePresence presence) { +// m_log.DebugFormat( +// "[SCENE COMMUNICATION SERVICE]: Sending child agent position updates for {0} in {1}", +// presence.Name, m_scene.Name); + // This assumes that we know what our neighbors are. try { diff --git a/OpenSim/Region/OptionalModules/World/SceneCommands/SceneCommandsModule.cs b/OpenSim/Region/OptionalModules/World/SceneCommands/SceneCommandsModule.cs index 5fb74b0..5347945 100644 --- a/OpenSim/Region/OptionalModules/World/SceneCommands/SceneCommandsModule.cs +++ b/OpenSim/Region/OptionalModules/World/SceneCommands/SceneCommandsModule.cs @@ -93,28 +93,30 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments "Debug", this, "debug scene get", "debug scene get", "List current scene options.", - "If active is false then main scene update and maintenance loops are suspended.\n" - + "If animations is true then extra animations debug information is logged.\n" - + "If collisions is false then collisions with other objects are turned off.\n" - + "If pbackup is false then periodic scene backup is turned off.\n" - + "If physics is false then all physics objects are non-physical.\n" - + "If scripting is false then no scripting operations happen.\n" - + "If teleport is true then some extra teleport debug information is logged.\n" - + "If updates is true then any frame which exceeds double the maximum desired frame time is logged.", + "active - if false then main scene update and maintenance loops are suspended.\n" + + "animations - if true then extra animations debug information is logged.\n" + + "child-repri - how far an avatar must move in meters before we update the position of its child agents in neighbouring regions.\n" + + "collisions - if false then collisions with other objects are turned off.\n" + + "pbackup - if false then periodic scene backup is turned off.\n" + + "physics - if false then all physics objects are non-physical.\n" + + "scripting - if false then no scripting operations happen.\n" + + "teleport - if true then some extra teleport debug information is logged.\n" + + "updates - if true then any frame which exceeds double the maximum desired frame time is logged.", HandleDebugSceneGetCommand); scene.AddCommand( "Debug", this, "debug scene set", "debug scene set active|collisions|pbackup|physics|scripting|teleport|updates true|false", "Turn on scene debugging options.", - "If active is false then main scene update and maintenance loops are suspended.\n" - + "If animations is true then extra animations debug information is logged.\n" - + "If collisions is false then collisions with other objects are turned off.\n" - + "If pbackup is false then periodic scene backup is turned off.\n" - + "If physics is false then all physics objects are non-physical.\n" - + "If scripting is false then no scripting operations happen.\n" - + "If teleport is true then some extra teleport debug information is logged.\n" - + "If updates is true then any frame which exceeds double the maximum desired frame time is logged.", + "active - if false then main scene update and maintenance loops are suspended.\n" + + "animations - if true then extra animations debug information is logged.\n" + + "child-repri - how far an avatar must move in meters before we update the position of its child agents in neighbouring regions.\n" + + "collisions - if false then collisions with other objects are turned off.\n" + + "pbackup - if false then periodic scene backup is turned off.\n" + + "physics - if false then all physics objects are non-physical.\n" + + "scripting - if false then no scripting operations happen.\n" + + "teleport - if true then some extra teleport debug information is logged.\n" + + "updates - if true then any frame which exceeds double the maximum desired frame time is logged.", HandleDebugSceneSetCommand); } @@ -138,6 +140,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments ConsoleDisplayList cdl = new ConsoleDisplayList(); cdl.AddRow("active", m_scene.Active); cdl.AddRow("animations", m_scene.DebugAnimations); + cdl.AddRow("child-repri", m_scene.ChildReprioritizationDistance); cdl.AddRow("pbackup", m_scene.PeriodicBackup); cdl.AddRow("physics", m_scene.PhysicsEnabled); cdl.AddRow("scripting", m_scene.ScriptsEnabled); @@ -186,6 +189,15 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments m_scene.DebugAnimations = active; } + if (options.ContainsKey("child-repri")) + { + double childRepriDistance; + + // FIXME: This can only come from the console at the moment but might not always be true. + if (ConsoleUtil.TryParseConsoleDouble(MainConsole.Instance, options["child-repri"], out childRepriDistance)) + m_scene.ChildReprioritizationDistance = childRepriDistance; + } + if (options.ContainsKey("pbackup")) { bool active; -- cgit v1.1