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