Merge branch 'master' of ssh://opensimulator.org/var/git/opensim

Conflicts:
	OpenSim/Region/Framework/Scenes/ScenePresence.cs
remove-scene-viewer
Dan Lake 2011-10-06 12:22:15 -07:00
commit 08f264d096
8 changed files with 87 additions and 109 deletions

View File

@ -462,7 +462,7 @@ namespace OpenSim
string password = MainConsole.Instance.PasswdPrompt("Password");
string email = MainConsole.Instance.CmdPrompt("Email", "");
string rawPrincipalId = MainConsole.Instance.CmdPrompt("ID", UUID.Random().ToString());
string rawPrincipalId = MainConsole.Instance.CmdPrompt("User ID", UUID.Random().ToString());
UUID principalId = UUID.Zero;
if (!UUID.TryParse(rawPrincipalId, out principalId))

View File

@ -137,8 +137,6 @@ namespace OpenSim.Region.Framework.Scenes
protected IDialogModule m_dialogModule;
protected IEntityTransferModule m_teleportModule;
protected ICapabilitiesModule m_capsModule;
// Central Update Loop
protected int m_fps = 10;
/// <summary>
/// Current scene frame number
@ -149,8 +147,20 @@ namespace OpenSim.Region.Framework.Scenes
protected set;
}
protected float m_timespan = 0.089f;
protected DateTime m_lastupdate = DateTime.UtcNow;
/// <summary>
/// The minimum length of time in seconds that will be taken for a scene frame. If the frame takes less time then we
/// will sleep for the remaining period.
/// </summary>
/// <remarks>
/// One can tweak this number to experiment. One current effect of reducing it is to make avatar animations
/// occur too quickly (viewer 1) or with even more slide (viewer 2).
/// </remarks>
protected float m_minFrameTimespan = 0.089f;
/// <summary>
/// The time of the last frame update.
/// </summary>
protected DateTime m_lastFrameUpdate = DateTime.UtcNow;
// TODO: Possibly stop other classes being able to manipulate this directly.
private SceneGraph m_sceneGraph;
@ -173,6 +183,7 @@ namespace OpenSim.Region.Framework.Scenes
// private int m_update_land = 1;
private int m_update_coarse_locations = 50;
private int agentMS;
private int frameMS;
private int physicsMS2;
private int physicsMS;
@ -1211,17 +1222,20 @@ namespace OpenSim.Region.Framework.Scenes
public override void Update()
{
TimeSpan SinceLastFrame = DateTime.UtcNow - m_lastupdate;
TimeSpan SinceLastFrame = DateTime.UtcNow - m_lastFrameUpdate;
float physicsFPS = 0f;
int maintc = Util.EnvironmentTickCount();
int tmpFrameMS = maintc;
tempOnRezMS = eventMS = backupMS = terrainMS = landMS = 0;
agentMS = tempOnRezMS = eventMS = backupMS = terrainMS = landMS = 0;
// TODO: ADD AGENT TIME HERE
// Increment the frame counter
++Frame;
try
{
int tmpAgentMS = Util.EnvironmentTickCount();
// Check if any objects have reached their targets
CheckAtTargets();
@ -1248,6 +1262,8 @@ namespace OpenSim.Region.Framework.Scenes
});
}
agentMS = Util.EnvironmentTickCountSubtract(tmpAgentMS);
int tmpPhysicsMS2 = Util.EnvironmentTickCount();
if ((Frame % m_update_physics == 0) && m_physics_enabled)
m_sceneGraph.UpdatePreparePhysics();
@ -1255,7 +1271,11 @@ namespace OpenSim.Region.Framework.Scenes
// Apply any pending avatar force input to the avatar's velocity
if (Frame % m_update_entitymovement == 0)
{
tmpAgentMS = Util.EnvironmentTickCount();
m_sceneGraph.UpdateScenePresenceMovement();
agentMS += Util.EnvironmentTickCountSubtract(tmpAgentMS);
}
// Perform the main physics update. This will do the actual work of moving objects and avatars according to their
// velocity
@ -1263,7 +1283,7 @@ namespace OpenSim.Region.Framework.Scenes
if (Frame % m_update_physics == 0)
{
if (m_physics_enabled)
physicsFPS = m_sceneGraph.UpdatePhysics(Math.Max(SinceLastFrame.TotalSeconds, m_timespan));
physicsFPS = m_sceneGraph.UpdatePhysics(Math.Max(SinceLastFrame.TotalSeconds, m_minFrameTimespan));
if (SynchronizeScene != null)
SynchronizeScene(this);
}
@ -1320,6 +1340,7 @@ namespace OpenSim.Region.Framework.Scenes
StatsReporter.SetObjects(m_sceneGraph.GetTotalObjectsCount());
StatsReporter.SetActiveObjects(m_sceneGraph.GetActiveObjectsCount());
StatsReporter.addFrameMS(frameMS);
StatsReporter.addAgentMS(agentMS);
StatsReporter.addPhysicsMS(physicsMS + physicsMS2);
StatsReporter.addOtherMS(otherMS);
StatsReporter.SetActiveScripts(m_sceneGraph.GetActiveScriptsCount());
@ -1379,11 +1400,11 @@ namespace OpenSim.Region.Framework.Scenes
}
finally
{
m_lastupdate = DateTime.UtcNow;
m_lastFrameUpdate = DateTime.UtcNow;
}
maintc = Util.EnvironmentTickCountSubtract(maintc);
maintc = (int)(m_timespan * 1000) - maintc;
maintc = (int)(m_minFrameTimespan * 1000) - maintc;
if (maintc > 0)
Thread.Sleep(maintc);

