Reduce per-frame std::map lookups..

This commit is contained in:
Shyotl
2019-04-16 20:08:10 -05:00
parent 66b929c3fa
commit bee0109e33
3 changed files with 25 additions and 38 deletions

View File

@@ -288,7 +288,8 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe
mPhysicsShapeUnknown(true),
mAttachmentItemID(LLUUID::null),
mLastUpdateType(OUT_UNKNOWN),
mLastUpdateCached(FALSE)
mLastUpdateCached(FALSE),
mExtraParameterList(LLNetworkData::PARAMS_MAX >> 4)
{
if(!is_global)
{
@@ -334,18 +335,6 @@ LLViewerObject::~LLViewerObject()
}
// Delete memory associated with extra parameters.
std::map<U16, ExtraParameter*>::iterator iter;
for (iter = mExtraParameterList.begin(); iter != mExtraParameterList.end(); ++iter)
{
if(iter->second != NULL)
{
// <edit>
// There was a crash here
// </edit>
delete iter->second->data;
delete iter->second;
}
}
mExtraParameterList.clear();
for_each(mNameValuePairs.begin(), mNameValuePairs.end(), DeletePairedPointer()) ;
@@ -1388,10 +1377,11 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
unpackParticleSource(block_num, owner_id);
// Mark all extra parameters not used
std::map<U16, ExtraParameter*>::iterator iter;
std::vector<std::unique_ptr<ExtraParameter> >::iterator iter;
for (iter = mExtraParameterList.begin(); iter != mExtraParameterList.end(); ++iter)
{
iter->second->in_use = FALSE;
if(*iter)
(*iter)->in_use = FALSE;
}
// Unpack extra parameters
@@ -1418,12 +1408,12 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
delete[] buffer;
}
for (iter = mExtraParameterList.begin(); iter != mExtraParameterList.end(); ++iter)
for (size_t i = 0; i < mExtraParameterList.size(); ++i)
{
if (!iter->second->in_use)
if (mExtraParameterList[i] && !mExtraParameterList[i]->in_use)
{
// Send an update message in case it was formerly in use
parameterChanged(iter->first, iter->second->data, FALSE, false);
parameterChanged((i + 1) << 4, mExtraParameterList[i]->data.get(), FALSE, false);
}
}
break;
@@ -1643,10 +1633,11 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
}
// Mark all extra parameters not used
std::map<U16, ExtraParameter*>::iterator iter;
std::vector<std::unique_ptr<ExtraParameter> >::iterator iter;
for (iter = mExtraParameterList.begin(); iter != mExtraParameterList.end(); ++iter)
{
iter->second->in_use = FALSE;
if(*iter)
(*iter)->in_use = FALSE;
}
// Unpack extra params
@@ -1664,12 +1655,12 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
unpackParameterEntry(param_type, &dp2);
}
for (iter = mExtraParameterList.begin(); iter != mExtraParameterList.end(); ++iter)
for (size_t i = 0; i < mExtraParameterList.size(); ++i)
{
if (!iter->second->in_use)
if (mExtraParameterList[i] && !mExtraParameterList[i]->in_use)
{
// Send an update message in case it was formerly in use
parameterChanged(iter->first, iter->second->data, FALSE, false);
parameterChanged((i + 1) << 4, mExtraParameterList[i]->data.get(), FALSE, false);
}
}
@@ -5824,7 +5815,7 @@ bool LLViewerObject::unpackParameterEntry(U16 param_type, LLDataPacker *dp)
{
param->data->unpack(*dp);
param->in_use = TRUE;
parameterChanged(param_type, param->data, TRUE, false);
parameterChanged(param_type, param->data.get(), TRUE, false);
return true;
}
else
@@ -5873,9 +5864,9 @@ LLViewerObject::ExtraParameter* LLViewerObject::createNewParameterEntry(U16 para
if (new_block)
{
ExtraParameter* new_entry = new ExtraParameter;
new_entry->data = new_block;
new_entry->data = decltype(new_entry->data)(new_block);
new_entry->in_use = false; // not in use yet
mExtraParameterList[param_type] = new_entry;
mExtraParameterList[(param_type >> 4) - 1].reset(new_entry);
return new_entry;
}
return NULL;
@@ -5883,12 +5874,7 @@ LLViewerObject::ExtraParameter* LLViewerObject::createNewParameterEntry(U16 para
LLViewerObject::ExtraParameter* LLViewerObject::getExtraParameterEntry(U16 param_type) const
{
std::map<U16, ExtraParameter*>::const_iterator itor = mExtraParameterList.find(param_type);
if (itor != mExtraParameterList.end())
{
return itor->second;
}
return NULL;
return param_type <= LLNetworkData::PARAMS_MAX ? mExtraParameterList[(param_type >> 4) - 1].get() : nullptr;
}
LLViewerObject::ExtraParameter* LLViewerObject::getExtraParameterEntryCreate(U16 param_type)
@@ -5906,7 +5892,7 @@ LLNetworkData* LLViewerObject::getParameterEntry(U16 param_type) const
ExtraParameter* param = getExtraParameterEntry(param_type);
if (param)
{
return param->data;
return param->data.get();
}
else
{
@@ -5938,7 +5924,7 @@ bool LLViewerObject::setParameterEntry(U16 param_type, const LLNetworkData& new_
}
param->in_use = true;
param->data->copy(new_value);
parameterChanged(param_type, param->data, TRUE, local_origin);
parameterChanged(param_type, param->data.get(), TRUE, local_origin);
return true;
}
else
@@ -5956,7 +5942,7 @@ bool LLViewerObject::setParameterEntryInUse(U16 param_type, BOOL in_use, bool lo
if (param && param->in_use != in_use)
{
param->in_use = in_use;
parameterChanged(param_type, param->data, in_use, local_origin);
parameterChanged(param_type, param->data.get(), in_use, local_origin);
return true;
}
return false;
@@ -5967,7 +5953,7 @@ void LLViewerObject::parameterChanged(U16 param_type, bool local_origin)
ExtraParameter* param = getExtraParameterEntry(param_type);
if (param)
{
parameterChanged(param_type, param->data, param->in_use, local_origin);
parameterChanged(param_type, param->data.get(), param->in_use, local_origin);
}
}