From 61d004f8b2922be006695fb016c492ad1063ef2a Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@bred.dog>
Date: Thu, 25 Jul 2019 21:01:39 -0400
Subject: [PATCH] Speed up animation signaling a fair bit

---
 indra/newview/llcontrolavatar.cpp | 6 +++---
 indra/newview/llvoavatar.cpp      | 5 ++---
 indra/newview/llvoavatar.h        | 6 ++++--
 3 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/indra/newview/llcontrolavatar.cpp b/indra/newview/llcontrolavatar.cpp
index dc242757b6..5d44b01a16 100644
--- a/indra/newview/llcontrolavatar.cpp
+++ b/indra/newview/llcontrolavatar.cpp
@@ -513,7 +513,7 @@ void LLControlAvatar::updateAnimations()
     getAnimatedVolumes(volumes);
     
     // Rebuild mSignaledAnimations from the associated volumes.
-	std::map<LLUUID, S32> anims;
+	absl::flat_hash_map<LLUUID, S32> anims;
     for (std::vector<LLVOVolume*>::iterator vol_it = volumes.begin(); vol_it != volumes.end(); ++vol_it)
     {
         LLVOVolume *volp = *vol_it;
@@ -523,7 +523,7 @@ void LLControlAvatar::updateAnimations()
              anim_it != signaled_animations.end();
              ++anim_it)
         {
-            std::map<LLUUID,S32>::iterator found_anim_it = anims.find(anim_it->first);
+            auto found_anim_it = anims.find(anim_it->first);
             if (found_anim_it != anims.end())
             {
                 // Animation already present, use the larger sequence id
@@ -547,7 +547,7 @@ void LLControlAvatar::updateAnimations()
         }
     }
 
-    mSignaledAnimations = anims;
+    mSignaledAnimations.swap(anims);
     processAnimationStateChanges();
 }
 
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index f8b1632d84..0bfafe2ac2 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -5621,8 +5621,7 @@ void LLVOAvatar::processAnimationStateChanges()
 	}
 	
 	// clear all current animations
-	std::map<LLUUID, S32>::iterator anim_it;
-	for (anim_it = mPlayingAnimations.begin(); anim_it != mPlayingAnimations.end();)
+	for (auto anim_it = mPlayingAnimations.begin(); anim_it != mPlayingAnimations.end();)
 	{
 		auto found_anim = mSignaledAnimations.find(anim_it->first);
 
@@ -5638,7 +5637,7 @@ void LLVOAvatar::processAnimationStateChanges()
 	}
 
 	// start up all new anims
-	for (anim_it = mSignaledAnimations.begin(); anim_it != mSignaledAnimations.end();)
+	for (auto anim_it = mSignaledAnimations.begin(); anim_it != mSignaledAnimations.end();)
 	{
 		auto found_anim = mPlayingAnimations.find(anim_it->first);
 
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 395c03da94..d5ba12c3d1 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -49,6 +49,8 @@
 #include "llvovolume.h"
 #include "llavatarrendernotifier.h"
 
+#include "absl/container/flat_hash_map.h"
+
 extern const LLUUID ANIM_AGENT_BODY_NOISE;
 extern const LLUUID ANIM_AGENT_BREATHE_ROT;
 extern const LLUUID ANIM_AGENT_PHYSICS_MOTION;
@@ -840,8 +842,8 @@ private:
 	// Animation state data
 	//--------------------------------------------------------------------
 public:
-	std::map<LLUUID, S32> 					mSignaledAnimations; // requested state of Animation name/value
-	std::map<LLUUID, S32> 					mPlayingAnimations; // current state of Animation name/value
+	absl::flat_hash_map<LLUUID, S32> 					mSignaledAnimations; // requested state of Animation name/value
+	absl::flat_hash_map<LLUUID, S32> 					mPlayingAnimations; // current state of Animation name/value
 
 	typedef std::multimap<LLUUID, LLUUID> 	AnimationSourceMap;
 	typedef AnimationSourceMap::iterator 	AnimSourceIterator;
-- 
GitLab