diff options
-rw-r--r-- | indra/llcommon/llalignedarray.h | 10 | ||||
-rwxr-xr-x | indra/llcommon/llmemory.h | 20 | ||||
-rwxr-xr-x | indra/llcommon/llthread.cpp | 2 | ||||
-rw-r--r-- | indra/llcommon/lltrace.h | 12 | ||||
-rw-r--r-- | indra/llcommon/lltraceaccumulators.h | 4 | ||||
-rwxr-xr-x | indra/llmath/llvolume.cpp | 16 | ||||
-rwxr-xr-x | indra/llrender/llvertexbuffer.cpp | 4 | ||||
-rwxr-xr-x | indra/llvfs/llvfile.cpp | 4 | ||||
-rwxr-xr-x | indra/newview/llvovolume.cpp | 14 | ||||
-rwxr-xr-x | indra/newview/llworld.cpp | 3 | ||||
-rwxr-xr-x | indra/newview/skins/default/xui/en/floater_stats.xml | 5 |
11 files changed, 51 insertions, 43 deletions
diff --git a/indra/llcommon/llalignedarray.h b/indra/llcommon/llalignedarray.h index 6f18bfe25c..b68e9e0f82 100644 --- a/indra/llcommon/llalignedarray.h +++ b/indra/llcommon/llalignedarray.h @@ -60,7 +60,7 @@ LLAlignedArray<T, alignment>::LLAlignedArray() template <class T, U32 alignment> LLAlignedArray<T, alignment>::~LLAlignedArray() { - ll_aligned_free(alignment, mArray); + ll_aligned_free<alignment>(mArray); mArray = NULL; mElementCount = 0; mCapacity = 0; @@ -74,7 +74,7 @@ void LLAlignedArray<T, alignment>::push_back(const T& elem) { mCapacity++; mCapacity *= 2; - T* new_buf = (T*) ll_aligned_malloc(alignment, mCapacity*sizeof(T)); + T* new_buf = (T*) ll_aligned_malloc<alignment>(mCapacity*sizeof(T)); if (mArray) { ll_memcpy_nonaliased_aligned_16((char*)new_buf, (char*)mArray, sizeof(T)*mElementCount); @@ -86,7 +86,7 @@ void LLAlignedArray<T, alignment>::push_back(const T& elem) mArray[mElementCount++] = elem; //delete old array here to prevent error on a.push_back(a[0]) - ll_aligned_free(alignment, old_buf); + ll_aligned_free<alignment>(old_buf); } template <class T, U32 alignment> @@ -95,11 +95,11 @@ void LLAlignedArray<T, alignment>::resize(U32 size) if (mCapacity < size) { mCapacity = size+mCapacity*2; - T* new_buf = mCapacity > 0 ? (T*) ll_aligned_malloc(alignment, mCapacity*sizeof(T)) : NULL; + T* new_buf = mCapacity > 0 ? (T*) ll_aligned_malloc<alignment>(mCapacity*sizeof(T)) : NULL; if (mArray) { ll_memcpy_nonaliased_aligned_16((char*) new_buf, (char*) mArray, sizeof(T)*mElementCount); - ll_aligned_free(alignment, mArray); + ll_aligned_free<alignment>(mArray); } /*for (U32 i = mElementCount; i < mCapacity; ++i) diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h index 5ed4ea7d9e..3de59350db 100755 --- a/indra/llcommon/llmemory.h +++ b/indra/llcommon/llmemory.h @@ -204,37 +204,39 @@ inline void ll_aligned_free_32(void *p) } // general purpose dispatch functions that are forced inline so they can compile down to a single call -LL_FORCE_INLINE void* ll_aligned_malloc(size_t alignment, size_t size) +template<size_t ALIGNMENT> +LL_FORCE_INLINE void* ll_aligned_malloc(size_t size) { - if (LL_DEFAULT_HEAP_ALIGN % alignment == 0) + if (LL_DEFAULT_HEAP_ALIGN % ALIGNMENT == 0) { return malloc(size); } - else if (alignment == 16) + else if (ALIGNMENT == 16) { return ll_aligned_malloc_16(size); } - else if (alignment == 32) + else if (ALIGNMENT == 32) { return ll_aligned_malloc_32(size); } else { - return ll_aligned_malloc_fallback(size, alignment); + return ll_aligned_malloc_fallback(size, ALIGNMENT); } } -LL_FORCE_INLINE void ll_aligned_free(size_t alignment, void* ptr) +template<size_t ALIGNMENT> +LL_FORCE_INLINE void ll_aligned_free(void* ptr) { - if (alignment == LL_DEFAULT_HEAP_ALIGN) + if (ALIGNMENT == LL_DEFAULT_HEAP_ALIGN) { free(ptr); } - else if (alignment == 16) + else if (ALIGNMENT == 16) { ll_aligned_free_16(ptr); } - else if (alignment == 32) + else if (ALIGNMENT == 32) { return ll_aligned_free_32(ptr); } diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index 3f2127762e..cbf78bb363 100755 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -109,7 +109,7 @@ LL_COMMON_API void assert_main_thread() if (LLThread::currentID() != s_thread_id) { LL_WARNS() << "Illegal execution from thread id " << (S32) LLThread::currentID() - << " outside main thread " << (S32) s_thread_id << llendl; + << " outside main thread " << (S32) s_thread_id << LL_ENDL; } } diff --git a/indra/llcommon/lltrace.h b/indra/llcommon/lltrace.h index 325112b9b1..2f4390e4d1 100644 --- a/indra/llcommon/lltrace.h +++ b/indra/llcommon/lltrace.h @@ -371,40 +371,40 @@ public: void* operator new(size_t size) { claim_alloc(sMemStat, size); - return ll_aligned_malloc(ALIGNMENT, size); + return ll_aligned_malloc<ALIGNMENT>(size); } template<int CUSTOM_ALIGNMENT> static void* aligned_new(size_t size) { claim_alloc(sMemStat, size); - return ll_aligned_malloc(CUSTOM_ALIGNMENT, size); + return ll_aligned_malloc<CUSTOM_ALIGNMENT>(size); } void operator delete(void* ptr, size_t size) { disclaim_alloc(sMemStat, size); - ll_aligned_free(ALIGNMENT, ptr); + ll_aligned_free<ALIGNMENT>(ptr); } template<int CUSTOM_ALIGNMENT> static void aligned_delete(void* ptr, size_t size) { disclaim_alloc(sMemStat, size); - ll_aligned_free(CUSTOM_ALIGNMENT, ptr); + ll_aligned_free<CUSTOM_ALIGNMENT>(ptr); } void* operator new [](size_t size) { claim_alloc(sMemStat, size); - return ll_aligned_malloc(ALIGNMENT, size); + return ll_aligned_malloc<ALIGNMENT>(size); } void operator delete[](void* ptr, size_t size) { disclaim_alloc(sMemStat, size); - ll_aligned_free(ALIGNMENT, ptr); + ll_aligned_free<ALIGNMENT>(ptr); } // claim memory associated with other objects/data as our own, adding to our calculated footprint diff --git a/indra/llcommon/lltraceaccumulators.h b/indra/llcommon/lltraceaccumulators.h index 85873d469a..77370629d3 100644 --- a/indra/llcommon/lltraceaccumulators.h +++ b/indra/llcommon/lltraceaccumulators.h @@ -441,12 +441,12 @@ namespace LLTrace // arrays are allocated with 32 byte alignment void *operator new [](size_t size) { - return ll_aligned_malloc(32, size); + return ll_aligned_malloc<32>(size); } void operator delete[](void* ptr, size_t size) { - ll_aligned_free(32, ptr); + ll_aligned_free<32>(ptr); } TimeBlockAccumulator(); diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 699eeb0b89..26d2ae2963 100755 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -4667,7 +4667,7 @@ LLVolumeFace::~LLVolumeFace() void LLVolumeFace::freeData() { - ll_aligned_free(64, mPositions); + ll_aligned_free<64>(mPositions); mPositions = NULL; //normals and texture coordinates are part of the same buffer as mPositions, do not free them separately @@ -5245,7 +5245,7 @@ void LLVolumeFace::cacheOptimize() //allocate space for new buffer S32 num_verts = mNumVertices; S32 size = ((num_verts*sizeof(LLVector2)) + 0xF) & ~0xF; - LLVector4a* pos = (LLVector4a*) ll_aligned_malloc(64, sizeof(LLVector4a)*2*num_verts+size); + LLVector4a* pos = (LLVector4a*) ll_aligned_malloc<64>(sizeof(LLVector4a)*2*num_verts+size); LLVector4a* norm = pos + num_verts; LLVector2* tc = (LLVector2*) (norm + num_verts); @@ -5295,7 +5295,7 @@ void LLVolumeFace::cacheOptimize() mIndices[i] = new_idx[mIndices[i]]; } - ll_aligned_free(64, mPositions); + ll_aligned_free<64>(mPositions); // DO NOT free mNormals and mTexCoords as they are part of mPositions buffer ll_aligned_free_16(mWeights); ll_aligned_free_16(mTangents); @@ -6023,7 +6023,7 @@ void LLVolumeFace::createTangents() void LLVolumeFace::resizeVertices(S32 num_verts) { - ll_aligned_free(64, mPositions); + ll_aligned_free<64>(mPositions); //DO NOT free mNormals and mTexCoords as they are part of mPositions buffer ll_aligned_free_16(mTangents); @@ -6034,7 +6034,7 @@ void LLVolumeFace::resizeVertices(S32 num_verts) //pad texture coordinate block end to allow for QWORD reads S32 size = ((num_verts*sizeof(LLVector2)) + 0xF) & ~0xF; - mPositions = (LLVector4a*) ll_aligned_malloc(64, sizeof(LLVector4a)*2*num_verts+size); + mPositions = (LLVector4a*) ll_aligned_malloc<64>(sizeof(LLVector4a)*2*num_verts+size); mNormals = mPositions+num_verts; mTexCoords = (LLVector2*) (mNormals+num_verts); @@ -6074,7 +6074,7 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con LLVector4a* old_buf = mPositions; - mPositions = (LLVector4a*) ll_aligned_malloc(64, new_size); + mPositions = (LLVector4a*) ll_aligned_malloc<64>(new_size); mNormals = mPositions+new_verts; mTexCoords = (LLVector2*) (mNormals+new_verts); @@ -6090,7 +6090,7 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con //just clear tangents ll_aligned_free_16(mTangents); mTangents = NULL; - ll_aligned_free(64, old_buf); + ll_aligned_free<64>(old_buf); mNumAllocatedVertices = new_verts; @@ -6191,7 +6191,7 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat //allocate new buffer space LLVector4a* old_buf = mPositions; - mPositions = (LLVector4a*) ll_aligned_malloc(64, new_size); + mPositions = (LLVector4a*) ll_aligned_malloc<64>(new_size); mNormals = mPositions + new_count; mTexCoords = (LLVector2*) (mNormals+new_count); diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 2a36a3b96f..3bbbccbad1 100755 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -202,7 +202,7 @@ volatile U8* LLVBOPool::allocate(U32& name, U32 size, bool for_seed) glBufferDataARB(mType, size, 0, mUsage); if (mUsage != GL_DYNAMIC_COPY_ARB) { //data will be provided by application - ret = (U8*) ll_aligned_malloc(64, size); + ret = (U8*) ll_aligned_malloc<64>(size); } } else @@ -310,7 +310,7 @@ void LLVBOPool::cleanup() if (r.mClientData) { - ll_aligned_free(64, (void*) r.mClientData); + ll_aligned_free<64>((void*) r.mClientData); } l.pop_front(); diff --git a/indra/llvfs/llvfile.cpp b/indra/llvfs/llvfile.cpp index 9b57246ea1..add88fe0a3 100755 --- a/indra/llvfs/llvfile.cpp +++ b/indra/llvfs/llvfile.cpp @@ -137,12 +137,12 @@ U8* LLVFile::readFile(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type, S } else { - data = (U8*) ll_aligned_malloc(16, file_size); + data = (U8*) ll_aligned_malloc<16>(file_size); file.read(data, file_size); /* Flawfinder: ignore */ if (file.getLastBytesRead() != (S32)file_size) { - ll_aligned_free(16, data); + ll_aligned_free<16>(data); data = NULL; file_size = 0; } diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index f2d44f65f0..ae18410ed1 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -4439,13 +4439,13 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) const U32 MAX_FACE_COUNT = 4096; - static LLFace** fullbright_faces = (LLFace**) ll_aligned_malloc(64, MAX_FACE_COUNT*sizeof(LLFace*)); - static LLFace** bump_faces = (LLFace**) ll_aligned_malloc(64, MAX_FACE_COUNT*sizeof(LLFace*)); - static LLFace** simple_faces = (LLFace**) ll_aligned_malloc(64, MAX_FACE_COUNT*sizeof(LLFace*)); - static LLFace** norm_faces = (LLFace**) ll_aligned_malloc(64, MAX_FACE_COUNT*sizeof(LLFace*)); - static LLFace** spec_faces = (LLFace**) ll_aligned_malloc(64, MAX_FACE_COUNT*sizeof(LLFace*)); - static LLFace** normspec_faces = (LLFace**) ll_aligned_malloc(64, MAX_FACE_COUNT*sizeof(LLFace*)); - static LLFace** alpha_faces = (LLFace**) ll_aligned_malloc(64, MAX_FACE_COUNT*sizeof(LLFace*)); + static LLFace** fullbright_faces = (LLFace**) ll_aligned_malloc<64>(MAX_FACE_COUNT*sizeof(LLFace*)); + static LLFace** bump_faces = (LLFace**) ll_aligned_malloc<64>(MAX_FACE_COUNT*sizeof(LLFace*)); + static LLFace** simple_faces = (LLFace**) ll_aligned_malloc<64>(MAX_FACE_COUNT*sizeof(LLFace*)); + static LLFace** norm_faces = (LLFace**) ll_aligned_malloc<64>(MAX_FACE_COUNT*sizeof(LLFace*)); + static LLFace** spec_faces = (LLFace**) ll_aligned_malloc<64>(MAX_FACE_COUNT*sizeof(LLFace*)); + static LLFace** normspec_faces = (LLFace**) ll_aligned_malloc<64>(MAX_FACE_COUNT*sizeof(LLFace*)); + static LLFace** alpha_faces = (LLFace**) ll_aligned_malloc<64>(MAX_FACE_COUNT*sizeof(LLFace*)); U32 fullbright_count = 0; U32 bump_count = 0; diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index f283cdb4b8..e4e0a745ce 100755 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -661,6 +661,8 @@ void LLWorld::updateVisibilities() LLViewerCamera::getInstance()->setFar(cur_far_clip); } +static LLTrace::SampleStatHandle<> sNumActiveCachedObjects("numactivecachedobjects", "Number of objects loaded from cache"); + void LLWorld::updateRegions(F32 max_update_time) { if(LLViewerCamera::getInstance()->isChanged()) @@ -682,6 +684,7 @@ void LLWorld::updateRegions(F32 max_update_time) { mNumOfActiveCachedObjects += (*iter)->getNumOfActiveCachedObjects(); } + sample(sNumActiveCachedObjects, mNumOfActiveCachedObjects); } void LLWorld::clearAllVisibleObjects() diff --git a/indra/newview/skins/default/xui/en/floater_stats.xml b/indra/newview/skins/default/xui/en/floater_stats.xml index 6c776907f5..bee570d5d0 100755 --- a/indra/newview/skins/default/xui/en/floater_stats.xml +++ b/indra/newview/skins/default/xui/en/floater_stats.xml @@ -62,7 +62,10 @@ <stat_bar name="objs" label="Total Objects" stat="numobjectsstat"/> - <stat_bar name="newobjs" + <stat_bar name="objs" + label="Cached Objects" + stat="numactivecachedobjects"/> + <stat_bar name="newobjs" label="New Objects" stat="numnewobjectsstat"/> <stat_bar name="object_cache_hits" |