merge
commit
779e132cbf
|
|
@ -4392,7 +4392,6 @@ void LLAppViewer::idle()
|
|||
// The 5-second interval is nice for this purpose. If the object debug
|
||||
// bit moves or is disabled, please give this a suitable home.
|
||||
LLViewerAssetStatsFF::record_fps_main(gFPSClamped);
|
||||
LLViewerAssetStatsFF::record_avatar_stats();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -502,6 +502,7 @@ private:
|
|||
};
|
||||
static const char* sStateDescs[];
|
||||
e_state mState;
|
||||
void setState(e_state new_state);
|
||||
e_write_to_cache_state mWriteToCacheState;
|
||||
LLTextureFetch* mFetcher;
|
||||
LLPointer<LLImageFormatted> mFormattedImage;
|
||||
|
|
@ -1028,7 +1029,7 @@ void LLTextureFetchWorker::setDesiredDiscard(S32 discard, S32 size)
|
|||
mDesiredSize = llmax(mDesiredSize, TEXTURE_CACHE_ENTRY_SIZE);
|
||||
if ((prioritize && mState == INIT) || mState == DONE)
|
||||
{
|
||||
mState = INIT;
|
||||
setState(INIT);
|
||||
U32 work_priority = mWorkPriority | LLWorkerThread::PRIORITY_HIGH;
|
||||
setPriority(work_priority);
|
||||
}
|
||||
|
|
@ -1092,12 +1093,14 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
{
|
||||
if (mState == INIT || mState == LOAD_FROM_NETWORK || mState == LOAD_FROM_SIMULATOR)
|
||||
{
|
||||
LL_DEBUGS("Texture") << mID << " abort: mImagePriority < F_ALMOST_ZERO" << llendl;
|
||||
return true; // abort
|
||||
}
|
||||
}
|
||||
if(mState > CACHE_POST && !mCanUseNET && !mCanUseHTTP)
|
||||
{
|
||||
//nowhere to get data, abort.
|
||||
LL_WARNS("Texture") << mID << " abort, nowhere to get data" << llendl;
|
||||
return true ;
|
||||
}
|
||||
|
||||
|
|
@ -1140,7 +1143,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
clearPackets(); // TODO: Shouldn't be necessary
|
||||
mCacheReadHandle = LLTextureCache::nullHandle();
|
||||
mCacheWriteHandle = LLTextureCache::nullHandle();
|
||||
mState = LOAD_FROM_TEXTURE_CACHE;
|
||||
setState(LOAD_FROM_TEXTURE_CACHE);
|
||||
mInCache = FALSE;
|
||||
mDesiredSize = llmax(mDesiredSize, TEXTURE_CACHE_ENTRY_SIZE); // min desired size is TEXTURE_CACHE_ENTRY_SIZE
|
||||
LL_DEBUGS("Texture") << mID << ": Priority: " << llformat("%8.0f",mImagePriority)
|
||||
|
|
@ -1157,7 +1160,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
S32 size = mDesiredSize - offset;
|
||||
if (size <= 0)
|
||||
{
|
||||
mState = CACHE_POST;
|
||||
setState(CACHE_POST);
|
||||
return false;
|
||||
}
|
||||
mFileSize = 0;
|
||||
|
|
@ -1175,7 +1178,9 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
offset, size, responder);
|
||||
mCacheReadTimer.reset();
|
||||
}
|
||||
else if ((mUrl.empty()||mFTType==FTT_SERVER_BAKE) && mFetcher->canLoadFromCache())
|
||||
/* SH-3980 - disabling caching of server bakes until we can fix the blurring problems */
|
||||
/* else if ((mUrl.empty()||mFTType==FTT_SERVER_BAKE) && mFetcher->canLoadFromCache()) */
|
||||
else if (mUrl.empty() && mFetcher->canLoadFromCache())
|
||||
{
|
||||
setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it
|
||||
|
||||
|
|
@ -1188,12 +1193,12 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
else if(!mUrl.empty() && mCanUseHTTP)
|
||||
{
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
mState = WAIT_HTTP_RESOURCE;
|
||||
setState(WAIT_HTTP_RESOURCE);
|
||||
}
|
||||
else
|
||||
{
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
mState = LOAD_FROM_NETWORK;
|
||||
setState(LOAD_FROM_NETWORK);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1203,7 +1208,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
if (mFetcher->mTextureCache->readComplete(mCacheReadHandle, false))
|
||||
{
|
||||
mCacheReadHandle = LLTextureCache::nullHandle();
|
||||
mState = CACHE_POST;
|
||||
setState(CACHE_POST);
|
||||
// fall through
|
||||
}
|
||||
else
|
||||
|
|
@ -1211,6 +1216,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
//
|
||||
//This should never happen
|
||||
//
|
||||
LL_DEBUGS("Texture") << mID << " this should never happen" << llendl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -1229,7 +1235,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
// we have enough data, decode it
|
||||
llassert_always(mFormattedImage->getDataSize() > 0);
|
||||
mLoadedDiscard = mDesiredDiscard;
|
||||
mState = DECODE_IMAGE;
|
||||
setState(DECODE_IMAGE);
|
||||
mInCache = TRUE;
|
||||
mWriteToCacheState = NOT_WRITE ;
|
||||
LL_DEBUGS("Texture") << mID << ": Cached. Bytes: " << mFormattedImage->getDataSize()
|
||||
|
|
@ -1242,13 +1248,14 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
if (mUrl.compare(0, 7, "file://") == 0)
|
||||
{
|
||||
// failed to load local file, we're done.
|
||||
LL_WARNS("Texture") << mID << ": abort, failed to load local file " << mUrl << LL_ENDL;
|
||||
return true;
|
||||
}
|
||||
// need more data
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("Texture") << mID << ": Not in Cache" << LL_ENDL;
|
||||
mState = LOAD_FROM_NETWORK;
|
||||
setState(LOAD_FROM_NETWORK);
|
||||
}
|
||||
|
||||
// fall through
|
||||
|
|
@ -1289,13 +1296,15 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
mCanUseHTTP = false;
|
||||
}
|
||||
}
|
||||
#if 0 /* SH-3980 - disabling caching of server bakes until we can fix the blurring problems */
|
||||
if (mFTType == FTT_SERVER_BAKE)
|
||||
{
|
||||
mWriteToCacheState = CAN_WRITE;
|
||||
}
|
||||
#endif
|
||||
if (mCanUseHTTP && !mUrl.empty())
|
||||
{
|
||||
mState = WAIT_HTTP_RESOURCE;
|
||||
setState(WAIT_HTTP_RESOURCE);
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
if(mWriteToCacheState != NOT_WRITE)
|
||||
{
|
||||
|
|
@ -1325,6 +1334,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
//mFetcher->addToNetworkQueue(this);
|
||||
//recordTextureStart(false);
|
||||
//setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
|
||||
|
||||
LL_DEBUGS("Texture") << mID << " does this happen?" << llendl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -1343,10 +1354,11 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
{
|
||||
// processSimulatorPackets() failed
|
||||
// llwarns << "processSimulatorPackets() failed to load buffer" << llendl;
|
||||
LL_WARNS("Texture") << mID << " processSimulatorPackets() failed to load buffer" << llendl;
|
||||
return true; // failed
|
||||
}
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
mState = DECODE_IMAGE;
|
||||
setState(DECODE_IMAGE);
|
||||
mWriteToCacheState = SHOULD_WRITE;
|
||||
recordTextureDone(false);
|
||||
}
|
||||
|
|
@ -1370,14 +1382,14 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
// Otherwise, advance into the HTTP states.
|
||||
if (mFetcher->getHttpWaitersCount() || ! acquireHttpSemaphore())
|
||||
{
|
||||
mState = WAIT_HTTP_RESOURCE2;
|
||||
setState(WAIT_HTTP_RESOURCE2);
|
||||
setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
|
||||
mFetcher->addHttpWaiter(this->mID);
|
||||
++mResourceWaitCount;
|
||||
return false;
|
||||
}
|
||||
|
||||
mState = SEND_HTTP_REQ;
|
||||
setState(SEND_HTTP_REQ);
|
||||
// *NOTE: You must invoke releaseHttpSemaphore() if you transition
|
||||
// to a state other than SEND_HTTP_REQ or WAIT_HTTP_REQ or abort
|
||||
// the request.
|
||||
|
|
@ -1394,6 +1406,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
if (! mCanUseHTTP)
|
||||
{
|
||||
releaseHttpSemaphore();
|
||||
LL_WARNS("Texture") << mID << " abort: SEND_HTTP_REQ but !mCanUseHTTP" << llendl;
|
||||
return true; // abort
|
||||
}
|
||||
|
||||
|
|
@ -1410,13 +1423,14 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
// We already have all the data, just decode it
|
||||
mLoadedDiscard = mFormattedImage->getDiscardLevel();
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
mState = DECODE_IMAGE;
|
||||
setState(DECODE_IMAGE);
|
||||
releaseHttpSemaphore();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
releaseHttpSemaphore();
|
||||
LL_WARNS("Texture") << mID << " SEND_HTTP_REQ abort: cur_size " << cur_size << " <=0" << llendl;
|
||||
return true; // abort.
|
||||
}
|
||||
}
|
||||
|
|
@ -1474,7 +1488,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
mFetcher->addToHTTPQueue(mID);
|
||||
recordTextureStart(true);
|
||||
setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
|
||||
mState = WAIT_HTTP_REQ;
|
||||
setState(WAIT_HTTP_REQ);
|
||||
|
||||
// fall through
|
||||
}
|
||||
|
|
@ -1492,8 +1506,9 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
{
|
||||
if(mWriteToCacheState == NOT_WRITE) //map tiles
|
||||
{
|
||||
mState = DONE;
|
||||
setState(DONE);
|
||||
releaseHttpSemaphore();
|
||||
LL_DEBUGS("Texture") << mID << " abort: WAIT_HTTP_REQ not found" << llendl;
|
||||
return true; // failed, means no map tile on the empty region.
|
||||
}
|
||||
|
||||
|
|
@ -1502,7 +1517,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
// roll back to try UDP
|
||||
if (mCanUseNET)
|
||||
{
|
||||
mState = INIT;
|
||||
setState(INIT);
|
||||
mCanUseHTTP = false;
|
||||
mUrl.clear();
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
|
|
@ -1533,15 +1548,16 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
// Use available data
|
||||
mLoadedDiscard = mFormattedImage->getDiscardLevel();
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
mState = DECODE_IMAGE;
|
||||
setState(DECODE_IMAGE);
|
||||
releaseHttpSemaphore();
|
||||
return false;
|
||||
}
|
||||
|
||||
// Fail harder
|
||||
resetFormattedData();
|
||||
mState = DONE;
|
||||
setState(DONE);
|
||||
releaseHttpSemaphore();
|
||||
LL_WARNS("Texture") << mID << " abort: fail harder" << llendl;
|
||||
return true; // failed
|
||||
}
|
||||
|
||||
|
|
@ -1550,6 +1566,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
// next time the texture is requested, even if the data have already been fetched.
|
||||
if(mWriteToCacheState != NOT_WRITE)
|
||||
{
|
||||
// Why do we want to keep url if NOT_WRITE - is this a proxy for map tiles?
|
||||
mUrl.clear();
|
||||
}
|
||||
|
||||
|
|
@ -1563,7 +1580,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
}
|
||||
|
||||
// abort.
|
||||
mState = DONE;
|
||||
setState(DONE);
|
||||
LL_WARNS("Texture") << mID << " abort: no data received" << llendl;
|
||||
releaseHttpSemaphore();
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1581,7 +1599,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
{
|
||||
LL_WARNS("Texture") << "Partial HTTP response produces break in image data for texture "
|
||||
<< mID << ". Aborting load." << LL_ENDL;
|
||||
mState = DONE;
|
||||
setState(DONE);
|
||||
releaseHttpSemaphore();
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1629,7 +1647,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
mHttpReplyOffset = 0;
|
||||
|
||||
mLoadedDiscard = mRequestedDiscard;
|
||||
mState = DECODE_IMAGE;
|
||||
setState(DECODE_IMAGE);
|
||||
if (mWriteToCacheState != NOT_WRITE)
|
||||
{
|
||||
mWriteToCacheState = SHOULD_WRITE ;
|
||||
|
|
@ -1660,31 +1678,34 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
if (textures_decode_disabled)
|
||||
{
|
||||
// for debug use, don't decode
|
||||
mState = DONE;
|
||||
setState(DONE);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mDesiredDiscard < 0)
|
||||
{
|
||||
// We aborted, don't decode
|
||||
mState = DONE;
|
||||
setState(DONE);
|
||||
LL_DEBUGS("Texture") << mID << " DECODE_IMAGE abort: desired discard " << mDesiredDiscard << "<0" << llendl;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mFormattedImage->getDataSize() <= 0)
|
||||
{
|
||||
//llerrs << "Decode entered with invalid mFormattedImage. ID = " << mID << llendl;
|
||||
llwarns << "Decode entered with invalid mFormattedImage. ID = " << mID << llendl;
|
||||
|
||||
//abort, don't decode
|
||||
mState = DONE;
|
||||
setState(DONE);
|
||||
LL_DEBUGS("Texture") << mID << " DECODE_IMAGE abort: (mFormattedImage->getDataSize() <= 0)" << llendl;
|
||||
return true;
|
||||
}
|
||||
if (mLoadedDiscard < 0)
|
||||
{
|
||||
//llerrs << "Decode entered with invalid mLoadedDiscard. ID = " << mID << llendl;
|
||||
llwarns << "Decode entered with invalid mLoadedDiscard. ID = " << mID << llendl;
|
||||
|
||||
//abort, don't decode
|
||||
mState = DONE;
|
||||
setState(DONE);
|
||||
LL_DEBUGS("Texture") << mID << " DECODE_IMAGE abort: mLoadedDiscard < 0" << llendl;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1694,7 +1715,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
S32 discard = mHaveAllData ? 0 : mLoadedDiscard;
|
||||
U32 image_priority = LLWorkerThread::PRIORITY_NORMAL | mWorkPriority;
|
||||
mDecoded = FALSE;
|
||||
mState = DECODE_IMAGE_UPDATE;
|
||||
setState(DECODE_IMAGE_UPDATE);
|
||||
LL_DEBUGS("Texture") << mID << ": Decoding. Bytes: " << mFormattedImage->getDataSize() << " Discard: " << discard
|
||||
<< " All Data: " << mHaveAllData << LL_ENDL;
|
||||
mDecodeHandle = mFetcher->mImageDecodeThread->decodeImage(mFormattedImage, image_priority, discard, mNeedsAux,
|
||||
|
|
@ -1722,13 +1743,13 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
mFormattedImage = NULL;
|
||||
++mRetryAttempt;
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
mState = INIT;
|
||||
setState(INIT);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// llwarns << "UNABLE TO LOAD TEXTURE: " << mID << " RETRIES: " << mRetryAttempt << llendl;
|
||||
mState = DONE; // failed
|
||||
setState(DONE); // failed
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -1737,7 +1758,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
LL_DEBUGS("Texture") << mID << ": Decoded. Discard: " << mDecodedDiscard
|
||||
<< " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL;
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
mState = WRITE_TO_CACHE;
|
||||
setState(WRITE_TO_CACHE);
|
||||
}
|
||||
// fall through
|
||||
}
|
||||
|
|
@ -1753,7 +1774,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
{
|
||||
// If we're in a local cache or we didn't actually receive any new data,
|
||||
// or we failed to load anything, skip
|
||||
mState = DONE;
|
||||
setState(DONE);
|
||||
return false;
|
||||
}
|
||||
S32 datasize = mFormattedImage->getDataSize();
|
||||
|
|
@ -1772,7 +1793,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it
|
||||
U32 cache_priority = mWorkPriority;
|
||||
mWritten = FALSE;
|
||||
mState = WAIT_ON_WRITE;
|
||||
setState(WAIT_ON_WRITE);
|
||||
++mCacheWriteCount;
|
||||
CacheWriteResponder* responder = new CacheWriteResponder(mFetcher, mID);
|
||||
mCacheWriteHandle = mFetcher->mTextureCache->writeToCache(mID, cache_priority,
|
||||
|
|
@ -1785,7 +1806,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
{
|
||||
if (writeToCacheComplete())
|
||||
{
|
||||
mState = DONE;
|
||||
setState(DONE);
|
||||
// fall through
|
||||
}
|
||||
else
|
||||
|
|
@ -1806,7 +1827,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
if (mDecodedDiscard >= 0 && mDesiredDiscard < mDecodedDiscard)
|
||||
{
|
||||
// More data was requested, return to INIT
|
||||
mState = INIT;
|
||||
setState(INIT);
|
||||
LL_DEBUGS("Texture") << mID << " more data requested, returning to INIT: "
|
||||
<< " mDecodedDiscard " << mDecodedDiscard << ">= 0 && mDesiredDiscard " << mDesiredDiscard
|
||||
<< "<" << " mDecodedDiscard " << mDecodedDiscard << llendl;
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1846,10 +1870,10 @@ void LLTextureFetchWorker::onCompleted(LLCore::HttpHandle handle, LLCore::HttpRe
|
|||
bool partial = false;
|
||||
LLCore::HttpStatus status(response->getStatus());
|
||||
|
||||
lldebugs << "HTTP COMPLETE: " << mID
|
||||
<< " status: " << status.toHex()
|
||||
<< " '" << status.toString() << "'"
|
||||
<< llendl;
|
||||
LL_DEBUGS("Texture") << "HTTP COMPLETE: " << mID
|
||||
<< " status: " << status.toHex()
|
||||
<< " '" << status.toString() << "'"
|
||||
<< llendl;
|
||||
// unsigned int offset(0), length(0), full_length(0);
|
||||
// response->getRange(&offset, &length, &full_length);
|
||||
// llwarns << "HTTP COMPLETE: " << mID << " handle: " << handle
|
||||
|
|
@ -2433,6 +2457,7 @@ bool LLTextureFetch::createRequest(FTType f_type, const std::string& url, const
|
|||
std::string exten = gDirUtilp->getExtension(url);
|
||||
if (!url.empty() && (!exten.empty() && LLImageBase::getCodecFromExtension(exten) != IMG_CODEC_J2C))
|
||||
{
|
||||
LL_DEBUGS("Texture") << "full request for " << id << " exten is not J2C: " << exten << llendl;
|
||||
// Only do partial requests for J2C at the moment
|
||||
desired_size = MAX_IMAGE_DATA_SIZE;
|
||||
desired_discard = 0;
|
||||
|
|
@ -2475,7 +2500,7 @@ bool LLTextureFetch::createRequest(FTType f_type, const std::string& url, const
|
|||
worker->setCanUseHTTP(can_use_http) ;
|
||||
if (!worker->haveWork())
|
||||
{
|
||||
worker->mState = LLTextureFetchWorker::INIT;
|
||||
worker->setState(LLTextureFetchWorker::INIT);
|
||||
worker->unlockWorkMutex(); // -Mw
|
||||
|
||||
worker->addWork(0, LLWorkerThread::PRIORITY_HIGH | worker->mWorkPriority);
|
||||
|
|
@ -2499,7 +2524,7 @@ bool LLTextureFetch::createRequest(FTType f_type, const std::string& url, const
|
|||
worker->unlockWorkMutex(); // -Mw
|
||||
}
|
||||
|
||||
// llinfos << "REQUESTED: " << id << " Discard: " << desired_discard << llendl;
|
||||
LL_DEBUGS("Texture") << "REQUESTED: " << id << " Discard: " << desired_discard << " size " << desired_size << llendl;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -3168,6 +3193,30 @@ bool LLTextureFetchWorker::insertPacket(S32 index, U8* data, S32 size)
|
|||
return true;
|
||||
}
|
||||
|
||||
void LLTextureFetchWorker::setState(e_state new_state)
|
||||
{
|
||||
static const char* e_state_name[] =
|
||||
{
|
||||
"INVALID",
|
||||
"INIT",
|
||||
"LOAD_FROM_TEXTURE_CACHE",
|
||||
"CACHE_POST",
|
||||
"LOAD_FROM_NETWORK",
|
||||
"LOAD_FROM_SIMULATOR",
|
||||
"WAIT_HTTP_RESOURCE",
|
||||
"WAIT_HTTP_RESOURCE2",
|
||||
"SEND_HTTP_REQ",
|
||||
"WAIT_HTTP_REQ",
|
||||
"DECODE_IMAGE",
|
||||
"DECODE_IMAGE_UPDATE",
|
||||
"WRITE_TO_CACHE",
|
||||
"WAIT_ON_WRITE",
|
||||
"DONE"
|
||||
};
|
||||
LL_DEBUGS("Texture") << "id: " << mID << " FTType: " << mFTType << " disc: " << mDesiredDiscard << " sz: " << mDesiredSize << " state: " << e_state_name[mState] << " => " << e_state_name[new_state] << llendl;
|
||||
mState = new_state;
|
||||
}
|
||||
|
||||
// Threads: T*
|
||||
bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8 codec, U16 packets, U32 totalbytes,
|
||||
U16 data_size, U8* data)
|
||||
|
|
@ -3224,7 +3273,7 @@ bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8
|
|||
llassert_always(data_size == FIRST_PACKET_SIZE || data_size == worker->mFileSize);
|
||||
res = worker->insertPacket(0, data, data_size);
|
||||
worker->setPriority(LLWorkerThread::PRIORITY_HIGH | worker->mWorkPriority);
|
||||
worker->mState = LLTextureFetchWorker::LOAD_FROM_SIMULATOR;
|
||||
worker->setState(LLTextureFetchWorker::LOAD_FROM_SIMULATOR);
|
||||
worker->unlockWorkMutex(); // -Mw
|
||||
return res;
|
||||
}
|
||||
|
|
@ -3274,7 +3323,7 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1
|
|||
(worker->mState == LLTextureFetchWorker::LOAD_FROM_NETWORK))
|
||||
{
|
||||
worker->setPriority(LLWorkerThread::PRIORITY_HIGH | worker->mWorkPriority);
|
||||
worker->mState = LLTextureFetchWorker::LOAD_FROM_SIMULATOR;
|
||||
worker->setState(LLTextureFetchWorker::LOAD_FROM_SIMULATOR);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -3537,7 +3586,7 @@ void LLTextureFetch::releaseHttpWaiters()
|
|||
break;
|
||||
}
|
||||
|
||||
worker->mState = LLTextureFetchWorker::SEND_HTTP_REQ;
|
||||
worker->setState(LLTextureFetchWorker::SEND_HTTP_REQ);
|
||||
worker->setPriority(LLWorkerThread::PRIORITY_HIGH | worker->mWorkPriority);
|
||||
worker->unlockWorkMutex(); // -Mw
|
||||
|
||||
|
|
|
|||
|
|
@ -160,9 +160,7 @@ LLViewerAssetStats::LLViewerAssetStats()
|
|||
|
||||
LLViewerAssetStats::LLViewerAssetStats(const LLViewerAssetStats & src)
|
||||
: mRegionHandle(src.mRegionHandle),
|
||||
mResetTimestamp(src.mResetTimestamp),
|
||||
mPhaseStats(src.mPhaseStats),
|
||||
mAvatarRezStates(src.mAvatarRezStates)
|
||||
mResetTimestamp(src.mResetTimestamp)
|
||||
{
|
||||
const PerRegionContainer::const_iterator it_end(src.mRegionStats.end());
|
||||
for (PerRegionContainer::const_iterator it(src.mRegionStats.begin()); it_end != it; ++it)
|
||||
|
|
@ -258,17 +256,6 @@ LLViewerAssetStats::recordFPS(F32 fps)
|
|||
mCurRegionStats->mFPS.record(fps);
|
||||
}
|
||||
|
||||
void
|
||||
LLViewerAssetStats::recordAvatarStats()
|
||||
{
|
||||
std::vector<S32> rez_counts;
|
||||
LLVOAvatar::getNearbyRezzedStats(rez_counts);
|
||||
mAvatarRezStates = rez_counts;
|
||||
mPhaseStats.clear();
|
||||
mPhaseStats["cloud"] = LLViewerStats::PhaseMap::getPhaseStats("cloud");
|
||||
mPhaseStats["cloud-or-gray"] = LLViewerStats::PhaseMap::getPhaseStats("cloud-or-gray");
|
||||
}
|
||||
|
||||
LLSD
|
||||
LLViewerAssetStats::asLLSD(bool compact_output)
|
||||
{
|
||||
|
|
@ -299,11 +286,6 @@ LLViewerAssetStats::asLLSD(bool compact_output)
|
|||
static const LLSD::String max_tag("max");
|
||||
static const LLSD::String mean_tag("mean");
|
||||
|
||||
// Avatar sub-tags
|
||||
static const LLSD::String avatar_tag("avatar");
|
||||
static const LLSD::String avatar_nearby_tag("nearby");
|
||||
static const LLSD::String avatar_phase_stats_tag("phase_stats");
|
||||
|
||||
const duration_t now = LLViewerAssetStatsFF::get_timestamp();
|
||||
mCurRegionStats->accumulateTime(now);
|
||||
|
||||
|
|
@ -362,16 +344,6 @@ LLViewerAssetStats::asLLSD(bool compact_output)
|
|||
LLSD ret = LLSD::emptyMap();
|
||||
ret["regions"] = regions;
|
||||
ret["duration"] = LLSD::Real((now - mResetTimestamp) * 1.0e-6);
|
||||
LLSD avatar_info;
|
||||
avatar_info[avatar_nearby_tag] = LLSD::emptyArray();
|
||||
for (S32 rez_stat=0; rez_stat < mAvatarRezStates.size(); ++rez_stat)
|
||||
{
|
||||
std::string rez_status_name = LLVOAvatar::rezStatusToString(rez_stat);
|
||||
avatar_info[avatar_nearby_tag][rez_status_name] = mAvatarRezStates[rez_stat];
|
||||
}
|
||||
avatar_info[avatar_phase_stats_tag]["cloud"] = mPhaseStats["cloud"].getData();
|
||||
avatar_info[avatar_phase_stats_tag]["cloud-or-gray"] = mPhaseStats["cloud-or-gray"].getData();
|
||||
ret[avatar_tag] = avatar_info;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -470,15 +442,6 @@ record_fps_main(F32 fps)
|
|||
gViewerAssetStatsMain->recordFPS(fps);
|
||||
}
|
||||
|
||||
void
|
||||
record_avatar_stats()
|
||||
{
|
||||
if (! gViewerAssetStatsMain)
|
||||
return;
|
||||
|
||||
gViewerAssetStatsMain->recordAvatarStats();
|
||||
}
|
||||
|
||||
// 'thread1' - should be for TextureFetch thread
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -256,10 +256,6 @@ protected:
|
|||
|
||||
// Time of last reset
|
||||
duration_t mResetTimestamp;
|
||||
|
||||
// Nearby avatar stats
|
||||
std::vector<S32> mAvatarRezStates;
|
||||
LLViewerStats::phase_stats_t mPhaseStats;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -318,8 +314,6 @@ void record_response_main(LLViewerAssetType::EType at, bool with_http, bool is_t
|
|||
|
||||
void record_fps_main(F32 fps);
|
||||
|
||||
void record_avatar_stats();
|
||||
|
||||
/**
|
||||
* Region context, event and duration loggers for Thread 1.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1819,7 +1819,10 @@ bool LLViewerFetchedTexture::updateFetch()
|
|||
// We finished but received no data
|
||||
if (current_discard < 0)
|
||||
{
|
||||
llwarns << "!mIsFetching, setting as missing" << llendl;
|
||||
llwarns << "!mIsFetching, setting as missing, decode_priority " << decode_priority
|
||||
<< " mRawDiscardLevel " << mRawDiscardLevel
|
||||
<< " current_discard " << current_discard
|
||||
<< llendl;
|
||||
setIsMissingAsset();
|
||||
desired_discard = -1;
|
||||
}
|
||||
|
|
@ -1952,11 +1955,13 @@ bool LLViewerFetchedTexture::updateFetch()
|
|||
}
|
||||
else if (mHasFetcher && !mIsFetching)
|
||||
{
|
||||
// Only delete requests that haven't receeived any network data for a while
|
||||
// Only delete requests that haven't received any network data
|
||||
// for a while. Note - this is the normal mechanism for
|
||||
// deleting requests, not just a place to handle timeouts.
|
||||
const F32 FETCH_IDLE_TIME = 5.f;
|
||||
if (mLastPacketTimer.getElapsedTimeF32() > FETCH_IDLE_TIME)
|
||||
{
|
||||
// llinfos << "Deleting request: " << getID() << " Discard: " << current_discard << " <= min:" << mMinDiscardLevel << " or priority == 0: " << decode_priority << llendl;
|
||||
LL_DEBUGS("Texture") << "exceeded idle time " << FETCH_IDLE_TIME << ", deleting request: " << getID() << llendl;
|
||||
LLAppViewer::getTextureFetch()->deleteRequest(getID(), true);
|
||||
mHasFetcher = FALSE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2989,7 +2989,12 @@ void LLVOAvatarSelf::onCustomizeEnd(bool disable_camera_switch)
|
|||
{
|
||||
gAgentCamera.changeCameraToDefault();
|
||||
gAgentCamera.resetView();
|
||||
}
|
||||
}
|
||||
|
||||
if (gAgent.getRegion() && gAgent.getRegion()->getCentralBakeVersion())
|
||||
{
|
||||
LLAppearanceMgr::instance().requestServerAppearanceUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,30 +37,6 @@
|
|||
#include "llregionhandle.h"
|
||||
#include "../llvoavatar.h"
|
||||
|
||||
void LLVOAvatar::getNearbyRezzedStats(std::vector<S32>& counts)
|
||||
{
|
||||
counts.resize(3);
|
||||
counts[0] = 0;
|
||||
counts[1] = 0;
|
||||
counts[2] = 1;
|
||||
}
|
||||
|
||||
// static
|
||||
std::string LLVOAvatar::rezStatusToString(S32 rez_status)
|
||||
{
|
||||
if (rez_status==0) return "cloud";
|
||||
if (rez_status==1) return "gray";
|
||||
if (rez_status==2) return "textured";
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
// static
|
||||
LLViewerStats::StatsAccumulator& LLViewerStats::PhaseMap::getPhaseStats(const std::string& phase_name)
|
||||
{
|
||||
static LLViewerStats::StatsAccumulator junk;
|
||||
return junk;
|
||||
}
|
||||
|
||||
static const char * all_keys[] =
|
||||
{
|
||||
"duration",
|
||||
|
|
@ -123,31 +99,34 @@ is_empty_map(const LLSD & sd)
|
|||
{
|
||||
return sd.isMap() && 0 == sd.size();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
static bool
|
||||
is_single_key_map(const LLSD & sd, const std::string & key)
|
||||
{
|
||||
return sd.isMap() && 1 == sd.size() && sd.has(key);
|
||||
}
|
||||
#endif
|
||||
|
||||
static bool
|
||||
is_double_key_map(const LLSD & sd, const std::string & key1, const std::string & key2)
|
||||
{
|
||||
return sd.isMap() && 2 == sd.size() && sd.has(key1) && sd.has(key2);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
static bool
|
||||
is_triple_key_map(const LLSD & sd, const std::string & key1, const std::string & key2, const std::string& key3)
|
||||
{
|
||||
return sd.isMap() && 3 == sd.size() && sd.has(key1) && sd.has(key2) && sd.has(key3);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static bool
|
||||
is_no_stats_map(const LLSD & sd)
|
||||
{
|
||||
return is_triple_key_map(sd, "duration", "regions", "avatar");
|
||||
return is_double_key_map(sd, "duration", "regions");
|
||||
}
|
||||
|
||||
static bool
|
||||
|
|
@ -258,7 +237,7 @@ namespace tut
|
|||
// Once the region is set, we will get a response even with no data collection
|
||||
it->setRegion(region1_handle);
|
||||
sd_full = it->asLLSD(false);
|
||||
ensure("Correct single-key LLSD map root", is_triple_key_map(sd_full, "duration", "regions", "avatar"));
|
||||
ensure("Correct single-key LLSD map root", is_double_key_map(sd_full, "duration", "regions"));
|
||||
ensure("Correct single-slot LLSD array regions", is_single_slot_array(sd_full["regions"], region1_handle));
|
||||
|
||||
LLSD sd = sd_full["regions"][0];
|
||||
|
|
@ -299,7 +278,7 @@ namespace tut
|
|||
it->setRegion(region1_handle);
|
||||
|
||||
LLSD sd = it->asLLSD(false);
|
||||
ensure("Correct single-key LLSD map root", is_triple_key_map(sd, "regions", "duration", "avatar"));
|
||||
ensure("Correct single-key LLSD map root", is_double_key_map(sd, "regions", "duration"));
|
||||
ensure("Correct single-slot LLSD array regions", is_single_slot_array(sd["regions"], region1_handle));
|
||||
sd = sd[0];
|
||||
|
||||
|
|
@ -324,7 +303,7 @@ namespace tut
|
|||
LLViewerAssetStatsFF::record_dequeue_main(LLViewerAssetType::AT_BODYPART, false, false);
|
||||
|
||||
LLSD sd = gViewerAssetStatsMain->asLLSD(false);
|
||||
ensure("Correct single-key LLSD map root", is_triple_key_map(sd, "regions", "duration", "avatar"));
|
||||
ensure("Correct single-key LLSD map root", is_double_key_map(sd, "regions", "duration"));
|
||||
ensure("Correct single-slot LLSD array regions", is_single_slot_array(sd["regions"], region1_handle));
|
||||
sd = sd["regions"][0];
|
||||
|
||||
|
|
@ -364,7 +343,7 @@ namespace tut
|
|||
LLSD sd = gViewerAssetStatsThread1->asLLSD(false);
|
||||
ensure("Other collector is empty", is_no_stats_map(sd));
|
||||
sd = gViewerAssetStatsMain->asLLSD(false);
|
||||
ensure("Correct single-key LLSD map root", is_triple_key_map(sd, "regions", "duration", "avatar"));
|
||||
ensure("Correct single-key LLSD map root", is_double_key_map(sd, "regions", "duration"));
|
||||
ensure("Correct single-slot LLSD array regions", is_single_slot_array(sd["regions"], region1_handle));
|
||||
sd = sd["regions"][0];
|
||||
|
||||
|
|
@ -414,7 +393,7 @@ namespace tut
|
|||
|
||||
// std::cout << sd << std::endl;
|
||||
|
||||
ensure("Correct double-key LLSD map root", is_triple_key_map(sd, "duration", "regions", "avatar"));
|
||||
ensure("Correct double-key LLSD map root", is_double_key_map(sd, "duration", "regions"));
|
||||
ensure("Correct double-slot LLSD array regions", is_double_slot_array(sd["regions"], region1_handle, region2_handle));
|
||||
LLSD sd1 = get_region(sd, region1_handle);
|
||||
LLSD sd2 = get_region(sd, region2_handle);
|
||||
|
|
@ -437,7 +416,7 @@ namespace tut
|
|||
// Reset leaves current region in place
|
||||
gViewerAssetStatsMain->reset();
|
||||
sd = gViewerAssetStatsMain->asLLSD(false);
|
||||
ensure("Correct single-key LLSD map root", is_triple_key_map(sd, "regions", "duration", "avatar"));
|
||||
ensure("Correct single-key LLSD map root", is_double_key_map(sd, "regions", "duration"));
|
||||
ensure("Correct single-slot LLSD array regions (p2)", is_single_slot_array(sd["regions"], region2_handle));
|
||||
sd2 = sd["regions"][0];
|
||||
|
||||
|
|
@ -486,7 +465,7 @@ namespace tut
|
|||
|
||||
LLSD sd = gViewerAssetStatsMain->asLLSD(false);
|
||||
|
||||
ensure("Correct double-key LLSD map root", is_triple_key_map(sd, "duration", "regions", "avatar"));
|
||||
ensure("Correct double-key LLSD map root", is_double_key_map(sd, "duration", "regions"));
|
||||
ensure("Correct double-slot LLSD array regions", is_double_slot_array(sd["regions"], region1_handle, region2_handle));
|
||||
LLSD sd1 = get_region(sd, region1_handle);
|
||||
LLSD sd2 = get_region(sd, region2_handle);
|
||||
|
|
@ -509,7 +488,7 @@ namespace tut
|
|||
// Reset leaves current region in place
|
||||
gViewerAssetStatsMain->reset();
|
||||
sd = gViewerAssetStatsMain->asLLSD(false);
|
||||
ensure("Correct single-key LLSD map root", is_triple_key_map(sd, "duration", "regions", "avatar"));
|
||||
ensure("Correct single-key LLSD map root", is_double_key_map(sd, "duration", "regions"));
|
||||
ensure("Correct single-slot LLSD array regions (p2)", is_single_slot_array(sd["regions"], region2_handle));
|
||||
sd2 = get_region(sd, region2_handle);
|
||||
ensure("Region2 is present in results", sd2.isMap());
|
||||
|
|
@ -555,7 +534,7 @@ namespace tut
|
|||
LLSD sd = gViewerAssetStatsThread1->asLLSD(false);
|
||||
ensure("Other collector is empty", is_no_stats_map(sd));
|
||||
sd = gViewerAssetStatsMain->asLLSD(false);
|
||||
ensure("Correct single-key LLSD map root", is_triple_key_map(sd, "regions", "duration", "avatar"));
|
||||
ensure("Correct single-key LLSD map root", is_double_key_map(sd, "regions", "duration"));
|
||||
ensure("Correct single-slot LLSD array regions", is_single_slot_array(sd["regions"], region1_handle));
|
||||
sd = get_region(sd, region1_handle);
|
||||
ensure("Region1 is present in results", sd.isMap());
|
||||
|
|
|
|||
Loading…
Reference in New Issue