From 1614e4390b514de33609ea94835e75c6ddf9b316 Mon Sep 17 00:00:00 2001
From: Cosmic Linden <cosmic@lindenlab.com>
Date: Tue, 12 Jul 2022 14:43:31 -0700
Subject: SL-17691: Consolidate calls to onDrawableUpdateFromServer to reduce
 false positives, change mServerDrawableUpdateCount from U64->U32

---
 indra/newview/llvovolume.cpp | 19 ++++++++++++-------
 indra/newview/llvovolume.h   |  2 +-
 2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 367d8e328d..f4a938e57d 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -326,6 +326,9 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
 	 	
 	LLColor4U color;
 	const S32 teDirtyBits = (TEM_CHANGE_TEXTURE|TEM_CHANGE_COLOR|TEM_CHANGE_MEDIA);
+    const bool previously_volume_changed = mVolumeChanged;
+    const bool previously_face_mapping_changed = mFaceMappingChanged;
+    const bool previously_color_changed = mColorChanged;
 
 	// Do base class updates...
 	U32 retval = LLViewerObject::processUpdateMessage(mesgsys, user_data, block_num, update_type, dp);
@@ -388,7 +391,6 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
                     }
 
 					gPipeline.markTextured(mDrawable);
-                    onDrawableUpdateFromServer();
 					mFaceMappingChanged = TRUE;
 					mTexAnimMode = 0;
 				}
@@ -402,7 +404,6 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
 			if (setVolume(volume_params, 0))
 			{
 				markForUpdate(TRUE);
-                onDrawableUpdateFromServer();
 			}
 		}
 
@@ -413,7 +414,6 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
 		//
 
 		S32 result = unpackTEMessage(mesgsys, _PREHASH_ObjectData, (S32) block_num);
-        onDrawableUpdateFromServer();
 		if (result & teDirtyBits)
 		{
 			updateTEData();
@@ -440,10 +440,8 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
 			if (setVolume(volume_params, 0))
 			{
 				markForUpdate(TRUE);
-                onDrawableUpdateFromServer();
 			}
 			S32 res2 = unpackTEMessage(*dp);
-            onDrawableUpdateFromServer();
 			if (TEM_INVALID == res2)
 			{
 				// There's something bogus in the data that we're unpacking.
@@ -504,7 +502,6 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
                 }
 
 				gPipeline.markTextured(mDrawable);
-                onDrawableUpdateFromServer();
 				mFaceMappingChanged = TRUE;
 				mTexAnimMode = 0;
 			}
@@ -523,7 +520,6 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
 				LLDataPackerBinaryBuffer	tdp(tdpbuffer, 1024);
 				mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_TextureEntry, tdpbuffer, 0, block_num, 1024);
 				S32 result = unpackTEMessage(tdp);
-                onDrawableUpdateFromServer();
 				if (result & teDirtyBits)
 				{
 					updateTEData();
@@ -556,6 +552,15 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
 	// ...and clean up any media impls
 	cleanUpMediaImpls();
 
+    if ((
+            (mVolumeChanged && !previously_volume_changed) ||
+            (mFaceMappingChanged && !previously_face_mapping_changed) ||
+            (mColorChanged && !previously_color_changed)
+        )
+        && !mLODChanged) {
+        onDrawableUpdateFromServer();
+    }
+
 	return retval;
 }
 
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index 71ac152490..4136c13315 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -425,7 +425,7 @@ private:
 	LLPointer<LLViewerFetchedTexture> mLightTexture;
 	media_list_t mMediaImplList;
 	S32			mLastFetchedMediaVersion; // as fetched from the server, starts as -1
-    U64         mServerDrawableUpdateCount;
+    U32         mServerDrawableUpdateCount;
 	S32 mIndexInTex[LLRender::NUM_VOLUME_TEXTURE_CHANNELS];
 	S32 mMDCImplCount;
 
-- 
cgit v1.2.3