Merge branch 'master' into careminster
Conflicts: OpenSim/Region/CoreModules/World/Warp3DMap/Warp3DImageModule.cs OpenSim/Region/Framework/Scenes/Scene.cs OpenSim/Region/Framework/Scenes/SimStatsReporter.csavinationmerge
commit
e733fb32cf
|
@ -971,8 +971,7 @@ namespace OpenSim
|
||||||
if (showParams.Length > 1 && showParams[1] == "full")
|
if (showParams.Length > 1 && showParams[1] == "full")
|
||||||
{
|
{
|
||||||
agents = m_sceneManager.GetCurrentScenePresences();
|
agents = m_sceneManager.GetCurrentScenePresences();
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
agents = m_sceneManager.GetCurrentSceneAvatars();
|
agents = m_sceneManager.GetCurrentSceneAvatars();
|
||||||
}
|
}
|
||||||
|
@ -981,7 +980,8 @@ namespace OpenSim
|
||||||
|
|
||||||
MainConsole.Instance.Output(
|
MainConsole.Instance.Output(
|
||||||
String.Format("{0,-16} {1,-16} {2,-37} {3,-11} {4,-16} {5,-30}", "Firstname", "Lastname",
|
String.Format("{0,-16} {1,-16} {2,-37} {3,-11} {4,-16} {5,-30}", "Firstname", "Lastname",
|
||||||
"Agent ID", "Root/Child", "Region", "Position"));
|
"Agent ID", "Root/Child", "Region", "Position")
|
||||||
|
);
|
||||||
|
|
||||||
foreach (ScenePresence presence in agents)
|
foreach (ScenePresence presence in agents)
|
||||||
{
|
{
|
||||||
|
@ -991,8 +991,7 @@ namespace OpenSim
|
||||||
if (regionInfo == null)
|
if (regionInfo == null)
|
||||||
{
|
{
|
||||||
regionName = "Unresolvable";
|
regionName = "Unresolvable";
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
regionName = regionInfo.RegionName;
|
regionName = regionInfo.RegionName;
|
||||||
}
|
}
|
||||||
|
@ -1005,7 +1004,8 @@ namespace OpenSim
|
||||||
presence.UUID,
|
presence.UUID,
|
||||||
presence.IsChildAgent ? "Child" : "Root",
|
presence.IsChildAgent ? "Child" : "Root",
|
||||||
regionName,
|
regionName,
|
||||||
presence.AbsolutePosition.ToString()));
|
presence.AbsolutePosition.ToString())
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
MainConsole.Instance.Output(String.Empty);
|
MainConsole.Instance.Output(String.Empty);
|
||||||
|
@ -1014,13 +1014,17 @@ namespace OpenSim
|
||||||
case "connections":
|
case "connections":
|
||||||
System.Text.StringBuilder connections = new System.Text.StringBuilder("Connections:\n");
|
System.Text.StringBuilder connections = new System.Text.StringBuilder("Connections:\n");
|
||||||
m_sceneManager.ForEachScene(
|
m_sceneManager.ForEachScene(
|
||||||
delegate(Scene scene)
|
delegate(Scene scene) {
|
||||||
{
|
|
||||||
scene.ForEachClient(
|
scene.ForEachClient(
|
||||||
delegate(IClientAPI client)
|
delegate(IClientAPI client) {
|
||||||
{
|
connections.AppendFormat(
|
||||||
connections.AppendFormat("{0}: {1} ({2}) from {3} on circuit {4}\n",
|
"{0}: {1} ({2}) from {3} on circuit {4}\n",
|
||||||
scene.RegionInfo.RegionName, client.Name, client.AgentId, client.RemoteEndPoint, client.CircuitCode);
|
scene.RegionInfo.RegionName,
|
||||||
|
client.Name,
|
||||||
|
client.AgentId,
|
||||||
|
client.RemoteEndPoint,
|
||||||
|
client.CircuitCode
|
||||||
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1032,12 +1036,16 @@ namespace OpenSim
|
||||||
case "circuits":
|
case "circuits":
|
||||||
System.Text.StringBuilder acd = new System.Text.StringBuilder("Agent Circuits:\n");
|
System.Text.StringBuilder acd = new System.Text.StringBuilder("Agent Circuits:\n");
|
||||||
m_sceneManager.ForEachScene(
|
m_sceneManager.ForEachScene(
|
||||||
delegate(Scene scene)
|
delegate(Scene scene) {
|
||||||
{
|
|
||||||
//this.HttpServer.
|
//this.HttpServer.
|
||||||
acd.AppendFormat("{0}:\n", scene.RegionInfo.RegionName);
|
acd.AppendFormat("{0}:\n", scene.RegionInfo.RegionName);
|
||||||
foreach (AgentCircuitData aCircuit in scene.AuthenticateHandler.GetAgentCircuits().Values)
|
foreach (AgentCircuitData aCircuit in scene.AuthenticateHandler.GetAgentCircuits().Values)
|
||||||
acd.AppendFormat("\t{0} {1} ({2})\n", aCircuit.firstname, aCircuit.lastname, (aCircuit.child ? "Child" : "Root"));
|
acd.AppendFormat(
|
||||||
|
"\t{0} {1} ({2})\n",
|
||||||
|
aCircuit.firstname,
|
||||||
|
aCircuit.lastname,
|
||||||
|
(aCircuit.child ? "Child" : "Root")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1079,8 +1087,7 @@ namespace OpenSim
|
||||||
}
|
}
|
||||||
|
|
||||||
m_sceneManager.ForEachScene(
|
m_sceneManager.ForEachScene(
|
||||||
delegate(Scene scene)
|
delegate(Scene scene) {
|
||||||
{
|
|
||||||
m_log.Error("The currently loaded modules in " + scene.RegionInfo.RegionName + " are:");
|
m_log.Error("The currently loaded modules in " + scene.RegionInfo.RegionName + " are:");
|
||||||
foreach (IRegionModule module in scene.Modules.Values)
|
foreach (IRegionModule module in scene.Modules.Values)
|
||||||
{
|
{
|
||||||
|
@ -1089,7 +1096,20 @@ namespace OpenSim
|
||||||
m_log.Error("Region Module: " + module.Name);
|
m_log.Error("Region Module: " + module.Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
m_sceneManager.ForEachScene(
|
||||||
|
delegate(Scene scene) {
|
||||||
|
MainConsole.Instance.Output("Loaded new region modules in" + scene.RegionInfo.RegionName + " are:");
|
||||||
|
foreach (IRegionModuleBase module in scene.RegionModules.Values)
|
||||||
|
{
|
||||||
|
Type type = module.GetType().GetInterface("ISharedRegionModule");
|
||||||
|
string module_type = type != null ? "Shared" : "Non-Shared";
|
||||||
|
MainConsole.Instance.OutputFormat("New Region Module ({0}): {1}", module_type, module.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
MainConsole.Instance.Output("");
|
MainConsole.Instance.Output("");
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -155,7 +155,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
private int m_defaultRTO = 0;
|
private int m_defaultRTO = 0;
|
||||||
private int m_maxRTO = 0;
|
private int m_maxRTO = 0;
|
||||||
|
private int m_ackTimeout = 0;
|
||||||
|
private int m_pausedAckTimeout = 0;
|
||||||
private bool m_disableFacelights = false;
|
private bool m_disableFacelights = false;
|
||||||
|
|
||||||
public Socket Server { get { return null; } }
|
public Socket Server { get { return null; } }
|
||||||
|
@ -198,11 +199,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
m_defaultRTO = config.GetInt("DefaultRTO", 0);
|
m_defaultRTO = config.GetInt("DefaultRTO", 0);
|
||||||
m_maxRTO = config.GetInt("MaxRTO", 0);
|
m_maxRTO = config.GetInt("MaxRTO", 0);
|
||||||
m_disableFacelights = config.GetBoolean("DisableFacelights", false);
|
m_disableFacelights = config.GetBoolean("DisableFacelights", false);
|
||||||
|
m_ackTimeout = 1000 * config.GetInt("AckTimeout", 60);
|
||||||
|
m_pausedAckTimeout = 1000 * config.GetInt("PausedAckTimeout", 300);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PrimUpdatesPerCallback = 100;
|
PrimUpdatesPerCallback = 100;
|
||||||
TextureSendLimit = 20;
|
TextureSendLimit = 20;
|
||||||
|
m_ackTimeout = 1000 * 60; // 1 minute
|
||||||
|
m_pausedAckTimeout = 1000 * 300; // 5 minutes
|
||||||
}
|
}
|
||||||
|
|
||||||
#region BinaryStats
|
#region BinaryStats
|
||||||
|
@ -491,8 +496,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Disconnect an agent if no packets are received for some time
|
// Disconnect an agent if no packets are received for some time
|
||||||
//FIXME: Make 60 an .ini setting
|
int timeoutTicks = m_ackTimeout;
|
||||||
if ((Environment.TickCount & Int32.MaxValue) - udpClient.TickLastPacketReceived > 1000 * 60)
|
|
||||||
|
// Allow more slack if the client is "paused" eg file upload dialogue is open
|
||||||
|
// Some sort of limit is needed in case the client crashes, loses its network connection
|
||||||
|
// or some other disaster prevents it from sendung the AgentResume
|
||||||
|
if (udpClient.IsPaused)
|
||||||
|
timeoutTicks = m_pausedAckTimeout;
|
||||||
|
|
||||||
|
if ((Environment.TickCount & Int32.MaxValue) - udpClient.TickLastPacketReceived > timeoutTicks)
|
||||||
{
|
{
|
||||||
m_log.Warn("[LLUDPSERVER]: Ack timeout, disconnecting " + udpClient.AgentID);
|
m_log.Warn("[LLUDPSERVER]: Ack timeout, disconnecting " + udpClient.AgentID);
|
||||||
StatsManager.SimExtraStats.AddAbnormalClientThreadTermination();
|
StatsManager.SimExtraStats.AddAbnormalClientThreadTermination();
|
||||||
|
|
|
@ -57,14 +57,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Profile
|
||||||
|
|
||||||
public void Initialise(IConfigSource config)
|
public void Initialise(IConfigSource config)
|
||||||
{
|
{
|
||||||
// This can be reduced later as the loader will determine
|
|
||||||
// whether we are needed
|
|
||||||
if (config.Configs["Profile"] != null)
|
|
||||||
{
|
|
||||||
if (config.Configs["Profile"].GetString("Module", string.Empty) != "BasicProfileModule")
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_log.DebugFormat("[PROFILE MODULE]: Basic Profile Module enabled");
|
m_log.DebugFormat("[PROFILE MODULE]: Basic Profile Module enabled");
|
||||||
m_Enabled = true;
|
m_Enabled = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,7 +73,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
"set terrain heights <corner> <min> <max> [<x>] [<y>]",
|
"set terrain heights <corner> <min> <max> [<x>] [<y>]",
|
||||||
"Sets the terrain texture heights on corner #<corner> to <min>/<max>, if <x> or <y> are specified, it will only " +
|
"Sets the terrain texture heights on corner #<corner> to <min>/<max>, if <x> or <y> are specified, it will only " +
|
||||||
"set it on regions with a matching coordinate. Specify -1 in <x> or <y> to wildcard" +
|
"set it on regions with a matching coordinate. Specify -1 in <x> or <y> to wildcard" +
|
||||||
" that coordinate. Corner # SW = 0, NW = 1, SE = 2, NE = 3.",
|
" that coordinate. Corner # SW = 0, NW = 1, SE = 2, NE = 3, all corners = -1.",
|
||||||
consoleSetTerrainHeights);
|
consoleSetTerrainHeights);
|
||||||
|
|
||||||
m_module.Scene.AddCommand(
|
m_module.Scene.AddCommand(
|
||||||
|
@ -143,6 +143,16 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
|
|
||||||
switch (corner)
|
switch (corner)
|
||||||
{
|
{
|
||||||
|
case -1:
|
||||||
|
m_module.Scene.RegionInfo.RegionSettings.Elevation1SW = lowValue;
|
||||||
|
m_module.Scene.RegionInfo.RegionSettings.Elevation2SW = highValue;
|
||||||
|
m_module.Scene.RegionInfo.RegionSettings.Elevation1NW = lowValue;
|
||||||
|
m_module.Scene.RegionInfo.RegionSettings.Elevation2NW = highValue;
|
||||||
|
m_module.Scene.RegionInfo.RegionSettings.Elevation1SE = lowValue;
|
||||||
|
m_module.Scene.RegionInfo.RegionSettings.Elevation2SE = highValue;
|
||||||
|
m_module.Scene.RegionInfo.RegionSettings.Elevation1NE = lowValue;
|
||||||
|
m_module.Scene.RegionInfo.RegionSettings.Elevation2NE = highValue;
|
||||||
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
m_module.Scene.RegionInfo.RegionSettings.Elevation1SW = lowValue;
|
m_module.Scene.RegionInfo.RegionSettings.Elevation1SW = lowValue;
|
||||||
m_module.Scene.RegionInfo.RegionSettings.Elevation2SW = highValue;
|
m_module.Scene.RegionInfo.RegionSettings.Elevation2SW = highValue;
|
||||||
|
|
|
@ -178,8 +178,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain.FileLoaders
|
||||||
// int sztmp = bs.ReadInt16() + 1;
|
// int sztmp = bs.ReadInt16() + 1;
|
||||||
// fileWidth = sztmp;
|
// fileWidth = sztmp;
|
||||||
// fileHeight = sztmp;
|
// fileHeight = sztmp;
|
||||||
bs.ReadInt16();
|
|
||||||
bs.ReadInt16();
|
|
||||||
bs.ReadInt16();
|
bs.ReadInt16();
|
||||||
bs.ReadInt16();
|
bs.ReadInt16();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -84,7 +84,11 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
Debug.Assert(heightRanges.Length == 4);
|
Debug.Assert(heightRanges.Length == 4);
|
||||||
|
|
||||||
Bitmap[] detailTexture = new Bitmap[4];
|
Bitmap[] detailTexture = new Bitmap[4];
|
||||||
|
Bitmap output = null;
|
||||||
|
BitmapData outputData = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
if (textureTerrain)
|
if (textureTerrain)
|
||||||
{
|
{
|
||||||
// Swap empty terrain textureIDs with default IDs
|
// Swap empty terrain textureIDs with default IDs
|
||||||
|
@ -138,7 +142,12 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
|
|
||||||
// Make sure this texture is the correct size, otherwise resize
|
// Make sure this texture is the correct size, otherwise resize
|
||||||
if (bitmap.Width != 256 || bitmap.Height != 256)
|
if (bitmap.Width != 256 || bitmap.Height != 256)
|
||||||
bitmap = ImageUtils.ResizeImage(bitmap, 256, 256);
|
{
|
||||||
|
using (Bitmap origBitmap = bitmap)
|
||||||
|
{
|
||||||
|
bitmap = ImageUtils.ResizeImage(origBitmap, 256, 256);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Save the decoded and resized texture to the cache
|
// Save the decoded and resized texture to the cache
|
||||||
byte[] data;
|
byte[] data;
|
||||||
|
@ -241,8 +250,8 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
|
|
||||||
#region Texture Compositing
|
#region Texture Compositing
|
||||||
|
|
||||||
Bitmap output = new Bitmap(256, 256, PixelFormat.Format24bppRgb);
|
output = new Bitmap(256, 256, PixelFormat.Format24bppRgb);
|
||||||
BitmapData outputData = output.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
|
outputData = output.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
|
||||||
|
|
||||||
unsafe
|
unsafe
|
||||||
{
|
{
|
||||||
|
@ -297,6 +306,13 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
detailTexture[i].UnlockBits(datas[i]);
|
detailTexture[i].UnlockBits(datas[i]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
if (detailTexture[i] != null)
|
||||||
|
detailTexture[i].Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
output.UnlockBits(outputData);
|
output.UnlockBits(outputData);
|
||||||
|
|
||||||
|
|
|
@ -54,8 +54,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
private static readonly UUID TEXTURE_METADATA_MAGIC = new UUID("802dc0e0-f080-4931-8b57-d1be8611c4f3");
|
private static readonly UUID TEXTURE_METADATA_MAGIC = new UUID("802dc0e0-f080-4931-8b57-d1be8611c4f3");
|
||||||
private static readonly Color4 WATER_COLOR = new Color4(29, 72, 96, 216);
|
private static readonly Color4 WATER_COLOR = new Color4(29, 72, 96, 216);
|
||||||
|
|
||||||
private static readonly ILog m_log =
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
|
||||||
|
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private IRendering m_primMesher;
|
private IRendering m_primMesher;
|
||||||
|
@ -164,7 +163,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
m_log.Warn("[MAPTILE]: Failed to load StartupConfig");
|
m_log.Warn("[WARP 3D IMAGE MODULE]: Failed to load StartupConfig");
|
||||||
}
|
}
|
||||||
|
|
||||||
m_colors.Clear();
|
m_colors.Clear();
|
||||||
|
@ -218,7 +217,10 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
Bitmap bitmap = renderer.Scene.getImage();
|
Bitmap bitmap = renderer.Scene.getImage();
|
||||||
|
|
||||||
if (m_useAntiAliasing)
|
if (m_useAntiAliasing)
|
||||||
bitmap = ImageUtils.ResizeImage(bitmap, viewport.Width, viewport.Height);
|
{
|
||||||
|
using (Bitmap origBitmap = bitmap)
|
||||||
|
bitmap = ImageUtils.ResizeImage(origBitmap, viewport.Width, viewport.Height);
|
||||||
|
}
|
||||||
|
|
||||||
return bitmap;
|
return bitmap;
|
||||||
}
|
}
|
||||||
|
@ -233,7 +235,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
// JPEG2000 encoder failed
|
// JPEG2000 encoder failed
|
||||||
m_log.Error("[MAPTILE]: Failed generating terrain map: " + e);
|
m_log.Error("[WARP 3D IMAGE MODULE]: Failed generating terrain map: ", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -332,8 +334,17 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
uint globalX, globalY;
|
uint globalX, globalY;
|
||||||
Utils.LongToUInts(m_scene.RegionInfo.RegionHandle, out globalX, out globalY);
|
Utils.LongToUInts(m_scene.RegionInfo.RegionHandle, out globalX, out globalY);
|
||||||
|
|
||||||
Bitmap image = TerrainSplat.Splat(heightmap, textureIDs, startHeights, heightRanges, new Vector3d(globalX, globalY, 0.0), m_scene.AssetService, textureTerrain);
|
warp_Texture texture;
|
||||||
warp_Texture texture = new warp_Texture(image);
|
|
||||||
|
using (
|
||||||
|
Bitmap image
|
||||||
|
= TerrainSplat.Splat(
|
||||||
|
heightmap, textureIDs, startHeights, heightRanges,
|
||||||
|
new Vector3d(globalX, globalY, 0.0), m_scene.AssetService, textureTerrain))
|
||||||
|
{
|
||||||
|
texture = new warp_Texture(image);
|
||||||
|
}
|
||||||
|
|
||||||
warp_Material material = new warp_Material(texture);
|
warp_Material material = new warp_Material(texture);
|
||||||
material.setReflectivity(50);
|
material.setReflectivity(50);
|
||||||
renderer.Scene.addMaterial("TerrainColor", material);
|
renderer.Scene.addMaterial("TerrainColor", material);
|
||||||
|
@ -560,12 +571,15 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Bitmap bitmap = (Bitmap)J2kImage.FromStream(stream);
|
int pixelBytes;
|
||||||
|
|
||||||
|
using (Bitmap bitmap = (Bitmap)J2kImage.FromStream(stream))
|
||||||
|
{
|
||||||
width = bitmap.Width;
|
width = bitmap.Width;
|
||||||
height = bitmap.Height;
|
height = bitmap.Height;
|
||||||
|
|
||||||
BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, bitmap.PixelFormat);
|
BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, bitmap.PixelFormat);
|
||||||
int pixelBytes = (bitmap.PixelFormat == PixelFormat.Format24bppRgb) ? 3 : 4;
|
pixelBytes = (bitmap.PixelFormat == PixelFormat.Format24bppRgb) ? 3 : 4;
|
||||||
|
|
||||||
// Sum up the individual channels
|
// Sum up the individual channels
|
||||||
unsafe
|
unsafe
|
||||||
|
@ -600,6 +614,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Get the averages for each channel
|
// Get the averages for each channel
|
||||||
const decimal OO_255 = 1m / 255m;
|
const decimal OO_255 = 1m / 255m;
|
||||||
|
@ -617,7 +632,10 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[MAPTILE]: Error decoding JPEG2000 texture {0} ({1} bytes): {2}", textureID, j2kData.Length, ex.Message);
|
m_log.WarnFormat(
|
||||||
|
"[WARP 3D IMAGE MODULE]: Error decoding JPEG2000 texture {0} ({1} bytes): {2}",
|
||||||
|
textureID, j2kData.Length, ex.Message);
|
||||||
|
|
||||||
width = 0;
|
width = 0;
|
||||||
height = 0;
|
height = 0;
|
||||||
return new Color4(0.5f, 0.5f, 0.5f, 1.0f);
|
return new Color4(0.5f, 0.5f, 0.5f, 1.0f);
|
|
@ -1343,14 +1343,14 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
if (terrain == null)
|
if (terrain == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
m_log.DebugFormat("[WORLDMAP]: Generating map image for {0}", m_scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
byte[] data = terrain.WriteJpeg2000Image();
|
byte[] data = terrain.WriteJpeg2000Image();
|
||||||
if (data == null)
|
if (data == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
byte[] overlay = GenerateOverlay();
|
byte[] overlay = GenerateOverlay();
|
||||||
|
|
||||||
m_log.Debug("[WORLDMAP]: STORING MAPTILE IMAGE");
|
|
||||||
|
|
||||||
UUID terrainImageID = UUID.Random();
|
UUID terrainImageID = UUID.Random();
|
||||||
UUID parcelImageID = UUID.Zero;
|
UUID parcelImageID = UUID.Zero;
|
||||||
|
|
||||||
|
@ -1365,7 +1365,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
asset.Flags = AssetFlags.Maptile;
|
asset.Flags = AssetFlags.Maptile;
|
||||||
|
|
||||||
// Store the new one
|
// Store the new one
|
||||||
m_log.DebugFormat("[WORLDMAP]: Storing map tile {0}", asset.ID);
|
m_log.DebugFormat("[WORLDMAP]: Storing map tile {0} for {1}", asset.ID, m_scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
m_scene.AssetService.Store(asset);
|
m_scene.AssetService.Store(asset);
|
||||||
|
|
||||||
if (overlay != null)
|
if (overlay != null)
|
||||||
|
|
|
@ -947,7 +947,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
OnTerrainTaintedDelegate handlerTerrainTainted = OnTerrainTainted;
|
OnTerrainTaintedDelegate handlerTerrainTainted = OnTerrainTainted;
|
||||||
if (handlerTerrainTainted != null)
|
if (handlerTerrainTainted != null)
|
||||||
{
|
{
|
||||||
foreach (OnTerrainTickDelegate d in handlerTerrainTainted.GetInvocationList())
|
foreach (OnTerrainTaintedDelegate d in handlerTerrainTainted.GetInvocationList())
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
|
@ -222,6 +222,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
private int backupMS;
|
private int backupMS;
|
||||||
private int terrainMS;
|
private int terrainMS;
|
||||||
private int landMS;
|
private int landMS;
|
||||||
|
private int spareMS;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tick at which the last frame was processed.
|
/// Tick at which the last frame was processed.
|
||||||
|
@ -1408,45 +1409,41 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
endFrame = Frame + frames;
|
endFrame = Frame + frames;
|
||||||
|
|
||||||
float physicsFPS = 0f;
|
float physicsFPS = 0f;
|
||||||
int tmpPhysicsMS, tmpPhysicsMS2, tmpAgentMS, tmpTempOnRezMS, evMS, backMS, terMS;
|
int previousFrameTick, tmpMS;
|
||||||
int previousFrameTick;
|
int maintc = Util.EnvironmentTickCount();
|
||||||
int maintc;
|
|
||||||
int sleepMS;
|
|
||||||
int framestart;
|
|
||||||
|
|
||||||
while (!m_shuttingDown && (endFrame == null || Frame < endFrame))
|
while (!m_shuttingDown && (endFrame == null || Frame < endFrame))
|
||||||
{
|
{
|
||||||
framestart = Util.EnvironmentTickCount();
|
|
||||||
++Frame;
|
++Frame;
|
||||||
|
|
||||||
// m_log.DebugFormat("[SCENE]: Processing frame {0} in {1}", Frame, RegionInfo.RegionName);
|
// m_log.DebugFormat("[SCENE]: Processing frame {0} in {1}", Frame, RegionInfo.RegionName);
|
||||||
|
|
||||||
agentMS = tempOnRezMS = eventMS = backupMS = terrainMS = landMS = 0;
|
agentMS = tempOnRezMS = eventMS = backupMS = terrainMS = landMS = spareMS = 0;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Apply taints in terrain module to terrain in physics scene
|
// Apply taints in terrain module to terrain in physics scene
|
||||||
if (Frame % m_update_terrain == 0)
|
if (Frame % m_update_terrain == 0)
|
||||||
{
|
{
|
||||||
terMS = Util.EnvironmentTickCount();
|
tmpMS = Util.EnvironmentTickCount();
|
||||||
UpdateTerrain();
|
UpdateTerrain();
|
||||||
terrainMS = Util.EnvironmentTickCountSubtract(terMS);
|
terrainMS = Util.EnvironmentTickCountSubtract(tmpMS);
|
||||||
}
|
}
|
||||||
|
|
||||||
tmpPhysicsMS2 = Util.EnvironmentTickCount();
|
tmpMS = Util.EnvironmentTickCount();
|
||||||
if ((Frame % m_update_physics == 0) && m_physics_enabled)
|
if ((Frame % m_update_physics == 0) && m_physics_enabled)
|
||||||
m_sceneGraph.UpdatePreparePhysics();
|
m_sceneGraph.UpdatePreparePhysics();
|
||||||
physicsMS2 = Util.EnvironmentTickCountSubtract(tmpPhysicsMS2);
|
physicsMS2 = Util.EnvironmentTickCountSubtract(tmpMS);
|
||||||
|
|
||||||
// Apply any pending avatar force input to the avatar's velocity
|
// Apply any pending avatar force input to the avatar's velocity
|
||||||
tmpAgentMS = Util.EnvironmentTickCount();
|
tmpMS = Util.EnvironmentTickCount();
|
||||||
if (Frame % m_update_entitymovement == 0)
|
if (Frame % m_update_entitymovement == 0)
|
||||||
m_sceneGraph.UpdateScenePresenceMovement();
|
m_sceneGraph.UpdateScenePresenceMovement();
|
||||||
agentMS = Util.EnvironmentTickCountSubtract(tmpAgentMS);
|
agentMS = Util.EnvironmentTickCountSubtract(tmpMS);
|
||||||
|
|
||||||
// Perform the main physics update. This will do the actual work of moving objects and avatars according to their
|
// Perform the main physics update. This will do the actual work of moving objects and avatars according to their
|
||||||
// velocity
|
// velocity
|
||||||
tmpPhysicsMS = Util.EnvironmentTickCount();
|
tmpMS = Util.EnvironmentTickCount();
|
||||||
if (Frame % m_update_physics == 0)
|
if (Frame % m_update_physics == 0)
|
||||||
{
|
{
|
||||||
if (m_physics_enabled)
|
if (m_physics_enabled)
|
||||||
|
@ -1455,9 +1452,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (SynchronizeScene != null)
|
if (SynchronizeScene != null)
|
||||||
SynchronizeScene(this);
|
SynchronizeScene(this);
|
||||||
}
|
}
|
||||||
physicsMS = Util.EnvironmentTickCountSubtract(tmpPhysicsMS);
|
physicsMS = Util.EnvironmentTickCountSubtract(tmpMS);
|
||||||
|
|
||||||
tmpAgentMS = Util.EnvironmentTickCount();
|
tmpMS = Util.EnvironmentTickCount();
|
||||||
|
|
||||||
// Check if any objects have reached their targets
|
// Check if any objects have reached their targets
|
||||||
CheckAtTargets();
|
CheckAtTargets();
|
||||||
|
@ -1472,29 +1469,29 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (Frame % m_update_presences == 0)
|
if (Frame % m_update_presences == 0)
|
||||||
m_sceneGraph.UpdatePresences();
|
m_sceneGraph.UpdatePresences();
|
||||||
|
|
||||||
agentMS += Util.EnvironmentTickCountSubtract(tmpAgentMS);
|
agentMS += Util.EnvironmentTickCountSubtract(tmpMS);
|
||||||
|
|
||||||
// Delete temp-on-rez stuff
|
// Delete temp-on-rez stuff
|
||||||
if (Frame % m_update_temp_cleaning == 0 && !m_cleaningTemps)
|
if (Frame % m_update_temp_cleaning == 0 && !m_cleaningTemps)
|
||||||
{
|
{
|
||||||
tmpTempOnRezMS = Util.EnvironmentTickCount();
|
tmpMS = Util.EnvironmentTickCount();
|
||||||
m_cleaningTemps = true;
|
m_cleaningTemps = true;
|
||||||
Util.FireAndForget(delegate { CleanTempObjects(); m_cleaningTemps = false; });
|
Util.FireAndForget(delegate { CleanTempObjects(); m_cleaningTemps = false; });
|
||||||
tempOnRezMS = Util.EnvironmentTickCountSubtract(tmpTempOnRezMS);
|
tempOnRezMS = Util.EnvironmentTickCountSubtract(tmpMS);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Frame % m_update_events == 0)
|
if (Frame % m_update_events == 0)
|
||||||
{
|
{
|
||||||
evMS = Util.EnvironmentTickCount();
|
tmpMS = Util.EnvironmentTickCount();
|
||||||
UpdateEvents();
|
UpdateEvents();
|
||||||
eventMS = Util.EnvironmentTickCountSubtract(evMS);
|
eventMS = Util.EnvironmentTickCountSubtract(tmpMS);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Frame % m_update_backup == 0)
|
if (Frame % m_update_backup == 0)
|
||||||
{
|
{
|
||||||
backMS = Util.EnvironmentTickCount();
|
tmpMS = Util.EnvironmentTickCount();
|
||||||
UpdateStorageBackup();
|
UpdateStorageBackup();
|
||||||
backupMS = Util.EnvironmentTickCountSubtract(backMS);
|
backupMS = Util.EnvironmentTickCountSubtract(tmpMS);
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (Frame % m_update_land == 0)
|
//if (Frame % m_update_land == 0)
|
||||||
|
@ -1504,24 +1501,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// landMS = Util.EnvironmentTickCountSubtract(ldMS);
|
// landMS = Util.EnvironmentTickCountSubtract(ldMS);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
// frameMS = Util.EnvironmentTickCountSubtract(maintc);
|
|
||||||
otherMS = tempOnRezMS + eventMS + backupMS + terrainMS + landMS;
|
|
||||||
|
|
||||||
// if (Frame%m_update_avatars == 0)
|
|
||||||
// UpdateInWorldTime();
|
|
||||||
StatsReporter.AddPhysicsFPS(physicsFPS);
|
|
||||||
StatsReporter.AddTimeDilation(TimeDilation);
|
|
||||||
StatsReporter.AddFPS(1);
|
|
||||||
|
|
||||||
// frameMS currently records work frame times, not total frame times (work + any required sleep to
|
|
||||||
// reach min frame time.
|
|
||||||
// StatsReporter.addFrameMS(frameMS);
|
|
||||||
|
|
||||||
StatsReporter.addAgentMS(agentMS);
|
|
||||||
StatsReporter.addPhysicsMS(physicsMS + physicsMS2);
|
|
||||||
StatsReporter.addOtherMS(otherMS);
|
|
||||||
StatsReporter.addScriptLines(m_sceneGraph.GetScriptLPS());
|
|
||||||
|
|
||||||
if (LoginsDisabled && Frame == 20)
|
if (LoginsDisabled && Frame == 20)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("{0} {1} {2}", LoginsDisabled, m_sceneGraph.GetActiveScriptsCount(), LoginLock);
|
// m_log.DebugFormat("{0} {1} {2}", LoginsDisabled, m_sceneGraph.GetActiveScriptsCount(), LoginLock);
|
||||||
|
@ -1571,21 +1550,34 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
previousFrameTick = m_lastFrameTick;
|
previousFrameTick = m_lastFrameTick;
|
||||||
m_lastFrameTick = Util.EnvironmentTickCount();
|
m_lastFrameTick = Util.EnvironmentTickCount();
|
||||||
maintc = Util.EnvironmentTickCountSubtract(m_lastFrameTick, framestart);
|
tmpMS = Util.EnvironmentTickCountSubtract(m_lastFrameTick, maintc);
|
||||||
maintc = (int)(MinFrameTime * 1000) - maintc;
|
tmpMS = (int)(MinFrameTime * 1000) - tmpMS;
|
||||||
|
|
||||||
m_firstHeartbeat = false;
|
m_firstHeartbeat = false;
|
||||||
|
|
||||||
|
if (tmpMS > 0)
|
||||||
|
{
|
||||||
|
Thread.Sleep(tmpMS);
|
||||||
|
spareMS += tmpMS;
|
||||||
|
}
|
||||||
|
|
||||||
sleepMS = Util.EnvironmentTickCount();
|
frameMS = Util.EnvironmentTickCountSubtract(maintc);
|
||||||
|
maintc = Util.EnvironmentTickCount();
|
||||||
|
|
||||||
if (maintc > 0)
|
otherMS = tempOnRezMS + eventMS + backupMS + terrainMS + landMS;
|
||||||
Thread.Sleep(maintc);
|
|
||||||
|
// if (Frame%m_update_avatars == 0)
|
||||||
|
// UpdateInWorldTime();
|
||||||
|
StatsReporter.AddPhysicsFPS(physicsFPS);
|
||||||
|
StatsReporter.AddTimeDilation(TimeDilation);
|
||||||
|
StatsReporter.AddFPS(1);
|
||||||
|
|
||||||
sleepMS = Util.EnvironmentTickCountSubtract(sleepMS);
|
|
||||||
frameMS = Util.EnvironmentTickCountSubtract(framestart);
|
|
||||||
StatsReporter.addSleepMS(sleepMS);
|
|
||||||
StatsReporter.addFrameMS(frameMS);
|
StatsReporter.addFrameMS(frameMS);
|
||||||
|
StatsReporter.addAgentMS(agentMS);
|
||||||
|
StatsReporter.addPhysicsMS(physicsMS + physicsMS2);
|
||||||
|
StatsReporter.addOtherMS(otherMS);
|
||||||
|
StatsReporter.AddSpareMS(spareMS);
|
||||||
|
StatsReporter.addScriptLines(m_sceneGraph.GetScriptLPS());
|
||||||
|
|
||||||
// Optionally warn if a frame takes double the amount of time that it should.
|
// Optionally warn if a frame takes double the amount of time that it should.
|
||||||
if (DebugUpdates
|
if (DebugUpdates
|
||||||
|
|
|
@ -56,10 +56,17 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
public event YourStatsAreWrong OnStatsIncorrect;
|
public event YourStatsAreWrong OnStatsIncorrect;
|
||||||
|
|
||||||
private SendStatResult handlerSendStatResult = null;
|
private SendStatResult handlerSendStatResult;
|
||||||
|
|
||||||
private YourStatsAreWrong handlerStatsIncorrect = null;
|
private YourStatsAreWrong handlerStatsIncorrect;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// These are the IDs of stats sent in the StatsPacket to the viewer.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Some of these are not relevant to OpenSimulator since it is architected differently to other simulators
|
||||||
|
/// (e.g. script instructions aren't executed as part of the frame loop so 'script time' is tricky).
|
||||||
|
/// </remarks>
|
||||||
public enum Stats : uint
|
public enum Stats : uint
|
||||||
{
|
{
|
||||||
TimeDilation = 0,
|
TimeDilation = 0,
|
||||||
|
@ -83,20 +90,20 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
OutPacketsPerSecond = 18,
|
OutPacketsPerSecond = 18,
|
||||||
PendingDownloads = 19,
|
PendingDownloads = 19,
|
||||||
PendingUploads = 20,
|
PendingUploads = 20,
|
||||||
VirtualSizeKB = 21,
|
VirtualSizeKb = 21,
|
||||||
ResidentSizeKB = 22,
|
ResidentSizeKb = 22,
|
||||||
PendingLocalUploads = 23,
|
PendingLocalUploads = 23,
|
||||||
UnAckedBytes = 24,
|
UnAckedBytes = 24,
|
||||||
PhysicsPinnedTasks = 25,
|
PhysicsPinnedTasks = 25,
|
||||||
PhysicsLODTasks = 26,
|
PhysicsLodTasks = 26,
|
||||||
PhysicsStepMS = 27,
|
SimPhysicsStepMs = 27,
|
||||||
PhysicsShapeMS = 28,
|
SimPhysicsShapeMs = 28,
|
||||||
PhysicsOtherMS = 29,
|
SimPhysicsOtherMs = 29,
|
||||||
PhysicsMemory = 30,
|
SimPhysicsMemory = 30,
|
||||||
ScriptEPS = 31,
|
ScriptEps = 31,
|
||||||
SimSpareTime = 32,
|
SimSpareMs = 32,
|
||||||
SimSleepTime = 33,
|
SimSleepMs = 33,
|
||||||
IOPumpTime = 34
|
SimIoPumpTime = 34
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -130,10 +137,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
private Dictionary<string, float> m_lastReportedExtraSimStats = new Dictionary<string, float>();
|
private Dictionary<string, float> m_lastReportedExtraSimStats = new Dictionary<string, float>();
|
||||||
|
|
||||||
// Sending a stats update every 3 seconds-
|
// Sending a stats update every 3 seconds-
|
||||||
private int statsUpdatesEveryMS = 3000;
|
private int m_statsUpdatesEveryMS = 3000;
|
||||||
private float statsUpdateFactor = 0;
|
private float m_statsUpdateFactor;
|
||||||
private float m_timeDilation = 0;
|
private float m_timeDilation;
|
||||||
private int m_fps = 0;
|
private int m_fps;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Number of the last frame on which we processed a stats udpate.
|
||||||
|
/// </summary>
|
||||||
|
private uint m_lastUpdateFrame;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Our nominal fps target, as expected in fps stats when a sim is running normally.
|
/// Our nominal fps target, as expected in fps stats when a sim is running normally.
|
||||||
|
@ -151,43 +163,42 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
private float m_reportedFpsCorrectionFactor = 5;
|
private float m_reportedFpsCorrectionFactor = 5;
|
||||||
|
|
||||||
// saved last reported value so there is something available for llGetRegionFPS
|
// saved last reported value so there is something available for llGetRegionFPS
|
||||||
private float lastReportedSimFPS = 0;
|
private float lastReportedSimFPS;
|
||||||
private float[] lastReportedSimStats = new float[23];
|
private float[] lastReportedSimStats = new float[22];
|
||||||
private float m_pfps = 0;
|
private float m_pfps;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Number of agent updates requested in this stats cycle
|
/// Number of agent updates requested in this stats cycle
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private int m_agentUpdates = 0;
|
private int m_agentUpdates;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Number of object updates requested in this stats cycle
|
/// Number of object updates requested in this stats cycle
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private int m_objectUpdates;
|
private int m_objectUpdates;
|
||||||
|
|
||||||
private int m_frameMS = 0;
|
private int m_frameMS;
|
||||||
private int m_netMS = 0;
|
private int m_spareMS;
|
||||||
private int m_agentMS = 0;
|
private int m_netMS;
|
||||||
private int m_physicsMS = 0;
|
private int m_agentMS;
|
||||||
private int m_imageMS = 0;
|
private int m_physicsMS;
|
||||||
private int m_otherMS = 0;
|
private int m_imageMS;
|
||||||
private int m_sleeptimeMS = 0;
|
private int m_otherMS;
|
||||||
|
|
||||||
|
|
||||||
//Ckrinke: (3-21-08) Comment out to remove a compiler warning. Bring back into play when needed.
|
//Ckrinke: (3-21-08) Comment out to remove a compiler warning. Bring back into play when needed.
|
||||||
//Ckrinke private int m_scriptMS = 0;
|
//Ckrinke private int m_scriptMS = 0;
|
||||||
|
|
||||||
private int m_rootAgents = 0;
|
private int m_rootAgents;
|
||||||
private int m_childAgents = 0;
|
private int m_childAgents;
|
||||||
private int m_numPrim = 0;
|
private int m_numPrim;
|
||||||
private int m_inPacketsPerSecond = 0;
|
private int m_inPacketsPerSecond;
|
||||||
private int m_outPacketsPerSecond = 0;
|
private int m_outPacketsPerSecond;
|
||||||
private int m_activePrim = 0;
|
private int m_activePrim;
|
||||||
private int m_unAckedBytes = 0;
|
private int m_unAckedBytes;
|
||||||
private int m_pendingDownloads = 0;
|
private int m_pendingDownloads;
|
||||||
private int m_pendingUploads = 0;
|
private int m_pendingUploads = 0; // FIXME: Not currently filled in
|
||||||
private int m_activeScripts = 0;
|
private int m_activeScripts;
|
||||||
private int m_scriptLinesPerSecond = 0;
|
private int m_scriptLinesPerSecond;
|
||||||
|
|
||||||
private int m_objectCapacity = 45000;
|
private int m_objectCapacity = 45000;
|
||||||
|
|
||||||
|
@ -203,13 +214,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
m_reportedFpsCorrectionFactor = scene.MinFrameTime * m_nominalReportedFps;
|
m_reportedFpsCorrectionFactor = scene.MinFrameTime * m_nominalReportedFps;
|
||||||
statsUpdateFactor = (float)(statsUpdatesEveryMS / 1000);
|
m_statsUpdateFactor = (float)(m_statsUpdatesEveryMS / 1000);
|
||||||
ReportingRegion = scene.RegionInfo;
|
ReportingRegion = scene.RegionInfo;
|
||||||
|
|
||||||
m_objectCapacity = scene.RegionInfo.ObjectCapacity;
|
m_objectCapacity = scene.RegionInfo.ObjectCapacity;
|
||||||
m_report.AutoReset = true;
|
m_report.AutoReset = true;
|
||||||
m_report.Interval = statsUpdatesEveryMS;
|
m_report.Interval = m_statsUpdatesEveryMS;
|
||||||
m_report.Elapsed += statsHeartBeat;
|
m_report.Elapsed += TriggerStatsHeartbeat;
|
||||||
m_report.Enabled = true;
|
m_report.Enabled = true;
|
||||||
|
|
||||||
if (StatsManager.SimExtraStats != null)
|
if (StatsManager.SimExtraStats != null)
|
||||||
|
@ -218,7 +229,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
public void Close()
|
public void Close()
|
||||||
{
|
{
|
||||||
m_report.Elapsed -= statsHeartBeat;
|
m_report.Elapsed -= TriggerStatsHeartbeat;
|
||||||
m_report.Close();
|
m_report.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,14 +239,28 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name='ms'></param>
|
/// <param name='ms'></param>
|
||||||
public void SetUpdateMS(int ms)
|
public void SetUpdateMS(int ms)
|
||||||
{
|
{
|
||||||
statsUpdatesEveryMS = ms;
|
m_statsUpdatesEveryMS = ms;
|
||||||
statsUpdateFactor = (float)(statsUpdatesEveryMS / 1000);
|
m_statsUpdateFactor = (float)(m_statsUpdatesEveryMS / 1000);
|
||||||
m_report.Interval = statsUpdatesEveryMS;
|
m_report.Interval = m_statsUpdatesEveryMS;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TriggerStatsHeartbeat(object sender, EventArgs args)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
statsHeartBeat(sender, args);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.Warn(string.Format(
|
||||||
|
"[SIM STATS REPORTER] Update for {0} failed with exception ",
|
||||||
|
m_scene.RegionInfo.RegionName), e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void statsHeartBeat(object sender, EventArgs e)
|
private void statsHeartBeat(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[23];
|
SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[22];
|
||||||
SimStatsPacket.RegionBlock rb = new SimStatsPacket.RegionBlock();
|
SimStatsPacket.RegionBlock rb = new SimStatsPacket.RegionBlock();
|
||||||
|
|
||||||
// Know what's not thread safe in Mono... modifying timers.
|
// Know what's not thread safe in Mono... modifying timers.
|
||||||
|
@ -262,7 +287,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
int reportedFPS = (int)(m_fps * m_reportedFpsCorrectionFactor);
|
int reportedFPS = (int)(m_fps * m_reportedFpsCorrectionFactor);
|
||||||
|
|
||||||
// save the reported value so there is something available for llGetRegionFPS
|
// save the reported value so there is something available for llGetRegionFPS
|
||||||
lastReportedSimFPS = reportedFPS / statsUpdateFactor;
|
lastReportedSimFPS = reportedFPS / m_statsUpdateFactor;
|
||||||
|
|
||||||
float physfps = ((m_pfps / 1000));
|
float physfps = ((m_pfps / 1000));
|
||||||
|
|
||||||
|
@ -273,7 +298,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
physfps = 0;
|
physfps = 0;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
float factor = 1 / statsUpdateFactor;
|
|
||||||
if (reportedFPS <= 0)
|
if (reportedFPS <= 0)
|
||||||
reportedFPS = 1;
|
reportedFPS = 1;
|
||||||
|
|
||||||
|
@ -284,21 +308,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
float targetframetime = 1100.0f / (float)m_nominalReportedFps;
|
float targetframetime = 1100.0f / (float)m_nominalReportedFps;
|
||||||
|
|
||||||
float sparetime;
|
float sparetime;
|
||||||
float sleeptime;
|
|
||||||
if (TotalFrameTime > targetframetime)
|
if (TotalFrameTime > targetframetime)
|
||||||
{
|
{
|
||||||
sparetime = 0;
|
sparetime = 0;
|
||||||
sleeptime = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sparetime = m_frameMS - m_physicsMS - m_agentMS;
|
|
||||||
sparetime *= perframe;
|
|
||||||
if (sparetime < 0)
|
|
||||||
sparetime = 0;
|
|
||||||
else if (sparetime > TotalFrameTime)
|
|
||||||
sparetime = TotalFrameTime;
|
|
||||||
sleeptime = m_sleeptimeMS * perframe;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_rootAgents = m_scene.SceneGraph.GetRootAgentCount();
|
m_rootAgents = m_scene.SceneGraph.GetRootAgentCount();
|
||||||
|
@ -315,11 +327,19 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// m_otherMS = m_frameMS - m_physicsMS - m_imageMS - m_netMS - m_agentMS;
|
// m_otherMS = m_frameMS - m_physicsMS - m_imageMS - m_netMS - m_agentMS;
|
||||||
// m_imageMS m_netMS are not included in m_frameMS
|
// m_imageMS m_netMS are not included in m_frameMS
|
||||||
|
|
||||||
m_otherMS = m_frameMS - m_physicsMS - m_agentMS - m_sleeptimeMS;
|
m_otherMS = m_frameMS - m_physicsMS - m_agentMS;
|
||||||
if (m_otherMS < 0)
|
if (m_otherMS < 0)
|
||||||
m_otherMS = 0;
|
m_otherMS = 0;
|
||||||
|
|
||||||
for (int i = 0; i < 23; i++)
|
uint thisFrame = m_scene.Frame;
|
||||||
|
float framesUpdated = (float)(thisFrame - m_lastUpdateFrame) * m_reportedFpsCorrectionFactor;
|
||||||
|
m_lastUpdateFrame = thisFrame;
|
||||||
|
|
||||||
|
// Avoid div-by-zero if somehow we've not updated any frames.
|
||||||
|
if (framesUpdated == 0)
|
||||||
|
framesUpdated = 1;
|
||||||
|
|
||||||
|
for (int i = 0; i < 22; i++)
|
||||||
{
|
{
|
||||||
sb[i] = new SimStatsPacket.StatBlock();
|
sb[i] = new SimStatsPacket.StatBlock();
|
||||||
}
|
}
|
||||||
|
@ -328,13 +348,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
sb[0].StatValue = (Single.IsNaN(m_timeDilation)) ? 0.1f : m_timeDilation ; //((((m_timeDilation + (0.10f * statsUpdateFactor)) /10) / statsUpdateFactor));
|
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].StatID = (uint) Stats.SimFPS;
|
||||||
sb[1].StatValue = reportedFPS / statsUpdateFactor;
|
sb[1].StatValue = reportedFPS / m_statsUpdateFactor;
|
||||||
|
|
||||||
sb[2].StatID = (uint) Stats.PhysicsFPS;
|
sb[2].StatID = (uint) Stats.PhysicsFPS;
|
||||||
sb[2].StatValue = physfps / statsUpdateFactor;
|
sb[2].StatValue = physfps / m_statsUpdateFactor;
|
||||||
|
|
||||||
sb[3].StatID = (uint) Stats.AgentUpdates;
|
sb[3].StatID = (uint) Stats.AgentUpdates;
|
||||||
sb[3].StatValue = (m_agentUpdates / statsUpdateFactor);
|
sb[3].StatValue = (m_agentUpdates / m_statsUpdateFactor);
|
||||||
|
|
||||||
sb[4].StatID = (uint) Stats.Agents;
|
sb[4].StatID = (uint) Stats.Agents;
|
||||||
sb[4].StatValue = m_rootAgents;
|
sb[4].StatValue = m_rootAgents;
|
||||||
|
@ -349,38 +369,31 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
sb[7].StatValue = m_activePrim;
|
sb[7].StatValue = m_activePrim;
|
||||||
|
|
||||||
sb[8].StatID = (uint)Stats.FrameMS;
|
sb[8].StatID = (uint)Stats.FrameMS;
|
||||||
// sb[8].StatValue = m_frameMS / statsUpdateFactor;
|
sb[8].StatValue = m_frameMS / framesUpdated;
|
||||||
sb[8].StatValue = TotalFrameTime;
|
|
||||||
|
|
||||||
sb[9].StatID = (uint)Stats.NetMS;
|
sb[9].StatID = (uint)Stats.NetMS;
|
||||||
// sb[9].StatValue = m_netMS / statsUpdateFactor;
|
sb[9].StatValue = m_netMS / framesUpdated;
|
||||||
sb[9].StatValue = m_netMS * perframe;
|
|
||||||
|
|
||||||
sb[10].StatID = (uint)Stats.PhysicsMS;
|
sb[10].StatID = (uint)Stats.PhysicsMS;
|
||||||
// sb[10].StatValue = m_physicsMS / statsUpdateFactor;
|
sb[10].StatValue = m_physicsMS / framesUpdated;
|
||||||
sb[10].StatValue = m_physicsMS * perframe;
|
|
||||||
|
|
||||||
sb[11].StatID = (uint)Stats.ImageMS ;
|
sb[11].StatID = (uint)Stats.ImageMS ;
|
||||||
// sb[11].StatValue = m_imageMS / statsUpdateFactor;
|
sb[11].StatValue = m_imageMS / framesUpdated;
|
||||||
sb[11].StatValue = m_imageMS * perframe;
|
|
||||||
|
|
||||||
sb[12].StatID = (uint)Stats.OtherMS;
|
sb[12].StatID = (uint)Stats.OtherMS;
|
||||||
// sb[12].StatValue = m_otherMS / statsUpdateFactor;
|
sb[12].StatValue = m_otherMS / framesUpdated;
|
||||||
sb[12].StatValue = m_otherMS * perframe;
|
|
||||||
|
|
||||||
|
|
||||||
sb[13].StatID = (uint)Stats.InPacketsPerSecond;
|
sb[13].StatID = (uint)Stats.InPacketsPerSecond;
|
||||||
sb[13].StatValue = (m_inPacketsPerSecond / statsUpdateFactor);
|
sb[13].StatValue = (m_inPacketsPerSecond / m_statsUpdateFactor);
|
||||||
|
|
||||||
sb[14].StatID = (uint)Stats.OutPacketsPerSecond;
|
sb[14].StatID = (uint)Stats.OutPacketsPerSecond;
|
||||||
sb[14].StatValue = (m_outPacketsPerSecond / statsUpdateFactor);
|
sb[14].StatValue = (m_outPacketsPerSecond / m_statsUpdateFactor);
|
||||||
|
|
||||||
sb[15].StatID = (uint)Stats.UnAckedBytes;
|
sb[15].StatID = (uint)Stats.UnAckedBytes;
|
||||||
sb[15].StatValue = m_unAckedBytes;
|
sb[15].StatValue = m_unAckedBytes;
|
||||||
|
|
||||||
sb[16].StatID = (uint)Stats.AgentMS;
|
sb[16].StatID = (uint)Stats.AgentMS;
|
||||||
// sb[16].StatValue = m_agentMS / statsUpdateFactor;
|
sb[16].StatValue = m_agentMS / framesUpdated;
|
||||||
sb[16].StatValue = m_agentMS * perframe;
|
|
||||||
|
|
||||||
sb[17].StatID = (uint)Stats.PendingDownloads;
|
sb[17].StatID = (uint)Stats.PendingDownloads;
|
||||||
sb[17].StatValue = m_pendingDownloads;
|
sb[17].StatValue = m_pendingDownloads;
|
||||||
|
@ -392,15 +405,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
sb[19].StatValue = m_activeScripts;
|
sb[19].StatValue = m_activeScripts;
|
||||||
|
|
||||||
sb[20].StatID = (uint)Stats.ScriptLinesPerSecond;
|
sb[20].StatID = (uint)Stats.ScriptLinesPerSecond;
|
||||||
sb[20].StatValue = m_scriptLinesPerSecond / statsUpdateFactor;
|
sb[20].StatValue = m_scriptLinesPerSecond / m_statsUpdateFactor;
|
||||||
|
|
||||||
sb[21].StatID = (uint)Stats.SimSpareTime;
|
sb[21].StatID = (uint)Stats.SimSpareMs;
|
||||||
sb[21].StatValue = sparetime;
|
sb[21].StatValue = m_spareMS / framesUpdated;
|
||||||
|
|
||||||
sb[22].StatID = (uint)Stats.SimSleepTime;
|
for (int i = 0; i < 22; i++)
|
||||||
sb[22].StatValue = sleeptime;
|
|
||||||
|
|
||||||
for (int i = 0; i < 23; i++)
|
|
||||||
{
|
{
|
||||||
lastReportedSimStats[i] = sb[i].StatValue;
|
lastReportedSimStats[i] = sb[i].StatValue;
|
||||||
}
|
}
|
||||||
|
@ -419,7 +429,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// Extra statistics that aren't currently sent to clients
|
// Extra statistics that aren't currently sent to clients
|
||||||
lock (m_lastReportedExtraSimStats)
|
lock (m_lastReportedExtraSimStats)
|
||||||
{
|
{
|
||||||
m_lastReportedExtraSimStats[LastReportedObjectUpdateStatName] = m_objectUpdates / statsUpdateFactor;
|
m_lastReportedExtraSimStats[LastReportedObjectUpdateStatName] = m_objectUpdates / m_statsUpdateFactor;
|
||||||
|
|
||||||
Dictionary<string, float> physicsStats = m_scene.PhysicsScene.GetStats();
|
Dictionary<string, float> physicsStats = m_scene.PhysicsScene.GetStats();
|
||||||
|
|
||||||
|
@ -427,16 +437,22 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
foreach (KeyValuePair<string, float> tuple in physicsStats)
|
foreach (KeyValuePair<string, float> tuple in physicsStats)
|
||||||
{
|
{
|
||||||
m_lastReportedExtraSimStats[tuple.Key] = tuple.Value / statsUpdateFactor;
|
// FIXME: An extremely dirty hack to divide MS stats per frame rather than per second
|
||||||
|
// Need to change things so that stats source can indicate whether they are per second or
|
||||||
|
// per frame.
|
||||||
|
if (tuple.Key.EndsWith("MS"))
|
||||||
|
m_lastReportedExtraSimStats[tuple.Key] = tuple.Value / framesUpdated;
|
||||||
|
else
|
||||||
|
m_lastReportedExtraSimStats[tuple.Key] = tuple.Value / m_statsUpdateFactor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resetvalues();
|
ResetValues();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void resetvalues()
|
private void ResetValues()
|
||||||
{
|
{
|
||||||
m_timeDilation = 0;
|
m_timeDilation = 0;
|
||||||
m_fps = 0;
|
m_fps = 0;
|
||||||
|
@ -454,7 +470,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_physicsMS = 0;
|
m_physicsMS = 0;
|
||||||
m_imageMS = 0;
|
m_imageMS = 0;
|
||||||
m_otherMS = 0;
|
m_otherMS = 0;
|
||||||
m_sleeptimeMS = 0;
|
m_spareMS = 0;
|
||||||
|
|
||||||
//Ckrinke This variable is not used, so comment to remove compiler warning until it is used.
|
//Ckrinke This variable is not used, so comment to remove compiler warning until it is used.
|
||||||
//Ckrinke m_scriptMS = 0;
|
//Ckrinke m_scriptMS = 0;
|
||||||
|
@ -533,6 +549,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_frameMS += ms;
|
m_frameMS += ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AddSpareMS(int ms)
|
||||||
|
{
|
||||||
|
m_spareMS += ms;
|
||||||
|
}
|
||||||
|
|
||||||
public void addNetMS(int ms)
|
public void addNetMS(int ms)
|
||||||
{
|
{
|
||||||
m_netMS += ms;
|
m_netMS += ms;
|
||||||
|
@ -558,11 +579,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_otherMS += ms;
|
m_otherMS += ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addSleepMS(int ms)
|
|
||||||
{
|
|
||||||
m_sleeptimeMS += ms;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void AddPendingDownloads(int count)
|
public void AddPendingDownloads(int count)
|
||||||
{
|
{
|
||||||
m_pendingDownloads += count;
|
m_pendingDownloads += count;
|
||||||
|
|
|
@ -113,14 +113,15 @@ namespace OpenSim.Region.OptionalModules.World.WorldView
|
||||||
if (!m_Enabled)
|
if (!m_Enabled)
|
||||||
return new Byte[0];
|
return new Byte[0];
|
||||||
|
|
||||||
Bitmap bmp = m_Generator.CreateViewImage(pos, rot, fov, width,
|
using (Bitmap bmp = m_Generator.CreateViewImage(pos, rot, fov, width, height, usetex))
|
||||||
height, usetex);
|
{
|
||||||
|
using (MemoryStream str = new MemoryStream())
|
||||||
MemoryStream str = new MemoryStream();
|
{
|
||||||
|
|
||||||
bmp.Save(str, ImageFormat.Jpeg);
|
bmp.Save(str, ImageFormat.Jpeg);
|
||||||
|
|
||||||
return str.ToArray();
|
return str.ToArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ namespace OpenSim.Region.RegionCombinerModule
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Is this module enabled?
|
/// Is this module enabled?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private bool enabledYN = false;
|
private bool m_combineContiguousRegions = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This holds the root regions for the megaregions.
|
/// This holds the root regions for the megaregions.
|
||||||
|
@ -79,14 +79,12 @@ namespace OpenSim.Region.RegionCombinerModule
|
||||||
public void Initialise(IConfigSource source)
|
public void Initialise(IConfigSource source)
|
||||||
{
|
{
|
||||||
IConfig myConfig = source.Configs["Startup"];
|
IConfig myConfig = source.Configs["Startup"];
|
||||||
enabledYN = myConfig.GetBoolean("CombineContiguousRegions", false);
|
m_combineContiguousRegions = myConfig.GetBoolean("CombineContiguousRegions", false);
|
||||||
|
|
||||||
if (enabledYN)
|
|
||||||
{
|
|
||||||
MainConsole.Instance.Commands.AddCommand(
|
MainConsole.Instance.Commands.AddCommand(
|
||||||
"RegionCombinerModule", false, "fix-phantoms", "fix-phantoms",
|
"RegionCombinerModule", false, "fix-phantoms", "fix-phantoms",
|
||||||
"Fixes phantom objects after an import to megaregions", FixPhantoms);
|
"Fixes phantom objects after an import to a megaregion or a change from a megaregion back to normal regions",
|
||||||
}
|
FixPhantoms);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Close()
|
public void Close()
|
||||||
|
@ -95,7 +93,7 @@ namespace OpenSim.Region.RegionCombinerModule
|
||||||
|
|
||||||
public void AddRegion(Scene scene)
|
public void AddRegion(Scene scene)
|
||||||
{
|
{
|
||||||
if (enabledYN)
|
if (m_combineContiguousRegions)
|
||||||
scene.RegisterModuleInterface<IRegionCombinerModule>(this);
|
scene.RegisterModuleInterface<IRegionCombinerModule>(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,7 +103,10 @@ namespace OpenSim.Region.RegionCombinerModule
|
||||||
|
|
||||||
public void RegionLoaded(Scene scene)
|
public void RegionLoaded(Scene scene)
|
||||||
{
|
{
|
||||||
if (enabledYN)
|
lock (m_startingScenes)
|
||||||
|
m_startingScenes.Add(scene.RegionInfo.originRegionID, scene);
|
||||||
|
|
||||||
|
if (m_combineContiguousRegions)
|
||||||
{
|
{
|
||||||
RegionLoadedDoWork(scene);
|
RegionLoadedDoWork(scene);
|
||||||
|
|
||||||
|
@ -208,7 +209,6 @@ namespace OpenSim.Region.RegionCombinerModule
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -220,8 +220,6 @@ namespace OpenSim.Region.RegionCombinerModule
|
||||||
return;
|
return;
|
||||||
//
|
//
|
||||||
*/
|
*/
|
||||||
lock (m_startingScenes)
|
|
||||||
m_startingScenes.Add(scene.RegionInfo.originRegionID, scene);
|
|
||||||
|
|
||||||
// Give each region a standard set of non-infinite borders
|
// Give each region a standard set of non-infinite borders
|
||||||
Border northBorder = new Border();
|
Border northBorder = new Border();
|
||||||
|
@ -1068,6 +1066,8 @@ namespace OpenSim.Region.RegionCombinerModule
|
||||||
|
|
||||||
foreach (Scene s in scenes)
|
foreach (Scene s in scenes)
|
||||||
{
|
{
|
||||||
|
MainConsole.Instance.OutputFormat("Fixing phantoms for {0}", s.RegionInfo.RegionName);
|
||||||
|
|
||||||
s.ForEachSOG(so => so.AbsolutePosition = so.AbsolutePosition);
|
s.ForEachSOG(so => so.AbsolutePosition = so.AbsolutePosition);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6038,7 +6038,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
List<UUID> presenceIds = new List<UUID>();
|
|
||||||
|
|
||||||
World.ForEachRootScenePresence(
|
World.ForEachRootScenePresence(
|
||||||
delegate (ScenePresence ssp)
|
delegate (ScenePresence ssp)
|
||||||
|
|
|
@ -536,6 +536,19 @@
|
||||||
;
|
;
|
||||||
;DisableFacelights = false
|
;DisableFacelights = false
|
||||||
|
|
||||||
|
; The time to wait before disconecting an unresponsive client.
|
||||||
|
; The time is in seconds. The default is one minute
|
||||||
|
;
|
||||||
|
;AckTimeout = 60
|
||||||
|
|
||||||
|
; The time to wait before disconecting an unresponsive paused client.
|
||||||
|
; A client can be paused when the file selection dialog is open during file upload.
|
||||||
|
; This gives extra time to find files via the dialog but will still disconnect if
|
||||||
|
; the client crashes or loses its network connection
|
||||||
|
; The time is in seconds. The default is five minutes.
|
||||||
|
;
|
||||||
|
;PausedAckTimeout = 300
|
||||||
|
|
||||||
[ClientStack.LindenCaps]
|
[ClientStack.LindenCaps]
|
||||||
;; Long list of capabilities taken from
|
;; Long list of capabilities taken from
|
||||||
;; http://wiki.secondlife.com/wiki/Current_Sim_Capabilities
|
;; http://wiki.secondlife.com/wiki/Current_Sim_Capabilities
|
||||||
|
|
|
@ -29,9 +29,6 @@
|
||||||
SimulationServiceInConnector = true
|
SimulationServiceInConnector = true
|
||||||
LibraryModule = true
|
LibraryModule = true
|
||||||
|
|
||||||
[Profile]
|
|
||||||
Module = "BasicProfileModule"
|
|
||||||
|
|
||||||
[SimulationDataStore]
|
[SimulationDataStore]
|
||||||
LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService"
|
LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService"
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,6 @@
|
||||||
GridInfoServiceInConnector = true
|
GridInfoServiceInConnector = true
|
||||||
MapImageServiceInConnector = true
|
MapImageServiceInConnector = true
|
||||||
|
|
||||||
[Profile]
|
|
||||||
Module = "BasicProfileModule"
|
|
||||||
|
|
||||||
[SimulationDataStore]
|
[SimulationDataStore]
|
||||||
LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService"
|
LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue