summaryrefslogtreecommitdiff
path: root/indra/newview/llvocache.cpp
diff options
context:
space:
mode:
authorBrad Payne (Vir Linden) <vir@lindenlab.com>2020-09-28 19:51:24 +0100
committerBrad Payne (Vir Linden) <vir@lindenlab.com>2020-09-28 19:51:24 +0100
commit376f690f8fb9253f33bc207dce6e533dff9c8687 (patch)
tree9b5077efe190e91f0c2a309038dca2e48664582c /indra/newview/llvocache.cpp
parent1cba874abf6f955cf52d68c30c3230ec58528057 (diff)
parentbac6652cdcd2d8333df04c3ebd3a6a7b752328b3 (diff)
Merge remote-tracking branch 'origin/master' into DRTVWR-517
Diffstat (limited to 'indra/newview/llvocache.cpp')
-rw-r--r--indra/newview/llvocache.cpp51
1 files changed, 20 insertions, 31 deletions
diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index 07660ca6ac..689eeee0e3 100644
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -347,36 +347,24 @@ void LLVOCacheEntry::dump() const
BOOL LLVOCacheEntry::writeToFile(LLAPRFile* apr_file) const
{
- BOOL success;
- success = check_write(apr_file, (void*)&mLocalID, sizeof(U32));
- if(success)
- {
- success = check_write(apr_file, (void*)&mCRC, sizeof(U32));
- }
- if(success)
- {
- success = check_write(apr_file, (void*)&mHitCount, sizeof(S32));
- }
- if(success)
- {
- success = check_write(apr_file, (void*)&mDupeCount, sizeof(S32));
- }
- if(success)
- {
- success = check_write(apr_file, (void*)&mCRCChangeCount, sizeof(S32));
- }
- if(success)
- {
- S32 size = mDP.getBufferSize();
- success = check_write(apr_file, (void*)&size, sizeof(S32));
-
- if(success)
- {
- success = check_write(apr_file, (void*)mBuffer, size);
- }
- }
-
- return success ;
+ static const S32 data_buffer_size = 6 * sizeof(S32);
+ static U8 data_buffer[data_buffer_size];
+ S32 size = mDP.getBufferSize();
+
+ memcpy(data_buffer, &mLocalID, sizeof(U32));
+ memcpy(data_buffer + sizeof(U32), &mCRC, sizeof(U32));
+ memcpy(data_buffer + (2 * sizeof(U32)), &mHitCount, sizeof(S32));
+ memcpy(data_buffer + (3 * sizeof(U32)), &mDupeCount, sizeof(S32));
+ memcpy(data_buffer + (4 * sizeof(U32)), &mCRCChangeCount, sizeof(S32));
+ memcpy(data_buffer + (5 * sizeof(U32)), &size, sizeof(S32));
+
+ BOOL success = check_write(apr_file, (void*)data_buffer, data_buffer_size);
+ if (success)
+ {
+ success = check_write(apr_file, (void*)mBuffer, size);
+ }
+
+ return success;
}
//static
@@ -1537,7 +1525,8 @@ void LLVOCache::writeToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry:
{
S32 num_entries = cache_entry_map.size() ;
success = check_write(&apr_file, &num_entries, sizeof(S32));
-
+
+ // This can have a lot of entries, so might be better to dump them into buffer first and write in one go.
for (LLVOCacheEntry::vocache_entry_map_t::const_iterator iter = cache_entry_map.begin(); success && iter != cache_entry_map.end(); ++iter)
{
if(!removal_enabled || iter->second->isValid())