diff options
| author | Erik Kundiman <erik@megapahit.org> | 2024-05-15 12:35:20 +0800 | 
|---|---|---|
| committer | Erik Kundiman <erik@megapahit.org> | 2024-05-15 12:35:20 +0800 | 
| commit | 4bf5c78135577f6a1cc57f108de7a949c347c88b (patch) | |
| tree | 7ff3d36e9409afa7fc10f172bbb8f24ccde187be | |
| parent | 0958f5cc290b5ad7cfe6ea10974d65f8ab79ae0a (diff) | |
Reapply "SL-20411 Thumbnail textures should have less of an impact on performance #1"
This reverts commit 08f186a700c3fe7976228468f137c920e343bb64.
| -rw-r--r-- | indra/llrender/llgltexture.cpp | 3 | ||||
| -rw-r--r-- | indra/llrender/llgltexture.h | 1 | ||||
| -rw-r--r-- | indra/newview/llthumbnailctrl.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llthumbnailctrl.h | 1 | ||||
| -rw-r--r-- | indra/newview/llviewertexture.cpp | 79 | ||||
| -rw-r--r-- | indra/newview/llviewertexturelist.cpp | 13 | 
6 files changed, 79 insertions, 22 deletions
| diff --git a/indra/llrender/llgltexture.cpp b/indra/llrender/llgltexture.cpp index 7fdef4a3b7..b616002b49 100644 --- a/indra/llrender/llgltexture.cpp +++ b/indra/llrender/llgltexture.cpp @@ -94,7 +94,8 @@ void LLGLTexture::setBoostLevel(S32 level)  	{  		mBoostLevel = level ;  		if(mBoostLevel != LLGLTexture::BOOST_NONE -		   && mBoostLevel != LLGLTexture::BOOST_ICON) +		   && mBoostLevel != LLGLTexture::BOOST_ICON +           && mBoostLevel != LLGLTexture::BOOST_THUMBNAIL)  		{  			setNoDelete() ;		  		} diff --git a/indra/llrender/llgltexture.h b/indra/llrender/llgltexture.h index 5c693fc93c..24849d1d1b 100644 --- a/indra/llrender/llgltexture.h +++ b/indra/llrender/llgltexture.h @@ -62,6 +62,7 @@ public:  		BOOST_SUPER_HIGH    , //textures higher than this need to be downloaded at the required resolution without delay.  		BOOST_HUD			,  		BOOST_ICON			, +        BOOST_THUMBNAIL		,  		BOOST_UI			,  		BOOST_PREVIEW		,  		BOOST_MAP			, diff --git a/indra/newview/llthumbnailctrl.cpp b/indra/newview/llthumbnailctrl.cpp index 04130fc724..72818cf991 100644 --- a/indra/newview/llthumbnailctrl.cpp +++ b/indra/newview/llthumbnailctrl.cpp @@ -57,7 +57,6 @@ LLThumbnailCtrl::LLThumbnailCtrl(const LLThumbnailCtrl::Params& p)  ,   mFallbackImagep(p.fallback_image)  ,   mInteractable(p.interactable())  ,   mShowLoadingPlaceholder(p.show_loading()) -,	mPriority(LLGLTexture::BOOST_PREVIEW)  {      mLoadingPlaceholderString = LLTrans::getString("texture_loading"); @@ -201,9 +200,8 @@ void LLThumbnailCtrl::setValue(const LLSD& value)          if (mImageAssetID.notNull())          {              // Should it support baked textures? -            mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, FTT_DEFAULT, MIPMAP_YES, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); +            mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, FTT_DEFAULT, MIPMAP_YES, LLGLTexture::BOOST_THUMBNAIL); -            mTexturep->setBoostLevel(mPriority);              mTexturep->forceToSaveRawImage(0);              S32 desired_draw_width = mTexturep->getWidth(); diff --git a/indra/newview/llthumbnailctrl.h b/indra/newview/llthumbnailctrl.h index 686603b373..70f56c429c 100644 --- a/indra/newview/llthumbnailctrl.h +++ b/indra/newview/llthumbnailctrl.h @@ -71,7 +71,6 @@ public:      virtual BOOL handleHover(S32 x, S32 y, MASK mask) override;  private: -	S32 mPriority;      bool mBorderVisible;      bool mInteractable;      bool mShowLoadingPlaceholder; diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index f8837cbd5b..04ef441a69 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -93,7 +93,8 @@ S32 LLViewerTexture::sMaxSculptRez = 128; //max sculpt image size  const S32 MAX_CACHED_RAW_IMAGE_AREA = 64 * 64;  const S32 MAX_CACHED_RAW_SCULPT_IMAGE_AREA = LLViewerTexture::sMaxSculptRez * LLViewerTexture::sMaxSculptRez;  const S32 MAX_CACHED_RAW_TERRAIN_IMAGE_AREA = 128 * 128; -const S32 DEFAULT_ICON_DIMENTIONS = 32; +const S32 DEFAULT_ICON_DIMENSIONS = 32; +const S32 DEFAULT_THUMBNAIL_DIMENSIONS = 256;  U32 LLViewerTexture::sMinLargeImageSize = 65536; //256 * 256.  U32 LLViewerTexture::sMaxSmallImageSize = MAX_CACHED_RAW_IMAGE_AREA;  bool LLViewerTexture::sFreezeImageUpdates = false; @@ -665,7 +666,8 @@ void LLViewerTexture::setBoostLevel(S32 level)  		mBoostLevel = level;  		if(mBoostLevel != LLViewerTexture::BOOST_NONE &&   			mBoostLevel != LLViewerTexture::BOOST_SELECTED &&  -			mBoostLevel != LLViewerTexture::BOOST_ICON) +			mBoostLevel != LLViewerTexture::BOOST_ICON && +            mBoostLevel != LLViewerTexture::BOOST_THUMBNAIL)  		{  			setNoDelete();		  		} @@ -1180,8 +1182,19 @@ void LLViewerFetchedTexture::loadFromFastCache()              {                  // Shouldn't do anything usefull since texures in fast cache are 16x16,                  // it is here in case fast cache changes. -                S32 expected_width = mKnownDrawWidth > 0 ? mKnownDrawWidth : DEFAULT_ICON_DIMENTIONS; -                S32 expected_height = mKnownDrawHeight > 0 ? mKnownDrawHeight : DEFAULT_ICON_DIMENTIONS; +                S32 expected_width = mKnownDrawWidth > 0 ? mKnownDrawWidth : DEFAULT_ICON_DIMENSIONS; +                S32 expected_height = mKnownDrawHeight > 0 ? mKnownDrawHeight : DEFAULT_ICON_DIMENSIONS; +                if (mRawImage && (mRawImage->getWidth() > expected_width || mRawImage->getHeight() > expected_height)) +                { +                    // scale oversized icon, no need to give more work to gl +                    mRawImage->scale(expected_width, expected_height); +                } +            } + +            if (mBoostLevel == LLGLTexture::BOOST_THUMBNAIL) +            { +                S32 expected_width = mKnownDrawWidth > 0 ? mKnownDrawWidth : DEFAULT_THUMBNAIL_DIMENSIONS; +                S32 expected_height = mKnownDrawHeight > 0 ? mKnownDrawHeight : DEFAULT_THUMBNAIL_DIMENSIONS;                  if (mRawImage && (mRawImage->getWidth() > expected_width || mRawImage->getHeight() > expected_height))                  {                      // scale oversized icon, no need to give more work to gl @@ -1682,7 +1695,7 @@ void LLViewerFetchedTexture::processTextureStats()  		{  			mDesiredDiscardLevel = 0;  		} -        else if (mDontDiscard && mBoostLevel == LLGLTexture::BOOST_ICON) +        else if (mDontDiscard && (mBoostLevel == LLGLTexture::BOOST_ICON || mBoostLevel == LLGLTexture::BOOST_THUMBNAIL))          {              if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT)              { @@ -1916,8 +1929,20 @@ bool LLViewerFetchedTexture::updateFetch()                  if (mBoostLevel == LLGLTexture::BOOST_ICON)                  { -                    S32 expected_width = mKnownDrawWidth > 0 ? mKnownDrawWidth : DEFAULT_ICON_DIMENTIONS; -                    S32 expected_height = mKnownDrawHeight > 0 ? mKnownDrawHeight : DEFAULT_ICON_DIMENTIONS; +                    S32 expected_width = mKnownDrawWidth > 0 ? mKnownDrawWidth : DEFAULT_ICON_DIMENSIONS; +                    S32 expected_height = mKnownDrawHeight > 0 ? mKnownDrawHeight : DEFAULT_ICON_DIMENSIONS; +                    if (mRawImage && (mRawImage->getWidth() > expected_width || mRawImage->getHeight() > expected_height)) +                    { +                        // scale oversized icon, no need to give more work to gl +                        // since we got mRawImage from thread worker and image may be in use (ex: writing cache), make a copy +                        mRawImage = mRawImage->scaled(expected_width, expected_height); +                    } +                } + +                if (mBoostLevel == LLGLTexture::BOOST_THUMBNAIL) +                { +                    S32 expected_width = mKnownDrawWidth > 0 ? mKnownDrawWidth : DEFAULT_THUMBNAIL_DIMENSIONS; +                    S32 expected_height = mKnownDrawHeight > 0 ? mKnownDrawHeight : DEFAULT_THUMBNAIL_DIMENSIONS;                      if (mRawImage && (mRawImage->getWidth() > expected_width || mRawImage->getHeight() > expected_height))                      {                          // scale oversized icon, no need to give more work to gl @@ -2649,7 +2674,9 @@ LLImageRaw* LLViewerFetchedTexture::reloadRawImage(S8 discard_level)  	if(mSavedRawDiscardLevel >= 0 && mSavedRawDiscardLevel <= discard_level)  	{ -		if (mSavedRawDiscardLevel != discard_level && mBoostLevel != BOOST_ICON) +		if (mSavedRawDiscardLevel != discard_level +            && mBoostLevel != BOOST_ICON +            && mBoostLevel != BOOST_THUMBNAIL)  		{  			mRawImage = new LLImageRaw(getWidth(discard_level), getHeight(discard_level), getComponents());  			mRawImage->copy(getSavedRawImage()); @@ -2756,8 +2783,22 @@ void LLViewerFetchedTexture::setCachedRawImage(S32 discard_level, LLImageRaw* im      {          if (mBoostLevel == LLGLTexture::BOOST_ICON)          { -            S32 expected_width = mKnownDrawWidth > 0 ? mKnownDrawWidth : DEFAULT_ICON_DIMENTIONS; -            S32 expected_height = mKnownDrawHeight > 0 ? mKnownDrawHeight : DEFAULT_ICON_DIMENTIONS; +            S32 expected_width = mKnownDrawWidth > 0 ? mKnownDrawWidth : DEFAULT_ICON_DIMENSIONS; +            S32 expected_height = mKnownDrawHeight > 0 ? mKnownDrawHeight : DEFAULT_ICON_DIMENSIONS; +            if (mRawImage->getWidth() > expected_width || mRawImage->getHeight() > expected_height) +            { +                mCachedRawImage = new LLImageRaw(expected_width, expected_height, imageraw->getComponents()); +                mCachedRawImage->copyScaled(imageraw); +            } +            else +            { +                mCachedRawImage = imageraw; +            } +        } +        else if (mBoostLevel == LLGLTexture::BOOST_THUMBNAIL) +        { +            S32 expected_width = mKnownDrawWidth > 0 ? mKnownDrawWidth : DEFAULT_THUMBNAIL_DIMENSIONS; +            S32 expected_height = mKnownDrawHeight > 0 ? mKnownDrawHeight : DEFAULT_THUMBNAIL_DIMENSIONS;              if (mRawImage->getWidth() > expected_width || mRawImage->getHeight() > expected_height)              {                  mCachedRawImage = new LLImageRaw(expected_width, expected_height, imageraw->getComponents()); @@ -2864,8 +2905,22 @@ void LLViewerFetchedTexture::saveRawImage()  	mSavedRawDiscardLevel = mRawDiscardLevel;      if (mBoostLevel == LLGLTexture::BOOST_ICON)      { -        S32 expected_width = mKnownDrawWidth > 0 ? mKnownDrawWidth : DEFAULT_ICON_DIMENTIONS; -        S32 expected_height = mKnownDrawHeight > 0 ? mKnownDrawHeight : DEFAULT_ICON_DIMENTIONS; +        S32 expected_width = mKnownDrawWidth > 0 ? mKnownDrawWidth : DEFAULT_ICON_DIMENSIONS; +        S32 expected_height = mKnownDrawHeight > 0 ? mKnownDrawHeight : DEFAULT_ICON_DIMENSIONS; +        if (mRawImage->getWidth() > expected_width || mRawImage->getHeight() > expected_height) +        { +            mSavedRawImage = new LLImageRaw(expected_width, expected_height, mRawImage->getComponents()); +            mSavedRawImage->copyScaled(mRawImage); +        } +        else +        { +            mSavedRawImage = new LLImageRaw(mRawImage->getData(), mRawImage->getWidth(), mRawImage->getHeight(), mRawImage->getComponents()); +        } +    } +    else if (mBoostLevel == LLGLTexture::BOOST_THUMBNAIL) +    { +        S32 expected_width = mKnownDrawWidth > 0 ? mKnownDrawWidth : DEFAULT_THUMBNAIL_DIMENSIONS; +        S32 expected_height = mKnownDrawHeight > 0 ? mKnownDrawHeight : DEFAULT_THUMBNAIL_DIMENSIONS;          if (mRawImage->getWidth() > expected_width || mRawImage->getHeight() > expected_height)          {              mSavedRawImage = new LLImageRaw(expected_width, expected_height, mRawImage->getComponents()); diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 2d659873f2..8779ebfa53 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -72,7 +72,7 @@ LLViewerTextureList gTextureList;  ETexListType get_element_type(S32 priority)  { -    return (priority == LLViewerFetchedTexture::BOOST_ICON) ? TEX_LIST_SCALE : TEX_LIST_STANDARD; +    return (priority == LLViewerFetchedTexture::BOOST_ICON || priority == LLViewerFetchedTexture::BOOST_THUMBNAIL) ? TEX_LIST_SCALE : TEX_LIST_STANDARD;  }  /////////////////////////////////////////////////////////////////////////////// @@ -511,7 +511,8 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromUrl(const std::string&  			{  				imagep->dontDiscard();  			} -			if (boost_priority == LLViewerFetchedTexture::BOOST_ICON) +			if (boost_priority == LLViewerFetchedTexture::BOOST_ICON +                || boost_priority == LLViewerFetchedTexture::BOOST_THUMBNAIL)  			{  				// Agent and group Icons are downloadable content, nothing manages  				// icon deletion yet, so they should not persist @@ -623,7 +624,8 @@ LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,  		{  			imagep->dontDiscard();  		} -		if (boost_priority == LLViewerFetchedTexture::BOOST_ICON) +		if (boost_priority == LLViewerFetchedTexture::BOOST_ICON +            || boost_priority == LLViewerFetchedTexture::BOOST_THUMBNAIL)  		{  			// Agent and group Icons are downloadable content, nothing manages  			// icon deletion yet, so they should not persist. @@ -1534,8 +1536,9 @@ LLUIImagePtr LLUIImageList::loadUIImage(LLViewerFetchedTexture* imagep, const st  	LLUIImagePtr new_imagep = new LLUIImage(name, imagep);  	new_imagep->setScaleStyle(scale_style); -	if (imagep->getBoostLevel() != LLGLTexture::BOOST_ICON && -		imagep->getBoostLevel() != LLGLTexture::BOOST_PREVIEW) +	if (imagep->getBoostLevel() != LLGLTexture::BOOST_ICON +        && imagep->getBoostLevel() != LLGLTexture::BOOST_THUMBNAIL +		&& imagep->getBoostLevel() != LLGLTexture::BOOST_PREVIEW)  	{  		// Don't add downloadable content into this list  		// all UI images are non-deletable and list does not support deletion | 
