diff options
author | Dan Lake | 2011-11-11 17:16:52 -0800 |
---|---|---|
committer | Dan Lake | 2011-11-11 17:16:52 -0800 |
commit | 5fd17491509fb4b939666cdc37951e213f054242 (patch) | |
tree | 966baad538ac254ca1e1ba6cd83cc6487bf2726d /OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |
parent | doh - correct build break (diff) | |
download | opensim-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.cs | 68 |
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 | ||