summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorakleshchev <117672381+akleshchev@users.noreply.github.com>2023-02-07 23:52:34 +0200
committerGitHub <noreply@github.com>2023-02-07 23:52:34 +0200
commit7496e746af2fae3d817e1c665923a0996b5673e3 (patch)
treeef79b4b5d1fb51e8dbe413f310da0dd4da299622
parent1eb2b23f4b254052924b198d446c052df9ca3124 (diff)
parentc3ab9487245ac77016f3b651e2db47d239941659 (diff)
SL-19159 pull request #71 from sldevel/invcat-fast-hash
Faster and simpler inventory category hashing.
-rw-r--r--indra/llappearance/llwearable.h4
-rw-r--r--indra/llappearance/llwearabledata.cpp40
-rw-r--r--indra/llappearance/llwearabledata.h9
-rw-r--r--indra/newview/llagentwearables.cpp1
-rw-r--r--indra/newview/llinventorymodel.cpp11
-rw-r--r--indra/newview/llinventorymodel.h4
-rw-r--r--indra/newview/llinventoryobserver.cpp7
-rw-r--r--indra/newview/llinventoryobserver.h6
-rw-r--r--indra/newview/lloutfitobserver.cpp3
-rw-r--r--indra/newview/lloutfitobserver.h3
-rw-r--r--indra/newview/llviewerwearable.h1
11 files changed, 15 insertions, 74 deletions
diff --git a/indra/llappearance/llwearable.h b/indra/llappearance/llwearable.h
index 875c2932f1..d86db236a3 100644
--- a/indra/llappearance/llwearable.h
+++ b/indra/llappearance/llwearable.h
@@ -32,7 +32,6 @@
#include "llsaleinfo.h"
#include "llwearabletype.h"
-class LLMD5;
class LLVisualParam;
class LLTexGlobalColorInfo;
class LLTexGlobalColor;
@@ -110,9 +109,6 @@ public:
// Something happened that requires the wearable to be updated (e.g. worn/unworn).
virtual void setUpdated() const = 0;
- // Update the baked texture hash.
- virtual void addToBakedTextureHash(LLMD5& hash) const = 0;
-
typedef std::map<S32, LLVisualParam *> visual_param_index_map_t;
visual_param_index_map_t mVisualParamIndexMap;
diff --git a/indra/llappearance/llwearabledata.cpp b/indra/llappearance/llwearabledata.cpp
index 0eaeedb6ee..9fbbc57c87 100644
--- a/indra/llappearance/llwearabledata.cpp
+++ b/indra/llappearance/llwearabledata.cpp
@@ -31,7 +31,6 @@
#include "llavatarappearance.h"
#include "llavatarappearancedefines.h"
#include "lldriverparam.h"
-#include "llmd5.h"
LLWearableData::LLWearableData() :
mAvatarAppearance(NULL)
@@ -343,42 +342,3 @@ U32 LLWearableData::getWearableCount(const U32 tex_index) const
const LLWearableType::EType wearable_type = LLAvatarAppearance::getDictionary()->getTEWearableType((LLAvatarAppearanceDefines::ETextureIndex)tex_index);
return getWearableCount(wearable_type);
}
-
-LLUUID LLWearableData::computeBakedTextureHash(LLAvatarAppearanceDefines::EBakedTextureIndex baked_index,
- BOOL generate_valid_hash) // Set to false if you want to upload the baked texture w/o putting it in the cache
-{
- LLUUID hash_id;
- bool hash_computed = false;
- LLMD5 hash;
- const LLAvatarAppearanceDictionary::BakedEntry *baked_dict = LLAvatarAppearance::getDictionary()->getBakedTexture(baked_index);
-
- for (U8 i=0; i < baked_dict->mWearables.size(); i++)
- {
- const LLWearableType::EType baked_type = baked_dict->mWearables[i];
- const U32 num_wearables = getWearableCount(baked_type);
- for (U32 index = 0; index < num_wearables; ++index)
- {
- const LLWearable* wearable = getWearable(baked_type,index);
- if (wearable)
- {
- wearable->addToBakedTextureHash(hash);
- hash_computed = true;
- }
- }
- }
- if (hash_computed)
- {
- hash.update((const unsigned char*)baked_dict->mWearablesHashID.mData, UUID_BYTES);
-
- if (!generate_valid_hash)
- {
- invalidateBakedTextureHash(hash);
- }
- hash.finalize();
- hash.raw_digest(hash_id.mData);
- }
-
- return hash_id;
-}
-
-
diff --git a/indra/llappearance/llwearabledata.h b/indra/llappearance/llwearabledata.h
index a0c446ea9e..b8e0bf8bd1 100644
--- a/indra/llappearance/llwearabledata.h
+++ b/indra/llappearance/llwearabledata.h
@@ -86,15 +86,6 @@ private:
void pullCrossWearableValues(const LLWearableType::EType type);
//--------------------------------------------------------------------
- // Server Communication
- //--------------------------------------------------------------------
-public:
- LLUUID computeBakedTextureHash(LLAvatarAppearanceDefines::EBakedTextureIndex baked_index,
- BOOL generate_valid_hash = TRUE);
-protected:
- virtual void invalidateBakedTextureHash(LLMD5& hash) const {}
-
- //--------------------------------------------------------------------
// Member variables
//--------------------------------------------------------------------
protected:
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 2e769dc737..53397978e0 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -41,7 +41,6 @@
#include "llinventoryobserver.h"
#include "llinventorypanel.h"
#include "lllocaltextureobject.h"
-#include "llmd5.h"
#include "llnotificationsutil.h"
#include "lloutfitobserver.h"
#include "llsidepanelappearance.h"
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 6ba04cdff2..e56a0ba414 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -62,6 +62,7 @@
#include "bufferarray.h"
#include "bufferstream.h"
#include "llcorehttputil.h"
+#include "hbxxh.h"
//#define DIFF_INVENTORY_FILES
#ifdef DIFF_INVENTORY_FILES
@@ -451,17 +452,16 @@ void LLInventoryModel::getDirectDescendentsOf(const LLUUID& cat_id,
items = get_ptr_in_map(mParentChildItemTree, cat_id);
}
-LLMD5 LLInventoryModel::hashDirectDescendentNames(const LLUUID& cat_id) const
+LLInventoryModel::digest_t LLInventoryModel::hashDirectDescendentNames(const LLUUID& cat_id) const
{
LLInventoryModel::cat_array_t* cat_array;
LLInventoryModel::item_array_t* item_array;
getDirectDescendentsOf(cat_id,cat_array,item_array);
- LLMD5 item_name_hash;
if (!item_array)
{
- item_name_hash.finalize();
- return item_name_hash;
+ return LLUUID::null;
}
+ HBXXH128 item_name_hash;
for (LLInventoryModel::item_array_t::const_iterator iter = item_array->begin();
iter != item_array->end();
iter++)
@@ -471,8 +471,7 @@ LLMD5 LLInventoryModel::hashDirectDescendentNames(const LLUUID& cat_id) const
continue;
item_name_hash.update(item->getName());
}
- item_name_hash.finalize();
- return item_name_hash;
+ return item_name_hash.digest();
}
// SJB: Added version to lock the arrays to catch potential logic bugs
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index c4133ff9bb..ef4a7d984d 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -39,7 +39,6 @@
#include "llpermissionsflags.h"
#include "llviewerinventory.h"
#include "llstring.h"
-#include "llmd5.h"
#include "httpcommon.h"
#include "httprequest.h"
#include "httpoptions.h"
@@ -257,8 +256,9 @@ public:
cat_array_t*& categories,
item_array_t*& items) const;
+ typedef LLUUID digest_t; // To clarify the actual usage of this "UUID"
// Compute a hash of direct descendant names (for detecting child name changes)
- LLMD5 hashDirectDescendentNames(const LLUUID& cat_id) const;
+ digest_t hashDirectDescendentNames(const LLUUID& cat_id) const;
// Starting with the object specified, add its descendants to the
// array provided, but do not add the inventory object specified
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp
index 26d7a7a28a..db0751cb89 100644
--- a/indra/newview/llinventoryobserver.cpp
+++ b/indra/newview/llinventoryobserver.cpp
@@ -640,7 +640,7 @@ void LLInventoryCategoriesObserver::changed(U32 mask)
// computed, or (b) a name has changed.
if (!cat_data.mIsNameHashInitialized || (mask & LLInventoryObserver::LABEL))
{
- LLMD5 item_name_hash = gInventory.hashDirectDescendentNames(cat_id);
+ digest_t item_name_hash = gInventory.hashDirectDescendentNames(cat_id);
if (cat_data.mItemNameHash != item_name_hash)
{
cat_data.mIsNameHashInitialized = true;
@@ -701,7 +701,7 @@ bool LLInventoryCategoriesObserver::addCategory(const LLUUID& cat_id, callback_t
{
if(init_name_hash)
{
- LLMD5 item_name_hash = gInventory.hashDirectDescendentNames(cat_id);
+ digest_t item_name_hash = gInventory.hashDirectDescendentNames(cat_id);
mCategoryMap.insert(category_map_value_t(cat_id,LLCategoryData(cat_id, cb, version, current_num_known_descendents,item_name_hash)));
}
else
@@ -727,11 +727,10 @@ LLInventoryCategoriesObserver::LLCategoryData::LLCategoryData(
, mDescendentsCount(num_descendents)
, mIsNameHashInitialized(false)
{
- mItemNameHash.finalize();
}
LLInventoryCategoriesObserver::LLCategoryData::LLCategoryData(
- const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents, LLMD5 name_hash)
+ const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents, const digest_t& name_hash)
: mCatID(cat_id)
, mCallback(cb)
diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h
index 36d8ee3f59..4af8102055 100644
--- a/indra/newview/llinventoryobserver.h
+++ b/indra/newview/llinventoryobserver.h
@@ -28,7 +28,6 @@
#define LL_LLINVENTORYOBSERVERS_H
#include "lluuid.h"
-#include "llmd5.h"
#include <string>
#include <vector>
@@ -271,14 +270,15 @@ public:
void removeCategory(const LLUUID& cat_id);
protected:
+ typedef LLUUID digest_t; // To clarify the actual usage of this "UUID"
struct LLCategoryData
{
LLCategoryData(const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents);
- LLCategoryData(const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents, LLMD5 name_hash);
+ LLCategoryData(const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents, const digest_t& name_hash);
callback_t mCallback;
S32 mVersion;
S32 mDescendentsCount;
- LLMD5 mItemNameHash;
+ digest_t mItemNameHash;
bool mIsNameHashInitialized;
LLUUID mCatID;
};
diff --git a/indra/newview/lloutfitobserver.cpp b/indra/newview/lloutfitobserver.cpp
index 5bb69367aa..3ec5bcd9fc 100644
--- a/indra/newview/lloutfitobserver.cpp
+++ b/indra/newview/lloutfitobserver.cpp
@@ -34,7 +34,6 @@
LLOutfitObserver::LLOutfitObserver() :
mCOFLastVersion(LLViewerInventoryCategory::VERSION_UNKNOWN)
{
- mItemNameHash.finalize();
gInventory.addObserver(this);
}
@@ -83,7 +82,7 @@ bool LLOutfitObserver::checkCOF()
return false;
bool cof_changed = false;
- LLMD5 item_name_hash = gInventory.hashDirectDescendentNames(cof);
+ LLUUID item_name_hash = gInventory.hashDirectDescendentNames(cof);
if (item_name_hash != mItemNameHash)
{
cof_changed = true;
diff --git a/indra/newview/lloutfitobserver.h b/indra/newview/lloutfitobserver.h
index 77041db68d..2f136d48e8 100644
--- a/indra/newview/lloutfitobserver.h
+++ b/indra/newview/lloutfitobserver.h
@@ -28,7 +28,6 @@
#define LL_OUTFITOBSERVER_H
#include "llsingleton.h"
-#include "llmd5.h"
/**
* Outfit observer facade that provides simple possibility to subscribe on
@@ -78,7 +77,7 @@ protected:
bool mLastOutfitDirtiness;
- LLMD5 mItemNameHash;
+ LLUUID mItemNameHash;
private:
signal_t mBOFReplaced;
diff --git a/indra/newview/llviewerwearable.h b/indra/newview/llviewerwearable.h
index cc99f6af2f..24b1323b2b 100644
--- a/indra/newview/llviewerwearable.h
+++ b/indra/newview/llviewerwearable.h
@@ -93,7 +93,6 @@ public:
// the wearable was worn. make sure the name of the wearable object matches the LLViewerInventoryItem,
// not the wearable asset itself.
void refreshName();
- /*virtual*/void addToBakedTextureHash(LLMD5& hash) const {}
protected:
LLAssetID mAssetID;