View File

@ -166,6 +166,12 @@ namespace OpenSim.Region.Framework.Scenes
}
}
/// <summary>
/// Update the position of all the scene presences.
/// </summary>
/// <remarks>
/// Called only from the main scene loop.
/// </remarks>
protected internal void UpdatePresences()
{
ForEachScenePresence(delegate(ScenePresence presence)
@ -174,6 +180,11 @@ namespace OpenSim.Region.Framework.Scenes
});
}
/// <summary>
/// Perform a physics frame update.
/// </summary>
/// <param name="elapsed"></param>
/// <returns></returns>
protected internal float UpdatePhysics(double elapsed)
{
lock (m_syncRoot)

View File

@ -870,11 +870,7 @@ namespace OpenSim.Region.Framework.Scenes
/// </summary>
public void SendPrimUpdates()
{
m_perfMonMS = Util.EnvironmentTickCount();
SceneViewer.SendPrimUpdates();
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
#region Status Methods
@ -1276,7 +1272,7 @@ namespace OpenSim.Region.Framework.Scenes
// return;
//}
m_perfMonMS = Util.EnvironmentTickCount();
// m_perfMonMS = Util.EnvironmentTickCount();
++m_movementUpdateCount;
if (m_movementUpdateCount < 1)
@ -1565,7 +1561,8 @@ namespace OpenSim.Region.Framework.Scenes
m_scene.EventManager.TriggerOnClientMovement(this);
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
// It doesn't make sense to add this to frame stats as this update is processed indepedently of the scene loop
// m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
/// <summary>
@ -2341,8 +2338,6 @@ namespace OpenSim.Region.Framework.Scenes
/// <param name="vec">The vector in which to move. This is relative to the rotation argument</param>
public void AddNewMovement(Vector3 vec)
{
m_perfMonMS = Util.EnvironmentTickCount();
Vector3 direc = vec * Rotation;
direc.Normalize();
@ -2379,8 +2374,6 @@ namespace OpenSim.Region.Framework.Scenes
// TODO: Add the force instead of only setting it to support multiple forces per frame?
m_forceToApply = direc;
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
#endregion
@ -2443,8 +2436,6 @@ namespace OpenSim.Region.Framework.Scenes
// server.
if (remoteClient.IsActive)
{
m_perfMonMS = Util.EnvironmentTickCount();
Vector3 pos = m_pos;
pos.Z += Appearance.HipOffset;
@ -2455,7 +2446,6 @@ namespace OpenSim.Region.Framework.Scenes
PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity
| PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity);
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
m_scene.StatsReporter.AddAgentUpdates(1);
}
}
@ -2496,14 +2486,11 @@ namespace OpenSim.Region.Framework.Scenes
|| Math.Abs(distanceError) > distanceErrorThreshold
|| velocidyDiff > 0.01f) // did velocity change from last update?
{
m_perfMonMS = currentTick;
lastVelocitySentToAllClients = Velocity;
lastTerseUpdateToAllClientsTick = currentTick;
lastPositionSentToAllClients = OffsetPosition;
m_scene.ForEachClient(SendTerseUpdateToClient);
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
}
@ -2524,9 +2511,7 @@ namespace OpenSim.Region.Framework.Scenes
public void SendCoarseLocationsDefault(UUID sceneId, ScenePresence p, List<Vector3> coarseLocations, List<UUID> avatarUUIDs)
{
m_perfMonMS = Util.EnvironmentTickCount();
ControllingClient.SendCoarseLocationUpdate(avatarUUIDs, coarseLocations);
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
/// <summary>
@ -2587,8 +2572,6 @@ namespace OpenSim.Region.Framework.Scenes
m_log.Warn("[SCENE PRESENCE] attempt to send avatar data from a child agent");
return;
}
m_perfMonMS = Util.EnvironmentTickCount();
int count = 0;
m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
@ -2598,7 +2581,6 @@ namespace OpenSim.Region.Framework.Scenes
});
m_scene.StatsReporter.AddAgentUpdates(count);
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
/// <summary>
@ -2607,8 +2589,6 @@ namespace OpenSim.Region.Framework.Scenes
/// </summary>
public void SendOtherAgentsAvatarDataToMe()
{
m_perfMonMS = Util.EnvironmentTickCount();
int count = 0;
m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
{
@ -2625,7 +2605,6 @@ namespace OpenSim.Region.Framework.Scenes
});
m_scene.StatsReporter.AddAgentUpdates(count);
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
/// <summary>
@ -2654,8 +2633,6 @@ namespace OpenSim.Region.Framework.Scenes
m_log.Warn("[SCENE PRESENCE] attempt to send avatar data from a child agent");
return;
}
m_perfMonMS = Util.EnvironmentTickCount();
int count = 0;
m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
@ -2668,7 +2645,6 @@ namespace OpenSim.Region.Framework.Scenes
});
m_scene.StatsReporter.AddAgentUpdates(count);
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
/// <summary>
@ -2678,7 +2654,6 @@ namespace OpenSim.Region.Framework.Scenes
public void SendOtherAgentsAppearanceToMe()
{
//m_log.DebugFormat("[SCENE PRESENCE] SendOtherAgentsAppearanceToMe: {0} ({1})", Name, UUID);
m_perfMonMS = Util.EnvironmentTickCount();
int count = 0;
m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
@ -2696,7 +2671,6 @@ namespace OpenSim.Region.Framework.Scenes
});
m_scene.StatsReporter.AddAgentUpdates(count);
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
/// <summary>

