From 5dcd81c15507ad8f487e5727bc7a94de82f6fb45 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Fri, 28 Oct 2016 09:33:57 -0400
Subject: [PATCH] SL-451 - avoid more high-cost string operations in a
 per-frame function

---
 indra/llprimitive/llmodel.cpp    | 6 ++++--
 indra/llprimitive/llmodel.h      | 1 +
 indra/newview/llskinningutil.cpp | 5 +++++
 3 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp
index c98cee218c8..db6d00bc2cf 100644
--- a/indra/llprimitive/llmodel.cpp
+++ b/indra/llprimitive/llmodel.cpp
@@ -1387,13 +1387,15 @@ bool LLModel::loadDecomposition(LLSD& header, std::istream& is)
 
 LLMeshSkinInfo::LLMeshSkinInfo():
     mPelvisOffset(0.0),
-    mLockScaleIfJointPosition(false)
+    mLockScaleIfJointPosition(false),
+    mInvalidJointsScrubbed(false)
 {
 }
 
 LLMeshSkinInfo::LLMeshSkinInfo(LLSD& skin):
     mPelvisOffset(0.0),
-    mLockScaleIfJointPosition(false)
+    mLockScaleIfJointPosition(false),
+    mInvalidJointsScrubbed(false)
 {
 	fromLLSD(skin);
 }
diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h
index 40c3916168a..097558ef679 100644
--- a/indra/llprimitive/llmodel.h
+++ b/indra/llprimitive/llmodel.h
@@ -56,6 +56,7 @@ class LLMeshSkinInfo
 	LLMatrix4 mBindShapeMatrix;
 	float mPelvisOffset;
     bool mLockScaleIfJointPosition;
+    bool mInvalidJointsScrubbed;
 };
 
 class LLModel : public LLVolume
diff --git a/indra/newview/llskinningutil.cpp b/indra/newview/llskinningutil.cpp
index c0589e33bb6..b2fd1744bc7 100644
--- a/indra/newview/llskinningutil.cpp
+++ b/indra/newview/llskinningutil.cpp
@@ -53,6 +53,10 @@ U32 LLSkinningUtil::getMeshJointCount(const LLMeshSkinInfo *skin)
 // static
 void LLSkinningUtil::scrubInvalidJoints(LLVOAvatar *avatar, LLMeshSkinInfo* skin)
 {
+    if (skin->mInvalidJointsScrubbed)
+    {
+        return;
+    }
     for (U32 j = 0; j < skin->mJointNames.size(); ++j)
     {
         // Fix invalid names to "mPelvis". Currently meshes with
@@ -63,6 +67,7 @@ void LLSkinningUtil::scrubInvalidJoints(LLVOAvatar *avatar, LLMeshSkinInfo* skin
             skin->mJointNames[j] = "mPelvis";
         }
     }
+    skin->mInvalidJointsScrubbed = true;
 }
 
 // static
-- 
GitLab