FIRE-34977 - Reduce Sim crossing overhead causing pauses
The purge thread should be the only thread recalculating cache usage. This removes the directory scan from the critial path where it would occasionally trigger due to aligned timers (exacerbated by high rates of region crossing)master
parent
fdf75d8854
commit
0d25562014
|
|
@ -333,11 +333,21 @@ const std::string LLDiskCache::metaDataToFilepath(const LLUUID& id, LLAssetType:
|
||||||
|
|
||||||
const std::string LLDiskCache::getCacheInfo()
|
const std::string LLDiskCache::getCacheInfo()
|
||||||
{
|
{
|
||||||
|
LL_PROFILE_ZONE_SCOPED; // <FS:Beq/> add some instrumentation
|
||||||
std::ostringstream cache_info;
|
std::ostringstream cache_info;
|
||||||
|
|
||||||
F32 max_in_mb = (F32)mMaxSizeBytes / (1024.0f * 1024.0f);
|
F32 max_in_mb = (F32)mMaxSizeBytes / (1024.0f * 1024.0f);
|
||||||
F32 percent_used = ((F32)dirFileSize(sCacheDir) / (F32)mMaxSizeBytes) * 100.0f;
|
// <FS:Beq> stall prevention. We still need to make sure this initialised when called at startup.
|
||||||
|
F32 percent_used;
|
||||||
|
if (mStoredCacheSize > 0)
|
||||||
|
{
|
||||||
|
percent_used = ((F32)mStoredCacheSize / (F32)mMaxSizeBytes) * 100.0f;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
percent_used = ((F32)dirFileSize(sCacheDir) / (F32)mMaxSizeBytes) * 100.0f;
|
||||||
|
}
|
||||||
|
// </FS:Beq>
|
||||||
cache_info << std::fixed;
|
cache_info << std::fixed;
|
||||||
cache_info << std::setprecision(1);
|
cache_info << std::setprecision(1);
|
||||||
cache_info << "Max size " << max_in_mb << " MB ";
|
cache_info << "Max size " << max_in_mb << " MB ";
|
||||||
|
|
|
||||||
|
|
@ -113,10 +113,11 @@ class LLMessageHandlerBridge : public LLHTTPNode
|
||||||
void LLMessageHandlerBridge::post(LLHTTPNode::ResponsePtr response,
|
void LLMessageHandlerBridge::post(LLHTTPNode::ResponsePtr response,
|
||||||
const LLSD& context, const LLSD& input) const
|
const LLSD& context, const LLSD& input) const
|
||||||
{
|
{
|
||||||
|
LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
|
||||||
std::string name = context[CONTEXT_REQUEST][CONTEXT_WILDCARD]["message-name"];
|
std::string name = context[CONTEXT_REQUEST][CONTEXT_WILDCARD]["message-name"];
|
||||||
char* namePtr = LLMessageStringTable::getInstance()->getString(name.c_str());
|
char* namePtr = LLMessageStringTable::getInstance()->getString(name.c_str());
|
||||||
|
|
||||||
LL_DEBUGS() << "Setting mLastSender " << input["sender"].asString() << LL_ENDL;
|
LL_DEBUGS("Messaging") << "Setting mLastSender " << input["sender"].asString() << LL_ENDL;
|
||||||
gMessageSystem->mLastSender = LLHost(input["sender"].asString());
|
gMessageSystem->mLastSender = LLHost(input["sender"].asString());
|
||||||
gMessageSystem->mPacketsIn += 1;
|
gMessageSystem->mPacketsIn += 1;
|
||||||
gMessageSystem->mLLSDMessageReader->setMessage(namePtr, input["body"]);
|
gMessageSystem->mLLSDMessageReader->setMessage(namePtr, input["body"]);
|
||||||
|
|
@ -2050,6 +2051,7 @@ void LLMessageSystem::dispatch(
|
||||||
const std::string& msg_name,
|
const std::string& msg_name,
|
||||||
const LLSD& message)
|
const LLSD& message)
|
||||||
{
|
{
|
||||||
|
LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
|
||||||
LLPointer<LLSimpleResponse> responsep = LLSimpleResponse::create();
|
LLPointer<LLSimpleResponse> responsep = LLSimpleResponse::create();
|
||||||
dispatch(msg_name, message, responsep);
|
dispatch(msg_name, message, responsep);
|
||||||
}
|
}
|
||||||
|
|
@ -2060,6 +2062,7 @@ void LLMessageSystem::dispatch(
|
||||||
const LLSD& message,
|
const LLSD& message,
|
||||||
LLHTTPNode::ResponsePtr responsep)
|
LLHTTPNode::ResponsePtr responsep)
|
||||||
{
|
{
|
||||||
|
LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
|
||||||
if ((gMessageSystem->mMessageTemplates.find
|
if ((gMessageSystem->mMessageTemplates.find
|
||||||
(LLMessageStringTable::getInstance()->getString(msg_name.c_str())) ==
|
(LLMessageStringTable::getInstance()->getString(msg_name.c_str())) ==
|
||||||
gMessageSystem->mMessageTemplates.end()) &&
|
gMessageSystem->mMessageTemplates.end()) &&
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,7 @@ std::string BugSplatAttributes::to_xml_token(const std::string& input)
|
||||||
|
|
||||||
bool BugSplatAttributes::writeToFile(const std::string& file_path)
|
bool BugSplatAttributes::writeToFile(const std::string& file_path)
|
||||||
{
|
{
|
||||||
|
LL_PROFILE_ZONE_SCOPED_CATEGORY_LOGGING;
|
||||||
std::lock_guard<std::mutex> lock(mMutex);
|
std::lock_guard<std::mutex> lock(mMutex);
|
||||||
|
|
||||||
// Write to a temporary file first
|
// Write to a temporary file first
|
||||||
|
|
|
||||||
|
|
@ -3795,6 +3795,7 @@ bool LLAppViewer::waitForUpdater()
|
||||||
|
|
||||||
void LLAppViewer::writeDebugInfo(bool isStatic)
|
void LLAppViewer::writeDebugInfo(bool isStatic)
|
||||||
{
|
{
|
||||||
|
LL_PROFILE_ZONE_SCOPED_CATEGORY_LOGGING; // <FS:Beq/> improve instrumentation
|
||||||
#if LL_WINDOWS && LL_BUGSPLAT
|
#if LL_WINDOWS && LL_BUGSPLAT
|
||||||
// <FS:Beq> Improve Bugsplat tracking by using attributes for certain static data items.
|
// <FS:Beq> Improve Bugsplat tracking by using attributes for certain static data items.
|
||||||
const LLSD& info = getViewerInfo();
|
const LLSD& info = getViewerInfo();
|
||||||
|
|
@ -3823,6 +3824,7 @@ void LLAppViewer::writeDebugInfo(bool isStatic)
|
||||||
|
|
||||||
LLSD LLAppViewer::getViewerInfo() const
|
LLSD LLAppViewer::getViewerInfo() const
|
||||||
{
|
{
|
||||||
|
LL_PROFILE_ZONE_SCOPED_CATEGORY_LOGGING; // <FS:Beq/> improve instrumentation
|
||||||
// The point of having one method build an LLSD info block and the other
|
// The point of having one method build an LLSD info block and the other
|
||||||
// construct the user-visible About string is to ensure that the same info
|
// construct the user-visible About string is to ensure that the same info
|
||||||
// is available to a getInfo() caller as to the user opening
|
// is available to a getInfo() caller as to the user opening
|
||||||
|
|
@ -4135,6 +4137,7 @@ LLSD LLAppViewer::getViewerInfo() const
|
||||||
// info["DISK_CACHE_INFO"] = LLDiskCache::getInstance()->getCacheInfo();
|
// info["DISK_CACHE_INFO"] = LLDiskCache::getInstance()->getCacheInfo();
|
||||||
if (auto cache = LLDiskCache::getInstance(); cache)
|
if (auto cache = LLDiskCache::getInstance(); cache)
|
||||||
{
|
{
|
||||||
|
LL_PROFILE_ZONE_NAMED("gvi-getCacheInfo"); // <FS:Beq/> improve instrumentation
|
||||||
info["DISK_CACHE_INFO"] = cache->getCacheInfo();
|
info["DISK_CACHE_INFO"] = cache->getCacheInfo();
|
||||||
}
|
}
|
||||||
// </FS:Beq>
|
// </FS:Beq>
|
||||||
|
|
|
||||||
|
|
@ -644,11 +644,13 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
|
||||||
// <FS:Beq> Use the Attributes API on Windows to enhance crash metadata
|
// <FS:Beq> Use the Attributes API on Windows to enhance crash metadata
|
||||||
void LLAppViewerWin32::bugsplatAddStaticAttributes(const LLSD& info)
|
void LLAppViewerWin32::bugsplatAddStaticAttributes(const LLSD& info)
|
||||||
{
|
{
|
||||||
|
LL_PROFILE_ZONE_SCOPED_CATEGORY_LOGGING;
|
||||||
#ifdef LL_BUGSPLAT
|
#ifdef LL_BUGSPLAT
|
||||||
auto& bugSplatMap = BugSplatAttributes::instance();
|
auto& bugSplatMap = BugSplatAttributes::instance();
|
||||||
static bool write_once_after_startup = false;
|
static bool write_once_after_startup = false;
|
||||||
if (!write_once_after_startup )
|
if (!write_once_after_startup )
|
||||||
{
|
{
|
||||||
|
LL_PROFILE_ZONE_NAMED("bs-st-att-once")
|
||||||
// Only write the attributes that are fixed once after we've started.
|
// Only write the attributes that are fixed once after we've started.
|
||||||
// note we might update them more than once and some/many may be empty during startup as we want to catch early crashes
|
// note we might update them more than once and some/many may be empty during startup as we want to catch early crashes
|
||||||
// once we're started we can assume they don't change for this run.
|
// once we're started we can assume they don't change for this run.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue