That didn't fix the problem.

Revert "Trying to reduce CPU usage on logins and TPs: trying radical elimination of all FireAndForgets throughout CompleteMovement. There were 4."

This reverts commit 6825377380.
cpu-performance
Diva Canto 2013-07-13 11:30:37 -07:00
parent 6825377380
commit bc405a6a34
2 changed files with 38 additions and 27 deletions

View File

@ -173,7 +173,10 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
if(obj.PresenceType == PresenceType.Npc) if(obj.PresenceType == PresenceType.Npc)
return; return;
GetImageAssets(((IScenePresence)obj).UUID); Util.FireAndForget(delegate
{
GetImageAssets(((IScenePresence)obj).UUID);
});
} }
/// <summary> /// <summary>

View File

@ -958,7 +958,14 @@ namespace OpenSim.Region.Framework.Scenes
// Viewers which have a current outfit folder will actually rez their own attachments. However, // Viewers which have a current outfit folder will actually rez their own attachments. However,
// viewers without (e.g. v1 viewers) will not, so we still need to make this call. // viewers without (e.g. v1 viewers) will not, so we still need to make this call.
if (Scene.AttachmentsModule != null) if (Scene.AttachmentsModule != null)
Scene.AttachmentsModule.RezAttachments(this); Util.FireAndForget(
o =>
{
// if (PresenceType != PresenceType.Npc && Util.FireAndForgetMethod != FireAndForgetMethod.None)
// System.Threading.Thread.Sleep(7000);
Scene.AttachmentsModule.RezAttachments(this);
});
} }
else else
{ {
@ -1355,6 +1362,18 @@ namespace OpenSim.Region.Framework.Scenes
ValidateAndSendAppearanceAndAgentData(); ValidateAndSendAppearanceAndAgentData();
// Create child agents in neighbouring regions
if (openChildAgents && !IsChildAgent)
{
IEntityTransferModule m_agentTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>();
if (m_agentTransfer != null)
Util.FireAndForget(delegate { m_agentTransfer.EnableChildAgents(this); });
IFriendsModule friendsModule = m_scene.RequestModuleInterface<IFriendsModule>();
if (friendsModule != null)
friendsModule.SendFriendsOnlineIfNeeded(ControllingClient);
}
// XXX: If we force an update here, then multiple attachments do appear correctly on a destination region // XXX: If we force an update here, then multiple attachments do appear correctly on a destination region
// If we do it a little bit earlier (e.g. when converting the child to a root agent) then this does not work. // If we do it a little bit earlier (e.g. when converting the child to a root agent) then this does not work.
// This may be due to viewer code or it may be something we're not doing properly simulator side. // This may be due to viewer code or it may be something we're not doing properly simulator side.
@ -1364,19 +1383,6 @@ namespace OpenSim.Region.Framework.Scenes
sog.ScheduleGroupForFullUpdate(); sog.ScheduleGroupForFullUpdate();
} }
// Create child agents in neighbouring regions
if (openChildAgents && !IsChildAgent)
{
IFriendsModule friendsModule = m_scene.RequestModuleInterface<IFriendsModule>();
if (friendsModule != null)
friendsModule.SendFriendsOnlineIfNeeded(ControllingClient);
IEntityTransferModule m_agentTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>();
if (m_agentTransfer != null)
m_agentTransfer.EnableChildAgents(this); // this can take a while... several seconds
}
// m_log.DebugFormat( // m_log.DebugFormat(
// "[SCENE PRESENCE]: Completing movement of {0} into region {1} took {2}ms", // "[SCENE PRESENCE]: Completing movement of {0} into region {1} took {2}ms",
// client.Name, Scene.RegionInfo.RegionName, (DateTime.Now - startTime).Milliseconds); // client.Name, Scene.RegionInfo.RegionName, (DateTime.Now - startTime).Milliseconds);
@ -2683,20 +2689,22 @@ namespace OpenSim.Region.Framework.Scenes
public void SendInitialDataToMe() public void SendInitialDataToMe()
{ {
// Send all scene object to the new client // Send all scene object to the new client
Util.FireAndForget(delegate
// we created a new ScenePresence (a new child agent) in a fresh region.
// Request info about all the (root) agents in this region
// Note: This won't send data *to* other clients in that region (children don't send)
SendOtherAgentsAvatarDataToMe();
SendOtherAgentsAppearanceToMe();
EntityBase[] entities = Scene.Entities.GetEntities();
foreach (EntityBase e in entities)
{ {
if (e != null && e is SceneObjectGroup) // we created a new ScenePresence (a new child agent) in a fresh region.
((SceneObjectGroup)e).SendFullUpdateToClient(ControllingClient); // Request info about all the (root) agents in this region
} // Note: This won't send data *to* other clients in that region (children don't send)
SendOtherAgentsAvatarDataToMe();
SendOtherAgentsAppearanceToMe();
EntityBase[] entities = Scene.Entities.GetEntities();
foreach (EntityBase e in entities)
{
if (e != null && e is SceneObjectGroup)
((SceneObjectGroup)e).SendFullUpdateToClient(ControllingClient);
}
});
} }
/// <summary> /// <summary>