aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
diff options
context:
space:
mode:
authorDan Lake2011-11-11 17:16:52 -0800
committerDan Lake2011-11-11 17:16:52 -0800
commit5fd17491509fb4b939666cdc37951e213f054242 (patch)
tree966baad538ac254ca1e1ba6cd83cc6487bf2726d /OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
parentdoh - correct build break (diff)
downloadopensim-SC-5fd17491509fb4b939666cdc37951e213f054242.zip
opensim-SC-5fd17491509fb4b939666cdc37951e213f054242.tar.gz
opensim-SC-5fd17491509fb4b939666cdc37951e213f054242.tar.bz2
opensim-SC-5fd17491509fb4b939666cdc37951e213f054242.tar.xz
Remove SceneViewer from ScenePresence to reduce quadruple queueing of
prim update to only triple queuing. Existing method was: 1. Schedule prim for update, adding to scene update list 2. Update on SOGs during heartbeat queues update onto each SceneViewer 3. Update on SPs during heartbeat queues update onto each IClientAPI 4. ProcessEntityUpdates queues updates into UDP send stack Now the SceneViewer has been eliminated so updates are scheduled at any time and then put onto the IClientAPI priority queues immediately during SceneGraph.UpdateObjectGroups.
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs68
1 files changed, 12 insertions, 56 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 4e1383c..f693b36 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1373,25 +1373,6 @@ namespace OpenSim.Region.Framework.Scenes
1373 // m_log.Debug("Aprev: " + prevflag.ToString() + " curr: " + Flags.ToString()); 1373 // m_log.Debug("Aprev: " + prevflag.ToString() + " curr: " + Flags.ToString());
1374 } 1374 }
1375 1375
1376 /// <summary>
1377 /// Tell all scene presences that they should send updates for this part to their clients
1378 /// </summary>
1379 public void AddFullUpdateToAllAvatars()
1380 {
1381 ParentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar)
1382 {
1383 AddFullUpdateToAvatar(avatar);
1384 });
1385 }
1386
1387 /// <summary>
1388 /// Tell the scene presence that it should send updates for this part to its client
1389 /// </summary>
1390 public void AddFullUpdateToAvatar(ScenePresence presence)
1391 {
1392 presence.SceneViewer.QueuePartForUpdate(this);
1393 }
1394
1395 public void AddNewParticleSystem(Primitive.ParticleSystem pSystem) 1376 public void AddNewParticleSystem(Primitive.ParticleSystem pSystem)
1396 { 1377 {
1397 m_particleSystem = pSystem.GetBytes(); 1378 m_particleSystem = pSystem.GetBytes();
@@ -1402,20 +1383,6 @@ namespace OpenSim.Region.Framework.Scenes
1402 m_particleSystem = new byte[0]; 1383 m_particleSystem = new byte[0];
1403 } 1384 }
1404 1385
1405 /// Terse updates
1406 public void AddTerseUpdateToAllAvatars()
1407 {
1408 ParentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar)
1409 {
1410 AddTerseUpdateToAvatar(avatar);
1411 });
1412 }
1413
1414 public void AddTerseUpdateToAvatar(ScenePresence presence)
1415 {
1416 presence.SceneViewer.QueuePartForUpdate(this);
1417 }
1418
1419 public void AddTextureAnimation(Primitive.TextureAnimation pTexAnim) 1386 public void AddTextureAnimation(Primitive.TextureAnimation pTexAnim)
1420 { 1387 {
1421 byte[] data = new byte[16]; 1388 byte[] data = new byte[16];
@@ -2650,8 +2617,6 @@ namespace OpenSim.Region.Framework.Scenes
2650 //ParentGroup.RootPart.m_groupPosition = newpos; 2617 //ParentGroup.RootPart.m_groupPosition = newpos;
2651 } 2618 }
2652 ScheduleTerseUpdate(); 2619 ScheduleTerseUpdate();
2653
2654 //SendTerseUpdateToAllClients();
2655 } 2620 }
2656 2621
2657 public void PreloadSound(string sound) 2622 public void PreloadSound(string sound)
@@ -2834,6 +2799,13 @@ namespace OpenSim.Region.Framework.Scenes
2834 if (ParentGroup == null) 2799 if (ParentGroup == null)
2835 return; 2800 return;
2836 2801
2802 // This was pulled from SceneViewer. Attachments always receive full updates.
2803 // I could not verify if this is a requirement but this maintains existing behavior
2804 if (ParentGroup.IsAttachment)
2805 {
2806 ScheduleFullUpdate();
2807 }
2808
2837 if (UpdateFlag == UpdateRequired.NONE) 2809 if (UpdateFlag == UpdateRequired.NONE)
2838 { 2810 {
2839 ParentGroup.HasGroupChanged = true; 2811 ParentGroup.HasGroupChanged = true;
@@ -2928,23 +2900,6 @@ namespace OpenSim.Region.Framework.Scenes
2928 } 2900 }
2929 2901
2930 /// <summary> 2902 /// <summary>
2931 /// Send a full update to all clients except the one nominated.
2932 /// </summary>
2933 /// <param name="agentID"></param>
2934 public void SendFullUpdateToAllClientsExcept(UUID agentID)
2935 {
2936 if (ParentGroup == null)
2937 return;
2938
2939 ParentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar)
2940 {
2941 // Ugly reference :(
2942 if (avatar.UUID != agentID)
2943 SendFullUpdate(avatar.ControllingClient, avatar.GenerateClientFlags(UUID));
2944 });
2945 }
2946
2947 /// <summary>
2948 /// Sends a full update to the client 2903 /// Sends a full update to the client
2949 /// </summary> 2904 /// </summary>
2950 /// <param name="remoteClient"></param> 2905 /// <param name="remoteClient"></param>
@@ -3020,7 +2975,8 @@ namespace OpenSim.Region.Framework.Scenes
3020 !OffsetPosition.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) || 2975 !OffsetPosition.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) ||
3021 Environment.TickCount - m_lastTerseSent > TIME_MS_TOLERANCE) 2976 Environment.TickCount - m_lastTerseSent > TIME_MS_TOLERANCE)
3022 { 2977 {
3023 AddTerseUpdateToAllAvatars(); 2978
2979 SendTerseUpdateToAllClients();
3024 ClearUpdateSchedule(); 2980 ClearUpdateSchedule();
3025 2981
3026 // Update the "last" values 2982 // Update the "last" values
@@ -3035,7 +2991,7 @@ namespace OpenSim.Region.Framework.Scenes
3035 } 2991 }
3036 case UpdateRequired.FULL: 2992 case UpdateRequired.FULL:
3037 { 2993 {
3038 AddFullUpdateToAllAvatars(); 2994 SendFullUpdateToAllClients();
3039 break; 2995 break;
3040 } 2996 }
3041 } 2997 }
@@ -3140,9 +3096,9 @@ namespace OpenSim.Region.Framework.Scenes
3140 /// </summary> 3096 /// </summary>
3141 public void SendTerseUpdateToAllClients() 3097 public void SendTerseUpdateToAllClients()
3142 { 3098 {
3143 ParentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar) 3099 ParentGroup.Scene.ForEachClient(delegate(IClientAPI client)
3144 { 3100 {
3145 SendTerseUpdateToClient(avatar.ControllingClient); 3101 SendTerseUpdateToClient(client);
3146 }); 3102 });
3147 } 3103 }
3148 3104