diff options
author | ruslantproductengine <ruslantproductengine@lindenlab.com> | 2015-10-21 18:47:24 +0300 |
---|---|---|
committer | ruslantproductengine <ruslantproductengine@lindenlab.com> | 2015-10-21 18:47:24 +0300 |
commit | dc2cb70e81ce3ce7fbf6b50c07193a5be09d1042 (patch) | |
tree | 45ca57580344bae699c367e58c09b1015f835db6 /indra | |
parent | 35626b1511e90a271f757d3373a7d64ef66c2eb7 (diff) |
MAINT-4360 FIXED (Setting LogTextureDownloadsToSimulator causes a viewer crash)
The fix in fllowing:
LLTextureFetch has object LLTextureInfo which is has Recorder object.
The recorder object activate (Recorder::handleStart()) self AccumulatorBufferGroup
(Recorder::mBuffers into the current (LLTrace::get_thread_recorder()) ThreadRecorder object
which created (as I understand) one per thread, and time to time send accumulated data to the master ThreadRecorder.
The problem is that LLTextureFetch also can uses from the main thread.
I decide add parameter to CTOR LLTextureInfo(bool postponeStartRecoreder) -
if it false the recorder start immediatly in LLTextureInfo CTOR body, if true we need to start it manually.
Also I add another one LLTextureInfo in LLTextureFetch::mTextureInfoMainThread which is intended
for accumulate data from the main thread.
The postponed Recorder started/stoped from LLTextureFetch::startThread()/endThread().
Diffstat (limited to 'indra')
-rwxr-xr-x | indra/newview/lltexturefetch.cpp | 10 | ||||
-rwxr-xr-x | indra/newview/lltexturefetch.h | 1 | ||||
-rwxr-xr-x | indra/newview/lltextureinfo.cpp | 41 | ||||
-rwxr-xr-x | indra/newview/lltextureinfo.h | 4 |
4 files changed, 32 insertions, 24 deletions
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index fab4203ec3..17b273f316 100755 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -2522,7 +2522,8 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image mFetchDebugger(NULL), mFetchSource(LLTextureFetch::FROM_ALL), mOriginFetchSource(LLTextureFetch::FROM_ALL), - mFetcherLocked(FALSE) + mFetcherLocked(FALSE), + mTextureInfoMainThread(false) { mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS"); mTextureInfo.setUpLogging(gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog"), gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"), U32Bytes(gSavedSettings.getU32("TextureLoggingThreshold"))); @@ -3128,6 +3129,7 @@ void LLTextureFetch::shutDownImageDecodeThread() // Threads: Ttf void LLTextureFetch::startThread() { + mTextureInfo.startRecording(); } // Threads: Ttf @@ -3138,6 +3140,8 @@ void LLTextureFetch::endThread() << ", ResWaits: " << mTotalResourceWaitCount << ", TotalHTTPReq: " << getTotalNumHTTPRequests() << LL_ENDL; + + mTextureInfo.stopRecording(); } // Threads: Ttf @@ -3541,8 +3545,8 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1 if (log_to_viewer_log || log_to_sim) { U64Microseconds timeNow = LLTimer::getTotalTime(); - mTextureInfo.setRequestSize(id, worker->mFileSize); - mTextureInfo.setRequestCompleteTimeAndLog(id, timeNow); + mTextureInfoMainThread.setRequestSize(id, worker->mFileSize); + mTextureInfoMainThread.setRequestCompleteTimeAndLog(id, timeNow); } } worker->unlockWorkMutex(); // -Mw diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h index 27779a31e0..a2658ecd85 100755 --- a/indra/newview/lltexturefetch.h +++ b/indra/newview/lltexturefetch.h @@ -332,6 +332,7 @@ private: F32 mTextureBandwidth; // <none> F32 mMaxBandwidth; // Mfnq LLTextureInfo mTextureInfo; + LLTextureInfo mTextureInfoMainThread; // XXX possible delete U32Bits mHTTPTextureBits; // Mfnq diff --git a/indra/newview/lltextureinfo.cpp b/indra/newview/lltextureinfo.cpp index 59d692b287..473d8ce709 100755 --- a/indra/newview/lltextureinfo.cpp +++ b/indra/newview/lltextureinfo.cpp @@ -36,14 +36,16 @@ static LLTrace::CountStatHandle<S32> sTextureDownloadsCompleted("texture_downloa static LLTrace::CountStatHandle<S32Bytes > sTextureDataDownloaded("texture_data_downloaded", "amount of texture data downloaded"); static LLTrace::CountStatHandle<U32Milliseconds > sTexureDownloadTime("texture_download_time", "amount of time spent fetching textures"); -LLTextureInfo::LLTextureInfo() : +LLTextureInfo::LLTextureInfo(bool postponeStartRecoreder) : mLogTextureDownloadsToViewerLog(false), mLogTextureDownloadsToSimulator(false), mTextureDownloadProtocol("NONE"), mTextureLogThreshold(LLUnits::Kilobytes::fromValue(100)) { - mTextures.clear(); - mRecording.start(); + if (!postponeStartRecoreder) + { + startRecording(); + } } void LLTextureInfo::setUpLogging(bool writeToViewerLog, bool sendToSim, U32Bytes textureLogThreshold) @@ -78,15 +80,7 @@ U32 LLTextureInfo::getTextureInfoMapSize() bool LLTextureInfo::has(const LLUUID& id) { - std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); - if (iterator == mTextures.end()) - { - return false; - } - else - { - return true; - } + return mTextures.end() != mTextures.find(id); } void LLTextureInfo::setRequestStartTime(const LLUUID& id, U64 startTime) @@ -192,15 +186,12 @@ void LLTextureInfo::setRequestCompleteTimeAndLog(const LLUUID& id, U64Microsecon LLSD LLTextureInfo::getAverages() { LLSD averagedTextureData; - S32 averageDownloadRate; - U32Milliseconds download_time = mRecording.getSum(sTexureDownloadTime); - if(download_time == (U32Milliseconds)0) - { - averageDownloadRate = 0; - } - else + S32 averageDownloadRate = 0; + unsigned int download_time = mRecording.getSum(sTexureDownloadTime).valueInUnits<LLUnits::Seconds>(); + + if (0 != download_time) { - averageDownloadRate = mRecording.getSum(sTextureDataDownloaded).valueInUnits<LLUnits::Bits>() / download_time.valueInUnits<LLUnits::Seconds>(); + averageDownloadRate = mRecording.getSum(sTextureDataDownloaded).valueInUnits<LLUnits::Bits>() / download_time; } averagedTextureData["bits_per_second"] = averageDownloadRate; @@ -212,6 +203,16 @@ LLSD LLTextureInfo::getAverages() return averagedTextureData; } +void LLTextureInfo::startRecording() +{ + mRecording.start(); +} + +void LLTextureInfo::stopRecording() +{ + mRecording.stop(); +} + void LLTextureInfo::resetTextureStatistics() { mRecording.restart(); diff --git a/indra/newview/lltextureinfo.h b/indra/newview/lltextureinfo.h index 176f2cbb74..03721bdd73 100755 --- a/indra/newview/lltextureinfo.h +++ b/indra/newview/lltextureinfo.h @@ -35,7 +35,7 @@ class LLTextureInfo { public: - LLTextureInfo(); + LLTextureInfo(bool postponeStartRecoreder = true); ~LLTextureInfo(); void setUpLogging(bool writeToViewerLog, bool sendToSim, U32Bytes textureLogThreshold); @@ -53,6 +53,8 @@ public: void resetTextureStatistics(); U32 getTextureInfoMapSize(); LLSD getAverages(); + void startRecording(); + void stopRecording(); private: void addRequest(const LLUUID& id); |