View File

@ -37,6 +37,9 @@ namespace OpenSim.Region.Framework.Scenes
{
public class SimStatsReporter
{
// private static readonly log4net.ILog m_log
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public delegate void SendStatResult(SimStats stats);
public delegate void YourStatsAreWrong();
@ -165,18 +168,9 @@ namespace OpenSim.Region.Framework.Scenes
#region various statistic googly moogly
// Our FPS is actually 10fps, so multiplying by 5 to get the amount that people expect there
// 0-50 is pretty close to 0-45
float simfps = (int) ((m_fps * 5));
// save the reported value so there is something available for llGetRegionFPS
lastReportedSimFPS = (float)simfps / statsUpdateFactor;
lastReportedSimFPS = (float)m_fps / statsUpdateFactor;
//if (simfps > 45)
//simfps = simfps - (simfps - 45);
//if (simfps < 0)
//simfps = 0;
//
float physfps = ((m_pfps / 1000));
//if (physfps > 600)
@ -197,7 +191,7 @@ namespace OpenSim.Region.Framework.Scenes
// 'statsUpdateFactor' is how often stats packets are sent in seconds. Used below to change
// values to X-per-second values.
for (int i = 0; i<21;i++)
for (int i = 0; i < 21; i++)
{
sb[i] = new SimStatsPacket.StatBlock();
}
@ -206,7 +200,7 @@ namespace OpenSim.Region.Framework.Scenes
sb[0].StatValue = (Single.IsNaN(m_timeDilation)) ? 0.1f : m_timeDilation ; //((((m_timeDilation + (0.10f * statsUpdateFactor)) /10) / statsUpdateFactor));
sb[1].StatID = (uint) Stats.SimFPS;
sb[1].StatValue = simfps/statsUpdateFactor;
sb[1].StatValue = m_fps/statsUpdateFactor;
sb[2].StatID = (uint) Stats.PhysicsFPS;
sb[2].StatValue = physfps / statsUpdateFactor;
@ -272,7 +266,8 @@ namespace OpenSim.Region.Framework.Scenes
SimStats simStats
= new SimStats(
ReportingRegion.RegionLocX, ReportingRegion.RegionLocY, regionFlags, (uint)m_objectCapacity, rb, sb, m_scene.RegionInfo.originRegionID);
ReportingRegion.RegionLocX, ReportingRegion.RegionLocY, regionFlags, (uint)m_objectCapacity,
rb, sb, m_scene.RegionInfo.originRegionID);
handlerSendStatResult = OnSendStatsResult;
if (handlerSendStatResult != null)
@ -395,30 +390,32 @@ namespace OpenSim.Region.Framework.Scenes
{
m_frameMS += ms;
}
public void addNetMS(int ms)
{
m_netMS += ms;
}
public void addAgentMS(int ms)
{
m_agentMS += ms;
}
public void addPhysicsMS(int ms)
{
m_physicsMS += ms;
}
public void addImageMS(int ms)
{
m_imageMS += ms;
}
public void addOtherMS(int ms)
{
m_otherMS += ms;
}
// private static readonly log4net.ILog m_log
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public void AddPendingDownloads(int count)
{
m_pendingDownloads += count;
@ -455,12 +452,6 @@ namespace OpenSim.Region.Framework.Scenes
AddOutPackets(outPackets);
AddunAckedBytes(unAckedBytes);
}
public void AddAgentTime(int ms)
{
addFrameMS(ms);
addAgentMS(ms);
}
#endregion
}

