diff options
Diffstat (limited to 'indra/newview/lltextureinfo.cpp')
-rw-r--r-- | indra/newview/lltextureinfo.cpp | 428 |
1 files changed, 214 insertions, 214 deletions
diff --git a/indra/newview/lltextureinfo.cpp b/indra/newview/lltextureinfo.cpp index e79bb62a52..e3c3864025 100644 --- a/indra/newview/lltextureinfo.cpp +++ b/indra/newview/lltextureinfo.cpp @@ -1,25 +1,25 @@ -/** +/** * @file lltextureinfo.cpp * @brief Object which handles local texture info * * $LicenseInfo:firstyear=2000&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -46,291 +46,291 @@ static LLTrace::CountStatHandle<S32Bytes > sTextureDataDownloaded("texture_data_ static LLTrace::CountStatHandle<U32Milliseconds > sTexureDownloadTime("texture_download_time", "amount of time spent fetching textures"); LLTextureInfo::LLTextureInfo(bool postponeStartRecoreder) : - mLoggingEnabled(false), - mTextureDownloadProtocol("NONE") + mLoggingEnabled(false), + mTextureDownloadProtocol("NONE") { - if (!postponeStartRecoreder) - { - startRecording(); - } + if (!postponeStartRecoreder) + { + startRecording(); + } } void LLTextureInfo::setLogging(bool log_info) { - mLoggingEnabled = log_info; + mLoggingEnabled = log_info; } LLTextureInfo::~LLTextureInfo() { - std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator; - for (iterator = mTextures.begin(); iterator != mTextures.end(); iterator++) - { - LLTextureInfoDetails *info = (*iterator).second; - delete info; - } - - mTextures.clear(); + std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator; + for (iterator = mTextures.begin(); iterator != mTextures.end(); iterator++) + { + LLTextureInfoDetails *info = (*iterator).second; + delete info; + } + + mTextures.clear(); } void LLTextureInfo::addRequest(const LLUUID& id) { - LLTextureInfoDetails *info = new LLTextureInfoDetails(); - mTextures[id] = info; + LLTextureInfoDetails *info = new LLTextureInfoDetails(); + mTextures[id] = info; } U32 LLTextureInfo::getTextureInfoMapSize() { - return mTextures.size(); + return mTextures.size(); } bool LLTextureInfo::has(const LLUUID& id) { - return mTextures.end() != mTextures.find(id); + return mTextures.end() != mTextures.find(id); } void LLTextureInfo::setRequestStartTime(const LLUUID& id, U64 startTime) { - if (!has(id)) - { - addRequest(id); - } - mTextures[id]->mStartTime = (U64Microseconds)startTime; - add(sTextureDownloadsStarted, 1); + if (!has(id)) + { + addRequest(id); + } + mTextures[id]->mStartTime = (U64Microseconds)startTime; + add(sTextureDownloadsStarted, 1); } void LLTextureInfo::setRequestSize(const LLUUID& id, U32 size) { - if (!has(id)) - { - addRequest(id); - } - mTextures[id]->mSize = (U32Bytes)size; + if (!has(id)) + { + addRequest(id); + } + mTextures[id]->mSize = (U32Bytes)size; } void LLTextureInfo::setRequestOffset(const LLUUID& id, U32 offset) { - if (!has(id)) - { - addRequest(id); - } - mTextures[id]->mOffset = offset; + if (!has(id)) + { + addRequest(id); + } + mTextures[id]->mOffset = offset; } void LLTextureInfo::setRequestType(const LLUUID& id, LLTextureInfoDetails::LLRequestType type) { - if (!has(id)) - { - addRequest(id); - } - mTextures[id]->mType = type; + if (!has(id)) + { + addRequest(id); + } + mTextures[id]->mType = type; } void LLTextureInfo::setRequestCompleteTimeAndLog(const LLUUID& id, U64Microseconds completeTime) { - if (!has(id)) - { - addRequest(id); - } - - LLTextureInfoDetails& details = *mTextures[id]; - - details.mCompleteTime = completeTime; - - std::string protocol = "NONE"; - switch(details.mType) - { - case LLTextureInfoDetails::REQUEST_TYPE_HTTP: - protocol = "HTTP"; - break; - - case LLTextureInfoDetails::REQUEST_TYPE_UDP: - protocol = "UDP"; - break; - - case LLTextureInfoDetails::REQUEST_TYPE_NONE: - default: - break; - } - - if (mLoggingEnabled) - { - static LLCachedControl<bool> log_to_viewer_log(gSavedSettings, "LogTextureDownloadsToViewerLog", false); - static LLCachedControl<bool> log_to_simulator(gSavedSettings, "LogTextureDownloadsToSimulator", false); - static LLCachedControl<U32> texture_log_threshold(gSavedSettings, "TextureLoggingThreshold", 1); - - if (log_to_viewer_log) - { - LL_INFOS() << "texture=" << id - << " start=" << details.mStartTime - << " end=" << details.mCompleteTime - << " size=" << details.mSize - << " offset=" << details.mOffset - << " length=" << U32Milliseconds(details.mCompleteTime - details.mStartTime) - << " protocol=" << protocol - << LL_ENDL; - } - - if(log_to_simulator) - { - add(sTextureDataDownloaded, details.mSize); - add(sTexureDownloadTime, details.mCompleteTime - details.mStartTime); - add(sTextureDownloadsCompleted, 1); - mTextureDownloadProtocol = protocol; - if (mRecording.getSum(sTextureDataDownloaded) >= U32Bytes(texture_log_threshold)) - { - LLSD texture_data; - std::stringstream startTime; - startTime << mCurrentStatsBundleStartTime; - texture_data["start_time"] = startTime.str(); - std::stringstream endTime; - endTime << completeTime; - texture_data["end_time"] = endTime.str(); - texture_data["averages"] = getAverages(); - - // Texture cache - LLSD texture_cache; - U32 cache_read = 0, cache_write = 0, res_wait = 0; - F64 cache_hit_rate = 0; - LLAppViewer::getTextureFetch()->getStateStats(&cache_read, &cache_write, &res_wait); - if (cache_read > 0 || cache_write > 0) - { - cache_hit_rate = cache_read / (cache_read + cache_write); - } - texture_cache["cache_read"] = LLSD::Integer(cache_read); - texture_cache["cache_write"] = LLSD::Integer(cache_write); - texture_cache["hit_rate"] = LLSD::Real(cache_hit_rate); - texture_cache["entries"] = LLSD::Integer(LLAppViewer::getTextureCache()->getEntries()); - texture_cache["space_max"] = ll_sd_from_U64((U64)LLAppViewer::getTextureCache()->getMaxUsage().value()); // bytes - texture_cache["space_used"] = ll_sd_from_U64((U64)LLAppViewer::getTextureCache()->getUsage().value()); // bytes - texture_data["texture_cache"] = texture_cache; - - // VO and mesh cache - LLSD object_cache; - object_cache["vo_entries_max"] = LLSD::Integer(LLVOCache::getInstance()->getCacheEntriesMax()); - object_cache["vo_entries_curent"] = LLSD::Integer(LLVOCache::getInstance()->getCacheEntries()); - object_cache["vo_active_entries"] = LLSD::Integer(LLWorld::getInstance()->getNumOfActiveCachedObjects()); - U64 region_hit_count = gAgent.getRegion() != NULL ? gAgent.getRegion()->getRegionCacheHitCount() : 0; - U64 region_miss_count = gAgent.getRegion() != NULL ? gAgent.getRegion()->getRegionCacheMissCount() : 0; - F64 region_vocache_hit_rate = 0; - if (region_hit_count > 0 || region_miss_count > 0) - { - region_vocache_hit_rate = region_hit_count / (region_hit_count + region_miss_count); - } - object_cache["vo_region_hitcount"] = ll_sd_from_U64(region_hit_count); - object_cache["vo_region_misscount"] = ll_sd_from_U64(region_miss_count); - object_cache["vo_region_hitrate"] = LLSD::Real(region_vocache_hit_rate); - object_cache["mesh_reads"] = LLSD::Integer(LLMeshRepository::sCacheReads); - object_cache["mesh_writes"] = LLSD::Integer(LLMeshRepository::sCacheWrites); - texture_data["object_cache"] = object_cache; - - send_texture_stats_to_sim(texture_data); - resetTextureStatistics(); - } - } - } - - mTextures.erase(id); + if (!has(id)) + { + addRequest(id); + } + + LLTextureInfoDetails& details = *mTextures[id]; + + details.mCompleteTime = completeTime; + + std::string protocol = "NONE"; + switch(details.mType) + { + case LLTextureInfoDetails::REQUEST_TYPE_HTTP: + protocol = "HTTP"; + break; + + case LLTextureInfoDetails::REQUEST_TYPE_UDP: + protocol = "UDP"; + break; + + case LLTextureInfoDetails::REQUEST_TYPE_NONE: + default: + break; + } + + if (mLoggingEnabled) + { + static LLCachedControl<bool> log_to_viewer_log(gSavedSettings, "LogTextureDownloadsToViewerLog", false); + static LLCachedControl<bool> log_to_simulator(gSavedSettings, "LogTextureDownloadsToSimulator", false); + static LLCachedControl<U32> texture_log_threshold(gSavedSettings, "TextureLoggingThreshold", 1); + + if (log_to_viewer_log) + { + LL_INFOS() << "texture=" << id + << " start=" << details.mStartTime + << " end=" << details.mCompleteTime + << " size=" << details.mSize + << " offset=" << details.mOffset + << " length=" << U32Milliseconds(details.mCompleteTime - details.mStartTime) + << " protocol=" << protocol + << LL_ENDL; + } + + if(log_to_simulator) + { + add(sTextureDataDownloaded, details.mSize); + add(sTexureDownloadTime, details.mCompleteTime - details.mStartTime); + add(sTextureDownloadsCompleted, 1); + mTextureDownloadProtocol = protocol; + if (mRecording.getSum(sTextureDataDownloaded) >= U32Bytes(texture_log_threshold)) + { + LLSD texture_data; + std::stringstream startTime; + startTime << mCurrentStatsBundleStartTime; + texture_data["start_time"] = startTime.str(); + std::stringstream endTime; + endTime << completeTime; + texture_data["end_time"] = endTime.str(); + texture_data["averages"] = getAverages(); + + // Texture cache + LLSD texture_cache; + U32 cache_read = 0, cache_write = 0, res_wait = 0; + F64 cache_hit_rate = 0; + LLAppViewer::getTextureFetch()->getStateStats(&cache_read, &cache_write, &res_wait); + if (cache_read > 0 || cache_write > 0) + { + cache_hit_rate = cache_read / (cache_read + cache_write); + } + texture_cache["cache_read"] = LLSD::Integer(cache_read); + texture_cache["cache_write"] = LLSD::Integer(cache_write); + texture_cache["hit_rate"] = LLSD::Real(cache_hit_rate); + texture_cache["entries"] = LLSD::Integer(LLAppViewer::getTextureCache()->getEntries()); + texture_cache["space_max"] = ll_sd_from_U64((U64)LLAppViewer::getTextureCache()->getMaxUsage().value()); // bytes + texture_cache["space_used"] = ll_sd_from_U64((U64)LLAppViewer::getTextureCache()->getUsage().value()); // bytes + texture_data["texture_cache"] = texture_cache; + + // VO and mesh cache + LLSD object_cache; + object_cache["vo_entries_max"] = LLSD::Integer(LLVOCache::getInstance()->getCacheEntriesMax()); + object_cache["vo_entries_curent"] = LLSD::Integer(LLVOCache::getInstance()->getCacheEntries()); + object_cache["vo_active_entries"] = LLSD::Integer(LLWorld::getInstance()->getNumOfActiveCachedObjects()); + U64 region_hit_count = gAgent.getRegion() != NULL ? gAgent.getRegion()->getRegionCacheHitCount() : 0; + U64 region_miss_count = gAgent.getRegion() != NULL ? gAgent.getRegion()->getRegionCacheMissCount() : 0; + F64 region_vocache_hit_rate = 0; + if (region_hit_count > 0 || region_miss_count > 0) + { + region_vocache_hit_rate = region_hit_count / (region_hit_count + region_miss_count); + } + object_cache["vo_region_hitcount"] = ll_sd_from_U64(region_hit_count); + object_cache["vo_region_misscount"] = ll_sd_from_U64(region_miss_count); + object_cache["vo_region_hitrate"] = LLSD::Real(region_vocache_hit_rate); + object_cache["mesh_reads"] = LLSD::Integer(LLMeshRepository::sCacheReads); + object_cache["mesh_writes"] = LLSD::Integer(LLMeshRepository::sCacheWrites); + texture_data["object_cache"] = object_cache; + + send_texture_stats_to_sim(texture_data); + resetTextureStatistics(); + } + } + } + + mTextures.erase(id); } LLSD LLTextureInfo::getAverages() { - LLSD averagedTextureData; - 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; - } - - averagedTextureData["bits_per_second"] = averageDownloadRate; - averagedTextureData["bytes_downloaded"] = mRecording.getSum(sTextureDataDownloaded).valueInUnits<LLUnits::Bytes>(); - averagedTextureData["texture_downloads_started"] = mRecording.getSum(sTextureDownloadsStarted); - averagedTextureData["texture_downloads_completed"] = mRecording.getSum(sTextureDownloadsCompleted); - averagedTextureData["transport"] = mTextureDownloadProtocol; - - return averagedTextureData; + LLSD averagedTextureData; + 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; + } + + averagedTextureData["bits_per_second"] = averageDownloadRate; + averagedTextureData["bytes_downloaded"] = mRecording.getSum(sTextureDataDownloaded).valueInUnits<LLUnits::Bytes>(); + averagedTextureData["texture_downloads_started"] = mRecording.getSum(sTextureDownloadsStarted); + averagedTextureData["texture_downloads_completed"] = mRecording.getSum(sTextureDownloadsCompleted); + averagedTextureData["transport"] = mTextureDownloadProtocol; + + return averagedTextureData; } void LLTextureInfo::startRecording() { - mRecording.start(); + mRecording.start(); } void LLTextureInfo::stopRecording() { - mRecording.stop(); + mRecording.stop(); } void LLTextureInfo::resetTextureStatistics() { - mRecording.restart(); - mTextureDownloadProtocol = "NONE"; - mCurrentStatsBundleStartTime = LLTimer::getTotalTime(); + mRecording.restart(); + mTextureDownloadProtocol = "NONE"; + mCurrentStatsBundleStartTime = LLTimer::getTotalTime(); } U32Microseconds LLTextureInfo::getRequestStartTime(const LLUUID& id) { - if (!has(id)) - { - return U32Microseconds(0); - } - else - { - std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); - return (*iterator).second->mStartTime; - } + if (!has(id)) + { + return U32Microseconds(0); + } + else + { + std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); + return (*iterator).second->mStartTime; + } } U32Bytes LLTextureInfo::getRequestSize(const LLUUID& id) { - if (!has(id)) - { - return U32Bytes(0); - } - else - { - std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); - return (*iterator).second->mSize; - } + if (!has(id)) + { + return U32Bytes(0); + } + else + { + std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); + return (*iterator).second->mSize; + } } U32 LLTextureInfo::getRequestOffset(const LLUUID& id) { - if (!has(id)) - { - return 0; - } - else - { - std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); - return (*iterator).second->mOffset; - } + if (!has(id)) + { + return 0; + } + else + { + std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); + return (*iterator).second->mOffset; + } } LLTextureInfoDetails::LLRequestType LLTextureInfo::getRequestType(const LLUUID& id) { - if (!has(id)) - { - return LLTextureInfoDetails::REQUEST_TYPE_NONE; - } - else - { - std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); - return (*iterator).second->mType; - } + if (!has(id)) + { + return LLTextureInfoDetails::REQUEST_TYPE_NONE; + } + else + { + std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); + return (*iterator).second->mType; + } } U32Microseconds LLTextureInfo::getRequestCompleteTime(const LLUUID& id) { - if (!has(id)) - { - return U32Microseconds(0); - } - else - { - std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); - return (*iterator).second->mCompleteTime; - } + if (!has(id)) + { + return U32Microseconds(0); + } + else + { + std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); + return (*iterator).second->mCompleteTime; + } } |