#3488 Make mesh_header_map a bit simpler

preparation for further work
master
Andrey Kleshchev 2025-01-29 23:05:35 +02:00
parent 8456572db0
commit 52fb53a4d6
2 changed files with 32 additions and 28 deletions

View File

@ -1373,7 +1373,7 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id, bool can_retry)
mHeaderMutex->lock();
auto header_it = mMeshHeader.find(mesh_id);
mesh_header_map::const_iterator header_it = mMeshHeader.find(mesh_id);
if (header_it == mMeshHeader.end())
{ //we have no header info for this mesh, do nothing
mHeaderMutex->unlock();
@ -1382,11 +1382,11 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id, bool can_retry)
++LLMeshRepository::sMeshRequestCount;
bool ret = true;
U32 header_size = header_it->second.first;
const LLMeshHeader& header = header_it->second;
U32 header_size = header.mHeaderSize;
if (header_size > 0)
{
const LLMeshHeader& header = header_it->second.second;
S32 version = header.mVersion;
S32 offset = header_size + header.mSkinOffset;
@ -1506,12 +1506,12 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)
}
++LLMeshRepository::sMeshRequestCount;
U32 header_size = header_it->second.first;
const auto& header = header_it->second;
U32 header_size = header.mHeaderSize;
bool ret = true;
if (header_size > 0)
{
const auto& header = header_it->second.second;
S32 version = header.mVersion;
S32 offset = header_size + header.mPhysicsConvexOffset;
S32 size = header.mPhysicsConvexSize;
@ -1614,12 +1614,12 @@ bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)
}
++LLMeshRepository::sMeshRequestCount;
U32 header_size = header_it->second.first;
const auto& header = header_it->second;
U32 header_size = header.mHeaderSize;
bool ret = true;
if (header_size > 0)
{
const auto& header = header_it->second.second;
S32 version = header.mVersion;
S32 offset = header_size + header.mPhysicsMeshOffset;
S32 size = header.mPhysicsMeshSize;
@ -1764,7 +1764,7 @@ bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params, bool c
if (size > 0)
{
// *NOTE: if the header size is ever more than 4KB, this will break
U8 buffer[MESH_HEADER_SIZE];
static thread_local U8 buffer[MESH_HEADER_SIZE];
S32 bytes = llmin(size, MESH_HEADER_SIZE);
LLMeshRepository::sCacheBytesRead += bytes;
++LLMeshRepository::sCacheReads;
@ -1834,10 +1834,10 @@ bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod,
++LLMeshRepository::sMeshRequestCount;
bool retval = true;
U32 header_size = header_it->second.first;
const auto& header = header_it->second;
U32 header_size = header.mHeaderSize;
if (header_size > 0)
{
const auto& header = header_it->second.second;
S32 version = header.mVersion;
S32 offset = header_size + header.mLodOffset[lod];
S32 size = header.mLodSize[lod];
@ -1988,7 +1988,8 @@ EMeshProcessingResult LLMeshRepoThread::headerReceived(const LLVolumeParams& mes
// make sure there is at least one lod, function returns -1 and marks as 404 otherwise
else if (LLMeshRepository::getActualMeshLOD(header, 0) >= 0)
{
header_size += stream.tellg();
header.mHeaderSize = stream.tellg();
header_size += header.mHeaderSize;
skin_offset = header.mSkinOffset;
skin_size = header.mSkinSize;
memcpy(lod_offset, header.mLodOffset, sizeof(lod_offset));
@ -2006,7 +2007,7 @@ EMeshProcessingResult LLMeshRepoThread::headerReceived(const LLVolumeParams& mes
{
LLMutexLock lock(mHeaderMutex);
mMeshHeader[mesh_id] = { (U32)header_size, header };
mMeshHeader[mesh_id] = header;
LLMeshRepository::sCacheBytesHeaders += (U32)header_size;
}
@ -3163,9 +3164,11 @@ S32 LLMeshRepoThread::getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lo
if (iter != mMeshHeader.end())
{
auto& header = iter->second.second;
return LLMeshRepository::getActualMeshLOD(header, lod);
auto& header = iter->second;
if (header.mHeaderSize > 0)
{
return LLMeshRepository::getActualMeshLOD(header, lod);
}
}
return lod;
@ -3411,8 +3414,8 @@ void LLMeshHeaderHandler::processData(LLCore::BufferArray * /* body */, S32 /* b
LLMeshRepoThread::mesh_header_map::iterator iter = gMeshRepo.mThread->mMeshHeader.find(mesh_id);
if (iter != gMeshRepo.mThread->mMeshHeader.end())
{
header_bytes = (S32)iter->second.first;
header = iter->second.second;
header = iter->second;
header_bytes = header.mHeaderSize;
}
if (header_bytes > 0
@ -4553,9 +4556,9 @@ bool LLMeshRepoThread::hasPhysicsShapeInHeader(const LLUUID& mesh_id)
{
LLMutexLock lock(mHeaderMutex);
mesh_header_map::iterator iter = mMeshHeader.find(mesh_id);
if (iter != mMeshHeader.end() && iter->second.first > 0)
if (iter != mMeshHeader.end() && iter->second.mHeaderSize > 0)
{
LLMeshHeader &mesh = iter->second.second;
LLMeshHeader &mesh = iter->second;
if (mesh.mPhysicsMeshSize > 0)
{
return true;
@ -4569,9 +4572,9 @@ bool LLMeshRepoThread::hasSkinInfoInHeader(const LLUUID& mesh_id)
{
LLMutexLock lock(mHeaderMutex);
mesh_header_map::iterator iter = mMeshHeader.find(mesh_id);
if (iter != mMeshHeader.end() && iter->second.first > 0)
if (iter != mMeshHeader.end() && iter->second.mHeaderSize > 0)
{
LLMeshHeader& mesh = iter->second.second;
LLMeshHeader& mesh = iter->second;
if (mesh.mSkinOffset >= 0
&& mesh.mSkinSize > 0)
{
@ -4607,9 +4610,9 @@ S32 LLMeshRepository::getMeshSize(const LLUUID& mesh_id, S32 lod)
{
LLMutexLock lock(mThread->mHeaderMutex);
LLMeshRepoThread::mesh_header_map::iterator iter = mThread->mMeshHeader.find(mesh_id);
if (iter != mThread->mMeshHeader.end() && iter->second.first > 0)
if (iter != mThread->mMeshHeader.end() && iter->second.mHeaderSize > 0)
{
const LLMeshHeader& header = iter->second.second;
const LLMeshHeader& header = iter->second;
if (header.m404)
{
@ -4713,9 +4716,9 @@ F32 LLMeshRepository::getStreamingCostLegacy(LLUUID mesh_id, F32 radius, S32* by
{
LLMutexLock lock(mThread->mHeaderMutex);
LLMeshRepoThread::mesh_header_map::iterator iter = mThread->mMeshHeader.find(mesh_id);
if (iter != mThread->mMeshHeader.end() && iter->second.first > 0)
if (iter != mThread->mMeshHeader.end() && iter->second.mHeaderSize > 0)
{
result = getStreamingCostLegacy(iter->second.second, radius, bytes, bytes_visible, lod, unscaled_value);
result = getStreamingCostLegacy(iter->second, radius, bytes, bytes_visible, lod, unscaled_value);
}
}
if (result > 0.f)
@ -5027,9 +5030,9 @@ bool LLMeshRepository::getCostData(LLUUID mesh_id, LLMeshCostData& data)
{
LLMutexLock lock(mThread->mHeaderMutex);
LLMeshRepoThread::mesh_header_map::iterator iter = mThread->mMeshHeader.find(mesh_id);
if (iter != mThread->mMeshHeader.end() && iter->second.first > 0)
if (iter != mThread->mMeshHeader.end() && iter->second.mHeaderSize > 0)
{
LLMeshHeader& header = iter->second.second;
LLMeshHeader& header = iter->second;
bool header_invalid = (header.m404
|| header.mLodSize[0] <= 0

View File

@ -320,6 +320,7 @@ public:
S32 mLodOffset[LLModel::NUM_LODS] = { -1 };
S32 mLodSize[LLModel::NUM_LODS] = { -1 };
S32 mHeaderSize = -1;
bool m404 = false;
};
@ -341,7 +342,7 @@ public:
LLCondition* mSignal;
//map of known mesh headers
typedef boost::unordered_map<LLUUID, std::pair<U32, LLMeshHeader>> mesh_header_map; // pair is header_size and data
typedef boost::unordered_map<LLUUID, LLMeshHeader> mesh_header_map; // pair is header_size and data
mesh_header_map mMeshHeader;
class HeaderRequest : public RequestStats