View File

@ -2651,8 +2651,6 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
//base.TriggerPhysicsBasedRestart();
//}
int i = 0;
// Figure out the Frames Per Second we're going at.
//(step_time == 0.004f, there's 250 of those per second. Times the step time/step size
@ -2810,7 +2808,6 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
}
step_time -= ODE_STEPSIZE;
i++;
//}
//else
//{

View File

@ -58,7 +58,7 @@ namespace OpenSim.Region.UserStatistics
private static SqliteConnection dbConn;
private Dictionary<UUID, UserSessionID> m_sessions = new Dictionary<UUID, UserSessionID>();
private List<Scene> m_scene = new List<Scene>();
private List<Scene> m_scenes = new List<Scene>();
private Dictionary<string, IStatsController> reports = new Dictionary<string, IStatsController>();
private Dictionary<UUID, USimStatsData> m_simstatsCounters = new Dictionary<UUID, USimStatsData>();
private const int updateStatsMod = 6;
@ -71,25 +71,17 @@ namespace OpenSim.Region.UserStatistics
public virtual void Initialise(Scene scene, IConfigSource config)
{
IConfig cnfg;
try
{
cnfg = config.Configs["WebStats"];
IConfig cnfg = config.Configs["WebStats"];
if (cnfg != null)
enabled = cnfg.GetBoolean("enabled", false);
}
catch (Exception)
{
enabled = false;
}
if (!enabled)
{
return;
}
lock (m_scene)
lock (m_scenes)
{
if (m_scene.Count == 0)
if (m_scenes.Count == 0)
{
//IConfig startupConfig = config.Configs["Startup"];
@ -115,22 +107,19 @@ namespace OpenSim.Region.UserStatistics
reports.Add("clients.report", clientReport);
reports.Add("sessions.report", sessionsReport);
////
// Add Your own Reports here (Do Not Modify Lines here Devs!)
////
////
// End Own reports section
////
////
MainServer.Instance.AddHTTPHandler("/SStats/", HandleStatsRequest);
MainServer.Instance.AddHTTPHandler("/CAPS/VS/", HandleUnknownCAPSRequest);
}
m_scene.Add(scene);
m_scenes.Add(scene);
if (m_simstatsCounters.ContainsKey(scene.RegionInfo.RegionID))
m_simstatsCounters.Remove(scene.RegionInfo.RegionID);
@ -214,7 +203,7 @@ namespace OpenSim.Region.UserStatistics
repParams["DatabaseConnection"] = dbConn;
repParams["Scenes"] = m_scene;
repParams["Scenes"] = m_scenes;
repParams["SimStats"] = m_simstatsCounters;
repParams["LogLines"] = m_loglines;
repParams["Reports"] = reports;
@ -265,7 +254,6 @@ namespace OpenSim.Region.UserStatistics
CreateTables(db);
}
}
}
public void CreateTables(SqliteConnection db)
@ -277,8 +265,6 @@ namespace OpenSim.Region.UserStatistics
createcmd.ExecuteNonQuery();
}
public virtual void PostInitialise()
{
if (!enabled)
@ -297,7 +283,7 @@ namespace OpenSim.Region.UserStatistics
dbConn.Close();
dbConn.Dispose();
m_sessions.Clear();
m_scene.Clear();
m_scenes.Clear();
reports.Clear();
m_simstatsCounters.Clear();
}
@ -333,10 +319,10 @@ namespace OpenSim.Region.UserStatistics
protected virtual void AddHandlers()
{
lock (m_scene)
lock (m_scenes)
{
updateLogMod = m_scene.Count * 2;
foreach (Scene scene in m_scene)
updateLogMod = m_scenes.Count * 2;
foreach (Scene scene in m_scenes)
{
scene.EventManager.OnRegisterCaps += OnRegisterCaps;
scene.EventManager.OnDeregisterCaps += OnDeRegisterCaps;
@ -376,15 +362,11 @@ namespace OpenSim.Region.UserStatistics
}
}
public void OnMakeChildAgent(ScenePresence agent)
{
}
public void OnClientClosed(UUID agentID, Scene scene)
{
lock (m_sessions)
@ -394,7 +376,6 @@ namespace OpenSim.Region.UserStatistics
m_sessions.Remove(agentID);
}
}
}
public string readLogLines(int amount)
@ -433,14 +414,13 @@ namespace OpenSim.Region.UserStatistics
fs.Close();
fs.Dispose();
return encoding.GetString(buffer);
}
public UUID GetRegionUUIDFromHandle(ulong regionhandle)
{
lock (m_scene)
lock (m_scenes)
{
foreach (Scene scene in m_scene)
foreach (Scene scene in m_scenes)
{
if (scene.RegionInfo.RegionHandle == regionhandle)
return scene.RegionInfo.RegionID;
@ -448,6 +428,7 @@ namespace OpenSim.Region.UserStatistics
}
return UUID.Zero;
}
/// <summary>
/// Callback for a viewerstats cap
/// </summary>
@ -523,8 +504,6 @@ namespace OpenSim.Region.UserStatistics
usd = uid.session_data;
if (message.Type != OSDType.Map)
return new UserSessionID();
@ -699,7 +678,6 @@ namespace OpenSim.Region.UserStatistics
}
}
}
#region SQL
@ -824,6 +802,7 @@ set session_id=:session_id,
WHERE session_id=:session_key AND agent_id=:agent_key AND region_id=:region_key";
#endregion
}
public static class UserSessionUtil
{
public static UserSessionData newUserSessionData()
@ -941,7 +920,6 @@ WHERE session_id=:session_key AND agent_id=:agent_key AND region_id=:region_key"
return result / cnt;
}
public static float ArrayMode_f(float[] arr)
{
List<float> mode = new List<float>();
@ -995,10 +973,8 @@ WHERE session_id=:session_key AND agent_id=:agent_key AND region_id=:region_key"
}
return mode.ToArray()[0];
}
public static int ArrayMode_i(int[] arr)
{
List<int> mode = new List<int>();
@ -1052,7 +1028,6 @@ WHERE session_id=:session_key AND agent_id=:agent_key AND region_id=:region_key"
}
return mode.ToArray()[0];
}
#endregion
@ -1178,7 +1153,6 @@ WHERE session_id=:session_key AND agent_id=:agent_key AND region_id=:region_key"
public List<float> _sim_fps;
public List<int> _agents_in_view;
}
#endregion
@ -1263,5 +1237,4 @@ WHERE session_id=:session_key AND agent_id=:agent_key AND region_id=:region_key"
m_scriptLinesPerSecond = stats.StatsBlock[20].StatValue;
}
}
}
}

View File

@ -44,6 +44,17 @@ namespace OpenSim.Services.Interfaces
PrincipalID = principalID;
}
public UserAccount(UUID scopeID, string firstName, string lastName, string email)
{
PrincipalID = UUID.Random();
ScopeID = scopeID;
FirstName = firstName;
LastName = lastName;
Email = email;
ServiceURLs = new Dictionary<string, object>();
Created = Util.UnixTimeSinceEpoch();
}
public UserAccount(UUID scopeID, UUID principalID, string firstName, string lastName, string email)
{
PrincipalID = principalID;