diff options
| author | Ptolemy <ptolemy@lindenlab.com> | 2021-10-29 15:11:42 -0700 | 
|---|---|---|
| committer | Ptolemy <ptolemy@lindenlab.com> | 2021-10-29 15:11:42 -0700 | 
| commit | 1be8a8d10bd3542b0b5c2943a508509c5cfcf3ef (patch) | |
| tree | a4bd2bdddb24ae0b443878b0337e77787d3fea40 | |
| parent | 61bca72d37f695ee15897ddc3b9215c969ecf648 (diff) | |
| parent | 68b75be652575ff301172b7b19522d4f0494bdf0 (diff) | |
Fix merge conflict
149 files changed, 1101 insertions, 1958 deletions
| diff --git a/indra/llappearance/llavatarappearance.cpp b/indra/llappearance/llavatarappearance.cpp index 90dfa04f28..2d6d2a10d2 100644 --- a/indra/llappearance/llavatarappearance.cpp +++ b/indra/llappearance/llavatarappearance.cpp @@ -1590,7 +1590,7 @@ BOOL LLAvatarAppearance::allocateCollisionVolumes( U32 num )          delete_and_clear_array(mCollisionVolumes);          mNumCollisionVolumes = 0; -        mCollisionVolumes = new(std::nothrow) LLAvatarJointCollisionVolume[num]; +        mCollisionVolumes = new LLAvatarJointCollisionVolume[num];          if (!mCollisionVolumes)          {              LL_WARNS() << "Failed to allocate collision volumes" << LL_ENDL; diff --git a/indra/llappearance/lldriverparam.h b/indra/llappearance/lldriverparam.h index f278dcc2e2..a6261b507b 100644 --- a/indra/llappearance/lldriverparam.h +++ b/indra/llappearance/lldriverparam.h @@ -77,73 +77,63 @@ protected:  //----------------------------------------------------------------------------- -LL_ALIGN_PREFIX(16) -class LLDriverParam : public LLViewerVisualParam +class alignas(16) LLDriverParam : public LLViewerVisualParam  { +    LL_ALIGN_NEW  private: -	// Hide the default constructor.  Force construction with LLAvatarAppearance. -	LLDriverParam() {} +    // Hide the default constructor.  Force construction with LLAvatarAppearance. +    LLDriverParam() {}  public: -	LLDriverParam(LLAvatarAppearance *appearance, LLWearable* wearable = NULL); -	~LLDriverParam(); - -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} - -	// Special: These functions are overridden by child classes -	LLDriverParamInfo*		getInfo() const { return (LLDriverParamInfo*)mInfo; } -	//   This sets mInfo and calls initialization functions -	BOOL					setInfo(LLDriverParamInfo *info); - -	LLAvatarAppearance* getAvatarAppearance() { return mAvatarAppearance; } -	const LLAvatarAppearance* getAvatarAppearance() const { return mAvatarAppearance; } - -	void					updateCrossDrivenParams(LLWearableType::EType driven_type); - -	/*virtual*/ LLViewerVisualParam* cloneParam(LLWearable* wearable) const; - -	// LLVisualParam Virtual functions -	/*virtual*/ void				apply( ESex sex ) {} // apply is called separately for each driven param. -	/*virtual*/ void				setWeight(F32 weight); -	/*virtual*/ void				setAnimationTarget( F32 target_value); -	/*virtual*/ void				stopAnimating(); -	/*virtual*/ BOOL				linkDrivenParams(visual_param_mapper mapper, BOOL only_cross_params); -	/*virtual*/ void				resetDrivenParams(); -	 -	// LLViewerVisualParam Virtual functions -	/*virtual*/ F32					getTotalDistortion(); -	/*virtual*/ const LLVector4a&	getAvgDistortion(); -	/*virtual*/ F32					getMaxDistortion(); -	/*virtual*/ LLVector4a			getVertexDistortion(S32 index, LLPolyMesh *poly_mesh); -	/*virtual*/ const LLVector4a*	getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh); -	/*virtual*/ const LLVector4a*	getNextDistortion(U32 *index, LLPolyMesh **poly_mesh); - -	S32								getDrivenParamsCount() const; -	const LLViewerVisualParam*		getDrivenParam(S32 index) const; - -	typedef std::vector<LLDrivenEntry> entry_list_t; -    entry_list_t&                   getDrivenList() { return mDriven; } +    LLDriverParam(LLAvatarAppearance* appearance, LLWearable* wearable = NULL); +    ~LLDriverParam(); + +    // Special: These functions are overridden by child classes +    LLDriverParamInfo* getInfo() const { return (LLDriverParamInfo*)mInfo; } +    //   This sets mInfo and calls initialization functions +    BOOL					setInfo(LLDriverParamInfo* info); + +    LLAvatarAppearance* getAvatarAppearance() { return mAvatarAppearance; } +    const LLAvatarAppearance* getAvatarAppearance() const { return mAvatarAppearance; } + +    void					updateCrossDrivenParams(LLWearableType::EType driven_type); + +    /*virtual*/ LLViewerVisualParam* cloneParam(LLWearable* wearable) const; + +    // LLVisualParam Virtual functions +    /*virtual*/ void				apply(ESex sex) {} // apply is called separately for each driven param. +    /*virtual*/ void				setWeight(F32 weight); +    /*virtual*/ void				setAnimationTarget(F32 target_value); +    /*virtual*/ void				stopAnimating(); +    /*virtual*/ BOOL				linkDrivenParams(visual_param_mapper mapper, BOOL only_cross_params); +    /*virtual*/ void				resetDrivenParams(); + +    // LLViewerVisualParam Virtual functions +    /*virtual*/ F32					getTotalDistortion(); +    /*virtual*/ const LLVector4a& getAvgDistortion(); +    /*virtual*/ F32					getMaxDistortion(); +    /*virtual*/ LLVector4a			getVertexDistortion(S32 index, LLPolyMesh* poly_mesh); +    /*virtual*/ const LLVector4a* getFirstDistortion(U32* index, LLPolyMesh** poly_mesh); +    /*virtual*/ const LLVector4a* getNextDistortion(U32* index, LLPolyMesh** poly_mesh); + +    S32								getDrivenParamsCount() const; +    const LLViewerVisualParam* getDrivenParam(S32 index) const; + +    typedef std::vector<LLDrivenEntry> entry_list_t; +    entry_list_t& getDrivenList() { return mDriven; }      void                            setDrivenList(entry_list_t& driven_list) { mDriven = driven_list; }  protected: -	LLDriverParam(const LLDriverParam& pOther); -	F32 getDrivenWeight(const LLDrivenEntry* driven, F32 input_weight); -	void setDrivenWeight(LLDrivenEntry *driven, F32 driven_weight); - - -	LL_ALIGN_16(LLVector4a	mDefaultVec); // temp holder -	entry_list_t mDriven; -	LLViewerVisualParam* mCurrentDistortionParam; -	// Backlink only; don't make this an LLPointer. -	LLAvatarAppearance* mAvatarAppearance; -	LLWearable* mWearablep; -} LL_ALIGN_POSTFIX(16); +    LLDriverParam(const LLDriverParam& pOther); +    F32 getDrivenWeight(const LLDrivenEntry* driven, F32 input_weight); +    void setDrivenWeight(LLDrivenEntry* driven, F32 driven_weight); + + +    LL_ALIGN_16(LLVector4a	mDefaultVec); // temp holder +    entry_list_t mDriven; +    LLViewerVisualParam* mCurrentDistortionParam; +    // Backlink only; don't make this an LLPointer. +    LLAvatarAppearance* mAvatarAppearance; +    LLWearable* mWearablep; +};  #endif  // LL_LLDRIVERPARAM_H diff --git a/indra/llappearance/llpolymorph.cpp b/indra/llappearance/llpolymorph.cpp index ce7010984a..16b5f1e204 100644 --- a/indra/llappearance/llpolymorph.cpp +++ b/indra/llappearance/llpolymorph.cpp @@ -539,8 +539,6 @@ F32	LLPolyMorphTarget::getMaxDistortion()  //-----------------------------------------------------------------------------  // apply()  //----------------------------------------------------------------------------- -static LLTrace::BlockTimerStatHandle FTM_APPLY_MORPH_TARGET("Apply Morph"); -  void LLPolyMorphTarget::apply( ESex avatar_sex )  {  	if (!mMorphData || mNumMorphMasksPending > 0) @@ -548,7 +546,7 @@ void LLPolyMorphTarget::apply( ESex avatar_sex )  		return;  	} -	LL_RECORD_BLOCK_TIME(FTM_APPLY_MORPH_TARGET); +    LL_PROFILE_ZONE_SCOPED;  	mLastSex = avatar_sex; diff --git a/indra/llappearance/llpolymorph.h b/indra/llappearance/llpolymorph.h index c6133cd831..29cd373636 100644 --- a/indra/llappearance/llpolymorph.h +++ b/indra/llappearance/llpolymorph.h @@ -41,24 +41,14 @@ class LLWearable;  //-----------------------------------------------------------------------------  // LLPolyMorphData()  //----------------------------------------------------------------------------- -LL_ALIGN_PREFIX(16) -class LLPolyMorphData +class alignas(16) LLPolyMorphData  { +    LL_ALIGN_NEW  public:  	LLPolyMorphData(const std::string& morph_name);  	~LLPolyMorphData();  	LLPolyMorphData(const LLPolyMorphData &rhs); -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} -  	BOOL			loadBinary(LLFILE* fp, LLPolyMeshSharedData *mesh);  	const std::string& getName() { return mName; } @@ -76,7 +66,7 @@ public:  	F32					mTotalDistortion;	// vertex distortion summed over entire morph  	F32					mMaxDistortion;		// maximum single vertex distortion in a given morph -	LL_ALIGN_16(LLVector4a			mAvgDistortion);		// average vertex distortion, to infer directionality of the morph +	LLVector4a			mAvgDistortion;		// average vertex distortion, to infer directionality of the morph  	LLPolyMeshSharedData*	mMesh;  private: @@ -154,8 +144,9 @@ protected:  // These morph targets must be topologically consistent with a given Polymesh  // (share face sets)  //----------------------------------------------------------------------------- -class LLPolyMorphTarget : public LLViewerVisualParam +class alignas(16) LLPolyMorphTarget : public LLViewerVisualParam  { +    LL_ALIGN_NEW  public:  	LLPolyMorphTarget(LLPolyMesh *poly_mesh);  	~LLPolyMorphTarget(); @@ -184,16 +175,6 @@ public:      void    applyVolumeChanges(F32 delta_weight); // SL-315 - for resetSkeleton() -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} -  protected:  	LLPolyMorphTarget(const LLPolyMorphTarget& pOther); diff --git a/indra/llappearance/llpolyskeletaldistortion.cpp b/indra/llappearance/llpolyskeletaldistortion.cpp index ae38c25dbf..360f17508f 100644 --- a/indra/llappearance/llpolyskeletaldistortion.cpp +++ b/indra/llappearance/llpolyskeletaldistortion.cpp @@ -188,11 +188,9 @@ BOOL LLPolySkeletalDistortion::setInfo(LLPolySkeletalDistortionInfo *info)  //-----------------------------------------------------------------------------  // apply()  //----------------------------------------------------------------------------- -static LLTrace::BlockTimerStatHandle FTM_POLYSKELETAL_DISTORTION_APPLY("Skeletal Distortion"); -  void LLPolySkeletalDistortion::apply( ESex avatar_sex )  { -    LL_RECORD_BLOCK_TIME(FTM_POLYSKELETAL_DISTORTION_APPLY); +    LL_PROFILE_ZONE_SCOPED;      F32 effective_weight = ( getSex() & avatar_sex ) ? mCurWeight : getDefaultWeight(); diff --git a/indra/llappearance/llpolyskeletaldistortion.h b/indra/llappearance/llpolyskeletaldistortion.h index ab1a132d19..585d85f055 100644 --- a/indra/llappearance/llpolyskeletaldistortion.h +++ b/indra/llappearance/llpolyskeletaldistortion.h @@ -62,9 +62,9 @@ struct LLPolySkeletalBoneInfo  	BOOL mHasPositionDeformation;  }; -LL_ALIGN_PREFIX(16) -class LLPolySkeletalDistortionInfo : public LLViewerVisualParamInfo +class alignas(16) LLPolySkeletalDistortionInfo : public LLViewerVisualParamInfo  { +    LL_ALIGN_NEW  	friend class LLPolySkeletalDistortion;  public: @@ -73,19 +73,6 @@ public:  	/*virtual*/ BOOL parseXml(LLXmlTreeNode* node); - - -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} - -  protected:  	typedef std::vector<LLPolySkeletalBoneInfo> bone_info_list_t;  	bone_info_list_t mBoneInfoList; @@ -95,19 +82,10 @@ protected:  // LLPolySkeletalDeformation  // A set of joint scale data for deforming the avatar mesh  //----------------------------------------------------------------------------- -class LLPolySkeletalDistortion : public LLViewerVisualParam +class alignas(16) LLPolySkeletalDistortion : public LLViewerVisualParam  { +    LL_ALIGN_NEW  public: -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} -  	LLPolySkeletalDistortion(LLAvatarAppearance *avatarp);  	~LLPolySkeletalDistortion(); diff --git a/indra/llappearance/lltexlayer.cpp b/indra/llappearance/lltexlayer.cpp index e5039141de..26e0ae9086 100644 --- a/indra/llappearance/lltexlayer.cpp +++ b/indra/llappearance/lltexlayer.cpp @@ -522,10 +522,9 @@ const LLTexLayerSetBuffer* LLTexLayerSet::getComposite() const  	return mComposite;  } -static LLTrace::BlockTimerStatHandle FTM_GATHER_MORPH_MASK_ALPHA("gatherMorphMaskAlpha");  void LLTexLayerSet::gatherMorphMaskAlpha(U8 *data, S32 origin_x, S32 origin_y, S32 width, S32 height, LLRenderTarget* bound_target)  { -	LL_RECORD_BLOCK_TIME(FTM_GATHER_MORPH_MASK_ALPHA); +    LL_PROFILE_ZONE_SCOPED;  	memset(data, 255, width * height);  	for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ ) @@ -538,10 +537,9 @@ void LLTexLayerSet::gatherMorphMaskAlpha(U8 *data, S32 origin_x, S32 origin_y, S  	renderAlphaMaskTextures(origin_x, origin_y, width, height, bound_target, true);  } -static LLTrace::BlockTimerStatHandle FTM_RENDER_ALPHA_MASK_TEXTURES("renderAlphaMaskTextures");  void LLTexLayerSet::renderAlphaMaskTextures(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bound_target, bool forceClear)  { -	LL_RECORD_BLOCK_TIME(FTM_RENDER_ALPHA_MASK_TEXTURES); +    LL_PROFILE_ZONE_SCOPED;  	const LLTexLayerSetInfo *info = getInfo();  	bool use_shaders = LLGLSLShader::sNoFixedFunction; @@ -1433,7 +1431,6 @@ BOOL LLTexLayer::blendAlphaTexture(S32 x, S32 y, S32 width, S32 height)  	addAlphaMask(data, originX, originY, width, height, bound_target);  } -static LLTrace::BlockTimerStatHandle FTM_RENDER_MORPH_MASKS("renderMorphMasks");  void LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color, LLRenderTarget* bound_target, bool force_render)  {  	if (!force_render && !hasMorph()) @@ -1441,7 +1438,7 @@ void LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC  		LL_DEBUGS() << "skipping renderMorphMasks for " << getUUID() << LL_ENDL;  		return;  	} -	LL_RECORD_BLOCK_TIME(FTM_RENDER_MORPH_MASKS); +    LL_PROFILE_ZONE_SCOPED;  	BOOL success = TRUE;  	llassert( !mParamAlphaList.empty() ); @@ -1639,10 +1636,9 @@ void LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC  	}  } -static LLTrace::BlockTimerStatHandle FTM_ADD_ALPHA_MASK("addAlphaMask");  void LLTexLayer::addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 height, LLRenderTarget* bound_target)  { -	LL_RECORD_BLOCK_TIME(FTM_ADD_ALPHA_MASK); +    LL_PROFILE_ZONE_SCOPED;  	S32 size = width * height;  	const U8* alphaData = getAlphaData();  	if (!alphaData && hasAlphaParams()) @@ -1983,10 +1979,9 @@ void LLTexLayerStaticImageList::deleteCachedImages()  // Returns an LLImageTGA that contains the encoded data from a tga file named file_name.  // Caches the result to speed identical subsequent requests. -static LLTrace::BlockTimerStatHandle FTM_LOAD_STATIC_TGA("getImageTGA");  LLImageTGA* LLTexLayerStaticImageList::getImageTGA(const std::string& file_name)  { -	LL_RECORD_BLOCK_TIME(FTM_LOAD_STATIC_TGA); +    LL_PROFILE_ZONE_SCOPED;  	const char *namekey = mImageNames.addString(file_name);  	image_tga_map_t::const_iterator iter = mStaticImageListTGA.find(namekey);  	if( iter != mStaticImageListTGA.end() ) @@ -2013,10 +2008,9 @@ LLImageTGA* LLTexLayerStaticImageList::getImageTGA(const std::string& file_name)  // Returns a GL Image (without a backing ImageRaw) that contains the decoded data from a tga file named file_name.  // Caches the result to speed identical subsequent requests. -static LLTrace::BlockTimerStatHandle FTM_LOAD_STATIC_TEXTURE("getTexture");  LLGLTexture* LLTexLayerStaticImageList::getTexture(const std::string& file_name, BOOL is_mask)  { -	LL_RECORD_BLOCK_TIME(FTM_LOAD_STATIC_TEXTURE); +    LL_PROFILE_ZONE_SCOPED;  	LLPointer<LLGLTexture> tex;  	const char *namekey = mImageNames.addString(file_name); @@ -2063,10 +2057,9 @@ LLGLTexture* LLTexLayerStaticImageList::getTexture(const std::string& file_name,  // Reads a .tga file, decodes it, and puts the decoded data in image_raw.  // Returns TRUE if successful. -static LLTrace::BlockTimerStatHandle FTM_LOAD_IMAGE_RAW("loadImageRaw");  BOOL LLTexLayerStaticImageList::loadImageRaw(const std::string& file_name, LLImageRaw* image_raw)  { -	LL_RECORD_BLOCK_TIME(FTM_LOAD_IMAGE_RAW); +    LL_PROFILE_ZONE_SCOPED;  	BOOL success = FALSE;  	std::string path;  	path = gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER,file_name); diff --git a/indra/llappearance/lltexlayerparams.cpp b/indra/llappearance/lltexlayerparams.cpp index ff682d6906..ce5c7142d5 100644 --- a/indra/llappearance/lltexlayerparams.cpp +++ b/indra/llappearance/lltexlayerparams.cpp @@ -261,10 +261,9 @@ BOOL LLTexLayerParamAlpha::getSkip() const  } -static LLTrace::BlockTimerStatHandle FTM_TEX_LAYER_PARAM_ALPHA("alpha render");  BOOL LLTexLayerParamAlpha::render(S32 x, S32 y, S32 width, S32 height)  { -	LL_RECORD_BLOCK_TIME(FTM_TEX_LAYER_PARAM_ALPHA); +    LL_PROFILE_ZONE_SCOPED;  	BOOL success = TRUE;  	if (!mTexLayer) diff --git a/indra/llappearance/lltexlayerparams.h b/indra/llappearance/lltexlayerparams.h index 0cb2dedbff..e2440998b3 100644 --- a/indra/llappearance/lltexlayerparams.h +++ b/indra/llappearance/lltexlayerparams.h @@ -63,23 +63,14 @@ protected:  //   //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  LL_ALIGN_PREFIX(16) -class LLTexLayerParamAlpha : public LLTexLayerParam +class alignas(16) LLTexLayerParamAlpha : public LLTexLayerParam  { +    LL_ALIGN_NEW  public:  	LLTexLayerParamAlpha( LLTexLayerInterface* layer );  	LLTexLayerParamAlpha( LLAvatarAppearance* appearance );  	/*virtual*/ ~LLTexLayerParamAlpha(); -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} -  	/*virtual*/ LLViewerVisualParam* cloneParam(LLWearable* wearable = NULL) const;  	// LLVisualParam Virtual functions @@ -146,9 +137,9 @@ private:  //  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -LL_ALIGN_PREFIX(16) -class LLTexLayerParamColor : public LLTexLayerParam +class alignas(16) LLTexLayerParamColor : public LLTexLayerParam  { +    LL_ALIGN_NEW  public:  	enum EColorOperation  	{ @@ -161,16 +152,6 @@ public:  	LLTexLayerParamColor( LLTexLayerInterface* layer );  	LLTexLayerParamColor( LLAvatarAppearance* appearance ); -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} -  	/* virtual */ ~LLTexLayerParamColor();  	/*virtual*/ LLViewerVisualParam* cloneParam(LLWearable* wearable = NULL) const; @@ -198,8 +179,8 @@ protected:  	virtual void onGlobalColorChanged() {}  private: -	LL_ALIGN_16(LLVector4a				mAvgDistortionVec); -} LL_ALIGN_POSTFIX(16); +	LLVector4a				mAvgDistortionVec; +};  class LLTexLayerParamColorInfo : public LLViewerVisualParamInfo  { diff --git a/indra/llcharacter/llcharacter.cpp b/indra/llcharacter/llcharacter.cpp index b764ef0c7e..8874df32f5 100644 --- a/indra/llcharacter/llcharacter.cpp +++ b/indra/llcharacter/llcharacter.cpp @@ -188,20 +188,15 @@ void LLCharacter::requestStopMotion( LLMotion* motion)  //-----------------------------------------------------------------------------  // updateMotions()  //----------------------------------------------------------------------------- -static LLTrace::BlockTimerStatHandle FTM_UPDATE_ANIMATION("Update Animation"); -static LLTrace::BlockTimerStatHandle FTM_UPDATE_HIDDEN_ANIMATION("Update Hidden Anim"); -static LLTrace::BlockTimerStatHandle FTM_UPDATE_MOTIONS("Update Motions"); -  void LLCharacter::updateMotions(e_update_t update_type)  { +    LL_PROFILE_ZONE_SCOPED;  	if (update_type == HIDDEN_UPDATE)  	{ -		LL_RECORD_BLOCK_TIME(FTM_UPDATE_HIDDEN_ANIMATION);  		mMotionController.updateMotionsMinimal();  	}  	else  	{ -		LL_RECORD_BLOCK_TIME(FTM_UPDATE_ANIMATION);  		// unpause if the number of outstanding pause requests has dropped to the initial one  		if (mMotionController.isPaused() && mPauseRequest->getNumRefs() == 1)  		{ @@ -209,7 +204,6 @@ void LLCharacter::updateMotions(e_update_t update_type)  		}  		bool force_update = (update_type == FORCE_UPDATE);  		{ -			LL_RECORD_BLOCK_TIME(FTM_UPDATE_MOTIONS);  			mMotionController.updateMotions(force_update);  		}  	} diff --git a/indra/llcharacter/lleditingmotion.cpp b/indra/llcharacter/lleditingmotion.cpp index ddf89f30f2..c5757163d9 100644 --- a/indra/llcharacter/lleditingmotion.cpp +++ b/indra/llcharacter/lleditingmotion.cpp @@ -163,6 +163,7 @@ BOOL LLEditingMotion::onActivate()  //-----------------------------------------------------------------------------  BOOL LLEditingMotion::onUpdate(F32 time, U8* joint_mask)  { +    LL_PROFILE_ZONE_SCOPED;  	LLVector3 focus_pt;  	LLVector3* pointAtPt = (LLVector3*)mCharacter->getAnimationData("PointAtPoint"); diff --git a/indra/llcharacter/llhandmotion.cpp b/indra/llcharacter/llhandmotion.cpp index b3bf5a9a91..ceba956214 100644 --- a/indra/llcharacter/llhandmotion.cpp +++ b/indra/llcharacter/llhandmotion.cpp @@ -121,6 +121,7 @@ BOOL LLHandMotion::onActivate()  //-----------------------------------------------------------------------------  BOOL LLHandMotion::onUpdate(F32 time, U8* joint_mask)  { +    LL_PROFILE_ZONE_SCOPED;  	eHandPose *requestedHandPose;  	F32 timeDelta = time - mLastTime; diff --git a/indra/llcharacter/llheadrotmotion.cpp b/indra/llcharacter/llheadrotmotion.cpp index e91de7a11d..fdf97266a3 100644 --- a/indra/llcharacter/llheadrotmotion.cpp +++ b/indra/llcharacter/llheadrotmotion.cpp @@ -175,6 +175,7 @@ BOOL LLHeadRotMotion::onActivate()  //-----------------------------------------------------------------------------  BOOL LLHeadRotMotion::onUpdate(F32 time, U8* joint_mask)  { +    LL_PROFILE_ZONE_SCOPED;  	LLQuaternion	targetHeadRotWorld;  	LLQuaternion	currentRootRotWorld = mRootJoint->getWorldRotation();  	LLQuaternion	currentInvRootRotWorld = ~currentRootRotWorld; @@ -458,6 +459,7 @@ void LLEyeMotion::adjustEyeTarget(LLVector3* targetPos, LLJointState& left_eye_s  //-----------------------------------------------------------------------------  BOOL LLEyeMotion::onUpdate(F32 time, U8* joint_mask)  { +    LL_PROFILE_ZONE_SCOPED;  	//calculate jitter  	if (mEyeJitterTimer.getElapsedTimeF32() > mEyeJitterTime)  	{ diff --git a/indra/llcharacter/llkeyframefallmotion.cpp b/indra/llcharacter/llkeyframefallmotion.cpp index 60ab2e9929..ac53bcd768 100644 --- a/indra/llcharacter/llkeyframefallmotion.cpp +++ b/indra/llcharacter/llkeyframefallmotion.cpp @@ -116,6 +116,7 @@ BOOL LLKeyframeFallMotion::onActivate()  //-----------------------------------------------------------------------------  BOOL LLKeyframeFallMotion::onUpdate(F32 activeTime, U8* joint_mask)  { +    LL_PROFILE_ZONE_SCOPED;  	BOOL result = LLKeyframeMotion::onUpdate(activeTime, joint_mask);  	F32  slerp_amt = clamp_rescale(activeTime / getDuration(), 0.5f, 0.75f, 0.f, 1.f); diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp index cde38c8091..429c479d0d 100644 --- a/indra/llcharacter/llkeyframemotion.cpp +++ b/indra/llcharacter/llkeyframemotion.cpp @@ -683,6 +683,7 @@ BOOL LLKeyframeMotion::onActivate()  //-----------------------------------------------------------------------------  BOOL LLKeyframeMotion::onUpdate(F32 time, U8* joint_mask)  { +    LL_PROFILE_ZONE_SCOPED;  	// llassert(time >= 0.f);		// This will fire  	time = llmax(0.f, time); diff --git a/indra/llcharacter/llkeyframemotionparam.cpp b/indra/llcharacter/llkeyframemotionparam.cpp index 6ed18bc445..aba1c5db39 100644 --- a/indra/llcharacter/llkeyframemotionparam.cpp +++ b/indra/llcharacter/llkeyframemotionparam.cpp @@ -158,6 +158,7 @@ BOOL LLKeyframeMotionParam::onActivate()  //-----------------------------------------------------------------------------  BOOL LLKeyframeMotionParam::onUpdate(F32 time, U8* joint_mask)  { +    LL_PROFILE_ZONE_SCOPED;  	F32 weightFactor = 1.f / (F32)mParameterizedMotions.size();  	// zero out all pose weights diff --git a/indra/llcharacter/llkeyframewalkmotion.cpp b/indra/llcharacter/llkeyframewalkmotion.cpp index f180702385..298b37e60c 100644 --- a/indra/llcharacter/llkeyframewalkmotion.cpp +++ b/indra/llcharacter/llkeyframewalkmotion.cpp @@ -105,6 +105,7 @@ void LLKeyframeWalkMotion::onDeactivate()  //-----------------------------------------------------------------------------  BOOL LLKeyframeWalkMotion::onUpdate(F32 time, U8* joint_mask)  { +    LL_PROFILE_ZONE_SCOPED;  	// compute time since last update  	F32 deltaTime = time - mRealTimeLast; @@ -198,6 +199,7 @@ BOOL LLWalkAdjustMotion::onActivate()  //-----------------------------------------------------------------------------  BOOL LLWalkAdjustMotion::onUpdate(F32 time, U8* joint_mask)  { +    LL_PROFILE_ZONE_SCOPED;  	// delta_time is guaranteed to be non zero  	F32 delta_time = llclamp(time - mLastTime, TIME_EPSILON, MAX_TIME_DELTA);  	mLastTime = time; @@ -373,6 +375,7 @@ BOOL LLFlyAdjustMotion::onActivate()  //-----------------------------------------------------------------------------  BOOL LLFlyAdjustMotion::onUpdate(F32 time, U8* joint_mask)  { +    LL_PROFILE_ZONE_SCOPED;  	LLVector3 ang_vel = mCharacter->getCharacterAngularVelocity() * mCharacter->getTimeDilation();  	F32 speed = mCharacter->getCharacterVelocity().magVec(); diff --git a/indra/llcharacter/llmotioncontroller.cpp b/indra/llcharacter/llmotioncontroller.cpp index c48d02b652..d4546ce901 100644 --- a/indra/llcharacter/llmotioncontroller.cpp +++ b/indra/llcharacter/llmotioncontroller.cpp @@ -503,6 +503,7 @@ void LLMotionController::resetJointSignatures()  //-----------------------------------------------------------------------------  void LLMotionController::updateIdleMotion(LLMotion* motionp)  { +    LL_PROFILE_ZONE_SCOPED;  	if (motionp->isStopped() && mAnimTime > motionp->getStopTime() + motionp->getEaseOutDuration())  	{  		deactivateMotionInstance(motionp); @@ -541,6 +542,7 @@ void LLMotionController::updateIdleMotion(LLMotion* motionp)  //-----------------------------------------------------------------------------  void LLMotionController::updateIdleActiveMotions()  { +    LL_PROFILE_ZONE_SCOPED;  	for (motion_list_t::iterator iter = mActiveMotions.begin();  		 iter != mActiveMotions.end(); )  	{ @@ -553,10 +555,9 @@ void LLMotionController::updateIdleActiveMotions()  //-----------------------------------------------------------------------------  // updateMotionsByType()  //----------------------------------------------------------------------------- -static LLTrace::BlockTimerStatHandle FTM_MOTION_ON_UPDATE("Motion onUpdate"); -  void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_type)  { +    LL_PROFILE_ZONE_SCOPED;  	BOOL update_result = TRUE;  	U8 last_joint_signature[LL_CHARACTER_MAX_ANIMATED_JOINTS]; @@ -712,7 +713,6 @@ void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_ty  			// perform motion update  			{ -				LL_RECORD_BLOCK_TIME(FTM_MOTION_ON_UPDATE);  				update_result = motionp->onUpdate(mAnimTime - motionp->mActivationTimestamp, last_joint_signature);  			}  		} @@ -768,6 +768,7 @@ void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_ty  //-----------------------------------------------------------------------------  void LLMotionController::updateLoadingMotions()  { +    LL_PROFILE_ZONE_SCOPED;  	// query pending motions for completion  	for (motion_set_t::iterator iter = mLoadingMotions.begin();  		 iter != mLoadingMotions.end(); ) @@ -815,6 +816,7 @@ void LLMotionController::updateLoadingMotions()  //-----------------------------------------------------------------------------  void LLMotionController::updateMotions(bool force_update)  { +    LL_PROFILE_ZONE_SCOPED;      // SL-763: "Distant animated objects run at super fast speed"      // The use_quantum optimization or possibly the associated code in setTimeStamp()      // does not work as implemented. @@ -907,6 +909,7 @@ void LLMotionController::updateMotions(bool force_update)  //-----------------------------------------------------------------------------  void LLMotionController::updateMotionsMinimal()  { +    LL_PROFILE_ZONE_SCOPED;  	// Always update mPrevTimerElapsed  	mPrevTimerElapsed = mTimer.getElapsedTimeF32(); @@ -924,6 +927,7 @@ void LLMotionController::updateMotionsMinimal()  //-----------------------------------------------------------------------------  BOOL LLMotionController::activateMotionInstance(LLMotion *motion, F32 time)  { +    LL_PROFILE_ZONE_SCOPED;  	// It's not clear why the getWeight() line seems to be crashing this, but  	// hopefully this fixes it.  	if (motion == NULL || motion->getPose() == NULL) diff --git a/indra/llcharacter/lltargetingmotion.cpp b/indra/llcharacter/lltargetingmotion.cpp index 69681e4197..ec75212a40 100644 --- a/indra/llcharacter/lltargetingmotion.cpp +++ b/indra/llcharacter/lltargetingmotion.cpp @@ -103,6 +103,7 @@ BOOL LLTargetingMotion::onActivate()  //-----------------------------------------------------------------------------  BOOL LLTargetingMotion::onUpdate(F32 time, U8* joint_mask)  { +    LL_PROFILE_ZONE_SCOPED;  	F32 slerp_amt = LLSmoothInterpolation::getInterpolant(TORSO_TARGET_HALF_LIFE);  	LLVector3 target; diff --git a/indra/llcommon/lldate.cpp b/indra/llcommon/lldate.cpp index 7a2a0869f4..2ddcf40895 100644 --- a/indra/llcommon/lldate.cpp +++ b/indra/llcommon/lldate.cpp @@ -86,11 +86,9 @@ std::string LLDate::asRFC1123() const  	return toHTTPDateString (std::string ("%A, %d %b %Y %H:%M:%S GMT"));  } -LLTrace::BlockTimerStatHandle FT_DATE_FORMAT("Date Format"); -  std::string LLDate::toHTTPDateString (std::string fmt) const  { -	LL_RECORD_BLOCK_TIME(FT_DATE_FORMAT); +    LL_PROFILE_ZONE_SCOPED;  	time_t locSeconds = (time_t) mSecondsSinceEpoch;  	struct tm * gmt = gmtime (&locSeconds); @@ -99,7 +97,7 @@ std::string LLDate::toHTTPDateString (std::string fmt) const  std::string LLDate::toHTTPDateString (tm * gmt, std::string fmt)  { -	LL_RECORD_BLOCK_TIME(FT_DATE_FORMAT); +    LL_PROFILE_ZONE_SCOPED;  	// avoid calling setlocale() unnecessarily - it's expensive.  	static std::string prev_locale = ""; diff --git a/indra/llcommon/llfasttimer.cpp b/indra/llcommon/llfasttimer.cpp index 5b6a7b82f8..d38946004f 100644 --- a/indra/llcommon/llfasttimer.cpp +++ b/indra/llcommon/llfasttimer.cpp @@ -191,29 +191,30 @@ TimeBlockTreeNode& BlockTimerStatHandle::getTreeNode() const  } +  void BlockTimer::bootstrapTimerTree()  { -	for (auto& base : BlockTimerStatHandle::instance_snapshot()) -	{ -		// because of indirect derivation from LLInstanceTracker, have to downcast -		BlockTimerStatHandle& timer = static_cast<BlockTimerStatHandle&>(base); -		if (&timer == &BlockTimer::getRootTimeBlock()) continue; - -		// bootstrap tree construction by attaching to last timer to be on stack -		// when this timer was called -		if (timer.getParent() == &BlockTimer::getRootTimeBlock()) -		{ -			TimeBlockAccumulator& accumulator = timer.getCurrentAccumulator(); - -			if (accumulator.mLastCaller) -			{ -				timer.setParent(accumulator.mLastCaller); -				accumulator.mParent = accumulator.mLastCaller; -			} -			// no need to push up tree on first use, flag can be set spuriously -			accumulator.mMoveUpTree = false; -		} -	} +    for (auto& base : BlockTimerStatHandle::instance_snapshot()) +    { +        // because of indirect derivation from LLInstanceTracker, have to downcast +        BlockTimerStatHandle& timer = static_cast<BlockTimerStatHandle&>(base); +        if (&timer == &BlockTimer::getRootTimeBlock()) continue; + +        // bootstrap tree construction by attaching to last timer to be on stack +        // when this timer was called +        if (timer.getParent() == &BlockTimer::getRootTimeBlock()) +        { +            TimeBlockAccumulator& accumulator = timer.getCurrentAccumulator(); + +            if (accumulator.mLastCaller) +            { +                timer.setParent(accumulator.mLastCaller); +                accumulator.mParent = accumulator.mLastCaller; +            } +            // no need to push up tree on first use, flag can be set spuriously +            accumulator.mMoveUpTree = false; +        } +    }  }  // bump timers up tree if they have been flagged as being in the wrong place @@ -221,6 +222,7 @@ void BlockTimer::bootstrapTimerTree()  // this preserves partial order derived from current frame's observations  void BlockTimer::incrementalUpdateTimerTree()  { +    LL_PROFILE_ZONE_SCOPED;  	for(block_timer_tree_df_post_iterator_t it = begin_block_timer_tree_df_post(BlockTimer::getRootTimeBlock());  		it != end_block_timer_tree_df_post();  		++it) @@ -260,7 +262,8 @@ void BlockTimer::incrementalUpdateTimerTree()  void BlockTimer::updateTimes() -	{ +{ +    LL_PROFILE_ZONE_SCOPED;  	// walk up stack of active timers and accumulate current time while leaving timing structures active  	BlockTimerStackRecord* stack_record	= LLThreadLocalSingletonPointer<BlockTimerStackRecord>::getInstance();  	if (!stack_record) return; @@ -271,7 +274,7 @@ void BlockTimer::updateTimes()  	while(cur_timer   		&& cur_timer->mParentTimerData.mActiveTimer != cur_timer) // root defined by parent pointing to self -		{ +	{  		U64 cumulative_time_delta = cur_time - cur_timer->mStartTime;  		cur_timer->mStartTime = cur_time; diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h index 2704a495e0..41023b4ba4 100644 --- a/indra/llcommon/llmemory.h +++ b/indra/llcommon/llmemory.h @@ -111,6 +111,16 @@ public:                                     \      void operator delete(void* ptr)         \      {                                       \          ll_aligned_free_16(ptr);            \ +    }                                       \ +                                            \ +    void* operator new[](size_t size)       \ +    {                                       \ +        return ll_aligned_malloc_16(size);  \ +    }                                       \ +                                            \ +    void operator delete[](void* ptr)       \ +    {                                       \ +        ll_aligned_free_16(ptr);            \      } @@ -126,8 +136,9 @@ public:                                     \  #else  	inline void* ll_aligned_malloc_fallback( size_t size, int align )  	{ +        LL_PROFILE_ZONE_SCOPED;  	#if defined(LL_WINDOWS) -		return _aligned_malloc(size, align); +        void* ret = _aligned_malloc(size, align);  	#else          char* aligned = NULL;  		void* mem = malloc( size + (align - 1) + sizeof(void*) ); @@ -138,12 +149,16 @@ public:                                     \              ((void**)aligned)[-1] = mem;          } -		return aligned; +		void* ret = aligned;  	#endif +        LL_PROFILE_ALLOC(ret, size); +        return ret;  	}  	inline void ll_aligned_free_fallback( void* ptr )  	{ +        LL_PROFILE_ZONE_SCOPED; +        LL_PROFILE_FREE(ptr);  	#if defined(LL_WINDOWS)  		_aligned_free(ptr);  	#else @@ -159,21 +174,24 @@ public:                                     \  inline void* ll_aligned_malloc_16(size_t size) // returned hunk MUST be freed with ll_aligned_free_16().  { +    LL_PROFILE_ZONE_SCOPED;  #if defined(LL_WINDOWS) -	return _aligned_malloc(size, 16); +	void* ret = _aligned_malloc(size, 16);  #elif defined(LL_DARWIN) -	return malloc(size); // default osx malloc is 16 byte aligned. +	void* ret = malloc(size); // default osx malloc is 16 byte aligned.  #else -	void *rtn; -	if (LL_LIKELY(0 == posix_memalign(&rtn, 16, size))) -		return rtn; -	else // bad alignment requested, or out of memory -		return NULL; +	void *ret; +    if (0 != posix_memalign(&ret, 16, size)) +        return nullptr;  #endif +    LL_PROFILE_ALLOC(ret, size); +    return ret;  }  inline void ll_aligned_free_16(void *p)  { +    LL_PROFILE_ZONE_SCOPED; +    LL_PROFILE_FREE(p);  #if defined(LL_WINDOWS)  	_aligned_free(p);  #elif defined(LL_DARWIN) @@ -185,10 +203,12 @@ inline void ll_aligned_free_16(void *p)  inline void* ll_aligned_realloc_16(void* ptr, size_t size, size_t old_size) // returned hunk MUST be freed with ll_aligned_free_16().  { +    LL_PROFILE_ZONE_SCOPED; +    LL_PROFILE_FREE(ptr);  #if defined(LL_WINDOWS) -	return _aligned_realloc(ptr, size, 16); +	void* ret = _aligned_realloc(ptr, size, 16);  #elif defined(LL_DARWIN) -	return realloc(ptr,size); // default osx malloc is 16 byte aligned. +	void* ret = realloc(ptr,size); // default osx malloc is 16 byte aligned.  #else  	//FIXME: memcpy is SLOW  	void* ret = ll_aligned_malloc_16(size); @@ -201,27 +221,31 @@ inline void* ll_aligned_realloc_16(void* ptr, size_t size, size_t old_size) // r  		}  		ll_aligned_free_16(ptr);  	} -	return ret;  #endif +    LL_PROFILE_ALLOC(ptr, size); +    return ret;  }  inline void* ll_aligned_malloc_32(size_t size) // returned hunk MUST be freed with ll_aligned_free_32().  { +    LL_PROFILE_ZONE_SCOPED;  #if defined(LL_WINDOWS) -	return _aligned_malloc(size, 32); +	void* ret = _aligned_malloc(size, 32);  #elif defined(LL_DARWIN) -	return ll_aligned_malloc_fallback( size, 32 ); +	void* ret = ll_aligned_malloc_fallback( size, 32 );  #else -	void *rtn; -	if (LL_LIKELY(0 == posix_memalign(&rtn, 32, size))) -		return rtn; -	else // bad alignment requested, or out of memory -		return NULL; +	void *ret; +    if (0 != posix_memalign(&ret, 32, size)) +        return nullptr;  #endif +    LL_PROFILE_ALLOC(ret, size); +    return ret;  }  inline void ll_aligned_free_32(void *p)  { +    LL_PROFILE_ZONE_SCOPED; +    LL_PROFILE_FREE(p);  #if defined(LL_WINDOWS)  	_aligned_free(p);  #elif defined(LL_DARWIN) @@ -235,29 +259,35 @@ inline void ll_aligned_free_32(void *p)  template<size_t ALIGNMENT>  LL_FORCE_INLINE void* ll_aligned_malloc(size_t size)  { +    LL_PROFILE_ZONE_SCOPED; +    void* ret;  	if (LL_DEFAULT_HEAP_ALIGN % ALIGNMENT == 0)  	{ -		return malloc(size); +		ret = malloc(size); +        LL_PROFILE_ALLOC(ret, size);  	}  	else if (ALIGNMENT == 16)  	{ -		return ll_aligned_malloc_16(size); +		ret = ll_aligned_malloc_16(size);  	}  	else if (ALIGNMENT == 32)  	{ -		return ll_aligned_malloc_32(size); +		ret = ll_aligned_malloc_32(size);  	}  	else  	{ -		return ll_aligned_malloc_fallback(size, ALIGNMENT); +		ret = ll_aligned_malloc_fallback(size, ALIGNMENT);  	} +    return ret;  }  template<size_t ALIGNMENT>  LL_FORCE_INLINE void ll_aligned_free(void* ptr)  { +    LL_PROFILE_ZONE_SCOPED;  	if (ALIGNMENT == LL_DEFAULT_HEAP_ALIGN)  	{ +        LL_PROFILE_FREE(ptr);  		free(ptr);  	}  	else if (ALIGNMENT == 16) @@ -279,6 +309,7 @@ LL_FORCE_INLINE void ll_aligned_free(void* ptr)  //  inline void ll_memcpy_nonaliased_aligned_16(char* __restrict dst, const char* __restrict src, size_t bytes)  { +    LL_PROFILE_ZONE_SCOPED;  	assert(src != NULL);  	assert(dst != NULL);  	assert(bytes > 0); diff --git a/indra/llcommon/llprofiler.h b/indra/llcommon/llprofiler.h index e36f693dd3..ca60d23248 100644 --- a/indra/llcommon/llprofiler.h +++ b/indra/llcommon/llprofiler.h @@ -66,6 +66,8 @@ extern thread_local bool gProfilerEnabled;          #define LL_PROFILE_ZONE_ERR(name)               LL_PROFILE_ZONE_NAMED_COLOR( name, 0XFF0000  )  // RGB yellow          #define LL_PROFILE_ZONE_INFO(name)              LL_PROFILE_ZONE_NAMED_COLOR( name, 0X00FFFF  )  // RGB cyan          #define LL_PROFILE_ZONE_WARN(name)              LL_PROFILE_ZONE_NAMED_COLOR( name, 0x0FFFF00 )  // RGB red +        #define LL_PROFILE_ALLOC(ptr, size)             TracyAlloc(ptr, size) +        #define LL_PROFILE_FREE(ptr)                    TracyFree(ptr)      #endif      #if LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_FAST_TIMER          #define LL_PROFILER_FRAME_END @@ -81,11 +83,13 @@ extern thread_local bool gProfilerEnabled;          #define LL_PROFILE_ZONE_ERR(name)               (void)(name); // Not supported          #define LL_PROFILE_ZONE_INFO(name)              (void)(name); // Not supported          #define LL_PROFILE_ZONE_WARN(name)              (void)(name); // Not supported +        #define LL_PROFILE_ALLOC(ptr, size)             (void)(ptr); (void)(size); +        #define LL_PROFILE_FREE(ptr)                    (void)(ptr);      #endif      #if LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY_FAST_TIMER          #define LL_PROFILER_FRAME_END                   FrameMark          #define LL_PROFILER_SET_THREAD_NAME( name )     tracy::SetThreadName( name );    gProfilerEnabled = true; -        #define LL_RECORD_BLOCK_TIME(name)              ZoneScoped                                          const LLTrace::BlockTimer& LL_GLUE_TOKENS(block_time_recorder, __LINE__)(LLTrace::timeThisBlock(name)); (void)LL_GLUE_TOKENS(block_time_recorder, __LINE__); +        #define LL_RECORD_BLOCK_TIME(name)              ZoneNamedN(___tracy_scoped_zone, #name, true);   const LLTrace::BlockTimer& LL_GLUE_TOKENS(block_time_recorder, __LINE__)(LLTrace::timeThisBlock(name)); (void)LL_GLUE_TOKENS(block_time_recorder, __LINE__);          #define LL_PROFILE_ZONE_NAMED(name)             ZoneNamedN( ___tracy_scoped_zone, #name, true );          #define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, true ) // RGB          #define LL_PROFILE_ZONE_SCOPED                  ZoneScoped @@ -96,6 +100,8 @@ extern thread_local bool gProfilerEnabled;          #define LL_PROFILE_ZONE_ERR(name)               LL_PROFILE_ZONE_NAMED_COLOR( name, 0XFF0000  )  // RGB yellow          #define LL_PROFILE_ZONE_INFO(name)              LL_PROFILE_ZONE_NAMED_COLOR( name, 0X00FFFF  )  // RGB cyan          #define LL_PROFILE_ZONE_WARN(name)              LL_PROFILE_ZONE_NAMED_COLOR( name, 0x0FFFF00 )  // RGB red +        #define LL_PROFILE_ALLOC(ptr, size)             TracyAlloc(ptr, size) +        #define LL_PROFILE_FREE(ptr)                    TracyFree(ptr)      #endif  #else      #define LL_PROFILER_FRAME_END diff --git a/indra/llcommon/llsdparam.cpp b/indra/llcommon/llsdparam.cpp index 2e7b46f885..af4ccf25fd 100644 --- a/indra/llcommon/llsdparam.cpp +++ b/indra/llcommon/llsdparam.cpp @@ -37,8 +37,6 @@ static 	LLInitParam::Parser::parser_write_func_map_t sWriteFuncs;  static 	LLInitParam::Parser::parser_inspect_func_map_t sInspectFuncs;  static const LLSD NO_VALUE_MARKER; -LLTrace::BlockTimerStatHandle FTM_SD_PARAM_ADAPTOR("LLSD to LLInitParam conversion"); -  //  // LLParamSDParser  // diff --git a/indra/llcommon/llsdparam.h b/indra/llcommon/llsdparam.h index 93910b70ae..82a623a8a0 100644 --- a/indra/llcommon/llsdparam.h +++ b/indra/llcommon/llsdparam.h @@ -110,7 +110,6 @@ private:  }; -extern LL_COMMON_API LLTrace::BlockTimerStatHandle FTM_SD_PARAM_ADAPTOR;  template<typename T>  class LLSDParamAdapter : public T  { @@ -118,7 +117,7 @@ public:  	LLSDParamAdapter() {}  	LLSDParamAdapter(const LLSD& sd)  	{ -		LL_RECORD_BLOCK_TIME(FTM_SD_PARAM_ADAPTOR); +        LL_PROFILE_ZONE_SCOPED;  		LLParamSDParser parser;  		// don't spam for implicit parsing of LLSD, as we want to allow arbitrary freeform data and ignore most of it  		bool parse_silently = true; diff --git a/indra/llcommon/llsingleton.h b/indra/llcommon/llsingleton.h index 2e43a3cbed..10a8ecfedb 100644 --- a/indra/llcommon/llsingleton.h +++ b/indra/llcommon/llsingleton.h @@ -839,4 +839,30 @@ private:                                                                \      /* LLSINGLETON() is carefully implemented to permit exactly this */ \      LLSINGLETON_C11(DERIVED_CLASS) {} +// Relatively unsafe singleton implementation that is much faster +// and simpler than LLSingleton, but has no dependency tracking +// or inherent thread safety and requires manual invocation of  +// createInstance before first use. +template<class T> +class LLSimpleton +{ +public: +    static T* sInstance; +     +    static void createInstance()  +    {  +        llassert(sInstance == nullptr); +        sInstance = new T();  +    } +     +    static inline T* getInstance() { return sInstance; } +    static inline T& instance() { return *getInstance(); } +    static inline bool instanceExists() { return sInstance != nullptr; } + +    static void deleteSingleton() {  +        delete sInstance;  +        sInstance = nullptr;  +    } +}; +  #endif diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp index 0290eea143..f6f9f97809 100644 --- a/indra/llcommon/llstring.cpp +++ b/indra/llcommon/llstring.cpp @@ -37,9 +37,6 @@  #include <winnls.h> // for WideCharToMultiByte  #endif -LLTrace::BlockTimerStatHandle FT_STRING_FORMAT("String Format"); - -  std::string ll_safe_string(const char* in)  {  	if(in) return std::string(in); @@ -1356,7 +1353,7 @@ bool LLStringUtil::formatDatetime(std::string& replacement, std::string token,  template<>   S32 LLStringUtil::format(std::string& s, const format_map_t& substitutions)  { -	LL_RECORD_BLOCK_TIME(FT_STRING_FORMAT); +    LL_PROFILE_ZONE_SCOPED;  	S32 res = 0;  	std::string output; @@ -1429,7 +1426,7 @@ S32 LLStringUtil::format(std::string& s, const format_map_t& substitutions)  template<>   S32 LLStringUtil::format(std::string& s, const LLSD& substitutions)  { -	LL_RECORD_BLOCK_TIME(FT_STRING_FORMAT); +    LL_PROFILE_ZONE_SCOPED;  	S32 res = 0;  	if (!substitutions.isMap())  diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp index 6d5d043e8d..306ef05b6d 100644 --- a/indra/llcommon/llsys.cpp +++ b/indra/llcommon/llsys.cpp @@ -871,11 +871,9 @@ LLMemoryInfo& LLMemoryInfo::refresh()  	return *this;  } -static LLTrace::BlockTimerStatHandle FTM_MEMINFO_LOAD_STATS("MemInfo Load Stats"); -  LLSD LLMemoryInfo::loadStatsMap()  { -	LL_RECORD_BLOCK_TIME(FTM_MEMINFO_LOAD_STATS); +    LL_PROFILE_ZONE_SCOPED;  	// This implementation is derived from stream() code (as of 2011-06-29).  	Stats stats; diff --git a/indra/llcommon/lltrace.cpp b/indra/llcommon/lltrace.cpp index 54079a4689..f59b207ded 100644 --- a/indra/llcommon/lltrace.cpp +++ b/indra/llcommon/lltrace.cpp @@ -61,6 +61,7 @@ TimeBlockTreeNode::TimeBlockTreeNode()  void TimeBlockTreeNode::setParent( BlockTimerStatHandle* parent )  { +    LL_PROFILE_ZONE_SCOPED;  	llassert_always(parent != mBlock);  	llassert_always(parent != NULL); diff --git a/indra/llcommon/lltrace.h b/indra/llcommon/lltrace.h index 0d0cd6f581..4051c558a4 100644 --- a/indra/llcommon/lltrace.h +++ b/indra/llcommon/lltrace.h @@ -227,6 +227,7 @@ public:  	void setName(const char* name)  	{ +        LL_PROFILE_ZONE_SCOPED;  		mName = name;  		setKey(name);  	} @@ -234,12 +235,14 @@ public:  	/*virtual*/ const char* getUnitLabel() const { return "KB"; }  	StatType<MemAccumulator::AllocationFacet>& allocations()  -	{  +	{ +        LL_PROFILE_ZONE_SCOPED;  		return static_cast<StatType<MemAccumulator::AllocationFacet>&>(*(StatType<MemAccumulator>*)this);  	}  	StatType<MemAccumulator::DeallocationFacet>& deallocations()  -	{  +	{ +        LL_PROFILE_ZONE_SCOPED;  		return static_cast<StatType<MemAccumulator::DeallocationFacet>&>(*(StatType<MemAccumulator>*)this);  	}  }; @@ -261,6 +264,7 @@ struct MeasureMem<T, typename T::mem_trackable_tag_t, IS_BYTES>  {  	static size_t measureFootprint(const T& value)  	{ +        LL_PROFILE_ZONE_SCOPED;  		return sizeof(T) + value.getMemFootprint();  	}  }; @@ -270,6 +274,7 @@ struct MeasureMem<T, IS_MEM_TRACKABLE, typename T::is_unit_t>  {  	static size_t measureFootprint(const T& value)  	{ +        LL_PROFILE_ZONE_SCOPED;  		return U32Bytes(value).value();  	}  }; @@ -279,6 +284,7 @@ struct MeasureMem<T*, IS_MEM_TRACKABLE, IS_BYTES>  {  	static size_t measureFootprint(const T* value)  	{ +        LL_PROFILE_ZONE_SCOPED;  		if (!value)  		{  			return 0; @@ -323,6 +329,7 @@ struct MeasureMem<std::basic_string<T>, IS_MEM_TRACKABLE, IS_BYTES>  {  	static size_t measureFootprint(const std::basic_string<T>& value)  	{ +        LL_PROFILE_ZONE_SCOPED;  		return value.capacity() * sizeof(T);  	}  }; @@ -331,6 +338,7 @@ struct MeasureMem<std::basic_string<T>, IS_MEM_TRACKABLE, IS_BYTES>  template<typename T>  inline void claim_alloc(MemStatHandle& measurement, const T& value)  { +    LL_PROFILE_ZONE_SCOPED;  #if LL_TRACE_ENABLED  	S32 size = MeasureMem<T>::measureFootprint(value);  	if(size == 0) return; @@ -343,6 +351,7 @@ inline void claim_alloc(MemStatHandle& measurement, const T& value)  template<typename T>  inline void disclaim_alloc(MemStatHandle& measurement, const T& value)  { +    LL_PROFILE_ZONE_SCOPED;  #if LL_TRACE_ENABLED  	S32 size = MeasureMem<T>::measureFootprint(value);  	if(size == 0) return; @@ -352,141 +361,6 @@ inline void disclaim_alloc(MemStatHandle& measurement, const T& value)  #endif  } -template<typename DERIVED, size_t ALIGNMENT = LL_DEFAULT_HEAP_ALIGN> -class MemTrackableNonVirtual -{ -public: -	typedef void mem_trackable_tag_t; - -	MemTrackableNonVirtual(const char* name) -#if LL_TRACE_ENABLED -	:	mMemFootprint(0) -#endif -	{ -#if LL_TRACE_ENABLED -		static bool name_initialized = false; -		if (!name_initialized) -		{ -			name_initialized = true; -			sMemStat.setName(name); -		} -#endif -	} - -#if LL_TRACE_ENABLED -	~MemTrackableNonVirtual() -	{ -		disclaimMem(mMemFootprint); -	} - -	static MemStatHandle& getMemStatHandle() -	{ -		return sMemStat; -	} - -	S32 getMemFootprint() const	{ return mMemFootprint; } -#endif - -	void* operator new(size_t size)  -	{ -#if LL_TRACE_ENABLED -		claim_alloc(sMemStat, size); -#endif -		return ll_aligned_malloc<ALIGNMENT>(size); -	} - -	template<int CUSTOM_ALIGNMENT> -	static void* aligned_new(size_t size) -	{ -#if LL_TRACE_ENABLED -		claim_alloc(sMemStat, size); -#endif -		return ll_aligned_malloc<CUSTOM_ALIGNMENT>(size); -	} - -	void operator delete(void* ptr, size_t size) -	{ -#if LL_TRACE_ENABLED -		disclaim_alloc(sMemStat, size); -#endif -		ll_aligned_free<ALIGNMENT>(ptr); -	} - -	template<int CUSTOM_ALIGNMENT> -	static void aligned_delete(void* ptr, size_t size) -	{ -#if LL_TRACE_ENABLED -		disclaim_alloc(sMemStat, size); -#endif -		ll_aligned_free<CUSTOM_ALIGNMENT>(ptr); -	} - -	void* operator new [](size_t size) -	{ -#if LL_TRACE_ENABLED -		claim_alloc(sMemStat, size); -#endif -		return ll_aligned_malloc<ALIGNMENT>(size); -	} - -	void operator delete[](void* ptr, size_t size) -	{ -#if LL_TRACE_ENABLED -		disclaim_alloc(sMemStat, size); -#endif -		ll_aligned_free<ALIGNMENT>(ptr); -	} - -	// claim memory associated with other objects/data as our own, adding to our calculated footprint -	template<typename CLAIM_T> -	void claimMem(const CLAIM_T& value) const -	{ -#if LL_TRACE_ENABLED -		S32 size = MeasureMem<CLAIM_T>::measureFootprint(value); -		claim_alloc(sMemStat, size); -		mMemFootprint += size; -#endif -	} - -	// remove memory we had claimed from our calculated footprint -	template<typename CLAIM_T> -	void disclaimMem(const CLAIM_T& value) const -	{ -#if LL_TRACE_ENABLED -		S32 size = MeasureMem<CLAIM_T>::measureFootprint(value); -		disclaim_alloc(sMemStat, size); -		mMemFootprint -= size; -#endif -	} - -private: -#if LL_TRACE_ENABLED -	// use signed values so that we can temporarily go negative -	// and reconcile in destructor -	// NB: this assumes that no single class is responsible for > 2GB of allocations -	mutable S32 mMemFootprint; -	 -	static	MemStatHandle	sMemStat; -#endif - -}; - -#if LL_TRACE_ENABLED -template<typename DERIVED, size_t ALIGNMENT> -MemStatHandle MemTrackableNonVirtual<DERIVED, ALIGNMENT>::sMemStat(typeid(MemTrackableNonVirtual<DERIVED, ALIGNMENT>).name()); -#endif - -template<typename DERIVED, size_t ALIGNMENT = LL_DEFAULT_HEAP_ALIGN> -class MemTrackable : public MemTrackableNonVirtual<DERIVED, ALIGNMENT> -{ -public: -	MemTrackable(const char* name) -	:	MemTrackableNonVirtual<DERIVED, ALIGNMENT>(name) -	{} - -	virtual ~MemTrackable() -	{} -};  }  #endif // LL_LLTRACE_H diff --git a/indra/llcommon/lltraceaccumulators.cpp b/indra/llcommon/lltraceaccumulators.cpp index b1c23c6fb7..8e9aaee0e6 100644 --- a/indra/llcommon/lltraceaccumulators.cpp +++ b/indra/llcommon/lltraceaccumulators.cpp @@ -41,6 +41,7 @@ extern MemStatHandle gTraceMemStat;  AccumulatorBufferGroup::AccumulatorBufferGroup()   { +    LL_PROFILE_ZONE_SCOPED;  	claim_alloc(gTraceMemStat, mCounts.capacity() * sizeof(CountAccumulator));  	claim_alloc(gTraceMemStat, mSamples.capacity() * sizeof(SampleAccumulator));  	claim_alloc(gTraceMemStat, mEvents.capacity() * sizeof(EventAccumulator)); @@ -55,6 +56,7 @@ AccumulatorBufferGroup::AccumulatorBufferGroup(const AccumulatorBufferGroup& oth  	mStackTimers(other.mStackTimers),  	mMemStats(other.mMemStats)  { +    LL_PROFILE_ZONE_SCOPED;  	claim_alloc(gTraceMemStat, mCounts.capacity() * sizeof(CountAccumulator));  	claim_alloc(gTraceMemStat, mSamples.capacity() * sizeof(SampleAccumulator));  	claim_alloc(gTraceMemStat, mEvents.capacity() * sizeof(EventAccumulator)); @@ -64,6 +66,7 @@ AccumulatorBufferGroup::AccumulatorBufferGroup(const AccumulatorBufferGroup& oth  AccumulatorBufferGroup::~AccumulatorBufferGroup()  { +    LL_PROFILE_ZONE_SCOPED;  	disclaim_alloc(gTraceMemStat, mCounts.capacity() * sizeof(CountAccumulator));  	disclaim_alloc(gTraceMemStat, mSamples.capacity() * sizeof(SampleAccumulator));  	disclaim_alloc(gTraceMemStat, mEvents.capacity() * sizeof(EventAccumulator)); @@ -73,6 +76,7 @@ AccumulatorBufferGroup::~AccumulatorBufferGroup()  void AccumulatorBufferGroup::handOffTo(AccumulatorBufferGroup& other)  { +    LL_PROFILE_ZONE_SCOPED;  	other.mCounts.reset(&mCounts);  	other.mSamples.reset(&mSamples);  	other.mEvents.reset(&mEvents); @@ -82,6 +86,7 @@ void AccumulatorBufferGroup::handOffTo(AccumulatorBufferGroup& other)  void AccumulatorBufferGroup::makeCurrent()  { +    LL_PROFILE_ZONE_SCOPED;  	mCounts.makeCurrent();  	mSamples.makeCurrent();  	mEvents.makeCurrent(); @@ -104,6 +109,7 @@ void AccumulatorBufferGroup::makeCurrent()  //static  void AccumulatorBufferGroup::clearCurrent()  { +    LL_PROFILE_ZONE_SCOPED;  	AccumulatorBuffer<CountAccumulator>::clearCurrent();	  	AccumulatorBuffer<SampleAccumulator>::clearCurrent();  	AccumulatorBuffer<EventAccumulator>::clearCurrent(); @@ -118,6 +124,7 @@ bool AccumulatorBufferGroup::isCurrent() const  void AccumulatorBufferGroup::append( const AccumulatorBufferGroup& other )  { +    LL_PROFILE_ZONE_SCOPED;  	mCounts.addSamples(other.mCounts, SEQUENTIAL);  	mSamples.addSamples(other.mSamples, SEQUENTIAL);  	mEvents.addSamples(other.mEvents, SEQUENTIAL); @@ -127,6 +134,7 @@ void AccumulatorBufferGroup::append( const AccumulatorBufferGroup& other )  void AccumulatorBufferGroup::merge( const AccumulatorBufferGroup& other)  { +    LL_PROFILE_ZONE_SCOPED;  	mCounts.addSamples(other.mCounts, NON_SEQUENTIAL);  	mSamples.addSamples(other.mSamples, NON_SEQUENTIAL);  	mEvents.addSamples(other.mEvents, NON_SEQUENTIAL); @@ -137,6 +145,7 @@ void AccumulatorBufferGroup::merge( const AccumulatorBufferGroup& other)  void AccumulatorBufferGroup::reset(AccumulatorBufferGroup* other)  { +    LL_PROFILE_ZONE_SCOPED;  	mCounts.reset(other ? &other->mCounts : NULL);  	mSamples.reset(other ? &other->mSamples : NULL);  	mEvents.reset(other ? &other->mEvents : NULL); @@ -146,6 +155,7 @@ void AccumulatorBufferGroup::reset(AccumulatorBufferGroup* other)  void AccumulatorBufferGroup::sync()  { +    LL_PROFILE_ZONE_SCOPED;  	if (isCurrent())  	{  		F64SecondsImplicit time_stamp = LLTimer::getTotalSeconds(); @@ -190,7 +200,7 @@ F64 SampleAccumulator::mergeSumsOfSquares(const SampleAccumulator& a, const Samp  void SampleAccumulator::addSamples( const SampleAccumulator& other, EBufferAppendType append_type )  { -	if (append_type == NON_SEQUENTIAL) +    if (append_type == NON_SEQUENTIAL)  	{  		return;  	} @@ -289,7 +299,7 @@ void EventAccumulator::addSamples( const EventAccumulator& other, EBufferAppendT  void EventAccumulator::reset( const EventAccumulator* other )  { -	mNumSamples = 0; +    mNumSamples = 0;  	mSum = 0;  	mMin = F32(NaN);  	mMax = F32(NaN); diff --git a/indra/llcommon/lltraceaccumulators.h b/indra/llcommon/lltraceaccumulators.h index 8eb5338a2a..b183fcd14a 100644 --- a/indra/llcommon/lltraceaccumulators.h +++ b/indra/llcommon/lltraceaccumulators.h @@ -66,6 +66,7 @@ namespace LLTrace  			: mStorageSize(0),  			mStorage(NULL)  		{ +            LL_PROFILE_ZONE_SCOPED;  			const AccumulatorBuffer& other = *getDefaultBuffer();  			resize(sNextStorageSlot);  			for (S32 i = 0; i < sNextStorageSlot; i++) @@ -76,6 +77,7 @@ namespace LLTrace  		~AccumulatorBuffer()  		{ +            LL_PROFILE_ZONE_SCOPED;  			if (isCurrent())  			{  				LLThreadLocalSingletonPointer<ACCUMULATOR>::setInstance(NULL); @@ -98,6 +100,7 @@ namespace LLTrace  			: mStorageSize(0),  			mStorage(NULL)  		{ +            LL_PROFILE_ZONE_SCOPED;  			resize(sNextStorageSlot);  			for (S32 i = 0; i < sNextStorageSlot; i++)  			{ @@ -107,6 +110,7 @@ namespace LLTrace  		void addSamples(const AccumulatorBuffer<ACCUMULATOR>& other, EBufferAppendType append_type)  		{ +            LL_PROFILE_ZONE_SCOPED;  			llassert(mStorageSize >= sNextStorageSlot && other.mStorageSize >= sNextStorageSlot);  			for (size_t i = 0; i < sNextStorageSlot; i++)  			{ @@ -116,6 +120,7 @@ namespace LLTrace  		void copyFrom(const AccumulatorBuffer<ACCUMULATOR>& other)  		{ +            LL_PROFILE_ZONE_SCOPED;  			llassert(mStorageSize >= sNextStorageSlot && other.mStorageSize >= sNextStorageSlot);  			for (size_t i = 0; i < sNextStorageSlot; i++)  			{ @@ -125,6 +130,7 @@ namespace LLTrace  		void reset(const AccumulatorBuffer<ACCUMULATOR>* other = NULL)  		{ +            LL_PROFILE_ZONE_SCOPED;  			llassert(mStorageSize >= sNextStorageSlot);  			for (size_t i = 0; i < sNextStorageSlot; i++)  			{ @@ -134,6 +140,7 @@ namespace LLTrace  		void sync(F64SecondsImplicit time_stamp)  		{ +            LL_PROFILE_ZONE_SCOPED;  			llassert(mStorageSize >= sNextStorageSlot);  			for (size_t i = 0; i < sNextStorageSlot; i++)  			{ @@ -153,12 +160,13 @@ namespace LLTrace  		static void clearCurrent()  		{ -			LLThreadLocalSingletonPointer<ACCUMULATOR>::setInstance(NULL); +            LLThreadLocalSingletonPointer<ACCUMULATOR>::setInstance(NULL);  		}  		// NOTE: this is not thread-safe.  We assume that slots are reserved in the main thread before any child threads are spawned  		size_t reserveSlot()  		{ +            LL_PROFILE_ZONE_SCOPED;  			size_t next_slot = sNextStorageSlot++;  			if (next_slot >= mStorageSize)  			{ @@ -172,6 +180,7 @@ namespace LLTrace  		void resize(size_t new_size)  		{ +            LL_PROFILE_ZONE_SCOPED;  			if (new_size <= mStorageSize) return;  			ACCUMULATOR* old_storage = mStorage; @@ -212,6 +221,7 @@ namespace LLTrace  		static self_t* getDefaultBuffer()  		{ +            LL_PROFILE_ZONE_SCOPED;  			static bool sInitialized = false;  			if (!sInitialized)  			{ @@ -326,6 +336,7 @@ namespace LLTrace  		void sample(F64 value)  		{ +            LL_PROFILE_ZONE_SCOPED;  			F64SecondsImplicit time_stamp = LLTimer::getTotalSeconds();  			// store effect of last value @@ -444,9 +455,9 @@ namespace LLTrace  		S32	mNumSamples;  	}; -	class TimeBlockAccumulator +	class alignas(32) TimeBlockAccumulator  	{ -	public: +    public:  		typedef F64Seconds value_t;  		static F64Seconds getDefaultValue() { return F64Seconds(0); } @@ -539,6 +550,7 @@ namespace LLTrace  		void addSamples(const MemAccumulator& other, EBufferAppendType append_type)  		{ +            LL_PROFILE_ZONE_SCOPED;  			mAllocations.addSamples(other.mAllocations, append_type);  			mDeallocations.addSamples(other.mDeallocations, append_type); @@ -557,6 +569,7 @@ namespace LLTrace  		void reset(const MemAccumulator* other)  		{ +            LL_PROFILE_ZONE_SCOPED;  			mSize.reset(other ? &other->mSize : NULL);  			mAllocations.reset(other ? &other->mAllocations : NULL);  			mDeallocations.reset(other ? &other->mDeallocations : NULL); diff --git a/indra/llcommon/lltracerecording.cpp b/indra/llcommon/lltracerecording.cpp index 3094b627a2..c72a64d086 100644 --- a/indra/llcommon/lltracerecording.cpp +++ b/indra/llcommon/lltracerecording.cpp @@ -50,6 +50,7 @@ Recording::Recording(EPlayState state)  :	mElapsedSeconds(0),  	mActiveBuffers(NULL)  { +    LL_PROFILE_ZONE_SCOPED;  	claim_alloc(gTraceMemStat, this);  	mBuffers = new AccumulatorBufferGroup();  	claim_alloc(gTraceMemStat, mBuffers); @@ -59,12 +60,14 @@ Recording::Recording(EPlayState state)  Recording::Recording( const Recording& other )  :	mActiveBuffers(NULL)  { +    LL_PROFILE_ZONE_SCOPED;  	claim_alloc(gTraceMemStat, this);  	*this = other;  }  Recording& Recording::operator = (const Recording& other)  { +    LL_PROFILE_ZONE_SCOPED;  	// this will allow us to seamlessly start without affecting any data we've acquired from other  	setPlayState(PAUSED); @@ -85,6 +88,7 @@ Recording& Recording::operator = (const Recording& other)  Recording::~Recording()  { +    LL_PROFILE_ZONE_SCOPED;  	disclaim_alloc(gTraceMemStat, this);  	disclaim_alloc(gTraceMemStat, mBuffers); @@ -103,6 +107,7 @@ void Recording::update()  #if LL_TRACE_ENABLED  	if (isStarted())  	{ +        LL_PROFILE_ZONE_SCOPED;  		mElapsedSeconds += mSamplingTimer.getElapsedTimeF64();  		// must have  @@ -123,6 +128,7 @@ void Recording::update()  void Recording::handleReset()  { +    LL_PROFILE_ZONE_SCOPED;  #if LL_TRACE_ENABLED  	mBuffers.write()->reset(); @@ -133,6 +139,7 @@ void Recording::handleReset()  void Recording::handleStart()  { +    LL_PROFILE_ZONE_SCOPED;  #if LL_TRACE_ENABLED  	mSamplingTimer.reset();  	mBuffers.setStayUnique(true); @@ -144,6 +151,7 @@ void Recording::handleStart()  void Recording::handleStop()  { +    LL_PROFILE_ZONE_SCOPED;  #if LL_TRACE_ENABLED  	mElapsedSeconds += mSamplingTimer.getElapsedTimeF64();  	// must have thread recorder running on this thread @@ -273,7 +281,7 @@ F64Kilobytes Recording::getMean(const StatType<MemAccumulator>& stat)  F64Kilobytes Recording::getMax(const StatType<MemAccumulator>& stat)  { -	update(); +    update();  	const MemAccumulator& accumulator = mBuffers->mMemStats[stat.getIndex()];  	const MemAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mMemStats[stat.getIndex()] : NULL;  	return F64Bytes(llmax(accumulator.mSize.getMax(), active_accumulator && active_accumulator->mSize.hasValue() ? active_accumulator->mSize.getMax() : F32_MIN)); @@ -281,7 +289,7 @@ F64Kilobytes Recording::getMax(const StatType<MemAccumulator>& stat)  F64Kilobytes Recording::getStandardDeviation(const StatType<MemAccumulator>& stat)  { -	update(); +    update();  	const MemAccumulator& accumulator = mBuffers->mMemStats[stat.getIndex()];  	const MemAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mMemStats[stat.getIndex()] : NULL;  	if (active_accumulator && active_accumulator->hasValue()) @@ -297,7 +305,7 @@ F64Kilobytes Recording::getStandardDeviation(const StatType<MemAccumulator>& sta  F64Kilobytes Recording::getLastValue(const StatType<MemAccumulator>& stat)  { -	update(); +    update();  	const MemAccumulator& accumulator = mBuffers->mMemStats[stat.getIndex()];  	const MemAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mMemStats[stat.getIndex()] : NULL;  	return F64Bytes(active_accumulator ? active_accumulator->mSize.getLastValue() : accumulator.mSize.getLastValue()); @@ -305,7 +313,7 @@ F64Kilobytes Recording::getLastValue(const StatType<MemAccumulator>& stat)  bool Recording::hasValue(const StatType<MemAccumulator::AllocationFacet>& stat)  { -	update(); +    update();  	const MemAccumulator& accumulator = mBuffers->mMemStats[stat.getIndex()];  	const MemAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mMemStats[stat.getIndex()] : NULL;  	return accumulator.mAllocations.hasValue() || (active_accumulator ? active_accumulator->mAllocations.hasValue() : false); @@ -313,7 +321,7 @@ bool Recording::hasValue(const StatType<MemAccumulator::AllocationFacet>& stat)  F64Kilobytes Recording::getSum(const StatType<MemAccumulator::AllocationFacet>& stat)  { -	update(); +    update();  	const MemAccumulator& accumulator = mBuffers->mMemStats[stat.getIndex()];  	const MemAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mMemStats[stat.getIndex()] : NULL;  	return F64Bytes(accumulator.mAllocations.getSum() + (active_accumulator ? active_accumulator->mAllocations.getSum() : 0)); @@ -321,7 +329,7 @@ F64Kilobytes Recording::getSum(const StatType<MemAccumulator::AllocationFacet>&  F64Kilobytes Recording::getPerSec(const StatType<MemAccumulator::AllocationFacet>& stat)  { -	update(); +    update();  	const MemAccumulator& accumulator = mBuffers->mMemStats[stat.getIndex()];  	const MemAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mMemStats[stat.getIndex()] : NULL;  	return F64Bytes((accumulator.mAllocations.getSum() + (active_accumulator ? active_accumulator->mAllocations.getSum() : 0)) / mElapsedSeconds.value()); @@ -329,7 +337,7 @@ F64Kilobytes Recording::getPerSec(const StatType<MemAccumulator::AllocationFacet  S32 Recording::getSampleCount(const StatType<MemAccumulator::AllocationFacet>& stat)  { -	update(); +    update();  	const MemAccumulator& accumulator = mBuffers->mMemStats[stat.getIndex()];  	const MemAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mMemStats[stat.getIndex()] : NULL;  	return accumulator.mAllocations.getSampleCount() + (active_accumulator ? active_accumulator->mAllocations.getSampleCount() : 0); @@ -337,7 +345,7 @@ S32 Recording::getSampleCount(const StatType<MemAccumulator::AllocationFacet>& s  bool Recording::hasValue(const StatType<MemAccumulator::DeallocationFacet>& stat)  { -	update(); +    update();  	const MemAccumulator& accumulator = mBuffers->mMemStats[stat.getIndex()];  	const MemAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mMemStats[stat.getIndex()] : NULL;  	return accumulator.mDeallocations.hasValue() || (active_accumulator ? active_accumulator->mDeallocations.hasValue() : false); @@ -346,7 +354,7 @@ bool Recording::hasValue(const StatType<MemAccumulator::DeallocationFacet>& stat  F64Kilobytes Recording::getSum(const StatType<MemAccumulator::DeallocationFacet>& stat)  { -	update(); +    update();  	const MemAccumulator& accumulator = mBuffers->mMemStats[stat.getIndex()];  	const MemAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mMemStats[stat.getIndex()] : NULL;  	return F64Bytes(accumulator.mDeallocations.getSum() + (active_accumulator ? active_accumulator->mDeallocations.getSum() : 0)); @@ -354,7 +362,7 @@ F64Kilobytes Recording::getSum(const StatType<MemAccumulator::DeallocationFacet>  F64Kilobytes Recording::getPerSec(const StatType<MemAccumulator::DeallocationFacet>& stat)  { -	update(); +    update();  	const MemAccumulator& accumulator = mBuffers->mMemStats[stat.getIndex()];  	const MemAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mMemStats[stat.getIndex()] : NULL;  	return F64Bytes((accumulator.mDeallocations.getSum() + (active_accumulator ? active_accumulator->mDeallocations.getSum() : 0)) / mElapsedSeconds.value()); @@ -362,7 +370,7 @@ F64Kilobytes Recording::getPerSec(const StatType<MemAccumulator::DeallocationFac  S32 Recording::getSampleCount(const StatType<MemAccumulator::DeallocationFacet>& stat)  { -	update(); +    update();  	const MemAccumulator& accumulator = mBuffers->mMemStats[stat.getIndex()];  	const MemAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mMemStats[stat.getIndex()] : NULL;  	return accumulator.mDeallocations.getSampleCount() + (active_accumulator ? active_accumulator->mDeallocations.getSampleCount() : 0); @@ -370,7 +378,7 @@ S32 Recording::getSampleCount(const StatType<MemAccumulator::DeallocationFacet>&  bool Recording::hasValue(const StatType<CountAccumulator>& stat)  { -	update(); +    update();  	const CountAccumulator& accumulator = mBuffers->mCounts[stat.getIndex()];  	const CountAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mCounts[stat.getIndex()] : NULL;  	return accumulator.hasValue() || (active_accumulator ? active_accumulator->hasValue() : false); @@ -378,7 +386,7 @@ bool Recording::hasValue(const StatType<CountAccumulator>& stat)  F64 Recording::getSum(const StatType<CountAccumulator>& stat)  { -	update(); +    update();  	const CountAccumulator& accumulator = mBuffers->mCounts[stat.getIndex()];  	const CountAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mCounts[stat.getIndex()] : NULL;  	return accumulator.getSum() + (active_accumulator ? active_accumulator->getSum() : 0); @@ -386,7 +394,7 @@ F64 Recording::getSum(const StatType<CountAccumulator>& stat)  F64 Recording::getPerSec( const StatType<CountAccumulator>& stat )  { -	update(); +    update();  	const CountAccumulator& accumulator = mBuffers->mCounts[stat.getIndex()];  	const CountAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mCounts[stat.getIndex()] : NULL;  	F64 sum = accumulator.getSum() + (active_accumulator ? active_accumulator->getSum() : 0); @@ -395,7 +403,7 @@ F64 Recording::getPerSec( const StatType<CountAccumulator>& stat )  S32 Recording::getSampleCount( const StatType<CountAccumulator>& stat )  { -	update(); +    update();  	const CountAccumulator& accumulator = mBuffers->mCounts[stat.getIndex()];  	const CountAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mCounts[stat.getIndex()] : NULL;  	return accumulator.getSampleCount() + (active_accumulator ? active_accumulator->getSampleCount() : 0); @@ -403,7 +411,7 @@ S32 Recording::getSampleCount( const StatType<CountAccumulator>& stat )  bool Recording::hasValue(const StatType<SampleAccumulator>& stat)  { -	update(); +    update();  	const SampleAccumulator& accumulator = mBuffers->mSamples[stat.getIndex()];  	const SampleAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mSamples[stat.getIndex()] : NULL;  	return accumulator.hasValue() || (active_accumulator && active_accumulator->hasValue()); @@ -411,7 +419,7 @@ bool Recording::hasValue(const StatType<SampleAccumulator>& stat)  F64 Recording::getMin( const StatType<SampleAccumulator>& stat )  { -	update(); +    update();  	const SampleAccumulator& accumulator = mBuffers->mSamples[stat.getIndex()];  	const SampleAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mSamples[stat.getIndex()] : NULL;  	return llmin(accumulator.getMin(), active_accumulator && active_accumulator->hasValue() ? active_accumulator->getMin() : F32_MAX); @@ -419,7 +427,7 @@ F64 Recording::getMin( const StatType<SampleAccumulator>& stat )  F64 Recording::getMax( const StatType<SampleAccumulator>& stat )  { -	update(); +    update();  	const SampleAccumulator& accumulator = mBuffers->mSamples[stat.getIndex()];  	const SampleAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mSamples[stat.getIndex()] : NULL;  	return llmax(accumulator.getMax(), active_accumulator && active_accumulator->hasValue() ? active_accumulator->getMax() : F32_MIN); @@ -427,7 +435,7 @@ F64 Recording::getMax( const StatType<SampleAccumulator>& stat )  F64 Recording::getMean( const StatType<SampleAccumulator>& stat )  { -	update(); +    update();  	const SampleAccumulator& accumulator = mBuffers->mSamples[stat.getIndex()];  	const SampleAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mSamples[stat.getIndex()] : NULL;  	if (active_accumulator && active_accumulator->hasValue()) @@ -448,7 +456,7 @@ F64 Recording::getMean( const StatType<SampleAccumulator>& stat )  F64 Recording::getStandardDeviation( const StatType<SampleAccumulator>& stat )  { -	update(); +    update();  	const SampleAccumulator& accumulator = mBuffers->mSamples[stat.getIndex()];  	const SampleAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mSamples[stat.getIndex()] : NULL; @@ -465,7 +473,7 @@ F64 Recording::getStandardDeviation( const StatType<SampleAccumulator>& stat )  F64 Recording::getLastValue( const StatType<SampleAccumulator>& stat )  { -	update(); +    update();  	const SampleAccumulator& accumulator = mBuffers->mSamples[stat.getIndex()];  	const SampleAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mSamples[stat.getIndex()] : NULL;  	return (active_accumulator && active_accumulator->hasValue() ? active_accumulator->getLastValue() : accumulator.getLastValue()); @@ -473,7 +481,7 @@ F64 Recording::getLastValue( const StatType<SampleAccumulator>& stat )  S32 Recording::getSampleCount( const StatType<SampleAccumulator>& stat )  { -	update(); +    update();  	const SampleAccumulator& accumulator = mBuffers->mSamples[stat.getIndex()];  	const SampleAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mSamples[stat.getIndex()] : NULL;  	return accumulator.getSampleCount() + (active_accumulator && active_accumulator->hasValue() ? active_accumulator->getSampleCount() : 0); @@ -481,7 +489,7 @@ S32 Recording::getSampleCount( const StatType<SampleAccumulator>& stat )  bool Recording::hasValue(const StatType<EventAccumulator>& stat)  { -	update(); +    update();  	const EventAccumulator& accumulator = mBuffers->mEvents[stat.getIndex()];  	const EventAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mEvents[stat.getIndex()] : NULL;  	return accumulator.hasValue() || (active_accumulator && active_accumulator->hasValue()); @@ -489,7 +497,7 @@ bool Recording::hasValue(const StatType<EventAccumulator>& stat)  F64 Recording::getSum( const StatType<EventAccumulator>& stat)  { -	update(); +    update();  	const EventAccumulator& accumulator = mBuffers->mEvents[stat.getIndex()];  	const EventAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mEvents[stat.getIndex()] : NULL;  	return (F64)(accumulator.getSum() + (active_accumulator && active_accumulator->hasValue() ? active_accumulator->getSum() : 0)); @@ -497,7 +505,7 @@ F64 Recording::getSum( const StatType<EventAccumulator>& stat)  F64 Recording::getMin( const StatType<EventAccumulator>& stat )  { -	update(); +    update();  	const EventAccumulator& accumulator = mBuffers->mEvents[stat.getIndex()];  	const EventAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mEvents[stat.getIndex()] : NULL;  	return llmin(accumulator.getMin(), active_accumulator && active_accumulator->hasValue() ? active_accumulator->getMin() : F32_MAX); @@ -505,7 +513,7 @@ F64 Recording::getMin( const StatType<EventAccumulator>& stat )  F64 Recording::getMax( const StatType<EventAccumulator>& stat )  { -	update(); +    update();  	const EventAccumulator& accumulator = mBuffers->mEvents[stat.getIndex()];  	const EventAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mEvents[stat.getIndex()] : NULL;  	return llmax(accumulator.getMax(), active_accumulator && active_accumulator->hasValue() ? active_accumulator->getMax() : F32_MIN); @@ -513,7 +521,7 @@ F64 Recording::getMax( const StatType<EventAccumulator>& stat )  F64 Recording::getMean( const StatType<EventAccumulator>& stat )  { -	update(); +    update();  	const EventAccumulator& accumulator = mBuffers->mEvents[stat.getIndex()];  	const EventAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mEvents[stat.getIndex()] : NULL;  	if (active_accumulator && active_accumulator->hasValue()) @@ -534,7 +542,7 @@ F64 Recording::getMean( const StatType<EventAccumulator>& stat )  F64 Recording::getStandardDeviation( const StatType<EventAccumulator>& stat )  { -	update(); +    update();  	const EventAccumulator& accumulator = mBuffers->mEvents[stat.getIndex()];  	const EventAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mEvents[stat.getIndex()] : NULL; @@ -551,7 +559,7 @@ F64 Recording::getStandardDeviation( const StatType<EventAccumulator>& stat )  F64 Recording::getLastValue( const StatType<EventAccumulator>& stat )  { -	update(); +    update();  	const EventAccumulator& accumulator = mBuffers->mEvents[stat.getIndex()];  	const EventAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mEvents[stat.getIndex()] : NULL;  	return active_accumulator ? active_accumulator->getLastValue() : accumulator.getLastValue(); @@ -559,7 +567,7 @@ F64 Recording::getLastValue( const StatType<EventAccumulator>& stat )  S32 Recording::getSampleCount( const StatType<EventAccumulator>& stat )  { -	update(); +    update();  	const EventAccumulator& accumulator = mBuffers->mEvents[stat.getIndex()];  	const EventAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mEvents[stat.getIndex()] : NULL;  	return accumulator.getSampleCount() + (active_accumulator ? active_accumulator->getSampleCount() : 0); @@ -575,17 +583,20 @@ PeriodicRecording::PeriodicRecording( S32 num_periods, EPlayState state)  	mNumRecordedPeriods(0),  	mRecordingPeriods(num_periods ? num_periods : 1)  { +    LL_PROFILE_ZONE_SCOPED;  	setPlayState(state);  	claim_alloc(gTraceMemStat, this);  }  PeriodicRecording::~PeriodicRecording()  { +    LL_PROFILE_ZONE_SCOPED;  	disclaim_alloc(gTraceMemStat, this);  }  void PeriodicRecording::nextPeriod()  { +    LL_PROFILE_ZONE_SCOPED;  	if (mAutoResize)  	{  		mRecordingPeriods.push_back(Recording()); @@ -600,6 +611,7 @@ void PeriodicRecording::nextPeriod()  void PeriodicRecording::appendRecording(Recording& recording)  { +    LL_PROFILE_ZONE_SCOPED;  	getCurRecording().appendRecording(recording);  	nextPeriod();  } @@ -607,6 +619,7 @@ void PeriodicRecording::appendRecording(Recording& recording)  void PeriodicRecording::appendPeriodicRecording( PeriodicRecording& other )  { +    LL_PROFILE_ZONE_SCOPED;  	if (other.mRecordingPeriods.empty()) return;  	getCurRecording().update(); @@ -680,6 +693,7 @@ void PeriodicRecording::appendPeriodicRecording( PeriodicRecording& other )  F64Seconds PeriodicRecording::getDuration() const  { +    LL_PROFILE_ZONE_SCOPED;  	F64Seconds duration;  	S32 num_periods = mRecordingPeriods.size();  	for (S32 i = 1; i <= num_periods; i++) @@ -693,6 +707,7 @@ F64Seconds PeriodicRecording::getDuration() const  LLTrace::Recording PeriodicRecording::snapshotCurRecording() const  { +    LL_PROFILE_ZONE_SCOPED;  	Recording recording_copy(getCurRecording());  	recording_copy.stop();  	return recording_copy; @@ -735,16 +750,19 @@ const Recording& PeriodicRecording::getPrevRecording( S32 offset ) const  void PeriodicRecording::handleStart()  { +    LL_PROFILE_ZONE_SCOPED;  	getCurRecording().start();  }  void PeriodicRecording::handleStop()  { +    LL_PROFILE_ZONE_SCOPED;  	getCurRecording().pause();  }  void PeriodicRecording::handleReset()  { +    LL_PROFILE_ZONE_SCOPED;  	getCurRecording().stop();  	if (mAutoResize) @@ -768,11 +786,13 @@ void PeriodicRecording::handleReset()  void PeriodicRecording::handleSplitTo(PeriodicRecording& other)  { +    LL_PROFILE_ZONE_SCOPED;  	getCurRecording().splitTo(other.getCurRecording());  }  F64 PeriodicRecording::getPeriodMin( const StatType<EventAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )  { +    LL_PROFILE_ZONE_SCOPED;  	num_periods = llmin(num_periods, getNumRecordedPeriods());  	bool has_value = false; @@ -794,6 +814,7 @@ F64 PeriodicRecording::getPeriodMin( const StatType<EventAccumulator>& stat, S32  F64 PeriodicRecording::getPeriodMax( const StatType<EventAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )  { +    LL_PROFILE_ZONE_SCOPED;  	num_periods = llmin(num_periods, getNumRecordedPeriods());  	bool has_value = false; @@ -816,6 +837,7 @@ F64 PeriodicRecording::getPeriodMax( const StatType<EventAccumulator>& stat, S32  // calculates means using aggregates per period  F64 PeriodicRecording::getPeriodMean( const StatType<EventAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )  { +    LL_PROFILE_ZONE_SCOPED;  	num_periods = llmin(num_periods, getNumRecordedPeriods());  	F64 mean = 0; @@ -839,6 +861,7 @@ F64 PeriodicRecording::getPeriodMean( const StatType<EventAccumulator>& stat, S3  F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<EventAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )  { +    LL_PROFILE_ZONE_SCOPED;  	num_periods = llmin(num_periods, getNumRecordedPeriods());  	F64 period_mean = getPeriodMean(stat, num_periods); @@ -863,6 +886,7 @@ F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<EventAccumulat  F64 PeriodicRecording::getPeriodMin( const StatType<SampleAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )  { +    LL_PROFILE_ZONE_SCOPED;  	num_periods = llmin(num_periods, getNumRecordedPeriods());  	bool has_value = false; @@ -884,6 +908,7 @@ F64 PeriodicRecording::getPeriodMin( const StatType<SampleAccumulator>& stat, S3  F64 PeriodicRecording::getPeriodMax(const StatType<SampleAccumulator>& stat, S32 num_periods /*= S32_MAX*/)  { +    LL_PROFILE_ZONE_SCOPED;  	num_periods = llmin(num_periods, getNumRecordedPeriods());  	bool has_value = false; @@ -906,6 +931,7 @@ F64 PeriodicRecording::getPeriodMax(const StatType<SampleAccumulator>& stat, S32  F64 PeriodicRecording::getPeriodMean( const StatType<SampleAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )  { +    LL_PROFILE_ZONE_SCOPED;  	num_periods = llmin(num_periods, getNumRecordedPeriods());  	S32 valid_period_count = 0; @@ -928,6 +954,7 @@ F64 PeriodicRecording::getPeriodMean( const StatType<SampleAccumulator>& stat, S  F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<SampleAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )  { +    LL_PROFILE_ZONE_SCOPED;  	num_periods = llmin(num_periods, getNumRecordedPeriods());  	F64 period_mean = getPeriodMean(stat, num_periods); @@ -953,6 +980,7 @@ F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<SampleAccumula  F64Kilobytes PeriodicRecording::getPeriodMin( const StatType<MemAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )  { +    LL_PROFILE_ZONE_SCOPED;  	num_periods = llmin(num_periods, getNumRecordedPeriods());  	F64Kilobytes min_val(std::numeric_limits<F64>::max()); @@ -972,6 +1000,7 @@ F64Kilobytes PeriodicRecording::getPeriodMin(const MemStatHandle& stat, S32 num_  F64Kilobytes PeriodicRecording::getPeriodMax(const StatType<MemAccumulator>& stat, S32 num_periods /*= S32_MAX*/)  { +    LL_PROFILE_ZONE_SCOPED;  	num_periods = llmin(num_periods, getNumRecordedPeriods());  	F64Kilobytes max_val(0.0); @@ -991,6 +1020,7 @@ F64Kilobytes PeriodicRecording::getPeriodMax(const MemStatHandle& stat, S32 num_  F64Kilobytes PeriodicRecording::getPeriodMean( const StatType<MemAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )  { +    LL_PROFILE_ZONE_SCOPED;  	num_periods = llmin(num_periods, getNumRecordedPeriods());  	F64Kilobytes mean(0); @@ -1011,6 +1041,7 @@ F64Kilobytes PeriodicRecording::getPeriodMean(const MemStatHandle& stat, S32 num  F64Kilobytes PeriodicRecording::getPeriodStandardDeviation( const StatType<MemAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )  { +    LL_PROFILE_ZONE_SCOPED;  	num_periods = llmin(num_periods, getNumRecordedPeriods());  	F64Kilobytes period_mean = getPeriodMean(stat, num_periods); @@ -1044,6 +1075,7 @@ F64Kilobytes PeriodicRecording::getPeriodStandardDeviation(const MemStatHandle&  void ExtendableRecording::extend()  { +    LL_PROFILE_ZONE_SCOPED;  	// push the data back to accepted recording  	mAcceptedRecording.appendRecording(mPotentialRecording);  	// flush data, so we can start from scratch @@ -1052,22 +1084,26 @@ void ExtendableRecording::extend()  void ExtendableRecording::handleStart()  { +    LL_PROFILE_ZONE_SCOPED;  	mPotentialRecording.start();  }  void ExtendableRecording::handleStop()  { +    LL_PROFILE_ZONE_SCOPED;  	mPotentialRecording.pause();  }  void ExtendableRecording::handleReset()  { +    LL_PROFILE_ZONE_SCOPED;  	mAcceptedRecording.reset();  	mPotentialRecording.reset();  }  void ExtendableRecording::handleSplitTo(ExtendableRecording& other)  { +    LL_PROFILE_ZONE_SCOPED;  	mPotentialRecording.splitTo(other.mPotentialRecording);  } @@ -1084,6 +1120,7 @@ ExtendablePeriodicRecording::ExtendablePeriodicRecording()  void ExtendablePeriodicRecording::extend()  { +    LL_PROFILE_ZONE_SCOPED;  	// push the data back to accepted recording  	mAcceptedRecording.appendPeriodicRecording(mPotentialRecording);  	// flush data, so we can start from scratch @@ -1093,22 +1130,26 @@ void ExtendablePeriodicRecording::extend()  void ExtendablePeriodicRecording::handleStart()  { +    LL_PROFILE_ZONE_SCOPED;  	mPotentialRecording.start();  }  void ExtendablePeriodicRecording::handleStop()  { +    LL_PROFILE_ZONE_SCOPED;  	mPotentialRecording.pause();  }  void ExtendablePeriodicRecording::handleReset()  { +    LL_PROFILE_ZONE_SCOPED;  	mAcceptedRecording.reset();  	mPotentialRecording.reset();  }  void ExtendablePeriodicRecording::handleSplitTo(ExtendablePeriodicRecording& other)  { +    LL_PROFILE_ZONE_SCOPED;  	mPotentialRecording.splitTo(other.mPotentialRecording);  } @@ -1123,6 +1164,7 @@ PeriodicRecording& get_frame_recording()  void LLStopWatchControlsMixinCommon::start()  { +    LL_PROFILE_ZONE_SCOPED;  	switch (mPlayState)  	{  	case STOPPED: @@ -1144,6 +1186,7 @@ void LLStopWatchControlsMixinCommon::start()  void LLStopWatchControlsMixinCommon::stop()  { +    LL_PROFILE_ZONE_SCOPED;  	switch (mPlayState)  	{  	case STOPPED: @@ -1163,6 +1206,7 @@ void LLStopWatchControlsMixinCommon::stop()  void LLStopWatchControlsMixinCommon::pause()  { +    LL_PROFILE_ZONE_SCOPED;  	switch (mPlayState)  	{  	case STOPPED: @@ -1182,6 +1226,7 @@ void LLStopWatchControlsMixinCommon::pause()  void LLStopWatchControlsMixinCommon::unpause()  { +    LL_PROFILE_ZONE_SCOPED;  	switch (mPlayState)  	{  	case STOPPED: @@ -1201,6 +1246,7 @@ void LLStopWatchControlsMixinCommon::unpause()  void LLStopWatchControlsMixinCommon::resume()  { +    LL_PROFILE_ZONE_SCOPED;  	switch (mPlayState)  	{  	case STOPPED: @@ -1221,6 +1267,7 @@ void LLStopWatchControlsMixinCommon::resume()  void LLStopWatchControlsMixinCommon::restart()  { +    LL_PROFILE_ZONE_SCOPED;  	switch (mPlayState)  	{  	case STOPPED: @@ -1244,11 +1291,13 @@ void LLStopWatchControlsMixinCommon::restart()  void LLStopWatchControlsMixinCommon::reset()  { +    LL_PROFILE_ZONE_SCOPED;  	handleReset();  }  void LLStopWatchControlsMixinCommon::setPlayState( EPlayState state )  { +    LL_PROFILE_ZONE_SCOPED;  	switch(state)  	{  	case STOPPED: diff --git a/indra/llcommon/lltracerecording.h b/indra/llcommon/lltracerecording.h index d0b4a842a6..6715104613 100644 --- a/indra/llcommon/lltracerecording.h +++ b/indra/llcommon/lltracerecording.h @@ -355,6 +355,7 @@ namespace LLTrace  		template <typename T>  		S32 getSampleCount(const StatType<T>& stat, S32 num_periods = S32_MAX)          { +            LL_PROFILE_ZONE_SCOPED;  			num_periods = llmin(num_periods, getNumRecordedPeriods());              S32 num_samples = 0; @@ -374,6 +375,7 @@ namespace LLTrace  		template <typename T>  		typename T::value_t getPeriodMin(const StatType<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			num_periods = llmin(num_periods, getNumRecordedPeriods());  			bool has_value = false; @@ -396,6 +398,7 @@ namespace LLTrace  		template<typename T>  		T getPeriodMin(const CountStatHandle<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			return T(getPeriodMin(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));  		} @@ -403,6 +406,7 @@ namespace LLTrace  		template<typename T>  		T getPeriodMin(const SampleStatHandle<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			return T(getPeriodMin(static_cast<const StatType<SampleAccumulator>&>(stat), num_periods));  		} @@ -410,6 +414,7 @@ namespace LLTrace  		template<typename T>  		T getPeriodMin(const EventStatHandle<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			return T(getPeriodMin(static_cast<const StatType<EventAccumulator>&>(stat), num_periods));  		} @@ -419,6 +424,7 @@ namespace LLTrace  		template <typename T>  		typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMinPerSec(const StatType<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			num_periods = llmin(num_periods, getNumRecordedPeriods());  			typename RelatedTypes<typename T::value_t>::fractional_t min_val(std::numeric_limits<F64>::max()); @@ -433,6 +439,7 @@ namespace LLTrace  		template<typename T>  		typename RelatedTypes<T>::fractional_t getPeriodMinPerSec(const CountStatHandle<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			return typename RelatedTypes<T>::fractional_t(getPeriodMinPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));  		} @@ -444,6 +451,7 @@ namespace LLTrace  		template <typename T>  		typename T::value_t getPeriodMax(const StatType<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			num_periods = llmin(num_periods, getNumRecordedPeriods());  			bool has_value = false; @@ -466,6 +474,7 @@ namespace LLTrace  		template<typename T>  		T getPeriodMax(const CountStatHandle<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			return T(getPeriodMax(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));  		} @@ -473,6 +482,7 @@ namespace LLTrace  		template<typename T>  		T getPeriodMax(const SampleStatHandle<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			return T(getPeriodMax(static_cast<const StatType<SampleAccumulator>&>(stat), num_periods));  		} @@ -480,6 +490,7 @@ namespace LLTrace  		template<typename T>  		T getPeriodMax(const EventStatHandle<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			return T(getPeriodMax(static_cast<const StatType<EventAccumulator>&>(stat), num_periods));  		} @@ -489,6 +500,7 @@ namespace LLTrace  		template <typename T>  		typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMaxPerSec(const StatType<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			num_periods = llmin(num_periods, getNumRecordedPeriods());  			F64 max_val = std::numeric_limits<F64>::min(); @@ -503,6 +515,7 @@ namespace LLTrace  		template<typename T>  		typename RelatedTypes<T>::fractional_t getPeriodMaxPerSec(const CountStatHandle<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			return typename RelatedTypes<T>::fractional_t(getPeriodMaxPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));  		} @@ -514,6 +527,7 @@ namespace LLTrace  		template <typename T>  		typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMean(const StatType<T >& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			num_periods = llmin(num_periods, getNumRecordedPeriods());  			typename RelatedTypes<typename T::value_t>::fractional_t mean(0); @@ -534,12 +548,14 @@ namespace LLTrace  		template<typename T>  		typename RelatedTypes<T>::fractional_t getPeriodMean(const CountStatHandle<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			return typename RelatedTypes<T>::fractional_t(getPeriodMean(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));  		}  		F64 getPeriodMean(const StatType<SampleAccumulator>& stat, S32 num_periods = S32_MAX);  		template<typename T>   		typename RelatedTypes<T>::fractional_t getPeriodMean(const SampleStatHandle<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			return typename RelatedTypes<T>::fractional_t(getPeriodMean(static_cast<const StatType<SampleAccumulator>&>(stat), num_periods));  		} @@ -547,6 +563,7 @@ namespace LLTrace  		template<typename T>  		typename RelatedTypes<T>::fractional_t getPeriodMean(const EventStatHandle<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			return typename RelatedTypes<T>::fractional_t(getPeriodMean(static_cast<const StatType<EventAccumulator>&>(stat), num_periods));  		} @@ -556,6 +573,7 @@ namespace LLTrace  		template <typename T>  		typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMeanPerSec(const StatType<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			num_periods = llmin(num_periods, getNumRecordedPeriods());  			typename RelatedTypes<typename T::value_t>::fractional_t mean = 0; @@ -577,6 +595,7 @@ namespace LLTrace  		template<typename T>  		typename RelatedTypes<T>::fractional_t getPeriodMeanPerSec(const CountStatHandle<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			return typename RelatedTypes<T>::fractional_t(getPeriodMeanPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));  		} @@ -589,6 +608,7 @@ namespace LLTrace  		template<typename T>   		typename RelatedTypes<T>::fractional_t getPeriodStandardDeviation(const SampleStatHandle<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			return typename RelatedTypes<T>::fractional_t(getPeriodStandardDeviation(static_cast<const StatType<SampleAccumulator>&>(stat), num_periods));  		} @@ -596,6 +616,7 @@ namespace LLTrace  		template<typename T>  		typename RelatedTypes<T>::fractional_t getPeriodStandardDeviation(const EventStatHandle<T>& stat, S32 num_periods = S32_MAX)  		{ +            LL_PROFILE_ZONE_SCOPED;  			return typename RelatedTypes<T>::fractional_t(getPeriodStandardDeviation(static_cast<const StatType<EventAccumulator>&>(stat), num_periods));  		} diff --git a/indra/llcommon/lltracethreadrecorder.cpp b/indra/llcommon/lltracethreadrecorder.cpp index 025dc57044..7ae1e72784 100644 --- a/indra/llcommon/lltracethreadrecorder.cpp +++ b/indra/llcommon/lltracethreadrecorder.cpp @@ -274,12 +274,10 @@ void ThreadRecorder::pushToParent()  } -static LLTrace::BlockTimerStatHandle FTM_PULL_TRACE_DATA_FROM_CHILDREN("Pull child thread trace data"); -  void ThreadRecorder::pullFromChildren()  {  #if LL_TRACE_ENABLED -	LL_RECORD_BLOCK_TIME(FTM_PULL_TRACE_DATA_FROM_CHILDREN); +    LL_PROFILE_ZONE_SCOPED;  	if (mActiveRecordings.empty()) return;  	{ LLMutexLock lock(&mChildListMutex); diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp index aed8943439..5c49ec02ea 100644 --- a/indra/llimage/llimage.cpp +++ b/indra/llimage/llimage.cpp @@ -623,8 +623,7 @@ void LLImage::setLastError(const std::string& message)  //---------------------------------------------------------------------------  LLImageBase::LLImageBase() -:	LLTrace::MemTrackable<LLImageBase>("LLImage"), -	mData(NULL), +:	mData(NULL),  	mDataSize(0),  	mWidth(0),  	mHeight(0), @@ -673,7 +672,6 @@ void LLImageBase::sanityCheck()  void LLImageBase::deleteData()  {  	ll_aligned_free_16(mData); -	disclaimMem(mDataSize);  	mDataSize = 0;  	mData = NULL;  } @@ -731,7 +729,6 @@ U8* LLImageBase::allocateData(S32 size)  		}  	}  	mDataSize = size; -	claimMem(mDataSize);  	return mData;  } @@ -752,9 +749,7 @@ U8* LLImageBase::reallocateData(S32 size)  		ll_aligned_free_16(mData) ;  	}  	mData = new_datap; -	disclaimMem(mDataSize);  	mDataSize = size; -	claimMem(mDataSize);  	mBadBufferAllocation = false;  	return mData;  } @@ -2258,9 +2253,7 @@ void LLImageBase::setDataAndSize(U8 *data, S32 size)  {   	ll_assert_aligned(data, 16);  	mData = data;  -	disclaimMem(mDataSize);   	mDataSize = size;  -	claimMem(mDataSize);  }	  //static diff --git a/indra/llimage/llimage.h b/indra/llimage/llimage.h index f66b1666d7..354926ee58 100644 --- a/indra/llimage/llimage.h +++ b/indra/llimage/llimage.h @@ -112,8 +112,7 @@ protected:  // Image base class  class LLImageBase  -:	public LLThreadSafeRefCount, -	public LLTrace::MemTrackable<LLImageBase> +:	public LLThreadSafeRefCount  {  protected:  	virtual ~LLImageBase(); diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp index 4bff21610f..e1809dbe59 100644 --- a/indra/llimage/llimagej2c.cpp +++ b/indra/llimage/llimagej2c.cpp @@ -60,7 +60,6 @@ LLImageJ2C::LLImageJ2C() : 	LLImageFormatted(IMG_CODEC_J2C),  							mAreaUsedForDataSizeCalcs(0)  {  	mImpl.reset(fallbackCreateLLImageJ2CImpl()); -	claimMem(mImpl);  	// Clear data size table  	for( S32 i = 0; i <= MAX_DISCARD_LEVEL; i++) diff --git a/indra/llimage/llimagejpeg.cpp b/indra/llimage/llimagejpeg.cpp index 62638fa16c..32a5472ec8 100644 --- a/indra/llimage/llimagejpeg.cpp +++ b/indra/llimage/llimagejpeg.cpp @@ -393,9 +393,7 @@ boolean LLImageJPEG::encodeEmptyOutputBuffer( j_compress_ptr cinfo )    cinfo->dest->next_output_byte = self->mOutputBuffer + self->mOutputBufferSize;    cinfo->dest->free_in_buffer = self->mOutputBufferSize; -  self->disclaimMem(self->mOutputBufferSize);    self->mOutputBufferSize = new_buffer_size; -  self->claimMem(new_buffer_size);    return true;  } @@ -501,13 +499,10 @@ bool LLImageJPEG::encode( const LLImageRaw* raw_image, F32 encode_time )  	// Allocate a temporary buffer big enough to hold the entire compressed image (and then some)  	// (Note: we make it bigger in emptyOutputBuffer() if we need to)  	delete[] mOutputBuffer; -	disclaimMem(mOutputBufferSize);  	mOutputBufferSize = getWidth() * getHeight() * getComponents() + 1024; -	claimMem(mOutputBufferSize);  	mOutputBuffer = new(std::nothrow) U8[ mOutputBufferSize ];  	if (mOutputBuffer == NULL)  	{ -		disclaimMem(mOutputBufferSize);  		mOutputBufferSize = 0;  		setLastError("Failed to allocate output buffer");  		return false; @@ -547,7 +542,6 @@ bool LLImageJPEG::encode( const LLImageRaw* raw_image, F32 encode_time )  		jpeg_destroy_compress(&cinfo);  		delete[] mOutputBuffer;  		mOutputBuffer = NULL; -		disclaimMem(mOutputBufferSize);  		mOutputBufferSize = 0;  		return false;  	} @@ -650,7 +644,6 @@ bool LLImageJPEG::encode( const LLImageRaw* raw_image, F32 encode_time )  		// After finish_compress, we can release the temp output buffer.   		delete[] mOutputBuffer;  		mOutputBuffer = NULL; -		disclaimMem(mOutputBufferSize);  		mOutputBufferSize = 0;  		//////////////////////////////////////// @@ -663,7 +656,6 @@ bool LLImageJPEG::encode( const LLImageRaw* raw_image, F32 encode_time )  		jpeg_destroy_compress(&cinfo);  		delete[] mOutputBuffer;  		mOutputBuffer = NULL; -		disclaimMem(mOutputBufferSize);  		mOutputBufferSize = 0;  		return false;  	} diff --git a/indra/llimage/tests/llimageworker_test.cpp b/indra/llimage/tests/llimageworker_test.cpp index 51c5c63556..9011ac615c 100644 --- a/indra/llimage/tests/llimageworker_test.cpp +++ b/indra/llimage/tests/llimageworker_test.cpp @@ -45,8 +45,7 @@  // * A simulator for a class can be implemented here. Please comment and document thoroughly.  LLImageBase::LLImageBase()  -: LLTrace::MemTrackable<LLImageBase>("LLImageBase"), -mData(NULL), +: mData(NULL),  mDataSize(0),  mWidth(0),  mHeight(0), diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp index 18bc1b5a91..81261f0767 100644 --- a/indra/llinventory/llinventory.cpp +++ b/indra/llinventory/llinventory.cpp @@ -74,20 +74,17 @@ LLInventoryObject::LLInventoryObject(const LLUUID& uuid,  									 const LLUUID& parent_uuid,  									 LLAssetType::EType type,  									 const std::string& name)  -:	LLTrace::MemTrackable<LLInventoryObject>("LLInventoryObject"), -	mUUID(uuid), +:	mUUID(uuid),  	mParentUUID(parent_uuid),  	mType(type),  	mName(name),  	mCreationDate(0)  { -	claimMem(mName);  	correctInventoryName(mName);  }  LLInventoryObject::LLInventoryObject()  -:	LLTrace::MemTrackable<LLInventoryObject>("LLInventoryObject"), -	mType(LLAssetType::AT_NONE), +:	mType(LLAssetType::AT_NONE),  	mCreationDate(0)  {  } @@ -101,9 +98,7 @@ void LLInventoryObject::copyObject(const LLInventoryObject* other)  	mUUID = other->mUUID;  	mParentUUID = other->mParentUUID;  	mType = other->mType; -	disclaimMem(mName);  	mName = other->mName; -	claimMem(mName);  }  const LLUUID& LLInventoryObject::getUUID() const @@ -156,9 +151,7 @@ void LLInventoryObject::rename(const std::string& n)  	correctInventoryName(new_name);  	if( !new_name.empty() && new_name != mName )  	{ -		disclaimMem(mName);  		mName = new_name; -		claimMem(mName);  	}  } @@ -311,7 +304,6 @@ LLInventoryItem::LLInventoryItem(const LLUUID& uuid,  	LLStringUtil::replaceNonstandardASCII(mDescription, ' ');  	LLStringUtil::replaceChar(mDescription, '|', ' '); -	claimMem(mDescription);  	mPermissions.initMasks(inv_type);  } @@ -344,9 +336,7 @@ void LLInventoryItem::copyItem(const LLInventoryItem* other)  	copyObject(other);  	mPermissions = other->mPermissions;  	mAssetUUID = other->mAssetUUID; -	disclaimMem(mDescription);  	mDescription = other->mDescription; -	claimMem(mDescription);  	mSaleInfo = other->mSaleInfo;  	mInventoryType = other->mInventoryType;  	mFlags = other->mFlags; @@ -426,9 +416,7 @@ void LLInventoryItem::setDescription(const std::string& d)  	LLInventoryItem::correctInventoryDescription(new_desc);  	if( new_desc != mDescription )  	{ -		disclaimMem(mDescription);  		mDescription = new_desc; -		claimMem(mDescription);  	}  } @@ -708,10 +696,8 @@ BOOL LLInventoryItem::importLegacyStream(std::istream& input_stream)  				valuestr[0] = '\000';  			} -			disclaimMem(mDescription);  			mDescription.assign(valuestr);  			LLStringUtil::replaceNonstandardASCII(mDescription, ' '); -			claimMem(mDescription);  			/* TODO -- ask Ian about this code  			const char *donkey = mDescription.c_str();  			if (donkey[0] == '|') @@ -840,11 +826,9 @@ void LLInventoryItem::asLLSD( LLSD& sd ) const  	sd[INV_CREATION_DATE_LABEL] = (S32) mCreationDate;  } -LLTrace::BlockTimerStatHandle FTM_INVENTORY_SD_DESERIALIZE("Inventory SD Deserialize"); -  bool LLInventoryItem::fromLLSD(const LLSD& sd, bool is_new)  { -	LL_RECORD_BLOCK_TIME(FTM_INVENTORY_SD_DESERIALIZE); +    LL_PROFILE_ZONE_SCOPED;  	if (is_new)  	{  		// If we're adding LLSD to an existing object, need avoid @@ -961,10 +945,8 @@ bool LLInventoryItem::fromLLSD(const LLSD& sd, bool is_new)  	w = INV_DESC_LABEL;  	if (sd.has(w))  	{ -		disclaimMem(mDescription);  		mDescription = sd[w].asString();  		LLStringUtil::replaceNonstandardASCII(mDescription, ' '); -		claimMem(mDescription);  	}  	w = INV_CREATION_DATE_LABEL;  	if (sd.has(w)) diff --git a/indra/llinventory/llinventory.h b/indra/llinventory/llinventory.h index 0f336a072f..7d9f9704f1 100644 --- a/indra/llinventory/llinventory.h +++ b/indra/llinventory/llinventory.h @@ -44,7 +44,7 @@ class LLMessageSystem;  //   Base class for anything in the user's inventory.   Handles the common code   //   between items and categories.   //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -class LLInventoryObject : public LLRefCount, public LLTrace::MemTrackable<LLInventoryObject> +class LLInventoryObject : public LLRefCount  {  public:  	typedef std::list<LLPointer<LLInventoryObject> > object_list_t; diff --git a/indra/llinventory/llsettingsdaycycle.cpp b/indra/llinventory/llsettingsdaycycle.cpp index a687fd840d..b390ea5b1e 100644 --- a/indra/llinventory/llsettingsdaycycle.cpp +++ b/indra/llinventory/llsettingsdaycycle.cpp @@ -41,9 +41,6 @@  //=========================================================================  namespace  { -    LLTrace::BlockTimerStatHandle FTM_BLEND_WATERVALUES("Blending Water Environment Day"); -    LLTrace::BlockTimerStatHandle FTM_UPDATE_WATERVALUES("Update Water Environment Day"); -      template<typename T>      inline T get_wrapping_distance(T begin, T end)      { diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp index bdcf35faae..0ada97ad3f 100644 --- a/indra/llinventory/llsettingssky.cpp +++ b/indra/llinventory/llsettingssky.cpp @@ -66,11 +66,6 @@ namespace {      }  } -static LLTrace::BlockTimerStatHandle FTM_BLEND_SKYVALUES("Blending Sky Environment"); -static LLTrace::BlockTimerStatHandle FTM_RECALCULATE_SKYVALUES("Recalculate Sky"); -static LLTrace::BlockTimerStatHandle FTM_RECALCULATE_BODIES("Recalculate Heavenly Bodies"); -static LLTrace::BlockTimerStatHandle FTM_RECALCULATE_LIGHTING("Recalculate Lighting"); -  //=========================================================================  const std::string LLSettingsSky::SETTING_AMBIENT("ambient");  const std::string LLSettingsSky::SETTING_BLUE_DENSITY("blue_density"); @@ -940,7 +935,7 @@ LLSD LLSettingsSky::translateLegacySettings(const LLSD& legacy)  void LLSettingsSky::updateSettings()  { -    LL_RECORD_BLOCK_TIME(FTM_RECALCULATE_SKYVALUES); +    LL_PROFILE_ZONE_SCOPED;      // base class clears dirty flag so as to not trigger recursive update      LLSettingsBase::updateSettings(); diff --git a/indra/llinventory/llsettingswater.cpp b/indra/llinventory/llsettingswater.cpp index 0eb95dcd89..16cd3343e4 100644 --- a/indra/llinventory/llsettingswater.cpp +++ b/indra/llinventory/llsettingswater.cpp @@ -33,14 +33,6 @@  #include "v3colorutil.h"  #include "indra_constants.h" -//========================================================================= -namespace -{ -     LLTrace::BlockTimerStatHandle FTM_BLEND_WATERVALUES("Blending Water Environment"); -     LLTrace::BlockTimerStatHandle FTM_UPDATE_WATERVALUES("Update Water Environment"); -} - -//=========================================================================  const std::string LLSettingsWater::SETTING_BLUR_MULTIPLIER("blur_multiplier");  const std::string LLSettingsWater::SETTING_FOG_COLOR("water_fog_color");  const std::string LLSettingsWater::SETTING_FOG_DENSITY("water_fog_density"); diff --git a/indra/llkdu/tests/llimagej2ckdu_test.cpp b/indra/llkdu/tests/llimagej2ckdu_test.cpp index ee7b14be85..16213b7f45 100644 --- a/indra/llkdu/tests/llimagej2ckdu_test.cpp +++ b/indra/llkdu/tests/llimagej2ckdu_test.cpp @@ -63,8 +63,7 @@ U8* LLImageRaw::reallocateData(S32 ) { return NULL; }  bool LLImageRaw::resize(U16, U16, S8) { return true; } // this method always returns true...  LLImageBase::LLImageBase() -: LLTrace::MemTrackable<LLImageBase>("LLImageBase"), -mData(NULL), +: mData(NULL),  mDataSize(0),  mWidth(0),  mHeight(0), diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index 0e2f62f9db..8c4a1304b4 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -74,8 +74,9 @@ public:  };  template <class T> -class LLOctreeNode : public LLTreeNode<T> +class alignas(16) LLOctreeNode : public LLTreeNode<T>  { +    LL_ALIGN_NEW  public:  	typedef LLOctreeTraveler<T>									oct_traveler; @@ -91,16 +92,6 @@ public:  	typedef LLOctreeNode<T>		oct_node;  	typedef LLOctreeListener<T>	oct_listener; -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} -  	LLOctreeNode(	const LLVector4a& center,   					const LLVector4a& size,   					BaseType* parent,  diff --git a/indra/llmath/llrigginginfo.h b/indra/llmath/llrigginginfo.h index b3d6bc2d19..059c6ae082 100644 --- a/indra/llmath/llrigginginfo.h +++ b/indra/llmath/llrigginginfo.h @@ -34,9 +34,9 @@  // Extents are in joint space  // isRiggedTo is based on the state of all currently associated rigged meshes -LL_ALIGN_PREFIX(16) -class LLJointRiggingInfo +class alignas(16) LLJointRiggingInfo  { +    LL_ALIGN_NEW  public:      LLJointRiggingInfo();      bool isRiggedTo() const; @@ -45,31 +45,10 @@ public:      const LLVector4a *getRiggedExtents() const;      void merge(const LLJointRiggingInfo& other); -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} - -	void* operator new[](size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete[](void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} - -  private: -	LL_ALIGN_16(LLVector4a mRiggedExtents[2]); +	LLVector4a mRiggedExtents[2];      bool mIsRiggedTo; -} LL_ALIGN_POSTFIX(16); +};  // For storing all the rigging info associated with a given avatar or  // object, keyed by joint_num. diff --git a/indra/llmath/llvector4a.h b/indra/llmath/llvector4a.h index 5a02928374..53c8f604f6 100644 --- a/indra/llmath/llvector4a.h +++ b/indra/llmath/llvector4a.h @@ -47,9 +47,9 @@ class LLRotation;  // LLVector3/LLVector4.   ///////////////////////////////// -LL_ALIGN_PREFIX(16) -class LLVector4a +class alignas(16) LLVector4a  { +    LL_ALIGN_NEW  public:  	/////////////////////////////////// @@ -323,7 +323,7 @@ public:  private:  	LLQuad mQ; -} LL_ALIGN_POSTFIX(16); +};  inline void update_min_max(LLVector4a& min, LLVector4a& max, const LLVector4a& p)  { diff --git a/indra/llmath/llvolumeoctree.h b/indra/llmath/llvolumeoctree.h index 13150028d8..b2bc440368 100644 --- a/indra/llmath/llvolumeoctree.h +++ b/indra/llmath/llvolumeoctree.h @@ -34,19 +34,10 @@  #include "llvolume.h"  #include "llvector4a.h" -class LLVolumeTriangle : public LLRefCount +class alignas(16) LLVolumeTriangle : public LLRefCount  { +    LL_ALIGN_NEW  public: -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} -  	LLVolumeTriangle()  	{  		mBinIndex = -1;	 @@ -86,20 +77,10 @@ public:  }; -class LLVolumeOctreeListener : public LLOctreeListener<LLVolumeTriangle> +class alignas(16) LLVolumeOctreeListener : public LLOctreeListener<LLVolumeTriangle>  { +    LL_ALIGN_NEW  public: -	 -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} -  	LLVolumeOctreeListener(LLOctreeNode<LLVolumeTriangle>* node);  	~LLVolumeOctreeListener(); diff --git a/indra/llmessage/llfiltersd2xmlrpc.cpp b/indra/llmessage/llfiltersd2xmlrpc.cpp index d3e195789b..0abdafbdfc 100644 --- a/indra/llmessage/llfiltersd2xmlrpc.cpp +++ b/indra/llmessage/llfiltersd2xmlrpc.cpp @@ -309,7 +309,6 @@ LLFilterSD2XMLRPCResponse::~LLFilterSD2XMLRPCResponse()  } -static LLTrace::BlockTimerStatHandle FTM_PROCESS_SD2XMLRPC_RESPONSE("SD2XMLRPC Response");  // virtual  LLIOPipe::EStatus LLFilterSD2XMLRPCResponse::process_impl(  	const LLChannelDescriptors& channels, @@ -318,7 +317,7 @@ LLIOPipe::EStatus LLFilterSD2XMLRPCResponse::process_impl(  	LLSD& context,  	LLPumpIO* pump)  { -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_SD2XMLRPC_RESPONSE); +    LL_PROFILE_ZONE_SCOPED;  	PUMP_DEBUG;  	// This pipe does not work if it does not have everyting. This @@ -386,8 +385,6 @@ LLFilterSD2XMLRPCRequest::~LLFilterSD2XMLRPCRequest()  {  } -static LLTrace::BlockTimerStatHandle FTM_PROCESS_SD2XMLRPC_REQUEST("S22XMLRPC Request"); -  // virtual  LLIOPipe::EStatus LLFilterSD2XMLRPCRequest::process_impl(  	const LLChannelDescriptors& channels, @@ -396,7 +393,7 @@ LLIOPipe::EStatus LLFilterSD2XMLRPCRequest::process_impl(  	LLSD& context,  	LLPumpIO* pump)  { -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_SD2XMLRPC_REQUEST); +    LL_PROFILE_ZONE_SCOPED;  	// This pipe does not work if it does not have everyting. This  	// could be addressed by making a stream parser for llsd which  	// handled partial information. @@ -593,8 +590,6 @@ LLFilterXMLRPCResponse2LLSD::~LLFilterXMLRPCResponse2LLSD()  {  } -static LLTrace::BlockTimerStatHandle FTM_PROCESS_XMLRPC2LLSD_RESPONSE("XMLRPC2LLSD Response"); -  LLIOPipe::EStatus LLFilterXMLRPCResponse2LLSD::process_impl(  	const LLChannelDescriptors& channels,  	buffer_ptr_t& buffer, @@ -602,7 +597,7 @@ LLIOPipe::EStatus LLFilterXMLRPCResponse2LLSD::process_impl(  	LLSD& context,  	LLPumpIO* pump)  { -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_XMLRPC2LLSD_RESPONSE); +    LL_PROFILE_ZONE_SCOPED;  	PUMP_DEBUG;  	if(!eos) return STATUS_BREAK; @@ -679,7 +674,6 @@ LLFilterXMLRPCRequest2LLSD::~LLFilterXMLRPCRequest2LLSD()  {  } -static LLTrace::BlockTimerStatHandle FTM_PROCESS_XMLRPC2LLSD_REQUEST("XMLRPC2LLSD Request");  LLIOPipe::EStatus LLFilterXMLRPCRequest2LLSD::process_impl(  	const LLChannelDescriptors& channels,  	buffer_ptr_t& buffer, @@ -687,7 +681,7 @@ LLIOPipe::EStatus LLFilterXMLRPCRequest2LLSD::process_impl(  	LLSD& context,  	LLPumpIO* pump)  { -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_XMLRPC2LLSD_REQUEST); +    LL_PROFILE_ZONE_SCOPED;  	PUMP_DEBUG;  	if(!eos) return STATUS_BREAK;  	if(!buffer) return STATUS_ERROR; diff --git a/indra/llmessage/llhttpnode.cpp b/indra/llmessage/llhttpnode.cpp index 6fd17c9154..6e9598a0a3 100644 --- a/indra/llmessage/llhttpnode.cpp +++ b/indra/llmessage/llhttpnode.cpp @@ -121,6 +121,7 @@ LLSD LLHTTPNode::simplePost(const LLSD& input) const  // virtual  void LLHTTPNode::get(LLHTTPNode::ResponsePtr response, const LLSD& context) const  { +    LL_PROFILE_ZONE_SCOPED;  	try  	{  		response->result(simpleGet()); @@ -134,6 +135,7 @@ void LLHTTPNode::get(LLHTTPNode::ResponsePtr response, const LLSD& context) cons  // virtual  void LLHTTPNode::put(LLHTTPNode::ResponsePtr response, const LLSD& context, const LLSD& input) const  { +    LL_PROFILE_ZONE_SCOPED;  	try  	{  		response->result(simplePut(input)); @@ -147,6 +149,7 @@ void LLHTTPNode::put(LLHTTPNode::ResponsePtr response, const LLSD& context, cons  // virtual  void LLHTTPNode::post(LLHTTPNode::ResponsePtr response, const LLSD& context, const LLSD& input) const  { +    LL_PROFILE_ZONE_SCOPED;  	try  	{  		response->result(simplePost(input)); @@ -160,6 +163,7 @@ void LLHTTPNode::post(LLHTTPNode::ResponsePtr response, const LLSD& context, con  // virtual  void LLHTTPNode::del(LLHTTPNode::ResponsePtr response, const LLSD& context) const  { +    LL_PROFILE_ZONE_SCOPED;      try      {  	response->result(simpleDel(context)); diff --git a/indra/llmessage/lliohttpserver.cpp b/indra/llmessage/lliohttpserver.cpp index d9042fa8b0..c707c7ad09 100644 --- a/indra/llmessage/lliohttpserver.cpp +++ b/indra/llmessage/lliohttpserver.cpp @@ -132,12 +132,6 @@ private:  	LLSD mHeaders;  }; -static LLTrace::BlockTimerStatHandle FTM_PROCESS_HTTP_PIPE("HTTP Pipe"); -static LLTrace::BlockTimerStatHandle FTM_PROCESS_HTTP_GET("HTTP Get"); -static LLTrace::BlockTimerStatHandle FTM_PROCESS_HTTP_PUT("HTTP Put"); -static LLTrace::BlockTimerStatHandle FTM_PROCESS_HTTP_POST("HTTP Post"); -static LLTrace::BlockTimerStatHandle FTM_PROCESS_HTTP_DELETE("HTTP Delete"); -  LLIOPipe::EStatus LLHTTPPipe::process_impl(  	const LLChannelDescriptors& channels,      buffer_ptr_t& buffer, @@ -145,7 +139,7 @@ LLIOPipe::EStatus LLHTTPPipe::process_impl(      LLSD& context,      LLPumpIO* pump)  { -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_HTTP_PIPE); +    LL_PROFILE_ZONE_SCOPED;  	PUMP_DEBUG;      LL_DEBUGS() << "LLSDHTTPServer::process_impl" << LL_ENDL; @@ -174,12 +168,10 @@ LLIOPipe::EStatus LLHTTPPipe::process_impl(  		std::string verb = context[CONTEXT_REQUEST][CONTEXT_VERB];  		if(verb == HTTP_VERB_GET)  		{ -			LL_RECORD_BLOCK_TIME(FTM_PROCESS_HTTP_GET);  			mNode.get(LLHTTPNode::ResponsePtr(mResponse), context);  		}  		else if(verb == HTTP_VERB_PUT)  		{ -			LL_RECORD_BLOCK_TIME(FTM_PROCESS_HTTP_PUT);  			LLSD input;  			if (mNode.getContentType() == LLHTTPNode::CONTENT_TYPE_LLSD)  			{ @@ -195,7 +187,6 @@ LLIOPipe::EStatus LLHTTPPipe::process_impl(  		}  		else if(verb == HTTP_VERB_POST)  		{ -			LL_RECORD_BLOCK_TIME(FTM_PROCESS_HTTP_POST);  			LLSD input;  			if (mNode.getContentType() == LLHTTPNode::CONTENT_TYPE_LLSD)  			{ @@ -211,7 +202,6 @@ LLIOPipe::EStatus LLHTTPPipe::process_impl(  		}  		else if(verb == HTTP_VERB_DELETE)  		{ -			LL_RECORD_BLOCK_TIME(FTM_PROCESS_HTTP_DELETE);  			mNode.del(LLHTTPNode::ResponsePtr(mResponse), context);  		}		  		else if(verb == HTTP_VERB_OPTIONS) @@ -455,8 +445,6 @@ protected:   * LLHTTPResponseHeader   */ -static LLTrace::BlockTimerStatHandle FTM_PROCESS_HTTP_HEADER("HTTP Header"); -  // virtual  LLIOPipe::EStatus LLHTTPResponseHeader::process_impl(  	const LLChannelDescriptors& channels, @@ -465,7 +453,7 @@ LLIOPipe::EStatus LLHTTPResponseHeader::process_impl(  	LLSD& context,  	LLPumpIO* pump)  { -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_HTTP_HEADER); +    LL_PROFILE_ZONE_SCOPED;  	PUMP_DEBUG;  	if(eos)  	{ @@ -655,8 +643,6 @@ void LLHTTPResponder::markBad(  		<< "</body>\n</html>\n";  } -static LLTrace::BlockTimerStatHandle FTM_PROCESS_HTTP_RESPONDER("HTTP Responder"); -  // virtual  LLIOPipe::EStatus LLHTTPResponder::process_impl(  	const LLChannelDescriptors& channels, @@ -665,7 +651,7 @@ LLIOPipe::EStatus LLHTTPResponder::process_impl(  	LLSD& context,  	LLPumpIO* pump)  { -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_HTTP_RESPONDER); +    LL_PROFILE_ZONE_SCOPED;  	PUMP_DEBUG;  	LLIOPipe::EStatus status = STATUS_OK; diff --git a/indra/llmessage/lliosocket.cpp b/indra/llmessage/lliosocket.cpp index a9cc71c365..321d7286eb 100644 --- a/indra/llmessage/lliosocket.cpp +++ b/indra/llmessage/lliosocket.cpp @@ -300,8 +300,6 @@ LLIOSocketReader::~LLIOSocketReader()  	//LL_DEBUGS() << "Destroying LLIOSocketReader" << LL_ENDL;  } -static LLTrace::BlockTimerStatHandle FTM_PROCESS_SOCKET_READER("Socket Reader"); -  // virtual  LLIOPipe::EStatus LLIOSocketReader::process_impl(  	const LLChannelDescriptors& channels, @@ -310,7 +308,7 @@ LLIOPipe::EStatus LLIOSocketReader::process_impl(  	LLSD& context,  	LLPumpIO* pump)  { -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_SOCKET_READER); +    LL_PROFILE_ZONE_SCOPED;  	PUMP_DEBUG;  	if(!mSource) return STATUS_PRECONDITION_NOT_MET;  	if(!mInitialized) @@ -400,7 +398,6 @@ LLIOSocketWriter::~LLIOSocketWriter()  	//LL_DEBUGS() << "Destroying LLIOSocketWriter" << LL_ENDL;  } -static LLTrace::BlockTimerStatHandle FTM_PROCESS_SOCKET_WRITER("Socket Writer");  // virtual  LLIOPipe::EStatus LLIOSocketWriter::process_impl(  	const LLChannelDescriptors& channels, @@ -409,7 +406,7 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(  	LLSD& context,  	LLPumpIO* pump)  { -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_SOCKET_WRITER); +    LL_PROFILE_ZONE_SCOPED;  	PUMP_DEBUG;  	if(!mDestination) return STATUS_PRECONDITION_NOT_MET;  	if(!mInitialized) @@ -556,7 +553,6 @@ void LLIOServerSocket::setResponseTimeout(F32 timeout_secs)  	mResponseTimeout = timeout_secs;  } -static LLTrace::BlockTimerStatHandle FTM_PROCESS_SERVER_SOCKET("Server Socket");  // virtual  LLIOPipe::EStatus LLIOServerSocket::process_impl(  	const LLChannelDescriptors& channels, @@ -565,7 +561,7 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl(  	LLSD& context,  	LLPumpIO* pump)  { -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_SERVER_SOCKET); +    LL_PROFILE_ZONE_SCOPED;  	PUMP_DEBUG;  	if(!pump)  	{ diff --git a/indra/llmessage/llioutil.cpp b/indra/llmessage/llioutil.cpp index b8443c0600..850bc2a616 100644 --- a/indra/llmessage/llioutil.cpp +++ b/indra/llmessage/llioutil.cpp @@ -45,7 +45,6 @@ LLIOPipe::EStatus LLIOFlush::process_impl(  } -static LLTrace::BlockTimerStatHandle FTM_PROCESS_SLEEP("IO Sleep");  /**    * @class LLIOSleep   */ @@ -56,7 +55,7 @@ LLIOPipe::EStatus LLIOSleep::process_impl(  	LLSD& context,  	LLPumpIO* pump)  { -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_SLEEP); +    LL_PROFILE_ZONE_SCOPED;  	if(mSeconds > 0.0)  	{  		if(pump) pump->sleepChain(mSeconds); @@ -66,7 +65,6 @@ LLIOPipe::EStatus LLIOSleep::process_impl(  	return STATUS_DONE;  } -static LLTrace::BlockTimerStatHandle FTM_PROCESS_ADD_CHAIN("Add Chain");  /**    * @class LLIOAddChain   */ @@ -77,7 +75,7 @@ LLIOPipe::EStatus LLIOAddChain::process_impl(  	LLSD& context,  	LLPumpIO* pump)  { -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_ADD_CHAIN); +    LL_PROFILE_ZONE_SCOPED;  	pump->addChain(mChain, mTimeout);  	return STATUS_DONE;  } diff --git a/indra/llmessage/llpumpio.cpp b/indra/llmessage/llpumpio.cpp index a2524e9804..35365665f6 100644 --- a/indra/llmessage/llpumpio.cpp +++ b/indra/llmessage/llpumpio.cpp @@ -416,9 +416,6 @@ void LLPumpIO::pump()  	pump(DEFAULT_POLL_TIMEOUT);  } -static LLTrace::BlockTimerStatHandle FTM_PUMP_IO("Pump IO"); -static LLTrace::BlockTimerStatHandle FTM_PUMP_POLL("Pump Poll"); -  LLPumpIO::current_chain_t LLPumpIO::removeRunningChain(LLPumpIO::current_chain_t& run_chain)   {  	std::for_each( @@ -431,7 +428,7 @@ LLPumpIO::current_chain_t LLPumpIO::removeRunningChain(LLPumpIO::current_chain_t  //timeout is in microseconds  void LLPumpIO::pump(const S32& poll_timeout)  { -	LL_RECORD_BLOCK_TIME(FTM_PUMP_IO); +    LL_PROFILE_ZONE_SCOPED;  	//LL_INFOS() << "LLPumpIO::pump()" << LL_ENDL;  	// Run any pending runners. @@ -509,7 +506,7 @@ void LLPumpIO::pump(const S32& poll_timeout)  		S32 count = 0;  		S32 client_id = 0;          { -			LL_RECORD_BLOCK_TIME(FTM_PUMP_POLL); +            LL_PROFILE_ZONE_SCOPED;              apr_pollset_poll(mPollset, poll_timeout, &count, &poll_fd);          }  		PUMP_DEBUG; @@ -737,10 +734,9 @@ bool LLPumpIO::respond(  	return true;  } -static LLTrace::BlockTimerStatHandle FTM_PUMP_CALLBACK_CHAIN("Chain"); -  void LLPumpIO::callback()  { +    LL_PROFILE_ZONE_SCOPED;  	//LL_INFOS() << "LLPumpIO::callback()" << LL_ENDL;  	if(true)  	{ @@ -756,7 +752,6 @@ void LLPumpIO::callback()  		callbacks_t::iterator end = mCallbacks.end();  		for(; it != end; ++it)  		{ -			LL_RECORD_BLOCK_TIME(FTM_PUMP_CALLBACK_CHAIN);  			// it's always the first and last time for respone chains  			(*it).mHead = (*it).mChainLinks.begin();  			(*it).mInit = true; diff --git a/indra/llmessage/lltemplatemessagereader.cpp b/indra/llmessage/lltemplatemessagereader.cpp index 6d5ad0ba08..32f79f0546 100644 --- a/indra/llmessage/lltemplatemessagereader.cpp +++ b/indra/llmessage/lltemplatemessagereader.cpp @@ -533,6 +533,8 @@ static LLTrace::BlockTimerStatHandle FTM_PROCESS_MESSAGES("Process Messages");  // decode a given message  BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender )  { +    LL_RECORD_BLOCK_TIME(FTM_PROCESS_MESSAGES); +  	llassert( mReceiveSize >= 0 );  	llassert( mCurrentRMessageTemplate);  	llassert( !mCurrentRMessageData ); @@ -707,12 +709,9 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender  			decode_timer.reset();  		} +		if( !mCurrentRMessageTemplate->callHandlerFunc(gMessageSystem) )  		{ -			LL_RECORD_BLOCK_TIME(FTM_PROCESS_MESSAGES); -			if( !mCurrentRMessageTemplate->callHandlerFunc(gMessageSystem) ) -			{ -				LL_WARNS() << "Message from " << sender << " with no handler function received: " << mCurrentRMessageTemplate->mName << LL_ENDL; -			} +			LL_WARNS() << "Message from " << sender << " with no handler function received: " << mCurrentRMessageTemplate->mName << LL_ENDL;  		}  		if(LLMessageReader::getTimeDecodes() || gMessageSystem->getTimingCallback()) diff --git a/indra/llrender/llfontbitmapcache.cpp b/indra/llrender/llfontbitmapcache.cpp index f128636ab2..c71e24c83a 100644 --- a/indra/llrender/llfontbitmapcache.cpp +++ b/indra/llrender/llfontbitmapcache.cpp @@ -30,8 +30,7 @@  #include "llfontbitmapcache.h"  LLFontBitmapCache::LLFontBitmapCache() -:	LLTrace::MemTrackable<LLFontBitmapCache>("LLFontBitmapCache"), -	mNumComponents(0), +:	mNumComponents(0),  	mBitmapWidth(0),  	mBitmapHeight(0),  	mBitmapNum(-1), @@ -124,9 +123,6 @@ BOOL LLFontBitmapCache::nextOpenPos(S32 width, S32 &pos_x, S32 &pos_y, S32& bitm  			image_gl->createGLTexture(0, image_raw);  			gGL.getTexUnit(0)->bind(image_gl);  			image_gl->setFilteringOption(LLTexUnit::TFO_POINT); // was setMipFilterNearest(TRUE, TRUE); - -			claimMem(image_raw); -			claimMem(image_gl);  		}  		else  		{ @@ -156,20 +152,8 @@ void LLFontBitmapCache::destroyGL()  void LLFontBitmapCache::reset()  { -	for (std::vector<LLPointer<LLImageRaw> >::iterator it = mImageRawVec.begin(), end_it = mImageRawVec.end(); -		it != end_it; -		++it) -	{ -		disclaimMem(**it); -	}  	mImageRawVec.clear(); -	for (std::vector<LLPointer<LLImageGL> >::iterator it = mImageGLVec.begin(), end_it = mImageGLVec.end(); -		it != end_it; -		++it) -	{ -		disclaimMem(**it); -	}  	mImageGLVec.clear();  	mBitmapWidth = 0; diff --git a/indra/llrender/llfontbitmapcache.h b/indra/llrender/llfontbitmapcache.h index 75df3a94a7..7de3a6b56f 100644 --- a/indra/llrender/llfontbitmapcache.h +++ b/indra/llrender/llfontbitmapcache.h @@ -32,7 +32,7 @@  // Maintain a collection of bitmaps containing rendered glyphs.  // Generalizes the single-bitmap logic from LLFontFreetype and LLFontGL. -class LLFontBitmapCache : public LLTrace::MemTrackable<LLFontBitmapCache> +class LLFontBitmapCache  {  public:  	LLFontBitmapCache(); diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp index e18161e53c..e964d1586f 100644 --- a/indra/llrender/llfontfreetype.cpp +++ b/indra/llrender/llfontfreetype.cpp @@ -104,8 +104,7 @@ LLFontGlyphInfo::LLFontGlyphInfo(U32 index)  }  LLFontFreetype::LLFontFreetype() -:	LLTrace::MemTrackable<LLFontFreetype>("LLFontFreetype"), -	mFontBitmapCachep(new LLFontBitmapCache), +:	mFontBitmapCachep(new LLFontBitmapCache),  	mAscender(0.f),  	mDescender(0.f),  	mLineHeight(0.f), @@ -222,8 +221,6 @@ BOOL LLFontFreetype::loadFace(const std::string& filename, F32 point_size, F32 v  	S32 max_char_height = ll_round(0.5f + (y_max - y_min));  	mFontBitmapCachep->init(components, max_char_width, max_char_height); -	claimMem(mFontBitmapCachep); -  	if (!mFTFace->charmap)  	{ @@ -238,7 +235,6 @@ BOOL LLFontFreetype::loadFace(const std::string& filename, F32 point_size, F32 v  	}  	mName = filename; -	claimMem(mName);  	mPointSize = point_size;  	mStyle = LLFontGL::NORMAL; @@ -586,7 +582,6 @@ void LLFontFreetype::insertGlyphInfo(llwchar wch, LLFontGlyphInfo* gi) const  	}  	else  	{ -		claimMem(gi);  		mCharGlyphInfoMap[wch] = gi;  	}  } @@ -632,11 +627,9 @@ void LLFontFreetype::resetBitmapCache()  		it != end_it;  		++it)  	{ -		disclaimMem(it->second);  		delete it->second;  	}  	mCharGlyphInfoMap.clear(); -	disclaimMem(mFontBitmapCachep);  	mFontBitmapCachep->reset();  	// Adding default glyph is skipped for fallback fonts here as well as in loadFace().  diff --git a/indra/llrender/llfontfreetype.h b/indra/llrender/llfontfreetype.h index 1afe84e770..f61f169987 100644 --- a/indra/llrender/llfontfreetype.h +++ b/indra/llrender/llfontfreetype.h @@ -76,7 +76,7 @@ struct LLFontGlyphInfo  extern LLFontManager *gFontManagerp; -class LLFontFreetype : public LLRefCount, public LLTrace::MemTrackable<LLFontFreetype> +class LLFontFreetype : public LLRefCount  {  public:  	LLFontFreetype(); diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index 266399d212..7f734e41f3 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -109,8 +109,6 @@ S32 LLFontGL::getNumFaces(const std::string& filename)  	return mFontFreetype->getNumFaces(filename);  } -static LLTrace::BlockTimerStatHandle FTM_RENDER_FONTS("Fonts"); -  S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, const LLRect& rect, const LLColor4 &color, HAlign halign, VAlign valign, U8 style,      ShadowType shadow, S32 max_chars, F32* right_x, BOOL use_ellipses) const  { @@ -147,7 +145,7 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, const LLRectf& rec  S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, const LLColor4 &color, HAlign halign, VAlign valign, U8 style,   					 ShadowType shadow, S32 max_chars, S32 max_pixels, F32* right_x, BOOL use_ellipses) const  { -	LL_RECORD_BLOCK_TIME(FTM_RENDER_FONTS); +    LL_PROFILE_ZONE_SCOPED;  	if(!sDisplayFont) //do not display texts  	{ diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index b66521132c..4f9aa5f979 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -2434,6 +2434,7 @@ void LLGLNamePool::cleanup()  GLuint LLGLNamePool::allocate()  { +    LL_PROFILE_ZONE_SCOPED;  #if LL_GL_NAME_POOLING  	for (name_list_t::iterator iter = mNameList.begin(); iter != mNameList.end(); ++iter)  	{ diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index b5e1910242..09b1c71f02 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -276,11 +276,10 @@ S32 LLImageGL::dataFormatComponents(S32 dataformat)  //---------------------------------------------------------------------------- -static LLTrace::BlockTimerStatHandle FTM_IMAGE_UPDATE_STATS("Image Stats");  // static  void LLImageGL::updateStats(F32 current_time)  { -	LL_RECORD_BLOCK_TIME(FTM_IMAGE_UPDATE_STATS); +    LL_PROFILE_ZONE_SCOPED;  	sLastFrameTime = current_time;  	sBoundTextureMemory = sCurBoundTextureMemory;  	sCurBoundTextureMemory = S32Bytes(0); @@ -313,10 +312,8 @@ void LLImageGL::destroyGL(BOOL save_state)  			if (save_state && glimage->isGLTextureCreated() && glimage->mComponents)  			{  				glimage->mSaveData = new LLImageRaw; -				glimage->claimMem(glimage->mSaveData);  				if(!glimage->readBackRaw(glimage->mCurrentDiscardLevel, glimage->mSaveData, false)) //necessary, keep it.  				{ -					glimage->disclaimMem(glimage->mSaveData);  					glimage->mSaveData = NULL ;  				}  			} @@ -390,8 +387,7 @@ BOOL LLImageGL::create(LLPointer<LLImageGL>& dest, const LLImageRaw* imageraw, B  //----------------------------------------------------------------------------  LLImageGL::LLImageGL(BOOL usemipmaps) -:	LLTrace::MemTrackable<LLImageGL>("LLImageGL"), -    mSaveData(0), mExternalTexture(FALSE) +:	mSaveData(0), mExternalTexture(FALSE)  {  	init(usemipmaps);  	setSize(0, 0, 0); @@ -400,8 +396,7 @@ LLImageGL::LLImageGL(BOOL usemipmaps)  }  LLImageGL::LLImageGL(U32 width, U32 height, U8 components, BOOL usemipmaps) -:	LLTrace::MemTrackable<LLImageGL>("LLImageGL"), -    mSaveData(0), mExternalTexture(FALSE) +:	mSaveData(0), mExternalTexture(FALSE)  {  	llassert( components <= 4 );  	init(usemipmaps); @@ -411,8 +406,7 @@ LLImageGL::LLImageGL(U32 width, U32 height, U8 components, BOOL usemipmaps)  }  LLImageGL::LLImageGL(const LLImageRaw* imageraw, BOOL usemipmaps) -:	LLTrace::MemTrackable<LLImageGL>("LLImageGL"), -    mSaveData(0), mExternalTexture(FALSE) +:	mSaveData(0), mExternalTexture(FALSE)  {  	init(usemipmaps);  	setSize(0, 0, 0); @@ -430,7 +424,6 @@ LLImageGL::LLImageGL(      LLGLenum formatPrimary,      LLGLenum formatType,      LLTexUnit::eTextureAddressMode addressMode) -    : LLTrace::MemTrackable<LLImageGL>("LLImageGL"), mSaveData(0), mExternalTexture(TRUE)  {      init(false);      mTexName = texName; @@ -682,10 +675,9 @@ void LLImageGL::setImage(const LLImageRaw* imageraw)  	setImage(rawdata, FALSE);  } -static LLTrace::BlockTimerStatHandle FTM_SET_IMAGE("setImage");  BOOL LLImageGL::setImage(const U8* data_in, BOOL data_hasmips, S32 usename)  { -	LL_RECORD_BLOCK_TIME(FTM_SET_IMAGE); +    LL_PROFILE_ZONE_SCOPED;  	bool is_compressed = false;      switch (mFormatPrimary) @@ -746,8 +738,6 @@ BOOL LLImageGL::setImage(const U8* data_in, BOOL data_hasmips, S32 usename)  				}  				else  				{ -// 					LL_RECORD_BLOCK_TIME(FTM_TEMP4); -  					if(mFormatSwapBytes)  					{  						glPixelStorei(GL_UNPACK_SWAP_BYTES, 1); @@ -778,8 +768,6 @@ BOOL LLImageGL::setImage(const U8* data_in, BOOL data_hasmips, S32 usename)  			{  				stop_glerror();  				{ -// 					LL_RECORD_BLOCK_TIME(FTM_TEMP4); -  					if(mFormatSwapBytes)  					{  						glPixelStorei(GL_UNPACK_SWAP_BYTES, 1); @@ -889,7 +877,6 @@ BOOL LLImageGL::setImage(const U8* data_in, BOOL data_hasmips, S32 usename)  					llassert(w > 0 && h > 0 && cur_mip_data);  					(void)cur_mip_data;  					{ -// 						LL_RECORD_BLOCK_TIME(FTM_TEMP4);  						if(mFormatSwapBytes)  						{  							glPixelStorei(GL_UNPACK_SWAP_BYTES, 1); @@ -1203,10 +1190,9 @@ BOOL LLImageGL::setSubImageFromFrameBuffer(S32 fb_x, S32 fb_y, S32 x_pos, S32 y_  }  // static -static LLTrace::BlockTimerStatHandle FTM_GENERATE_TEXTURES("generate textures");  void LLImageGL::generateTextures(S32 numTextures, U32 *textures)  { -	LL_RECORD_BLOCK_TIME(FTM_GENERATE_TEXTURES); +    LL_PROFILE_ZONE_SCOPED;  	glGenTextures(numTextures, textures);  } @@ -1220,10 +1206,9 @@ void LLImageGL::deleteTextures(S32 numTextures, const U32 *textures)  }  // static -static LLTrace::BlockTimerStatHandle FTM_SET_MANUAL_IMAGE("setManualImage");  void LLImageGL::setManualImage(U32 target, S32 miplevel, S32 intformat, S32 width, S32 height, U32 pixformat, U32 pixtype, const void* pixels, bool allow_compression)  { -    LL_RECORD_BLOCK_TIME(FTM_SET_MANUAL_IMAGE); +    LL_PROFILE_ZONE_SCOPED;      bool use_scratch = false;      U32* scratch = NULL;      if (LLRender::sGLCoreProfile) @@ -1338,10 +1323,9 @@ void LLImageGL::setManualImage(U32 target, S32 miplevel, S32 intformat, S32 widt  //create an empty GL texture: just create a texture name  //the texture is assiciate with some image by calling glTexImage outside LLImageGL -static LLTrace::BlockTimerStatHandle FTM_CREATE_GL_TEXTURE1("createGLTexture()");  BOOL LLImageGL::createGLTexture()  { -	LL_RECORD_BLOCK_TIME(FTM_CREATE_GL_TEXTURE1); +    LL_PROFILE_ZONE_SCOPED;  	if (gGLManager.mIsDisabled)  	{  		LL_WARNS() << "Trying to create a texture while GL is disabled!" << LL_ENDL; @@ -1371,10 +1355,9 @@ BOOL LLImageGL::createGLTexture()  	return TRUE ;  } -static LLTrace::BlockTimerStatHandle FTM_CREATE_GL_TEXTURE2("createGLTexture(raw)");  BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename/*=0*/, BOOL to_create, S32 category)  { -	LL_RECORD_BLOCK_TIME(FTM_CREATE_GL_TEXTURE2); +    LL_PROFILE_ZONE_SCOPED;  	if (gGLManager.mIsDisabled)  	{  		LL_WARNS() << "Trying to create a texture while GL is disabled!" << LL_ENDL; @@ -1485,10 +1468,9 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S  	return createGLTexture(discard_level, rawdata, FALSE, usename);  } -static LLTrace::BlockTimerStatHandle FTM_CREATE_GL_TEXTURE3("createGLTexture3(data)");  BOOL LLImageGL::createGLTexture(S32 discard_level, const U8* data_in, BOOL data_hasmips, S32 usename)  { -    LL_RECORD_BLOCK_TIME(FTM_CREATE_GL_TEXTURE3); +    LL_PROFILE_ZONE_SCOPED;      llassert(data_in);      stop_glerror(); @@ -1595,9 +1577,7 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const U8* data_in, BOOL data_          mNewTexName = 0;      } -    disclaimMem(mTextureMemory);      mTextureMemory = (S32Bytes)getMipBytes(mCurrentDiscardLevel); -    claimMem(mTextureMemory);      sGlobalTextureMemory += mTextureMemory;      mTexelsInGLTexture = getWidth() * getHeight(); @@ -1735,7 +1715,6 @@ void LLImageGL::destroyGLTexture()  		if(mTextureMemory != S32Bytes(0))  		{  			sGlobalTextureMemory -= mTextureMemory; -			disclaimMem(mTextureMemory);  			mTextureMemory = (S32Bytes)0;  		} @@ -2088,7 +2067,6 @@ U32 LLImageGL::createPickMask(S32 pWidth, S32 pHeight)  	U32 size = pick_width * pick_height;  	size = (size + 7) / 8; // pixelcount-to-bits  	mPickMask = new U8[size]; -	claimMem(size);  	mPickMaskWidth = pick_width - 1;  	mPickMaskHeight = pick_height - 1; @@ -2103,7 +2081,6 @@ void LLImageGL::freePickMask()  	// pickmask validity depends on old image size, delete it  	if (mPickMask != NULL)  	{ -		disclaimMem((mPickMaskWidth * mPickMaskHeight + 7) / 8);  		delete [] mPickMask;  	}  	mPickMask = NULL; diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h index da626a1093..95b60bd0bd 100644 --- a/indra/llrender/llimagegl.h +++ b/indra/llrender/llimagegl.h @@ -46,7 +46,7 @@ class LLWindow;  #define MEGA_BYTES_TO_BYTES(x) ((x) << 20)  //============================================================================ -class LLImageGL : public LLRefCount, public LLTrace::MemTrackable<LLImageGL> +class LLImageGL : public LLRefCount  {  	friend class LLTexUnit;  public: diff --git a/indra/llrender/llrender2dutils.cpp b/indra/llrender/llrender2dutils.cpp index dd34f3e383..5a942996be 100644 --- a/indra/llrender/llrender2dutils.cpp +++ b/indra/llrender/llrender2dutils.cpp @@ -1083,8 +1083,6 @@ void gl_rect_2d_simple( S32 width, S32 height )  	gGL.end();  } -static LLTrace::BlockTimerStatHandle FTM_RENDER_SEGMENTED_RECT ("Render segmented rectangle"); -  void gl_segmented_rect_2d_tex(const S32 left,   							  const S32 top,   							  const S32 right,  @@ -1094,7 +1092,7 @@ void gl_segmented_rect_2d_tex(const S32 left,  							  const S32 border_size,   							  const U32 edges)  { -	LL_RECORD_BLOCK_TIME(FTM_RENDER_SEGMENTED_RECT); +    LL_PROFILE_ZONE_SCOPED;  	S32 width = llabs(right - left);  	S32 height = llabs(top - bottom); @@ -1253,7 +1251,7 @@ void gl_segmented_rect_2d_fragment_tex(const LLRect& rect,  	const F32 end_fragment,   	const U32 edges)  { -	LL_RECORD_BLOCK_TIME(FTM_RENDER_SEGMENTED_RECT); +    LL_PROFILE_ZONE_SCOPED;  	const S32 left = rect.mLeft;  	const S32 right = rect.mRight;  	const S32 top = rect.mTop; @@ -1440,7 +1438,7 @@ void gl_segmented_rect_2d_fragment_tex(const LLRect& rect,  void gl_segmented_rect_3d_tex(const LLRectf& clip_rect, const LLRectf& center_uv_rect, const LLRectf& center_draw_rect,   							 const LLVector3& width_vec, const LLVector3& height_vec)  { -	LL_RECORD_BLOCK_TIME(FTM_RENDER_SEGMENTED_RECT); +    LL_PROFILE_ZONE_SCOPED;  	gGL.begin(LLRender::QUADS);  	{ diff --git a/indra/llrender/lltexture.h b/indra/llrender/lltexture.h index 256d85ce5a..e890a5a30b 100644 --- a/indra/llrender/lltexture.h +++ b/indra/llrender/lltexture.h @@ -42,7 +42,7 @@ class LLFontGL ;  //  //this is an abstract class as the parent for the class LLGLTexture  // -class LLTexture : public virtual LLRefCount, public LLTrace::MemTrackable<LLTexture> +class LLTexture : public virtual LLRefCount  {  	friend class LLTexUnit ;  	friend class LLFontGL ; @@ -52,7 +52,6 @@ protected:  public:  	LLTexture() -	:	LLTrace::MemTrackable<LLTexture>("LLTexture")  	{}  	// diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 7e726df907..5ea07ddcb1 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -805,13 +805,15 @@ void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const  	placeFence();  } -static LLTrace::BlockTimerStatHandle FTM_GL_DRAW_ARRAYS("GL draw arrays"); +  void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const  { +    LL_PROFILE_ZONE_SCOPED;      llassert(!LLGLSLShader::sNoFixedFunction || LLGLSLShader::sCurBoundShaderPtr != NULL);      mMappable = false;      gGL.syncMatrices(); +#ifndef LL_RELEASE_FOR_DOWNLOAD      llassert(mNumVerts >= 0);      if (first >= (U32)mNumVerts ||          first + count > (U32)mNumVerts) @@ -839,16 +841,11 @@ void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const          LL_ERRS() << "Invalid draw mode: " << mode << LL_ENDL;          return;      } +#endif      { -        LL_RECORD_BLOCK_TIME(FTM_GL_DRAW_ARRAYS); -        stop_glerror(); -        LLGLSLShader::startProfile(); -        stop_glerror();          LL_PROFILER_GPU_ZONEC("gl.DrawArrays", 0xFF4040)              glDrawArrays(sGLMode[mode], first, count); -        stop_glerror(); -        LLGLSLShader::stopProfile(count, mode);      }      stop_glerror(); @@ -949,8 +946,7 @@ S32 LLVertexBuffer::determineUsage(S32 usage)  }  LLVertexBuffer::LLVertexBuffer(U32 typemask, S32 usage)  -:	LLTrace::MemTrackable<LLVertexBuffer>("LLVertexBuffer"), -	LLRefCount(), +:	LLRefCount(),  	mNumVerts(0),  	mNumIndices(0), @@ -1095,9 +1091,7 @@ void LLVertexBuffer::waitFence() const  void LLVertexBuffer::genBuffer(U32 size)  { -	disclaimMem(mSize);  	mSize = vbo_block_size(size); -	claimMem(mSize);  	if (mUsage == GL_STREAM_DRAW_ARB)  	{ @@ -1193,9 +1187,7 @@ bool LLVertexBuffer::createGLBuffer(U32 size)  		static int gl_buffer_idx = 0;  		mGLBuffer = ++gl_buffer_idx;  		mMappedData = (U8*)ll_aligned_malloc_16(size); -		disclaimMem(mSize);  		mSize = size; -		claimMem(mSize);  	}  	if (!mMappedData) @@ -1365,8 +1357,6 @@ bool LLVertexBuffer::allocateBuffer(S32 nverts, S32 nindices, bool create)  	return success;  } -static LLTrace::BlockTimerStatHandle FTM_SETUP_VERTEX_ARRAY("Setup VAO"); -  void LLVertexBuffer::setupVertexArray()  {  	if (!mGLArray) @@ -1374,7 +1364,7 @@ void LLVertexBuffer::setupVertexArray()  		return;  	} -	LL_RECORD_BLOCK_TIME(FTM_SETUP_VERTEX_ARRAY); +    LL_PROFILE_ZONE_SCOPED;  #if GL_ARB_vertex_array_object  	glBindVertexArray(mGLArray);  #endif @@ -1547,12 +1537,11 @@ bool expand_region(LLVertexBuffer::MappedRegion& region, S32 index, S32 count)  	return true;  } -static LLTrace::BlockTimerStatHandle FTM_VBO_MAP_BUFFER_RANGE("VBO Map Range"); -static LLTrace::BlockTimerStatHandle FTM_VBO_MAP_BUFFER("VBO Map");  // Map for data access  volatile U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_range)  { +    LL_PROFILE_ZONE_SCOPED;  	bindGLBuffer(true);  	if (mFinal)  	{ @@ -1619,7 +1608,6 @@ volatile U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, boo  					if (map_range)  					{  #ifdef GL_ARB_map_buffer_range -						LL_RECORD_BLOCK_TIME(FTM_VBO_MAP_BUFFER_RANGE);  						S32 offset = mOffsets[type] + sTypeSize[type]*index;  						S32 length = (sTypeSize[type]*count+0xF) & ~0xF;  						src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, offset, length,  @@ -1643,7 +1631,6 @@ volatile U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, boo  							}  						} -						LL_RECORD_BLOCK_TIME(FTM_VBO_MAP_BUFFER);  						src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, 0, mSize,   							GL_MAP_WRITE_BIT |   							GL_MAP_FLUSH_EXPLICIT_BIT); @@ -1729,11 +1716,9 @@ volatile U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, boo  } -static LLTrace::BlockTimerStatHandle FTM_VBO_MAP_INDEX_RANGE("IBO Map Range"); -static LLTrace::BlockTimerStatHandle FTM_VBO_MAP_INDEX("IBO Map"); -  volatile U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range)  { +    LL_PROFILE_ZONE_SCOPED;  	bindGLIndices(true);  	if (mFinal)  	{ @@ -1808,7 +1793,6 @@ volatile U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range  					if (map_range)  					{  #ifdef GL_ARB_map_buffer_range -						LL_RECORD_BLOCK_TIME(FTM_VBO_MAP_INDEX_RANGE);  						S32 offset = sizeof(U16)*index;  						S32 length = sizeof(U16)*count;  						src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length,  @@ -1820,7 +1804,6 @@ volatile U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range  					else  					{  #ifdef GL_ARB_map_buffer_range -						LL_RECORD_BLOCK_TIME(FTM_VBO_MAP_INDEX);  						src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, sizeof(U16)*mNumIndices,   							GL_MAP_WRITE_BIT |   							GL_MAP_FLUSH_EXPLICIT_BIT); @@ -1844,7 +1827,6 @@ volatile U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range  				}  				else  				{ -					LL_RECORD_BLOCK_TIME(FTM_VBO_MAP_INDEX);  					map_range = false;  					src = (U8*) glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);  				} @@ -1895,13 +1877,6 @@ volatile U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range  	}  } -static LLTrace::BlockTimerStatHandle FTM_VBO_UNMAP("VBO Unmap"); -static LLTrace::BlockTimerStatHandle FTM_VBO_FLUSH_RANGE("Flush VBO Range"); - - -static LLTrace::BlockTimerStatHandle FTM_IBO_UNMAP("IBO Unmap"); -static LLTrace::BlockTimerStatHandle FTM_IBO_FLUSH_RANGE("Flush IBO Range"); -  void LLVertexBuffer::unmapBuffer()  {  	if (!useVBOs()) @@ -1910,10 +1885,10 @@ void LLVertexBuffer::unmapBuffer()  	}  	bool updated_all = false; - +    LL_PROFILE_ZONE_SCOPED;  	if (mMappedData && mVertexLocked)  	{ -		LL_RECORD_BLOCK_TIME(FTM_VBO_UNMAP); +        LL_PROFILE_ZONE_NAMED("unmapBuffer - vertex");  		bindGLBuffer(true);  		updated_all = mIndexLocked; //both vertex and index buffers done updating @@ -1960,7 +1935,7 @@ void LLVertexBuffer::unmapBuffer()  			{  				if (!mMappedVertexRegions.empty())  				{ -					stop_glerror(); +                    LL_PROFILE_ZONE_NAMED("unmapBuffer - flush vertex");  					for (U32 i = 0; i < mMappedVertexRegions.size(); ++i)  					{  						const MappedRegion& region = mMappedVertexRegions[i]; @@ -1968,18 +1943,16 @@ void LLVertexBuffer::unmapBuffer()  						S32 length = sTypeSize[region.mType]*region.mCount;  						if (gGLManager.mHasMapBufferRange)  						{ -							LL_RECORD_BLOCK_TIME(FTM_VBO_FLUSH_RANGE);  #ifdef GL_ARB_map_buffer_range  							glFlushMappedBufferRange(GL_ARRAY_BUFFER_ARB, offset, length);  #endif  						}  						else if (gGLManager.mHasFlushBufferRange) -						{ +                        {  #ifndef LL_MESA_HEADLESS  							glFlushMappedBufferRangeAPPLE(GL_ARRAY_BUFFER_ARB, offset, length);  #endif  						} -						stop_glerror();  					}  					mMappedVertexRegions.clear(); @@ -1998,7 +1971,7 @@ void LLVertexBuffer::unmapBuffer()  	if (mMappedIndexData && mIndexLocked)  	{ -		LL_RECORD_BLOCK_TIME(FTM_IBO_UNMAP); +        LL_PROFILE_ZONE_NAMED("unmapBuffer - index");  		bindGLIndices();  		if(!mMappable)  		{ @@ -2044,12 +2017,12 @@ void LLVertexBuffer::unmapBuffer()  				{  					for (U32 i = 0; i < mMappedIndexRegions.size(); ++i)  					{ +                        LL_PROFILE_ZONE_NAMED("unmapBuffer - flush index");  						const MappedRegion& region = mMappedIndexRegions[i];  						S32 offset = region.mIndex >= 0 ? sizeof(U16)*region.mIndex : 0;  						S32 length = sizeof(U16)*region.mCount;  						if (gGLManager.mHasMapBufferRange)  						{ -							LL_RECORD_BLOCK_TIME(FTM_IBO_FLUSH_RANGE);  #ifdef GL_ARB_map_buffer_range  							glFlushMappedBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length);  #endif @@ -2068,9 +2041,8 @@ void LLVertexBuffer::unmapBuffer()  					mMappedIndexRegions.clear();  				}  			} -			stop_glerror(); -			glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB); -			stop_glerror(); +			 +            glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB);  			mMappedIndexData = NULL;  		} @@ -2193,13 +2165,12 @@ bool LLVertexBuffer::getClothWeightStrider(LLStrider<LLVector4>& strider, S32 in  //---------------------------------------------------------------------------- -static LLTrace::BlockTimerStatHandle FTM_BIND_GL_ARRAY("Bind Array");  bool LLVertexBuffer::bindGLArray()  {  	if (mGLArray && sGLRenderArray != mGLArray)  	{  		{ -			LL_RECORD_BLOCK_TIME(FTM_BIND_GL_ARRAY); +            LL_PROFILE_ZONE_SCOPED;  #if GL_ARB_vertex_array_object  			glBindVertexArray(mGLArray);  #endif @@ -2216,8 +2187,6 @@ bool LLVertexBuffer::bindGLArray()  	return false;  } -static LLTrace::BlockTimerStatHandle FTM_BIND_GL_BUFFER("Bind Buffer"); -  bool LLVertexBuffer::bindGLBuffer(bool force_bind)  {  	bindGLArray(); @@ -2226,8 +2195,7 @@ bool LLVertexBuffer::bindGLBuffer(bool force_bind)  	if (useVBOs() && (force_bind || (mGLBuffer && (mGLBuffer != sGLRenderBuffer || !sVBOActive))))  	{ -		//LL_RECORD_BLOCK_TIME(FTM_BIND_GL_BUFFER); -		 +        LL_PROFILE_ZONE_SCOPED;  		glBindBufferARB(GL_ARRAY_BUFFER_ARB, mGLBuffer);  		sGLRenderBuffer = mGLBuffer;  		sBindCount++; @@ -2256,16 +2224,14 @@ bool LLVertexBuffer::bindGLBufferFast()      return false;  } -static LLTrace::BlockTimerStatHandle FTM_BIND_GL_INDICES("Bind Indices"); -  bool LLVertexBuffer::bindGLIndices(bool force_bind)  { +    LL_PROFILE_ZONE_SCOPED;  	bindGLArray();  	bool ret = false;  	if (useVBOs() && (force_bind || (mGLIndices && (mGLIndices != sGLRenderIndices || !sIBOActive))))  	{ -		LL_RECORD_BLOCK_TIME(FTM_BIND_GL_INDICES);  		/*if (sMapped)  		{  			LL_ERRS() << "VBO bound while another VBO mapped!" << LL_ENDL; diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h index fad474a143..1b400b3aad 100644 --- a/indra/llrender/llvertexbuffer.h +++ b/indra/llrender/llvertexbuffer.h @@ -98,7 +98,7 @@ public:  //============================================================================  // base class   class LLPrivateMemoryPool; -class LLVertexBuffer : public LLRefCount, public LLTrace::MemTrackable<LLVertexBuffer> +class LLVertexBuffer : public LLRefCount  {  public:  	class MappedRegion @@ -113,8 +113,7 @@ public:  	};  	LLVertexBuffer(const LLVertexBuffer& rhs) -	:	LLTrace::MemTrackable<LLVertexBuffer>("LLVertexBuffer"), -		mUsage(rhs.mUsage) +	:	mUsage(rhs.mUsage)  	{  		*this = rhs;  	} diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 0e42922543..03efd09689 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -3268,11 +3268,9 @@ boost::signals2::connection LLFloater::setCloseCallback( const commit_signal_t::  	return mCloseSignal.connect(cb);  } -LLTrace::BlockTimerStatHandle POST_BUILD("Floater Post Build"); -static LLTrace::BlockTimerStatHandle FTM_EXTERNAL_FLOATER_LOAD("Load Extern Floater Reference"); -  bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::string& filename, LLXMLNodePtr output_node)  { +    LL_PROFILE_ZONE_SCOPED;  	Params default_params(LLUICtrlFactory::getDefaultParams<LLFloater>());  	Params params(default_params); @@ -3299,7 +3297,6 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::str  		LLUICtrlFactory::instance().pushFileName(xml_filename); -		LL_RECORD_BLOCK_TIME(FTM_EXTERNAL_FLOATER_LOAD);  		if (!LLUICtrlFactory::getLayeredXMLNode(xml_filename, referenced_xml))  		{  			LL_WARNS() << "Couldn't parse panel from: " << xml_filename << LL_ENDL; @@ -3375,12 +3372,8 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::str  	}  	BOOL result; -	{ -		LL_RECORD_BLOCK_TIME(POST_BUILD); - -		result = postBuild(); -	} - +	result = postBuild(); +	  	if (!result)  	{  		LL_ERRS() << "Failed to construct floater " << getName() << LL_ENDL; @@ -3424,11 +3417,9 @@ bool LLFloater::isVisible(const LLFloater* floater)      return floater && floater->getVisible();  } -static LLTrace::BlockTimerStatHandle FTM_BUILD_FLOATERS("Build Floaters"); -  bool LLFloater::buildFromFile(const std::string& filename)  { -	LL_RECORD_BLOCK_TIME(FTM_BUILD_FLOATERS); +    LL_PROFILE_ZONE_SCOPED;  	LLXMLNodePtr root;  	if (!LLUICtrlFactory::getLayeredXMLNode(filename, root)) diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index 622c9edba7..0996e82bf7 100644 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -189,7 +189,6 @@ LLFolderView::LLFolderView(const Params& p)  	mViewModel(p.view_model),      mGroupedItemModel(p.grouped_item_model)  { -	claimMem(mViewModel);      LLPanel* panel = p.parent_panel;      mParentPanel = panel->getHandle();  	mViewModel->setFolderView(this); @@ -337,11 +336,9 @@ S32 LLFolderView::arrange( S32* unused_width, S32* unused_height )  	return ll_round(mTargetHeight);  } -static LLTrace::BlockTimerStatHandle FTM_FILTER("Filter Folder View"); -  void LLFolderView::filter( LLFolderViewFilter& filter )  { -	LL_RECORD_BLOCK_TIME(FTM_FILTER); +    LL_PROFILE_ZONE_SCOPED;      static LLCachedControl<S32> time_visible(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameVisible", 10);      static LLCachedControl<S32> time_invisible(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameUnvisible", 1);      filter.resetTime(llclamp((mParentPanel.get()->getVisible() ? time_visible() : time_invisible()), 1, 100)); @@ -503,10 +500,9 @@ BOOL LLFolderView::changeSelection(LLFolderViewItem* selection, BOOL selected)  	return rv;  } -static LLTrace::BlockTimerStatHandle FTM_SANITIZE_SELECTION("Sanitize Selection");  void LLFolderView::sanitizeSelection()  { -	LL_RECORD_BLOCK_TIME(FTM_SANITIZE_SELECTION); +    LL_PROFILE_ZONE_SCOPED;  	// store off current item in case it is automatically deselected  	// and we want to preserve context  	LLFolderViewItem* original_selected_item = getCurSelectedItem(); @@ -1621,7 +1617,6 @@ void LLFolderView::setShowSingleSelection(bool show)  	}  } -static LLTrace::BlockTimerStatHandle FTM_AUTO_SELECT("Open and Select");  static LLTrace::BlockTimerStatHandle FTM_INVENTORY("Inventory");  // Main idle routine @@ -1657,7 +1652,6 @@ void LLFolderView::update()  	// automatically show matching items, and select first one if we had a selection  	if (mNeedsAutoSelect)  	{ -		LL_RECORD_BLOCK_TIME(FTM_AUTO_SELECT);  		// select new item only if a filtered item not currently selected and there was a selection  		LLFolderViewItem* selected_itemp = mSelectedItems.empty() ? NULL : mSelectedItems.back();  		if (!mAutoSelectOverride && selected_itemp && !selected_itemp->getViewModelItem()->potentiallyVisible()) diff --git a/indra/llui/llfolderviewmodel.h b/indra/llui/llfolderviewmodel.h index e62b2779dd..093e213be3 100644 --- a/indra/llui/llfolderviewmodel.h +++ b/indra/llui/llfolderviewmodel.h @@ -108,11 +108,10 @@ public:  	virtual S32 				getFirstRequiredGeneration() const = 0;  }; -class LLFolderViewModelInterface : public LLTrace::MemTrackable<LLFolderViewModelInterface> +class LLFolderViewModelInterface  {  public:  	LLFolderViewModelInterface()  -	:	LLTrace::MemTrackable<LLFolderViewModelInterface>("LLFolderViewModelInterface")   	{}  	virtual ~LLFolderViewModelInterface() {} @@ -133,11 +132,10 @@ public:  // This is an abstract base class that users of the folderview classes  // would use to bridge the folder view with the underlying data -class LLFolderViewModelItem : public LLRefCount, public LLTrace::MemTrackable<LLFolderViewModelItem> +class LLFolderViewModelItem : public LLRefCount  {  public:  	LLFolderViewModelItem()  -	:	LLTrace::MemTrackable<LLFolderViewModelItem>("LLFolderViewModelItem")   	{}  	virtual ~LLFolderViewModelItem() { } diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index 29a156e933..528d2e70ad 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -340,8 +340,6 @@ void LLLayoutStack::collapsePanel(LLPanel* panel, BOOL collapsed)  	mNeedsLayout = true;  } -static LLTrace::BlockTimerStatHandle FTM_UPDATE_LAYOUT("Update LayoutStacks"); -  class LLImagePanel : public LLPanel  {  public: @@ -369,7 +367,7 @@ private:  void LLLayoutStack::updateLayout()  {	 -	LL_RECORD_BLOCK_TIME(FTM_UPDATE_LAYOUT); +    LL_PROFILE_ZONE_SCOPED;  	if (!mNeedsLayout) return; diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index 00da0f5fec..f770920c4a 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -800,14 +800,12 @@ boost::signals2::connection LLPanel::setVisibleCallback( const commit_signal_t::  	return mVisibleSignal->connect(cb);  } -static LLTrace::BlockTimerStatHandle FTM_BUILD_PANELS("Build Panels"); -  //-----------------------------------------------------------------------------  // buildPanel()  //-----------------------------------------------------------------------------  BOOL LLPanel::buildFromFile(const std::string& filename, const LLPanel::Params& default_params)  { -	LL_RECORD_BLOCK_TIME(FTM_BUILD_PANELS); +    LL_PROFILE_ZONE_SCOPED;  	BOOL didPost = FALSE;  	LLXMLNodePtr root; diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index de644185fd..c70085b72f 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -3045,10 +3045,9 @@ LLScrollListColumn* LLScrollListCtrl::getColumn(const std::string& name)  	return NULL;  } -LLTrace::BlockTimerStatHandle FTM_ADD_SCROLLLIST_ELEMENT("Add Scroll List Item");  LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& element, EAddPosition pos, void* userdata)  { -	LL_RECORD_BLOCK_TIME(FTM_ADD_SCROLLLIST_ELEMENT); +    LL_PROFILE_ZONE_SCOPED;  	LLScrollListItem::Params item_params;  	LLParamSDParser parser;  	parser.readSD(element, item_params); @@ -3058,14 +3057,14 @@ LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& element, EAddPosition  LLScrollListItem* LLScrollListCtrl::addRow(const LLScrollListItem::Params& item_p, EAddPosition pos)  { -	LL_RECORD_BLOCK_TIME(FTM_ADD_SCROLLLIST_ELEMENT); +    LL_PROFILE_ZONE_SCOPED;  	LLScrollListItem *new_item = new LLScrollListItem(item_p);  	return addRow(new_item, item_p, pos);  }  LLScrollListItem* LLScrollListCtrl::addRow(LLScrollListItem *new_item, const LLScrollListItem::Params& item_p, EAddPosition pos)  { -	LL_RECORD_BLOCK_TIME(FTM_ADD_SCROLLLIST_ELEMENT); +    LL_PROFILE_ZONE_SCOPED;  	if (!item_p.validateBlock() || !new_item) return NULL;  	new_item->setNumColumns(mColumns.size()); diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 20bea7fe24..4274c81645 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -1484,11 +1484,9 @@ S32 LLTextBase::getLeftOffset(S32 width)  	}  } - -static LLTrace::BlockTimerStatHandle FTM_TEXT_REFLOW ("Text Reflow");  void LLTextBase::reflow()  { -	LL_RECORD_BLOCK_TIME(FTM_TEXT_REFLOW); +    LL_PROFILE_ZONE_SCOPED;  	updateSegments(); @@ -1833,10 +1831,9 @@ void LLTextBase::removeDocumentChild(LLView* view)  } -static LLTrace::BlockTimerStatHandle FTM_UPDATE_TEXT_SEGMENTS("Update Text Segments");  void LLTextBase::updateSegments()  { -	LL_RECORD_BLOCK_TIME(FTM_UPDATE_TEXT_SEGMENTS); +    LL_PROFILE_ZONE_SCOPED;  	createDefaultSegment();  } @@ -2096,19 +2093,16 @@ static LLUIImagePtr image_from_icon_name(const std::string& icon_name)  	}  } -static LLTrace::BlockTimerStatHandle FTM_PARSE_HTML("Parse HTML"); - -  void LLTextBase::appendTextImpl(const std::string &new_text, const LLStyle::Params& input_params)  { +    LL_PROFILE_ZONE_SCOPED;  	LLStyle::Params style_params(input_params);  	style_params.fillFrom(getStyleParams());  	S32 part = (S32)LLTextParser::WHOLE;  	if (mParseHTML && !style_params.is_link) // Don't search for URLs inside a link segment (STORM-358).  	{ -		LL_RECORD_BLOCK_TIME(FTM_PARSE_HTML);  		S32 start=0,end=0;  		LLUrlMatch match;  		std::string text = new_text; @@ -2202,11 +2196,9 @@ void LLTextBase::setLastSegmentToolTip(const std::string &tooltip)  	}  } -static LLTrace::BlockTimerStatHandle FTM_APPEND_TEXT("Append Text"); -  void LLTextBase::appendText(const std::string &new_text, bool prepend_newline, const LLStyle::Params& input_params)  { -	LL_RECORD_BLOCK_TIME(FTM_APPEND_TEXT); +    LL_PROFILE_ZONE_SCOPED;  	if (new_text.empty())   		return; diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp index 5924542a19..51391bb5e8 100644 --- a/indra/llui/lluictrl.cpp +++ b/indra/llui/lluictrl.cpp @@ -121,7 +121,6 @@ LLUICtrl::LLUICtrl(const LLUICtrl::Params& p, const LLViewModelPtr& viewmodel)  	mDoubleClickSignal(NULL),  	mTransparencyType(TT_DEFAULT)  { -	claimMem(viewmodel.get());  }  void LLUICtrl::initFromParams(const Params& p) @@ -476,6 +475,7 @@ LLViewModel* LLUICtrl::getViewModel() const  //virtual  BOOL LLUICtrl::postBuild()  { +    LL_PROFILE_ZONE_SCOPED;  	//  	// Find all of the children that want to be in front and move them to the front  	// @@ -781,12 +781,9 @@ BOOL LLUICtrl::getIsChrome() const  } - -LLTrace::BlockTimerStatHandle FTM_FOCUS_FIRST_ITEM("Focus First Item"); -  BOOL LLUICtrl::focusFirstItem(BOOL prefer_text_fields, BOOL focus_flash)  { -	LL_RECORD_BLOCK_TIME(FTM_FOCUS_FIRST_ITEM); +    LL_PROFILE_ZONE_SCOPED;  	// try to select default tab group child  	LLViewQuery query = getTabOrderQuery();  	child_list_t result = query(this); @@ -1005,7 +1002,6 @@ boost::signals2::connection LLUICtrl::setCommitCallback( boost::function<void (L  boost::signals2::connection LLUICtrl::setValidateBeforeCommit( boost::function<bool (const LLSD& data)> cb )  {  	if (!mValidateSignal) mValidateSignal = new enable_signal_t(); -	claimMem(mValidateSignal);  	return mValidateSignal->connect(boost::bind(cb, _2));  } @@ -1070,7 +1066,6 @@ boost::signals2::connection LLUICtrl::setValidateCallback(const EnableCallbackPa  boost::signals2::connection LLUICtrl::setCommitCallback( const commit_signal_t::slot_type& cb )   {   	if (!mCommitSignal) mCommitSignal = new commit_signal_t(); -	claimMem(mCommitSignal);  	return mCommitSignal->connect(cb);   } @@ -1078,7 +1073,6 @@ boost::signals2::connection LLUICtrl::setCommitCallback( const commit_signal_t::  boost::signals2::connection LLUICtrl::setValidateCallback( const enable_signal_t::slot_type& cb )   {   	if (!mValidateSignal) mValidateSignal = new enable_signal_t(); -	claimMem(mValidateSignal);  	return mValidateSignal->connect(cb);   } @@ -1086,7 +1080,6 @@ boost::signals2::connection LLUICtrl::setValidateCallback( const enable_signal_t  boost::signals2::connection LLUICtrl::setMouseEnterCallback( const commit_signal_t::slot_type& cb )   {   	if (!mMouseEnterSignal) mMouseEnterSignal = new commit_signal_t(); -	claimMem(mMouseEnterSignal);  	return mMouseEnterSignal->connect(cb);   } @@ -1094,7 +1087,6 @@ boost::signals2::connection LLUICtrl::setMouseEnterCallback( const commit_signal  boost::signals2::connection LLUICtrl::setMouseLeaveCallback( const commit_signal_t::slot_type& cb )   {   	if (!mMouseLeaveSignal) mMouseLeaveSignal = new commit_signal_t(); -	claimMem(mMouseLeaveSignal);  	return mMouseLeaveSignal->connect(cb);   } @@ -1102,7 +1094,6 @@ boost::signals2::connection LLUICtrl::setMouseLeaveCallback( const commit_signal  boost::signals2::connection LLUICtrl::setMouseDownCallback( const mouse_signal_t::slot_type& cb )   {   	if (!mMouseDownSignal) mMouseDownSignal = new mouse_signal_t(); -	claimMem(mMouseDownSignal);  	return mMouseDownSignal->connect(cb);   } @@ -1110,7 +1101,6 @@ boost::signals2::connection LLUICtrl::setMouseDownCallback( const mouse_signal_t  boost::signals2::connection LLUICtrl::setMouseUpCallback( const mouse_signal_t::slot_type& cb )   {   	if (!mMouseUpSignal) mMouseUpSignal = new mouse_signal_t(); -	claimMem(mMouseUpSignal);  	return mMouseUpSignal->connect(cb);   } @@ -1118,7 +1108,6 @@ boost::signals2::connection LLUICtrl::setMouseUpCallback( const mouse_signal_t::  boost::signals2::connection LLUICtrl::setRightMouseDownCallback( const mouse_signal_t::slot_type& cb )   {   	if (!mRightMouseDownSignal) mRightMouseDownSignal = new mouse_signal_t(); -	claimMem(mRightMouseDownSignal);  	return mRightMouseDownSignal->connect(cb);   } @@ -1126,7 +1115,6 @@ boost::signals2::connection LLUICtrl::setRightMouseDownCallback( const mouse_sig  boost::signals2::connection LLUICtrl::setRightMouseUpCallback( const mouse_signal_t::slot_type& cb )   {   	if (!mRightMouseUpSignal) mRightMouseUpSignal = new mouse_signal_t(); -	claimMem(mRightMouseUpSignal);  	return mRightMouseUpSignal->connect(cb);   } @@ -1134,7 +1122,6 @@ boost::signals2::connection LLUICtrl::setRightMouseUpCallback( const mouse_signa  boost::signals2::connection LLUICtrl::setDoubleClickCallback( const mouse_signal_t::slot_type& cb )   {   	if (!mDoubleClickSignal) mDoubleClickSignal = new mouse_signal_t(); -	claimMem(mDoubleClickSignal);  	return mDoubleClickSignal->connect(cb);   } diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp index fdefae01b1..2d0c0ea8aa 100644 --- a/indra/llui/lluictrlfactory.cpp +++ b/indra/llui/lluictrlfactory.cpp @@ -44,10 +44,6 @@  // this library includes  #include "llpanel.h" -LLTrace::BlockTimerStatHandle FTM_WIDGET_CONSTRUCTION("Widget Construction"); -LLTrace::BlockTimerStatHandle FTM_INIT_FROM_PARAMS("Widget InitFromParams"); -LLTrace::BlockTimerStatHandle FTM_WIDGET_SETUP("Widget Setup"); -  //-----------------------------------------------------------------------------  // UI Ctrl class for padding @@ -117,12 +113,10 @@ void LLUICtrlFactory::loadWidgetTemplate(const std::string& widget_tag, LLInitPa  	}  } -static LLTrace::BlockTimerStatHandle FTM_CREATE_CHILDREN("Create XUI Children"); -  //static   void LLUICtrlFactory::createChildren(LLView* viewp, LLXMLNodePtr node, const widget_registry_t& registry, LLXMLNodePtr output_node)  { -	LL_RECORD_BLOCK_TIME(FTM_CREATE_CHILDREN); +    LL_PROFILE_ZONE_SCOPED;  	if (node.isNull()) return;  	for (LLXMLNodePtr child_node = node->getFirstChild(); child_node.notNull(); child_node = child_node->getNextSibling()) @@ -159,14 +153,13 @@ void LLUICtrlFactory::createChildren(LLView* viewp, LLXMLNodePtr node, const wid  } -static LLTrace::BlockTimerStatHandle FTM_XML_PARSE("XML Reading/Parsing");  //-----------------------------------------------------------------------------  // getLayeredXMLNode()  //-----------------------------------------------------------------------------  bool LLUICtrlFactory::getLayeredXMLNode(const std::string &xui_filename, LLXMLNodePtr& root,                                          LLDir::ESkinConstraint constraint)  { -	LL_RECORD_BLOCK_TIME(FTM_XML_PARSE); +    LL_PROFILE_ZONE_SCOPED;  	std::vector<std::string> paths =  		gDirUtilp->findSkinnedFilenames(LLDir::XUI, xui_filename, constraint); @@ -191,11 +184,9 @@ S32 LLUICtrlFactory::saveToXML(LLView* viewp, const std::string& filename)  //-----------------------------------------------------------------------------  //----------------------------------------------------------------------------- -static LLTrace::BlockTimerStatHandle FTM_CREATE_FROM_XML("Create child widget"); -  LLView *LLUICtrlFactory::createFromXML(LLXMLNodePtr node, LLView* parent, const std::string& filename, const widget_registry_t& registry, LLXMLNodePtr output_node)  { -	LL_RECORD_BLOCK_TIME(FTM_CREATE_FROM_XML); +    LL_PROFILE_ZONE_SCOPED;  	std::string ctrl_type = node->getName()->mString;  	LLStringUtil::toLower(ctrl_type); diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h index 135ed57a4f..3f24a3f1a5 100644 --- a/indra/llui/lluictrlfactory.h +++ b/indra/llui/lluictrlfactory.h @@ -79,10 +79,6 @@ class LLWidgetNameRegistry  //	LLSINGLETON(LLDefaultParamBlockRegistry);  //}; -extern LLTrace::BlockTimerStatHandle FTM_WIDGET_SETUP; -extern LLTrace::BlockTimerStatHandle FTM_WIDGET_CONSTRUCTION; -extern LLTrace::BlockTimerStatHandle FTM_INIT_FROM_PARAMS; -  // Build time optimization, generate this once in .cpp file  #ifndef LLUICTRLFACTORY_CPP  extern template class LLUICtrlFactory* LLSingleton<class LLUICtrlFactory>::getInstance(); @@ -213,6 +209,7 @@ private:  	template<typename T>  	static T* createWidgetImpl(const typename T::Params& params, LLView* parent = NULL)  	{ +        LL_PROFILE_ZONE_SCOPED;  		T* widget = NULL;  		if (!params.validateBlock()) @@ -221,12 +218,9 @@ private:  			//return NULL;  		} -		{ LL_RECORD_BLOCK_TIME(FTM_WIDGET_CONSTRUCTION); -			widget = new T(params);	 -		} -		{ LL_RECORD_BLOCK_TIME(FTM_INIT_FROM_PARAMS); -			widget->initFromParams(params); -		} +		widget = new T(params);	 +		 +		widget->initFromParams(params);  		if (parent)  		{ @@ -239,7 +233,7 @@ private:  	template<typename T>  	static T* defaultBuilder(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node)  	{ -		LL_RECORD_BLOCK_TIME(FTM_WIDGET_SETUP); +        LL_PROFILE_ZONE_SCOPED;  		typename T::Params params(getDefaultParams<T>()); diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index b942be2a4a..bd0b9d3db2 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -140,8 +140,7 @@ LLView::Params::Params()  }  LLView::LLView(const LLView::Params& p) -:	LLTrace::MemTrackable<LLView>("LLView"), -	mVisible(p.visible), +:	mVisible(p.visible),  	mInDraw(false),  	mName(p.name),  	mParentView(NULL), @@ -1597,15 +1596,11 @@ LLView* LLView::getChildView(const std::string& name, BOOL recurse) const  	return getChild<LLView>(name, recurse);  } -static LLTrace::BlockTimerStatHandle FTM_FIND_VIEWS("Find Widgets"); -  LLView* LLView::findChildView(const std::string& name, BOOL recurse) const  { -	LL_RECORD_BLOCK_TIME(FTM_FIND_VIEWS); -	//richard: should we allow empty names? -	//if(name.empty()) -	//	return NULL; -	// Look for direct children *first* +    LL_PROFILE_ZONE_SCOPED; +	 +    // Look for direct children *first*  	BOOST_FOREACH(LLView* childp, mChildList)  	{  		llassert(childp); diff --git a/indra/llui/llview.h b/indra/llui/llview.h index c60dcf3344..bec45df78a 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -100,8 +100,7 @@ class LLView  :	public LLMouseHandler,			// handles mouse events  	public LLFocusableElement,		// handles keyboard events  	public LLMortician,				// lazy deletion -	public LLHandleProvider<LLView>,     // passes out weak references to self -	public LLTrace::MemTrackable<LLView> // track memory usage +	public LLHandleProvider<LLView>     // passes out weak references to self  {  public: diff --git a/indra/llui/llviewereventrecorder.cpp b/indra/llui/llviewereventrecorder.cpp index cb000aef74..5a44ec947a 100644 --- a/indra/llui/llviewereventrecorder.cpp +++ b/indra/llui/llviewereventrecorder.cpp @@ -28,6 +28,8 @@  #include "llui.h"  #include "llleap.h" +LLViewerEventRecorder* LLSimpleton<LLViewerEventRecorder>::sInstance = nullptr; +  LLViewerEventRecorder::LLViewerEventRecorder() {    clear(UNDEFINED); diff --git a/indra/llui/llviewereventrecorder.h b/indra/llui/llviewereventrecorder.h index d1059d55de..d2c0780361 100644 --- a/indra/llui/llviewereventrecorder.h +++ b/indra/llui/llviewereventrecorder.h @@ -42,12 +42,12 @@  #include "llsingleton.h" // includes llerror which we need here so we can skip the include here -class LLViewerEventRecorder : public LLSingleton<LLViewerEventRecorder> +class LLViewerEventRecorder : public LLSimpleton<LLViewerEventRecorder>  { -  LLSINGLETON(LLViewerEventRecorder); -  ~LLViewerEventRecorder(); - - public: +public: +    LLViewerEventRecorder(); +    ~LLViewerEventRecorder(); +       void updateMouseEventInfo(S32 local_x,S32 local_y, S32 global_x, S32 global_y,  std::string mName);    void setMouseLocalCoords(S32 x,S32 y);    void setMouseGlobalCoords(S32 x,S32 y); diff --git a/indra/llui/llviewmodel.cpp b/indra/llui/llviewmodel.cpp index 282addf692..a400eb70c0 100644 --- a/indra/llui/llviewmodel.cpp +++ b/indra/llui/llviewmodel.cpp @@ -37,15 +37,13 @@  ///  LLViewModel::LLViewModel() -:	LLTrace::MemTrackable<LLViewModel>("LLViewModel"), -	mDirty(false) +:	mDirty(false)  {  }  /// Instantiate an LLViewModel with an existing data value  LLViewModel::LLViewModel(const LLSD& value) -:	LLTrace::MemTrackable<LLViewModel>("LLViewModel"), -	mDirty(false) +:	mDirty(false)  {      setValue(value);  } @@ -82,15 +80,9 @@ LLTextViewModel::LLTextViewModel(const LLSD& value)  void LLTextViewModel::setValue(const LLSD& value)  {  	// approximate LLSD storage usage -	disclaimMem(mDisplay.size());  	LLViewModel::setValue(value); -	disclaimMem(mDisplay);      mDisplay = utf8str_to_wstring(value.asString()); -	claimMem(mDisplay); -	// approximate LLSD storage usage -	claimMem(mDisplay.size()); -      // mDisplay and mValue agree      mUpdateFromDisplay = false;  } @@ -101,12 +93,8 @@ void LLTextViewModel::setDisplay(const LLWString& value)      // and do the utf8str_to_wstring() to get the corresponding mDisplay      // value. But a text editor might want to edit the display string      // directly, then convert back to UTF8 on commit. -	disclaimMem(mDisplay.size()); -	disclaimMem(mDisplay); -    mDisplay = value; -	claimMem(mDisplay); -	claimMem(mDisplay.size()); -    mDirty = true; +	mDisplay = value; +	mDirty = true;      // Don't immediately convert to UTF8 -- do it lazily -- we expect many      // more setDisplay() calls than getValue() calls. Just flag that it needs      // doing. diff --git a/indra/llui/llviewmodel.h b/indra/llui/llviewmodel.h index 49d7c322a3..e7dceb6c31 100644 --- a/indra/llui/llviewmodel.h +++ b/indra/llui/llviewmodel.h @@ -62,8 +62,7 @@ typedef LLPointer<LLListViewModel> LLListViewModelPtr;   * last referencing widget is destroyed.   */  class LLViewModel  -:	public LLRefCount, -	public LLTrace::MemTrackable<LLViewModel> +:	public LLRefCount  {  public:      LLViewModel(); diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 26bb56d72d..70cf839510 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -982,6 +982,8 @@ void LLWindowWin32::close()      while (!mWindowThread->isStopped())      { +        //nudge window thread +        PostMessage(mWindowHandle, WM_USER + 0x0017, 0xB0B0, 0x1337);          std::this_thread::sleep_for(std::chrono::milliseconds(1));      }  } diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index aeeba58a68..291f0f7d95 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -14104,18 +14104,7 @@      <key>Value</key>      <integer>1</integer>    </map> -  <key>RenderSynchronousOcclusion</key> -  <map> -    <key>Comment</key> -    <string>Don't let occlusion queries get more than one frame behind (block until they complete).</string> -    <key>Persist</key> -    <integer>1</integer> -    <key>Type</key> -    <string>Boolean</string> -    <key>Value</key> -    <integer>1</integer> -  </map> -    <key>RenderDelayVBUpdate</key> +  <key>RenderDelayVBUpdate</key>      <map>        <key>Comment</key>        <string>Delay vertex buffer updates until just before rendering</string> diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 400a6a722b..8b4fcfccd9 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -977,6 +977,9 @@ bool LLAppViewer::init()  	// Initialize the repeater service.  	LLMainLoopRepeater::instance().start(); +    // Initialize event recorder +    LLViewerEventRecorder::createInstance(); +  	//  	// Initialize the window  	// @@ -1316,6 +1319,13 @@ bool LLAppViewer::init()  	// Load User's bindings  	loadKeyBindings(); +    //LLSimpleton creations +    LLEnvironment::createInstance(); +    LLEnvironment::getInstance()->initSingleton(); +    LLWorld::createInstance(); +    LLSelectMgr::createInstance(); +    LLViewerCamera::createInstance(); +  	return true;  } @@ -1410,10 +1420,14 @@ bool LLAppViewer::doFrame()  	LLSD newFrame;  	{ -		LL_PROFILE_ZONE_NAMED( "df blocktimer" ) -		LLTrace::BlockTimer::processTimes(); -		LLTrace::get_frame_recording().nextPeriod(); -		LLTrace::BlockTimer::logStats(); +        LL_PROFILE_ZONE_NAMED("df LLTrace"); +        if (LLFloaterReg::instanceVisible("block_timers")) +        { +            LLTrace::BlockTimer::processTimes(); +        } +         +        LLTrace::get_frame_recording().nextPeriod(); +        LLTrace::BlockTimer::logStats();  	}  	LLTrace::get_thread_recorder()->pullFromChildren(); @@ -2184,6 +2198,10 @@ bool LLAppViewer::cleanup()  	LLError::LLCallStacks::cleanup(); +    LLEnvironment::deleteSingleton(); +    LLSelectMgr::deleteSingleton(); +    LLViewerEventRecorder::deleteSingleton(); +  	// It's not at first obvious where, in this long sequence, a generic cleanup  	// call OUGHT to go. So let's say this: as we migrate cleanup from  	// explicit hand-placed calls into the generic mechanism, eventually @@ -2195,6 +2213,7 @@ bool LLAppViewer::cleanup()  	// deleteSingleton() methods.  	LLSingletonBase::deleteAll(); +      LL_INFOS() << "Goodbye!" << LL_ENDL;  	removeDumpDir(); @@ -5641,6 +5660,7 @@ void LLAppViewer::disconnectViewer()  		LLWorld::getInstance()->destroyClass();  	}  	LLVOCache::deleteSingleton(); +    LLViewerCamera::deleteSingleton();  	// call all self-registered classes  	LLDestroyClassList::instance().fireCallbacks(); diff --git a/indra/newview/lldonotdisturbnotificationstorage.cpp b/indra/newview/lldonotdisturbnotificationstorage.cpp index cb5f9c8a2c..7d4961c598 100644 --- a/indra/newview/lldonotdisturbnotificationstorage.cpp +++ b/indra/newview/lldonotdisturbnotificationstorage.cpp @@ -96,11 +96,9 @@ void LLDoNotDisturbNotificationStorage::resetDirty()      mDirty = false;  } -static LLTrace::BlockTimerStatHandle FTM_SAVE_DND_NOTIFICATIONS("Save DND Notifications"); -  void LLDoNotDisturbNotificationStorage::saveNotifications()  { -	LL_RECORD_BLOCK_TIME(FTM_SAVE_DND_NOTIFICATIONS); +    LL_PROFILE_ZONE_SCOPED;  	LLNotificationChannelPtr channelPtr = getCommunicationChannel();  	const LLCommunicationChannel *commChannel = dynamic_cast<LLCommunicationChannel*>(channelPtr.get()); diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index 495e06b6f7..502ebbd4b1 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -58,8 +58,6 @@ const F32 MIN_INTERPOLATE_DISTANCE_SQUARED = 0.001f * 0.001f;  const F32 MAX_INTERPOLATE_DISTANCE_SQUARED = 10.f * 10.f;  const F32 OBJECT_DAMPING_TIME_CONSTANT = 0.06f; -static LLTrace::BlockTimerStatHandle FTM_CULL_REBOUND("Cull Rebound"); -  extern bool gShiftFrame; @@ -93,7 +91,6 @@ void LLDrawable::incrementVisible()  LLDrawable::LLDrawable(LLViewerObject *vobj, bool new_entry)  :	LLViewerOctreeEntryData(LLViewerOctreeEntry::LLDRAWABLE), -	LLTrace::MemTrackable<LLDrawable, 16>("LLDrawable"),  	mVObjp(vobj)  {  	init(new_entry);  @@ -263,19 +260,13 @@ BOOL LLDrawable::isLight() const  	}  } -static LLTrace::BlockTimerStatHandle FTM_CLEANUP_DRAWABLE("Cleanup Drawable"); -static LLTrace::BlockTimerStatHandle FTM_DEREF_DRAWABLE("Deref"); -static LLTrace::BlockTimerStatHandle FTM_DELETE_FACES("Faces"); -  void LLDrawable::cleanupReferences()  { -	LL_RECORD_BLOCK_TIME(FTM_CLEANUP_DRAWABLE); +    LL_PROFILE_ZONE_SCOPED; -	{ -		LL_RECORD_BLOCK_TIME(FTM_DELETE_FACES); -		std::for_each(mFaces.begin(), mFaces.end(), DeletePointer()); -		mFaces.clear(); -	} +	 +	std::for_each(mFaces.begin(), mFaces.end(), DeletePointer()); +	mFaces.clear();  	gObjectList.removeDrawable(this); @@ -283,12 +274,9 @@ void LLDrawable::cleanupReferences()  	removeFromOctree(); -	{ -		LL_RECORD_BLOCK_TIME(FTM_DEREF_DRAWABLE); -		// Cleanup references to other objects -		mVObjp = NULL; -		mParent = NULL; -	} +	// Cleanup references to other objects +	mVObjp = NULL; +	mParent = NULL;  }  void LLDrawable::removeFromOctree() @@ -333,15 +321,12 @@ S32 LLDrawable::findReferences(LLDrawable *drawablep)  	return count;  } -static LLTrace::BlockTimerStatHandle FTM_ALLOCATE_FACE("Allocate Face"); -  LLFace*	LLDrawable::addFace(LLFacePool *poolp, LLViewerTexture *texturep)  {  	LL_PROFILE_ZONE_SCOPED  	LLFace *face;  	{ -		LL_RECORD_BLOCK_TIME(FTM_ALLOCATE_FACE);  		face = new LLFace(this, mVObjp);  	} @@ -370,11 +355,8 @@ LLFace*	LLDrawable::addFace(const LLTextureEntry *te, LLViewerTexture *texturep)  	LLFace *face; -	{ -		LL_RECORD_BLOCK_TIME(FTM_ALLOCATE_FACE); -		face = new LLFace(this, mVObjp); -	} - +	face = new LLFace(this, mVObjp); +	  	face->setTEOffset(mFaces.size());  	face->setTexture(texturep);  	face->setPoolType(gPipeline.getPoolTypeFromTE(te, texturep)); @@ -1333,10 +1315,7 @@ void LLSpatialBridge::updateSpatialExtents()  	LLSpatialGroup* root = (LLSpatialGroup*) mOctree->getListener(0); -	{ -		LL_RECORD_BLOCK_TIME(FTM_CULL_REBOUND); -		root->rebound(); -	} +	root->rebound();  	const LLVector4a* root_bounds = root->getBounds();  	LLVector4a offset; diff --git a/indra/newview/lldrawable.h b/indra/newview/lldrawable.h index 14d782d6f2..6002e3e0dd 100644 --- a/indra/newview/lldrawable.h +++ b/indra/newview/lldrawable.h @@ -59,14 +59,13 @@ const U32 SILHOUETTE_HIGHLIGHT = 0;  // All data for new renderer goes into this class.  LL_ALIGN_PREFIX(16) -class LLDrawable  -:	public LLViewerOctreeEntryData, -	public LLTrace::MemTrackable<LLDrawable, 16> +class LLDrawable +    : public LLViewerOctreeEntryData  { +    LL_ALIGN_NEW;  public:  	LLDrawable(const LLDrawable& rhs)  -	:	LLTrace::MemTrackable<LLDrawable, 16>("LLDrawable"), -		LLViewerOctreeEntryData(rhs) +        : LLViewerOctreeEntryData(rhs)  	{  		*this = rhs;  	} diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index 369d7a6bb8..34f9bfe35d 100644 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -53,10 +53,6 @@ BOOL LLDrawPoolAlpha::sShowDebugAlpha = FALSE;  static BOOL deferred_render = FALSE; -static LLTrace::BlockTimerStatHandle FTM_RENDER_ALPHA_SETUP("Alpha Setup"); -static LLTrace::BlockTimerStatHandle FTM_RENDER_ALPHA_GROUP_LOOP("Alpha Group"); -static LLTrace::BlockTimerStatHandle FTM_RENDER_ALPHA_DEFERRED("Alpha Deferred"); -  LLDrawPoolAlpha::LLDrawPoolAlpha(U32 type) :  		LLRenderPass(type), current_shader(NULL), target_shader(NULL),  		simple_shader(NULL), fullbright_shader(NULL), emissive_shader(NULL), @@ -98,7 +94,7 @@ S32 LLDrawPoolAlpha::getNumPostDeferredPasses()  void LLDrawPoolAlpha::beginPostDeferredPass(S32 pass)   {  -    LL_RECORD_BLOCK_TIME(FTM_RENDER_ALPHA_DEFERRED); +    LL_PROFILE_ZONE_SCOPED;      F32 gamma = gSavedSettings.getF32("RenderDeferredDisplayGamma"); @@ -153,7 +149,7 @@ void LLDrawPoolAlpha::beginPostDeferredPass(S32 pass)  void LLDrawPoolAlpha::endPostDeferredPass(S32 pass)   {  -    LL_RECORD_BLOCK_TIME(FTM_RENDER_ALPHA_DEFERRED); +    LL_PROFILE_ZONE_SCOPED;  	if (pass == 1 && !LLPipeline::sImpostorRender)  	{ @@ -168,13 +164,13 @@ void LLDrawPoolAlpha::endPostDeferredPass(S32 pass)  void LLDrawPoolAlpha::renderPostDeferred(S32 pass)   {  -    LL_RECORD_BLOCK_TIME(FTM_RENDER_ALPHA_DEFERRED); +    LL_PROFILE_ZONE_SCOPED;  	render(pass);   }  void LLDrawPoolAlpha::beginRenderPass(S32 pass)  { -	LL_RECORD_BLOCK_TIME(FTM_RENDER_ALPHA_SETUP); +    LL_PROFILE_ZONE_SCOPED;      simple_shader     = (LLPipeline::sImpostorRender)   ? &gObjectSimpleImpostorProgram  :                          (LLPipeline::sUnderWaterRender) ? &gObjectSimpleWaterProgram     : &gObjectSimpleProgram; @@ -225,7 +221,7 @@ void LLDrawPoolAlpha::beginRenderPass(S32 pass)  void LLDrawPoolAlpha::endRenderPass( S32 pass )  { -	LL_RECORD_BLOCK_TIME(FTM_RENDER_ALPHA_SETUP); +    LL_PROFILE_ZONE_SCOPED;  	LLRenderPass::endRenderPass(pass);  	if(gPipeline.canUseWindLightShaders())  @@ -522,6 +518,7 @@ void LLDrawPoolAlpha::renderEmissives(U32 mask, std::vector<LLDrawInfo*>& emissi  void LLDrawPoolAlpha::renderAlpha(U32 mask, S32 pass)  { +    LL_PROFILE_ZONE_SCOPED;      BOOL batch_fullbrights = gSavedSettings.getBOOL("RenderAlphaBatchFullbrights");      BOOL batch_emissives   = gSavedSettings.getBOOL("RenderAlphaBatchEmissives");  	BOOL initialized_lighting = FALSE; @@ -529,6 +526,7 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, S32 pass)  	for (LLCullResult::sg_iterator i = gPipeline.beginAlphaGroups(); i != gPipeline.endAlphaGroups(); ++i)  	{ +        LL_PROFILE_ZONE_NAMED("renderAlpha - group");  		LLSpatialGroup* group = *i;  		llassert(group);  		llassert(group->getSpatialPartition()); @@ -546,9 +544,6 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, S32 pass)  			bool draw_glow_for_this_partition = mShaderLevel > 0; // no shaders = no glow. -			 -			LL_RECORD_BLOCK_TIME(FTM_RENDER_ALPHA_GROUP_LOOP); -  			bool disable_cull = is_particle_or_hud_particle;  			LLGLDisable cull(disable_cull ? GL_CULL_FACE : 0); diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 52d308f6bd..5b51e9db24 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -103,8 +103,6 @@ S32 normal_channel = -1;  S32 specular_channel = -1;  S32 cube_channel = -1; -static LLTrace::BlockTimerStatHandle FTM_SHADOW_AVATAR("Avatar Shadow"); -  LLDrawPoolAvatar::LLDrawPoolAvatar(U32 type) :   	LLFacePool(type)	  { @@ -196,7 +194,7 @@ LLMatrix4& LLDrawPoolAvatar::getModelView()  void LLDrawPoolAvatar::beginDeferredPass(S32 pass)  { -	LL_RECORD_BLOCK_TIME(FTM_RENDER_CHARACTERS); +    LL_PROFILE_ZONE_SCOPED;  	sSkipTransparent = TRUE;  	is_deferred_render = true; @@ -231,7 +229,7 @@ void LLDrawPoolAvatar::beginDeferredPass(S32 pass)  void LLDrawPoolAvatar::endDeferredPass(S32 pass)  { -	LL_RECORD_BLOCK_TIME(FTM_RENDER_CHARACTERS); +    LL_PROFILE_ZONE_SCOPED;  	sSkipTransparent = FALSE;  	is_deferred_render = false; @@ -454,229 +452,220 @@ S32 LLDrawPoolAvatar::getNumShadowPasses()  void LLDrawPoolAvatar::beginShadowPass(S32 pass)  { -	LL_RECORD_BLOCK_TIME(FTM_SHADOW_AVATAR); +    LL_PROFILE_ZONE_SCOPED; + +    if (pass == SHADOW_PASS_AVATAR_OPAQUE)      { -        LL_PROFILE_ZONE_SCOPED; +        sVertexProgram = &gDeferredAvatarShadowProgram; -        if (pass == SHADOW_PASS_AVATAR_OPAQUE) +        if ((sShaderLevel > 0))  // for hardware blending          { -            sVertexProgram = &gDeferredAvatarShadowProgram; - -            if ((sShaderLevel > 0))  // for hardware blending -            { -                sRenderingSkinned = TRUE; -                sVertexProgram->bind(); -            } - -            gGL.diffuseColor4f(1, 1, 1, 1); +            sRenderingSkinned = TRUE; +            sVertexProgram->bind();          } -        else if (pass == SHADOW_PASS_AVATAR_ALPHA_BLEND) -        { -            sVertexProgram = &gDeferredAvatarAlphaShadowProgram; -            // bind diffuse tex so we can reference the alpha channel... -            S32 loc = sVertexProgram->getUniformLocation(LLViewerShaderMgr::DIFFUSE_MAP); -            sDiffuseChannel = 0; -            if (loc != -1) -            { -                sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); -            } - -            if ((sShaderLevel > 0))  // for hardware blending -            { -                sRenderingSkinned = TRUE; -                sVertexProgram->bind(); -            } +        gGL.diffuseColor4f(1, 1, 1, 1); +    } +    else if (pass == SHADOW_PASS_AVATAR_ALPHA_BLEND) +    { +        sVertexProgram = &gDeferredAvatarAlphaShadowProgram; -            gGL.diffuseColor4f(1, 1, 1, 1); -        } -        else if (pass == SHADOW_PASS_AVATAR_ALPHA_MASK) +        // bind diffuse tex so we can reference the alpha channel... +        S32 loc = sVertexProgram->getUniformLocation(LLViewerShaderMgr::DIFFUSE_MAP); +        sDiffuseChannel = 0; +        if (loc != -1)          { -            sVertexProgram = &gDeferredAvatarAlphaMaskShadowProgram; +            sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); +        } -            // bind diffuse tex so we can reference the alpha channel... -            S32 loc = sVertexProgram->getUniformLocation(LLViewerShaderMgr::DIFFUSE_MAP); -            sDiffuseChannel = 0; -            if (loc != -1) -            { -                sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); -            } +        if ((sShaderLevel > 0))  // for hardware blending +        { +            sRenderingSkinned = TRUE; +            sVertexProgram->bind(); +        } -            if ((sShaderLevel > 0))  // for hardware blending -            { -                sRenderingSkinned = TRUE; -                sVertexProgram->bind(); -            } +        gGL.diffuseColor4f(1, 1, 1, 1); +    } +    else if (pass == SHADOW_PASS_AVATAR_ALPHA_MASK) +    { +        sVertexProgram = &gDeferredAvatarAlphaMaskShadowProgram; -            gGL.diffuseColor4f(1, 1, 1, 1); -        } -        else if (pass == SHADOW_PASS_ATTACHMENT_ALPHA_BLEND) +        // bind diffuse tex so we can reference the alpha channel... +        S32 loc = sVertexProgram->getUniformLocation(LLViewerShaderMgr::DIFFUSE_MAP); +        sDiffuseChannel = 0; +        if (loc != -1)          { -            sVertexProgram = &gDeferredAttachmentAlphaShadowProgram; +            sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); +        } -            // bind diffuse tex so we can reference the alpha channel... -            S32 loc = sVertexProgram->getUniformLocation(LLViewerShaderMgr::DIFFUSE_MAP); -            sDiffuseChannel = 0; -            if (loc != -1) -            { -                sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); -            } +        if ((sShaderLevel > 0))  // for hardware blending +        { +            sRenderingSkinned = TRUE; +            sVertexProgram->bind(); +        } -            if ((sShaderLevel > 0))  // for hardware blending -            { -                sRenderingSkinned = TRUE; -                sVertexProgram->bind(); -            } +        gGL.diffuseColor4f(1, 1, 1, 1); +    } +    else if (pass == SHADOW_PASS_ATTACHMENT_ALPHA_BLEND) +    { +        sVertexProgram = &gDeferredAttachmentAlphaShadowProgram; -            gGL.diffuseColor4f(1, 1, 1, 1); -        } -        else if (pass == SHADOW_PASS_ATTACHMENT_ALPHA_MASK) +        // bind diffuse tex so we can reference the alpha channel... +        S32 loc = sVertexProgram->getUniformLocation(LLViewerShaderMgr::DIFFUSE_MAP); +        sDiffuseChannel = 0; +        if (loc != -1)          { -            sVertexProgram = &gDeferredAttachmentAlphaMaskShadowProgram; +            sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); +        } -            // bind diffuse tex so we can reference the alpha channel... -            S32 loc = sVertexProgram->getUniformLocation(LLViewerShaderMgr::DIFFUSE_MAP); -            sDiffuseChannel = 0; -            if (loc != -1) -            { -                sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); -            } +        if ((sShaderLevel > 0))  // for hardware blending +        { +            sRenderingSkinned = TRUE; +            sVertexProgram->bind(); +        } -            if ((sShaderLevel > 0))  // for hardware blending -            { -                sRenderingSkinned = TRUE; -                sVertexProgram->bind(); -            } +        gGL.diffuseColor4f(1, 1, 1, 1); +    } +    else if (pass == SHADOW_PASS_ATTACHMENT_ALPHA_MASK) +    { +        sVertexProgram = &gDeferredAttachmentAlphaMaskShadowProgram; -            gGL.diffuseColor4f(1, 1, 1, 1); +        // bind diffuse tex so we can reference the alpha channel... +        S32 loc = sVertexProgram->getUniformLocation(LLViewerShaderMgr::DIFFUSE_MAP); +        sDiffuseChannel = 0; +        if (loc != -1) +        { +            sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);          } -        else // SHADOW_PASS_ATTACHMENT_OPAQUE + +        if ((sShaderLevel > 0))  // for hardware blending          { -            sVertexProgram = &gDeferredAttachmentShadowProgram; -            S32 loc = sVertexProgram->getUniformLocation(LLViewerShaderMgr::DIFFUSE_MAP); -            sDiffuseChannel = 0; -            if (loc != -1) -            { -                sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); -            } +            sRenderingSkinned = TRUE;              sVertexProgram->bind();          } + +        gGL.diffuseColor4f(1, 1, 1, 1); +    } +    else // SHADOW_PASS_ATTACHMENT_OPAQUE +    { +        sVertexProgram = &gDeferredAttachmentShadowProgram; +        S32 loc = sVertexProgram->getUniformLocation(LLViewerShaderMgr::DIFFUSE_MAP); +        sDiffuseChannel = 0; +        if (loc != -1) +        { +            sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); +        } +        sVertexProgram->bind();      }  }  void LLDrawPoolAvatar::endShadowPass(S32 pass)  { -	LL_RECORD_BLOCK_TIME(FTM_SHADOW_AVATAR); -    { -        LL_PROFILE_ZONE_SCOPED; +	LL_PROFILE_ZONE_SCOPED; -        if (pass == SHADOW_PASS_ATTACHMENT_OPAQUE) -        { -            LLVertexBuffer::unbind(); -        } +    if (pass == SHADOW_PASS_ATTACHMENT_OPAQUE) +    { +        LLVertexBuffer::unbind(); +    } -        if (sShaderLevel > 0) -        { -            sVertexProgram->unbind(); -        } -        sVertexProgram = NULL; -        sRenderingSkinned = FALSE; -        LLDrawPoolAvatar::sShadowPass = -1; +    if (sShaderLevel > 0) +    { +        sVertexProgram->unbind();      } +    sVertexProgram = NULL; +    sRenderingSkinned = FALSE; +    LLDrawPoolAvatar::sShadowPass = -1;  }  void LLDrawPoolAvatar::renderShadow(S32 pass)  { -    LL_RECORD_BLOCK_TIME(FTM_SHADOW_AVATAR); -    { -        LL_PROFILE_ZONE_SCOPED; +    LL_PROFILE_ZONE_SCOPED; -        if (mDrawFace.empty()) -        { -            return; -        } +    if (mDrawFace.empty()) +    { +        return; +    } -        const LLFace *facep = mDrawFace[0]; -        if (!facep->getDrawable()) -        { -            return; -        } -        LLVOAvatar *avatarp = (LLVOAvatar *)facep->getDrawable()->getVObj().get(); +    const LLFace *facep = mDrawFace[0]; +    if (!facep->getDrawable()) +    { +        return; +    } +    LLVOAvatar *avatarp = (LLVOAvatar *)facep->getDrawable()->getVObj().get(); -        if (avatarp->isDead() || avatarp->isUIAvatar() || avatarp->mDrawable.isNull()) -        { -            return; -        } -        LLVOAvatar::AvatarOverallAppearance oa = avatarp->getOverallAppearance(); -        BOOL impostor = !LLPipeline::sImpostorRender && avatarp->isImpostor(); -        if (impostor || (oa == LLVOAvatar::AOA_INVISIBLE)) -        { -            // No shadows for impostored (including jellydolled) or invisible avs. -            return; -        } +    if (avatarp->isDead() || avatarp->isUIAvatar() || avatarp->mDrawable.isNull()) +    { +        return; +    } +    LLVOAvatar::AvatarOverallAppearance oa = avatarp->getOverallAppearance(); +    BOOL impostor = !LLPipeline::sImpostorRender && avatarp->isImpostor(); +    if (impostor || (oa == LLVOAvatar::AOA_INVISIBLE)) +    { +        // No shadows for impostored (including jellydolled) or invisible avs. +        return; +    } -        LLDrawPoolAvatar::sShadowPass = pass; +    LLDrawPoolAvatar::sShadowPass = pass; -        if (pass == SHADOW_PASS_AVATAR_OPAQUE) -        { -            LLDrawPoolAvatar::sSkipTransparent = true; -            avatarp->renderSkinned(); -            LLDrawPoolAvatar::sSkipTransparent = false; -        } -        else if (pass == SHADOW_PASS_AVATAR_ALPHA_BLEND) -        { -            LLDrawPoolAvatar::sSkipOpaque = true; -            avatarp->renderSkinned(); -            LLDrawPoolAvatar::sSkipOpaque = false; -        } -        else if (pass == SHADOW_PASS_AVATAR_ALPHA_MASK) -        { -            LLDrawPoolAvatar::sSkipOpaque = true; -            avatarp->renderSkinned(); -            LLDrawPoolAvatar::sSkipOpaque = false; -        } -        else if (pass == SHADOW_PASS_ATTACHMENT_ALPHA_BLEND) // rigged alpha -        { -            LLDrawPoolAvatar::sSkipOpaque = true; -            renderRigged(avatarp, RIGGED_MATERIAL_ALPHA); -            renderRigged(avatarp, RIGGED_MATERIAL_ALPHA_EMISSIVE); -            renderRigged(avatarp, RIGGED_ALPHA); -            renderRigged(avatarp, RIGGED_FULLBRIGHT_ALPHA); -            renderRigged(avatarp, RIGGED_GLOW); -            renderRigged(avatarp, RIGGED_SPECMAP_BLEND); -            renderRigged(avatarp, RIGGED_NORMMAP_BLEND); -            renderRigged(avatarp, RIGGED_NORMSPEC_BLEND); -            LLDrawPoolAvatar::sSkipOpaque = false; -        } -        else if (pass == SHADOW_PASS_ATTACHMENT_ALPHA_MASK) // rigged alpha mask -        { -            LLDrawPoolAvatar::sSkipOpaque = true; -            renderRigged(avatarp, RIGGED_MATERIAL_ALPHA_MASK); -            renderRigged(avatarp, RIGGED_NORMMAP_MASK); -            renderRigged(avatarp, RIGGED_SPECMAP_MASK); -            renderRigged(avatarp, RIGGED_NORMSPEC_MASK); -            renderRigged(avatarp, RIGGED_GLOW); -            LLDrawPoolAvatar::sSkipOpaque = false; -        } -        else // rigged opaque (SHADOW_PASS_ATTACHMENT_OPAQUE -        { -            LLDrawPoolAvatar::sSkipTransparent = true; -            renderRigged(avatarp, RIGGED_MATERIAL); -            renderRigged(avatarp, RIGGED_SPECMAP); -            renderRigged(avatarp, RIGGED_SPECMAP_EMISSIVE); -            renderRigged(avatarp, RIGGED_NORMMAP); -            renderRigged(avatarp, RIGGED_NORMMAP_EMISSIVE); -            renderRigged(avatarp, RIGGED_NORMSPEC); -            renderRigged(avatarp, RIGGED_NORMSPEC_EMISSIVE); -            renderRigged(avatarp, RIGGED_SIMPLE); -            renderRigged(avatarp, RIGGED_FULLBRIGHT); -            renderRigged(avatarp, RIGGED_SHINY); -            renderRigged(avatarp, RIGGED_FULLBRIGHT_SHINY); -            renderRigged(avatarp, RIGGED_GLOW); -            renderRigged(avatarp, RIGGED_DEFERRED_BUMP); -            renderRigged(avatarp, RIGGED_DEFERRED_SIMPLE); -            LLDrawPoolAvatar::sSkipTransparent = false; -        } +    if (pass == SHADOW_PASS_AVATAR_OPAQUE) +    { +        LLDrawPoolAvatar::sSkipTransparent = true; +        avatarp->renderSkinned(); +        LLDrawPoolAvatar::sSkipTransparent = false; +    } +    else if (pass == SHADOW_PASS_AVATAR_ALPHA_BLEND) +    { +        LLDrawPoolAvatar::sSkipOpaque = true; +        avatarp->renderSkinned(); +        LLDrawPoolAvatar::sSkipOpaque = false; +    } +    else if (pass == SHADOW_PASS_AVATAR_ALPHA_MASK) +    { +        LLDrawPoolAvatar::sSkipOpaque = true; +        avatarp->renderSkinned(); +        LLDrawPoolAvatar::sSkipOpaque = false; +    } +    else if (pass == SHADOW_PASS_ATTACHMENT_ALPHA_BLEND) // rigged alpha +    { +        LLDrawPoolAvatar::sSkipOpaque = true; +        renderRigged(avatarp, RIGGED_MATERIAL_ALPHA); +        renderRigged(avatarp, RIGGED_MATERIAL_ALPHA_EMISSIVE); +        renderRigged(avatarp, RIGGED_ALPHA); +        renderRigged(avatarp, RIGGED_FULLBRIGHT_ALPHA); +        renderRigged(avatarp, RIGGED_GLOW); +        renderRigged(avatarp, RIGGED_SPECMAP_BLEND); +        renderRigged(avatarp, RIGGED_NORMMAP_BLEND); +        renderRigged(avatarp, RIGGED_NORMSPEC_BLEND); +        LLDrawPoolAvatar::sSkipOpaque = false; +    } +    else if (pass == SHADOW_PASS_ATTACHMENT_ALPHA_MASK) // rigged alpha mask +    { +        LLDrawPoolAvatar::sSkipOpaque = true; +        renderRigged(avatarp, RIGGED_MATERIAL_ALPHA_MASK); +        renderRigged(avatarp, RIGGED_NORMMAP_MASK); +        renderRigged(avatarp, RIGGED_SPECMAP_MASK); +        renderRigged(avatarp, RIGGED_NORMSPEC_MASK); +        renderRigged(avatarp, RIGGED_GLOW); +        LLDrawPoolAvatar::sSkipOpaque = false; +    } +    else // rigged opaque (SHADOW_PASS_ATTACHMENT_OPAQUE +    { +        LLDrawPoolAvatar::sSkipTransparent = true; +        renderRigged(avatarp, RIGGED_MATERIAL); +        renderRigged(avatarp, RIGGED_SPECMAP); +        renderRigged(avatarp, RIGGED_SPECMAP_EMISSIVE); +        renderRigged(avatarp, RIGGED_NORMMAP); +        renderRigged(avatarp, RIGGED_NORMMAP_EMISSIVE); +        renderRigged(avatarp, RIGGED_NORMSPEC); +        renderRigged(avatarp, RIGGED_NORMSPEC_EMISSIVE); +        renderRigged(avatarp, RIGGED_SIMPLE); +        renderRigged(avatarp, RIGGED_FULLBRIGHT); +        renderRigged(avatarp, RIGGED_SHINY); +        renderRigged(avatarp, RIGGED_FULLBRIGHT_SHINY); +        renderRigged(avatarp, RIGGED_GLOW); +        renderRigged(avatarp, RIGGED_DEFERRED_BUMP); +        renderRigged(avatarp, RIGGED_DEFERRED_SIMPLE); +        LLDrawPoolAvatar::sSkipTransparent = false;      }  } @@ -712,7 +701,7 @@ S32 LLDrawPoolAvatar::getNumDeferredPasses()  void LLDrawPoolAvatar::render(S32 pass)  { -	LL_RECORD_BLOCK_TIME(FTM_RENDER_CHARACTERS); +    LL_PROFILE_ZONE_SCOPED;  	if (LLPipeline::sImpostorRender)  	{  		renderAvatars(NULL, pass+2); @@ -724,7 +713,7 @@ void LLDrawPoolAvatar::render(S32 pass)  void LLDrawPoolAvatar::beginRenderPass(S32 pass)  { -	LL_RECORD_BLOCK_TIME(FTM_RENDER_CHARACTERS); +    LL_PROFILE_ZONE_SCOPED;  	//reset vertex buffer mappings  	LLVertexBuffer::unbind(); @@ -775,7 +764,7 @@ void LLDrawPoolAvatar::beginRenderPass(S32 pass)  void LLDrawPoolAvatar::endRenderPass(S32 pass)  { -	LL_RECORD_BLOCK_TIME(FTM_RENDER_CHARACTERS); +    LL_PROFILE_ZONE_SCOPED;  	if (LLPipeline::sImpostorRender)  	{ @@ -1542,13 +1531,8 @@ void LLDrawPoolAvatar::endDeferredSkinned()  	gGL.getTexUnit(0)->activate();  } -static LLTrace::BlockTimerStatHandle FTM_RENDER_AVATARS("renderAvatars"); - -  void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)  { -	LL_RECORD_BLOCK_TIME(FTM_RENDER_AVATARS); -  	if (pass == -1)  	{  		for (S32 i = 1; i < getNumPasses(); i++) @@ -1588,6 +1572,8 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)  		return;  	} +    LL_RECORD_BLOCK_TIME(FTM_RENDER_CHARACTERS); +  	if (!single_avatar && !avatarp->isFullyLoaded() )  	{  		if (pass==0 && (!gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_PARTICLES) || LLViewerPartSim::getMaxPartCount() <= 0)) diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index b08fbcbd89..8f3b0c99b4 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -1116,11 +1116,10 @@ LLViewerTexture* LLBumpImageList::getBrightnessDarknessImage(LLViewerFetchedText  } -static LLTrace::BlockTimerStatHandle FTM_BUMP_SOURCE_STANDARD_LOADED("Bump Standard Callback"); -  // static  void LLBumpImageList::onSourceBrightnessLoaded( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata )  { +    LL_PROFILE_ZONE_SCOPED;  	LLUUID* source_asset_id = (LLUUID*)userdata;  	LLBumpImageList::onSourceLoaded( success, src_vi, src, *source_asset_id, BE_BRIGHTNESS );  	if( final ) @@ -1140,22 +1139,17 @@ void LLBumpImageList::onSourceDarknessLoaded( BOOL success, LLViewerFetchedTextu  	}  } -static LLTrace::BlockTimerStatHandle FTM_BUMP_GEN_NORMAL("Generate Normal Map"); -static LLTrace::BlockTimerStatHandle FTM_BUMP_CREATE_TEXTURE("Create GL Normal Map"); -  void LLBumpImageList::onSourceStandardLoaded( BOOL success, LLViewerFetchedTexture* src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata)  {  	if (success && LLPipeline::sRenderDeferred)  	{ -		LL_RECORD_BLOCK_TIME(FTM_BUMP_SOURCE_STANDARD_LOADED); +        LL_PROFILE_ZONE_SCOPED;  		LLPointer<LLImageRaw> nrm_image = new LLImageRaw(src->getWidth(), src->getHeight(), 4);  		{ -			LL_RECORD_BLOCK_TIME(FTM_BUMP_GEN_NORMAL);  			generateNormalMapFromAlpha(src, nrm_image);  		}  		src_vi->setExplicitFormat(GL_RGBA, GL_RGBA);  		{ -			LL_RECORD_BLOCK_TIME(FTM_BUMP_CREATE_TEXTURE);  			src_vi->createGLTexture(src_vi->getDiscardLevel(), nrm_image);  		}  	} @@ -1216,28 +1210,18 @@ void LLBumpImageList::generateNormalMapFromAlpha(LLImageRaw* src, LLImageRaw* nr  	}  } - -static LLTrace::BlockTimerStatHandle FTM_BUMP_SOURCE_LOADED("Bump Source Loaded"); -static LLTrace::BlockTimerStatHandle FTM_BUMP_SOURCE_ENTRIES_UPDATE("Entries Update"); -static LLTrace::BlockTimerStatHandle FTM_BUMP_SOURCE_MIN_MAX("Min/Max"); -static LLTrace::BlockTimerStatHandle FTM_BUMP_SOURCE_RGB2LUM("RGB to Luminance"); -static LLTrace::BlockTimerStatHandle FTM_BUMP_SOURCE_RESCALE("Rescale"); -static LLTrace::BlockTimerStatHandle FTM_BUMP_SOURCE_GEN_NORMAL("Generate Normal"); -static LLTrace::BlockTimerStatHandle FTM_BUMP_SOURCE_CREATE("Bump Source Create"); -  // static  void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLImageRaw* src, LLUUID& source_asset_id, EBumpEffect bump_code )  {  	if( success )  	{ -		LL_RECORD_BLOCK_TIME(FTM_BUMP_SOURCE_LOADED); +        LL_PROFILE_ZONE_SCOPED;  		bump_image_map_t& entries_list(bump_code == BE_BRIGHTNESS ? gBumpImageList.mBrightnessEntries : gBumpImageList.mDarknessEntries );  		bump_image_map_t::iterator iter = entries_list.find(source_asset_id);  		{ -			LL_RECORD_BLOCK_TIME(FTM_BUMP_SOURCE_ENTRIES_UPDATE);  			if (iter == entries_list.end() ||  				iter->second.isNull() ||  							iter->second->getWidth() != src->getWidth() || @@ -1280,7 +1264,6 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI  			case 1:  			case 2:  				{ -					LL_RECORD_BLOCK_TIME(FTM_BUMP_SOURCE_MIN_MAX);  					if( src_data_size == dst_data_size * src_components )  					{  						for( S32 i = 0, j=0; i < dst_data_size; i++, j+= src_components ) @@ -1306,7 +1289,6 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI  			case 3:  			case 4:  				{ -					LL_RECORD_BLOCK_TIME(FTM_BUMP_SOURCE_RGB2LUM);  					if( src_data_size == dst_data_size * src_components )  					{  						for( S32 i = 0, j=0; i < dst_data_size; i++, j+= src_components ) @@ -1339,7 +1321,6 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI  			if( maximum > minimum )  			{ -				LL_RECORD_BLOCK_TIME(FTM_BUMP_SOURCE_RESCALE);  				U8 bias_and_scale_lut[256];  				F32 twice_one_over_range = 2.f / (maximum - minimum);  				S32 i; @@ -1375,7 +1356,6 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI  			if (!LLPipeline::sRenderDeferred)  			{ -				LL_RECORD_BLOCK_TIME(FTM_BUMP_SOURCE_CREATE);  				bump->setExplicitFormat(GL_ALPHA8, GL_ALPHA);  				bump->createGLTexture(0, dst_image);  			} @@ -1386,13 +1366,11 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI  				bump->getGLTexture()->setAllowCompression(false);  				{ -					LL_RECORD_BLOCK_TIME(FTM_BUMP_SOURCE_CREATE);  					bump->setExplicitFormat(GL_RGBA8, GL_ALPHA);  					bump->createGLTexture(0, dst_image);  				}  				{ -					LL_RECORD_BLOCK_TIME(FTM_BUMP_SOURCE_GEN_NORMAL);  					gPipeline.mScreen.bindTarget();  					LLGLDepthTest depth(GL_FALSE); diff --git a/indra/newview/lldrawpoolsimple.cpp b/indra/newview/lldrawpoolsimple.cpp index 843288cfb0..320160d10d 100644 --- a/indra/newview/lldrawpoolsimple.cpp +++ b/indra/newview/lldrawpoolsimple.cpp @@ -57,8 +57,6 @@ void LLDrawPoolGlow::beginPostDeferredPass(S32 pass)  	}  } -static LLTrace::BlockTimerStatHandle FTM_RENDER_GLOW_PUSH("Glow Push"); -  void LLDrawPoolGlow::renderPostDeferred(S32 pass)  {  	LL_RECORD_BLOCK_TIME(FTM_RENDER_GLOW); @@ -73,10 +71,7 @@ void LLDrawPoolGlow::renderPostDeferred(S32 pass)  	LLGLDepthTest depth(GL_TRUE, GL_FALSE);  	gGL.setColorMask(false, true); -	{ -		LL_RECORD_BLOCK_TIME(FTM_RENDER_GLOW_PUSH); -		pushBatches(LLRenderPass::PASS_GLOW, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE); -	} +	pushBatches(LLRenderPass::PASS_GLOW, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);  	gGL.setColorMask(true, false);  	gGL.setSceneBlendType(LLRender::BT_ALPHA);	 @@ -309,7 +304,7 @@ void LLDrawPoolAlphaMask::endRenderPass(S32 pass)  void LLDrawPoolAlphaMask::render(S32 pass)  {  	LLGLDisable blend(GL_BLEND); -	LL_RECORD_BLOCK_TIME(FTM_RENDER_ALPHA_MASK); +    LL_PROFILE_ZONE_SCOPED;  	if (mShaderLevel > 0)  	{ diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp index 34a8b6b2cc..9cea8f5460 100644 --- a/indra/newview/lldrawpoolterrain.cpp +++ b/indra/newview/lldrawpoolterrain.cpp @@ -920,6 +920,7 @@ void LLDrawPoolTerrain::renderOwnership()  void LLDrawPoolTerrain::dirtyTextures(const std::set<LLViewerFetchedTexture*>& textures)  { +    LL_PROFILE_ZONE_SCOPED;  	LLViewerFetchedTexture* tex = LLViewerTextureManager::staticCastToFetchedTexture(mTexturep) ;  	if (tex && textures.find(tex) != textures.end())  	{ diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp index a1ff020068..202f648e3f 100644 --- a/indra/newview/lldrawpooltree.cpp +++ b/indra/newview/lldrawpooltree.cpp @@ -42,7 +42,6 @@  S32 LLDrawPoolTree::sDiffTex = 0;  static LLGLSLShader* shader = NULL; -static LLTrace::BlockTimerStatHandle FTM_SHADOW_TREE("Tree Shadow");  LLDrawPoolTree::LLDrawPoolTree(LLViewerTexture *texturep) :  	LLFacePool(POOL_TREE), @@ -84,7 +83,7 @@ void LLDrawPoolTree::beginRenderPass(S32 pass)  void LLDrawPoolTree::render(S32 pass)  { -	LL_RECORD_BLOCK_TIME(LLPipeline::sShadowRender ? FTM_SHADOW_TREE : FTM_RENDER_TREES); +    LL_PROFILE_ZONE_SCOPED;  	if (mDrawFace.empty())  	{ @@ -169,7 +168,7 @@ void LLDrawPoolTree::endDeferredPass(S32 pass)  //============================================  void LLDrawPoolTree::beginShadowPass(S32 pass)  { -	LL_RECORD_BLOCK_TIME(FTM_SHADOW_TREE); +    LL_PROFILE_ZONE_SCOPED;  	glPolygonOffset(gSavedSettings.getF32("RenderDeferredTreeShadowOffset"),  					gSavedSettings.getF32("RenderDeferredTreeShadowBias")); @@ -188,7 +187,7 @@ void LLDrawPoolTree::renderShadow(S32 pass)  void LLDrawPoolTree::endShadowPass(S32 pass)  { -	LL_RECORD_BLOCK_TIME(FTM_SHADOW_TREE); +    LL_PROFILE_ZONE_SCOPED;  	glPolygonOffset(gSavedSettings.getF32("RenderDeferredSpotShadowOffset"),  						gSavedSettings.getF32("RenderDeferredSpotShadowBias")); diff --git a/indra/newview/lldynamictexture.h b/indra/newview/lldynamictexture.h index 4bd74a8425..caedf928c3 100644 --- a/indra/newview/lldynamictexture.h +++ b/indra/newview/lldynamictexture.h @@ -35,16 +35,8 @@  class LLViewerDynamicTexture : public LLViewerTexture  { +    LL_ALIGN_NEW  public: -	void* operator new(size_t size) -	{ -		return LLTrace::MemTrackable<LLTexture>::aligned_new<16>(size); -	} - -	void operator delete(void* ptr, size_t size) -	{ -		LLTrace::MemTrackable<LLTexture>::aligned_delete<16>(ptr, size); -	}  	enum  	{ diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp index 69d3075928..dba24b3d02 100644 --- a/indra/newview/llenvironment.cpp +++ b/indra/newview/llenvironment.cpp @@ -105,7 +105,6 @@ namespace      //---------------------------------------------------------------------      LLTrace::BlockTimerStatHandle   FTM_ENVIRONMENT_UPDATE("Update Environment Tick"); -    LLTrace::BlockTimerStatHandle   FTM_SHADER_PARAM_UPDATE("Update Shader Parameters");      LLSettingsBase::Seconds         DEFAULT_UPDATE_THRESHOLD(10.0);      const LLSettingsBase::Seconds   MINIMUM_SPANLENGTH(0.01f); @@ -825,7 +824,7 @@ std::string env_selection_to_string(LLEnvironment::EnvSelection_t sel)  #undef RTNENUM  } - +LLEnvironment* LLSimpleton<LLEnvironment>::sInstance = nullptr;  //-------------------------------------------------------------------------  LLEnvironment::LLEnvironment():      mCloudScrollDelta(), @@ -879,6 +878,7 @@ void LLEnvironment::cleanupSingleton()  LLEnvironment::~LLEnvironment()  { +    cleanupSingleton();  }  bool LLEnvironment::canEdit() const @@ -1655,7 +1655,7 @@ void LLEnvironment::updateCloudScroll()  // static  void LLEnvironment::updateGLVariablesForSettings(LLShaderUniforms* uniforms, const LLSettingsBase::ptr_t &psetting)  { -    LL_RECORD_BLOCK_TIME(FTM_SHADER_PARAM_UPDATE); +    LL_PROFILE_ZONE_SCOPED;      for (int i = 0; i < LLGLSLShader::SG_COUNT; ++i)      { diff --git a/indra/newview/llenvironment.h b/indra/newview/llenvironment.h index 3568fbcfd1..0ec06402f8 100644 --- a/indra/newview/llenvironment.h +++ b/indra/newview/llenvironment.h @@ -47,11 +47,11 @@ class LLViewerCamera;  class LLParcel;  //------------------------------------------------------------------------- -class LLEnvironment : public LLSingleton<LLEnvironment> +class LLEnvironment : public LLSimpleton<LLEnvironment>  { -    LLSINGLETON_C11(LLEnvironment);      LOG_CLASS(LLEnvironment);  public: +    LLEnvironment();      static const F64Seconds     TRANSITION_INSTANT;      static const F64Seconds     TRANSITION_FAST; @@ -115,7 +115,7 @@ public:      typedef std::array<F32, 4>                                      altitude_list_t;      typedef std::vector<F32>                                        altitudes_vect_t; -    virtual                     ~LLEnvironment(); +    ~LLEnvironment();      bool                        canEdit() const;      bool                        isExtendedEnvironmentEnabled() const; @@ -337,9 +337,10 @@ public:      DayInstance::ptr_t          getSelectedEnvironmentInstance();      DayInstance::ptr_t          getSharedEnvironmentInstance(); +    void                initSingleton(); +  protected: -    virtual void                initSingleton() override; -    virtual void                cleanupSingleton() override; +    void                cleanupSingleton();  private: diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 34448a780d..88b958d24a 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -127,6 +127,7 @@ void planarProjection(LLVector2 &tc, const LLVector4a& normal,  void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)  { +    LL_PROFILE_ZONE_SCOPED;  	mLastUpdateTime = gFrameTimeSeconds;  	mLastMoveTime = 0.f;  	mLastSkinTime = gFrameTimeSeconds; @@ -1206,12 +1207,10 @@ bool LLFace::canRenderAsMask()  } -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_VOLUME("Volume VB Cache"); -  //static   void LLFace::cacheFaceInVRAM(const LLVolumeFace& vf)  { -	LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_VOLUME); +    LL_PROFILE_ZONE_SCOPED;  	U32 mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 |  				LLVertexBuffer::MAP_TANGENT | LLVertexBuffer::MAP_NORMAL; @@ -1273,41 +1272,13 @@ void push_for_transform(LLVertexBuffer* buff, U32 source_count, U32 dest_count)  	}  } -static LLTrace::BlockTimerStatHandle FTM_FACE_GET_GEOM("Face Geom"); -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_POSITION("Position"); -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_NORMAL("Normal"); -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_TEXTURE("Texture"); -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_COLOR("Color"); -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_EMISSIVE("Emissive"); -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_WEIGHTS("Weights"); -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_TANGENT("Binormal"); - -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_FEEDBACK("Face Feedback"); -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_FEEDBACK_POSITION("Feedback Position"); -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_FEEDBACK_NORMAL("Feedback  Normal"); -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_FEEDBACK_TEXTURE("Feedback  Texture"); -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_FEEDBACK_COLOR("Feedback  Color"); -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_FEEDBACK_EMISSIVE("Feedback  Emissive"); -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_FEEDBACK_BINORMAL("Feedback Binormal"); - -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_INDEX("Index"); -static LLTrace::BlockTimerStatHandle FTM_FACE_GEOM_INDEX_TAIL("Tail"); -static LLTrace::BlockTimerStatHandle FTM_FACE_POSITION_STORE("Pos"); -static LLTrace::BlockTimerStatHandle FTM_FACE_TEXTURE_INDEX_STORE("TexIdx"); -static LLTrace::BlockTimerStatHandle FTM_FACE_POSITION_PAD("Pad"); -static LLTrace::BlockTimerStatHandle FTM_FACE_TEX_DEFAULT("Default"); -static LLTrace::BlockTimerStatHandle FTM_FACE_TEX_QUICK("Quick"); -static LLTrace::BlockTimerStatHandle FTM_FACE_TEX_QUICK_NO_XFORM("No Xform"); -static LLTrace::BlockTimerStatHandle FTM_FACE_TEX_QUICK_XFORM("Xform"); -static LLTrace::BlockTimerStatHandle FTM_FACE_TEX_QUICK_PLANAR("Quick Planar"); -  BOOL LLFace::getGeometryVolume(const LLVolume& volume,  							   const S32 &f,  								const LLMatrix4& mat_vert_in, const LLMatrix3& mat_norm_in,  								const U16 &index_offset,  								bool force_rebuild)  { -	LL_RECORD_BLOCK_TIME(FTM_FACE_GET_GEOM); +    LL_PROFILE_ZONE_SCOPED;  	llassert(verify());  	if (volume.getNumVolumeFaces() <= f) { @@ -1448,7 +1419,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  	// INDICES  	if (full_rebuild)  	{ -		LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_INDEX); +        LL_PROFILE_ZONE_NAMED("getGeometryVolume - indices");  		mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex, mIndicesCount, map_range);  		volatile __m128i* dst = (__m128i*) indicesp.get(); @@ -1464,7 +1435,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		}  		{ -			LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_INDEX_TAIL); +            LL_PROFILE_ZONE_NAMED("getGeometryVolume - indices tail");  			U16* idx = (U16*) dst;  			for (S32 i = end*8; i < num_indices; ++i) @@ -1527,7 +1498,8 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		!volume.isUnique()) //source volume is NOT flexi  	{ //use transform feedback to pack vertex buffer  		//gGLDebugLoggingEnabled = TRUE; -		LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_FEEDBACK); + +        LL_PROFILE_ZONE_NAMED("getGeometryVolume - transform feedback");  		LLGLEnable discard(GL_RASTERIZER_DISCARD);  		LLVertexBuffer* buff = (LLVertexBuffer*) vf.mVertexBuffer.get(); @@ -1545,7 +1517,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		if (rebuild_pos)  		{ -			LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_FEEDBACK_POSITION); +            LL_PROFILE_ZONE_NAMED("getGeometryVolume - tf position");  			gTransformPositionProgram.bind();  			mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_VERTEX, mGeomIndex, mGeomCount); @@ -1570,7 +1542,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		if (rebuild_color)  		{ -			LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_FEEDBACK_COLOR); +            LL_PROFILE_ZONE_NAMED("getGeometryVolume - tf color");  			gTransformColorProgram.bind();  			mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_COLOR, mGeomIndex, mGeomCount); @@ -1586,7 +1558,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		if (rebuild_emissive)  		{ -			LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_FEEDBACK_EMISSIVE); +            LL_PROFILE_ZONE_NAMED("getGeometryVolume - tf emissive");  			gTransformColorProgram.bind();  			mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_EMISSIVE, mGeomIndex, mGeomCount); @@ -1607,7 +1579,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		if (rebuild_normal)  		{ -			LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_FEEDBACK_NORMAL); +            LL_PROFILE_ZONE_NAMED("getGeometryVolume - tf normal");  			gTransformNormalProgram.bind();  			mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_NORMAL, mGeomIndex, mGeomCount); @@ -1620,7 +1592,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		if (rebuild_tangent)  		{ -			LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_TANGENT); +            LL_PROFILE_ZONE_NAMED("getGeometryVolume - tf tangent");  			gTransformTangentProgram.bind();  			mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_TANGENT, mGeomIndex, mGeomCount); @@ -1633,7 +1605,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		if (rebuild_tcoord)  		{ -			LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_FEEDBACK_TEXTURE); +            LL_PROFILE_ZONE_NAMED("getGeometryVolume - tf tcoord");  			gTransformTexCoordProgram.bind();  			mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_TEXCOORD0, mGeomIndex, mGeomCount); @@ -1672,7 +1644,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		if (rebuild_tcoord)  		{ -			LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_TEXTURE); +            LL_PROFILE_ZONE_NAMED("getGeometryVolume - tcoord");  			//bump setup  			LLVector4a binormal_dir( -sin_ang, cos_ang, 0.f ); @@ -1795,18 +1767,18 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  				if (texgen != LLTextureEntry::TEX_GEN_PLANAR)  				{ -					LL_RECORD_BLOCK_TIME(FTM_FACE_TEX_QUICK); +                    LL_PROFILE_ZONE_NAMED("getGeometryVolume - texgen");  					if (!do_tex_mat)  					{  						if (!do_xform)  						{ -							LL_RECORD_BLOCK_TIME(FTM_FACE_TEX_QUICK_NO_XFORM); +                            LL_PROFILE_ZONE_NAMED("ggv - texgen 1");  							S32 tc_size = (num_vertices*2*sizeof(F32)+0xF) & ~0xF;  							LLVector4a::memcpyNonAliased16((F32*) tex_coords0.get(), (F32*) vf.mTexCoords, tc_size);  						}  						else  						{ -							LL_RECORD_BLOCK_TIME(FTM_FACE_TEX_QUICK_XFORM); +                            LL_PROFILE_ZONE_NAMED("ggv - texgen 2");  							F32* dst = (F32*) tex_coords0.get();  							LLVector4a* src = (LLVector4a*) vf.mTexCoords; @@ -1846,9 +1818,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  						for (S32 i = 0; i < num_vertices; i++)  						{	  							LLVector2 tc(vf.mTexCoords[i]); -							//LLVector4a& norm = vf.mNormals[i]; -							//LLVector4a& center = *(vf.mCenter); - +							  							LLVector3 tmp(tc.mV[0], tc.mV[1], 0.f);  							tmp = tmp * *mTextureMatrix;  							tc.mV[0] = tmp.mV[0]; @@ -1859,7 +1829,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  				}  				else  				{ //no bump, tex gen planar -					LL_RECORD_BLOCK_TIME(FTM_FACE_TEX_QUICK_PLANAR); +                    LL_PROFILE_ZONE_NAMED("getGeometryVolume - texgen planar");  					if (do_tex_mat)  					{  						for (S32 i = 0; i < num_vertices; i++) @@ -1904,7 +1874,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  			}  			else  			{ //bump mapped or has material, just do the whole expensive loop -				LL_RECORD_BLOCK_TIME(FTM_FACE_TEX_DEFAULT); +                LL_PROFILE_ZONE_NAMED("getGeometryVolume - texgen default");  				std::vector<LLVector2> bump_tc; @@ -2062,7 +2032,6 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  			LLVector4a* end = src+num_vertices;  			//LLVector4a* end_64 = end-4; -			//LL_RECORD_TIME_BLOCK(FTM_FACE_GEOM_POSITION);  			llassert(num_vertices > 0);  			mVertexBuffer->getVertexStrider(vert, mGeomIndex, mGeomCount, map_range); @@ -2099,53 +2068,19 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  			LLVector4a tmp; -			{ -				//LL_RECORD_TIME_BLOCK(FTM_FACE_POSITION_STORE); - -				/*if (num_vertices > 4) -				{ //more than 64 bytes -					while (src < end_64) -					{	 -						_mm_prefetch((char*)src + 64, _MM_HINT_T0); -						_mm_prefetch((char*)dst + 64, _MM_HINT_T0); - -						mat_vert.affineTransform(*src, res0); -						tmp.setSelectWithMask(mask, texIdx, res0); -						tmp.store4a((F32*) dst); - -						mat_vert.affineTransform(*(src+1), res1); -						tmp.setSelectWithMask(mask, texIdx, res1); -						tmp.store4a((F32*) dst+4); - -						mat_vert.affineTransform(*(src+2), res2); -						tmp.setSelectWithMask(mask, texIdx, res2); -						tmp.store4a((F32*) dst+8); - -						mat_vert.affineTransform(*(src+3), res3); -						tmp.setSelectWithMask(mask, texIdx, res3); -						tmp.store4a((F32*) dst+12); - -						dst += 16; -						src += 4; -					} -				}*/ - -				while (src < end) -				{	 -					mat_vert.affineTransform(*src++, res0); -					tmp.setSelectWithMask(mask, texIdx, res0); -					tmp.store4a((F32*) dst); -					dst += 4; -				} +			 +			while (src < end) +			{	 +				mat_vert.affineTransform(*src++, res0); +				tmp.setSelectWithMask(mask, texIdx, res0); +				tmp.store4a((F32*) dst); +				dst += 4;  			} - +			 +			while (dst < end_f32)  			{ -				//LL_RECORD_TIME_BLOCK(FTM_FACE_POSITION_PAD); -				while (dst < end_f32) -				{ -					res0.store4a((F32*) dst); -					dst += 4; -				} +				res0.store4a((F32*) dst); +				dst += 4;  			}  			if (map_range) @@ -2179,7 +2114,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		if (rebuild_tangent)  		{ -			LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_TANGENT); +            LL_PROFILE_ZONE_NAMED("getGeometryVolume - tangent");  			mVertexBuffer->getTangentStrider(tangent, mGeomIndex, mGeomCount, map_range);  			F32* tangents = (F32*) tangent.get(); @@ -2212,7 +2147,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		if (rebuild_weights && vf.mWeights)  		{ -			LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_WEIGHTS); +            LL_PROFILE_ZONE_NAMED("getGeometryVolume - weight");  			mVertexBuffer->getWeight4Strider(wght, mGeomIndex, mGeomCount, map_range);  			F32* weights = (F32*) wght.get();  			LLVector4a::memcpyNonAliased16(weights, (F32*) vf.mWeights, num_vertices*4*sizeof(F32)); @@ -2224,7 +2159,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		if (rebuild_color && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_COLOR) )  		{ -			LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_COLOR); +            LL_PROFILE_ZONE_NAMED("getGeometryVolume - color");  			mVertexBuffer->getColorStrider(colors, mGeomIndex, mGeomCount, map_range);  			LLVector4a src; @@ -2255,7 +2190,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		if (rebuild_emissive)  		{ -			LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_EMISSIVE); +            LL_PROFILE_ZONE_NAMED("getGeometryVolume - emissive");  			LLStrider<LLColor4U> emissive;  			mVertexBuffer->getEmissiveStrider(emissive, mGeomIndex, mGeomCount, map_range); diff --git a/indra/newview/llface.h b/indra/newview/llface.h index 9dd365e3dc..2e76c974fa 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -54,11 +54,11 @@ const F32 MIN_ALPHA_SIZE = 1024.f;  const F32 MIN_TEX_ANIM_SIZE = 512.f;  const U8 FACE_DO_NOT_BATCH_TEXTURES = 255; -class LLFace : public LLTrace::MemTrackableNonVirtual<LLFace, 16> +class alignas(16) LLFace  { +    LL_ALIGN_NEW  public:  	LLFace(const LLFace& rhs) -	:	LLTrace::MemTrackableNonVirtual<LLFace, 16>("LLFace")  	{  		*this = rhs;  	} @@ -85,8 +85,8 @@ public:  public:  	LLFace(LLDrawable* drawablep, LLViewerObject* objp) -	:	LLTrace::MemTrackableNonVirtual<LLFace, 16>("LLFace")  	{ +        LL_PROFILE_ZONE_SCOPED;  		init(drawablep, objp);  	}  	~LLFace()  { destroy(); } diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index 239d162101..1605e4133d 100644 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -716,7 +716,6 @@ void LLFastTimerView::exportCharts(const std::string& base, const std::string& t  		//======================================  		buffer.clear(); -  		gGL.color3fv(base_col.mV);  		U32 count = 0;  		U32 total_count = base_execution.size(); @@ -1019,11 +1018,9 @@ void LLFastTimerView::printLineStats()  	}  } -static LLTrace::BlockTimerStatHandle FTM_DRAW_LINE_GRAPH("Draw line graph"); -  void LLFastTimerView::drawLineGraph()  { -	LL_RECORD_BLOCK_TIME(FTM_DRAW_LINE_GRAPH); +    LL_PROFILE_ZONE_SCOPED;  	//draw line graph history  	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);  	LLLocalClipRect clip(mGraphRect); @@ -1062,6 +1059,7 @@ void LLFastTimerView::drawLineGraph()  	F32Seconds cur_max(0);  	U32 cur_max_calls = 0; +  	for(block_timer_tree_df_iterator_t it = LLTrace::begin_block_timer_tree_df(FTM_FRAME);  		it != LLTrace::end_block_timer_tree_df();  		++it) @@ -1096,6 +1094,7 @@ void LLFastTimerView::drawLineGraph()  		F32 call_scale_factor = (F32)mGraphRect.getHeight() / (F32)max_calls;  		F32 time_scale_factor = (F32)mGraphRect.getHeight() / max_time.value();  		F32 hz_scale_factor = (F32) mGraphRect.getHeight() / (1.f / max_time.value()); +          		for (U32 j = mRecording.getNumRecordedPeriods();  			j > 0;  			j--) @@ -1103,7 +1102,7 @@ void LLFastTimerView::drawLineGraph()  			LLTrace::Recording& recording = mRecording.getPrevRecording(j);  			F32Seconds time = llmax(recording.getSum(*idp), F64Seconds(0.000001));  			U32 calls = recording.getSum(idp->callCount()); - +              			if (is_hover_timer)  			{   				//normalize to highlighted timer @@ -1450,6 +1449,7 @@ void LLFastTimerView::updateTotalTime()  void LLFastTimerView::drawBars()  { +    LL_PROFILE_ZONE_SCOPED;  	LLLocalClipRect clip(mBarRect);  	S32 bar_height = mBarRect.getHeight() / (MAX_VISIBLE_HISTORY + 2); @@ -1527,11 +1527,9 @@ void LLFastTimerView::drawBars()  	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);  } -static LLTrace::BlockTimerStatHandle FTM_UPDATE_TIMER_BAR_WIDTHS("Update timer bar widths"); -  F32Seconds LLFastTimerView::updateTimerBarWidths(LLTrace::BlockTimerStatHandle* time_block, TimerBarRow& row, S32 history_index, U32& bar_index)  { -	LL_RECORD_BLOCK_TIME(FTM_UPDATE_TIMER_BAR_WIDTHS); +    LL_PROFILE_ZONE_SCOPED;  	const F32Seconds self_time = history_index == -1  										? mRecording.getPeriodMean(time_block->selfTime(), RUNNING_AVERAGE_WIDTH)   										: mRecording.getPrevRecording(history_index).getSum(time_block->selfTime()); @@ -1555,11 +1553,9 @@ F32Seconds LLFastTimerView::updateTimerBarWidths(LLTrace::BlockTimerStatHandle*  	return full_time;  } -static LLTrace::BlockTimerStatHandle FTM_UPDATE_TIMER_BAR_FRACTIONS("Update timer bar fractions"); -  S32 LLFastTimerView::updateTimerBarOffsets(LLTrace::BlockTimerStatHandle* time_block, TimerBarRow& row, S32 timer_bar_index)  { -	LL_RECORD_BLOCK_TIME(FTM_UPDATE_TIMER_BAR_FRACTIONS); +    LL_PROFILE_ZONE_SCOPED;  	TimerBar& timer_bar = row.mBars[timer_bar_index];  	const F32Seconds bar_time = timer_bar.mTotalTime - timer_bar.mSelfTime; @@ -1620,6 +1616,7 @@ S32 LLFastTimerView::updateTimerBarOffsets(LLTrace::BlockTimerStatHandle* time_b  S32 LLFastTimerView::drawBar(LLRect bar_rect, TimerBarRow& row, S32 image_width, S32 image_height, bool hovered, bool visible, S32 bar_index)  { +    LL_PROFILE_ZONE_SCOPED;  	TimerBar& timer_bar = row.mBars[bar_index];  	LLTrace::BlockTimerStatHandle* time_block = timer_bar.mTimeBlock; diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index e075a311c2..0b0567b687 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -47,9 +47,6 @@ static const F32 SEC_PER_FLEXI_FRAME = 1.f / 60.f; // 60 flexi updates per secon  /*static*/ F32 LLVolumeImplFlexible::sUpdateFactor = 1.0f;  std::vector<LLVolumeImplFlexible*> LLVolumeImplFlexible::sInstanceList; -static LLTrace::BlockTimerStatHandle FTM_FLEXIBLE_REBUILD("Rebuild"); -static LLTrace::BlockTimerStatHandle FTM_DO_FLEXIBLE_UPDATE("Flexible Update"); -  // LLFlexibleObjectData::pack/unpack now in llprimitive.cpp  //----------------------------------------------- @@ -95,7 +92,7 @@ LLVolumeImplFlexible::~LLVolumeImplFlexible()  //static  void LLVolumeImplFlexible::updateClass()  { -	LL_RECORD_BLOCK_TIME(FTM_DO_FLEXIBLE_UPDATE); +    LL_PROFILE_ZONE_SCOPED;  	U64 virtual_frame_num = LLTimer::getElapsedSeconds() / SEC_PER_FLEXI_FRAME;  	for (std::vector<LLVolumeImplFlexible*>::iterator iter = sInstanceList.begin(); @@ -429,7 +426,7 @@ inline S32 log2(S32 x)  void LLVolumeImplFlexible::doFlexibleUpdate()  { -	LL_RECORD_BLOCK_TIME(FTM_DO_FLEXIBLE_UPDATE); +    LL_PROFILE_ZONE_SCOPED;  	LLVolume* volume = mVO->getVolume();  	LLPath *path = &volume->getPath();  	if ((mSimulateRes == 0 || !mInitialized) && mVO->mDrawable->isVisible())  @@ -720,13 +717,12 @@ void LLVolumeImplFlexible::doFlexibleUpdate()  	mLastSegmentRotation = parentSegmentRotation;  } -static LLTrace::BlockTimerStatHandle FTM_FLEXI_PREBUILD("Flexi Prebuild");  void LLVolumeImplFlexible::preRebuild()  {  	if (!mUpdated)  	{ -		LL_RECORD_BLOCK_TIME(FTM_FLEXI_PREBUILD); +        LL_PROFILE_ZONE_SCOPED;  		doFlexibleRebuild(false);  	}  } @@ -752,6 +748,7 @@ void LLVolumeImplFlexible::onSetScale(const LLVector3& scale, BOOL damped)  BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable)  { +    LL_PROFILE_ZONE_SCOPED;  	LLVOVolume *volume = (LLVOVolume*)mVO;  	if (mVO->isAttachment()) @@ -789,7 +786,6 @@ BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable)  	if (mRenderRes > -1)  	{ -		LL_RECORD_BLOCK_TIME(FTM_DO_FLEXIBLE_UPDATE);  		doFlexibleUpdate();  	} @@ -809,7 +805,6 @@ BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable)  		volume->mDrawable->setState(LLDrawable::REBUILD_VOLUME);  		volume->dirtySpatialGroup();  		{ -			LL_RECORD_BLOCK_TIME(FTM_FLEXIBLE_REBUILD);  			doFlexibleRebuild(volume->mVolumeChanged);  		}  		volume->genBBoxes(isVolumeGlobal()); diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp index 32f88b49ac..7f65153879 100644 --- a/indra/newview/llgroupmgr.cpp +++ b/indra/newview/llgroupmgr.cpp @@ -944,12 +944,10 @@ static void formatDateString(std::string &date_string)  	}  } -static LLTrace::BlockTimerStatHandle FTM_PROCESS_GROUP_MEMBERS_REPLY("Process Group Members"); -  // static  void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data)  { -    LL_RECORD_BLOCK_TIME(FTM_PROCESS_GROUP_MEMBERS_REPLY); +    LL_PROFILE_ZONE_SCOPED;  	LL_DEBUGS("GrpMgr") << "LLGroupMgr::processGroupMembersReply" << LL_ENDL;  	LLUUID agent_id; @@ -1054,12 +1052,10 @@ void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data)  	LLGroupMgr::getInstance()->notifyObservers(GC_MEMBER_DATA);  } -static LLTrace::BlockTimerStatHandle FTM_PROCESS_GROUP_PROPERTIES_REPLY("Process Group Properties"); -  //static   void LLGroupMgr::processGroupPropertiesReply(LLMessageSystem* msg, void** data)  { -    LL_RECORD_BLOCK_TIME(FTM_PROCESS_GROUP_PROPERTIES_REPLY); +    LL_PROFILE_ZONE_SCOPED;  	LL_DEBUGS("GrpMgr") << "LLGroupMgr::processGroupPropertiesReply" << LL_ENDL;  	if (!msg) @@ -1139,11 +1135,10 @@ void LLGroupMgr::processGroupPropertiesReply(LLMessageSystem* msg, void** data)  	LLGroupMgr::getInstance()->notifyObservers(GC_PROPERTIES);  } -static LLTrace::BlockTimerStatHandle FTM_PROCESS_GROUP_ROLE_DATA_REPLY("Process Group Role Data");  // static  void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data)  { -    LL_RECORD_BLOCK_TIME(FTM_PROCESS_GROUP_ROLE_DATA_REPLY); +    LL_PROFILE_ZONE_SCOPED;  	LL_DEBUGS("GrpMgr") << "LLGroupMgr::processGroupRoleDataReply" << LL_ENDL;  	LLUUID agent_id; @@ -1227,11 +1222,10 @@ void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data)  	LLGroupMgr::getInstance()->notifyObservers(GC_ROLE_DATA);  } -static LLTrace::BlockTimerStatHandle FTM_PROCESS_GROUP_ROLE_MEMBERS_REPLY("Process Group Role Members");  // static  void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)  { -    LL_RECORD_BLOCK_TIME(FTM_PROCESS_GROUP_ROLE_MEMBERS_REPLY); +    LL_PROFILE_ZONE_SCOPED;  	LL_DEBUGS("GrpMgr") << "LLGroupMgr::processGroupRoleMembersReply" << LL_ENDL;  	LLUUID agent_id; diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index 411311bbea..84018655d0 100644 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -47,8 +47,6 @@  #include "llclipboard.h"  #include "lltrans.h" -LLTrace::BlockTimerStatHandle FT_FILTER_CLIPBOARD("Filter Clipboard"); -  LLInventoryFilter::FilterOps::FilterOps(const Params& p)  :	mFilterObjectTypes(p.object_types),  	mFilterCategoryTypes(p.category_types), @@ -505,7 +503,7 @@ bool LLInventoryFilter::checkAgainstClipboard(const LLUUID& object_id) const  {  	if (LLClipboard::instance().isCutMode())  	{ -		LL_RECORD_BLOCK_TIME(FT_FILTER_CLIPBOARD); +        LL_PROFILE_ZONE_SCOPED;  		LLUUID current_id = object_id;  		LLInventoryObject *current_object = gInventory.getObject(object_id);  		while (current_id.notNull() && current_object) diff --git a/indra/newview/llinventoryitemslist.cpp b/indra/newview/llinventoryitemslist.cpp index 1dc1aa395e..23129f7d44 100644 --- a/indra/newview/llinventoryitemslist.cpp +++ b/indra/newview/llinventoryitemslist.cpp @@ -133,11 +133,9 @@ void LLInventoryItemsList::idle(void* user_data)  	}  } -LLTrace::BlockTimerStatHandle FTM_INVENTORY_ITEMS_REFRESH("Inventory List Refresh"); -  void LLInventoryItemsList::refresh()  { -    LL_RECORD_BLOCK_TIME(FTM_INVENTORY_ITEMS_REFRESH); +    LL_PROFILE_ZONE_SCOPED;      switch (mRefreshState)      { diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 3608f9e23f..9b7e0c7824 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -673,10 +673,9 @@ void LLInventoryPanel::itemChanged(const LLUUID& item_id, U32 mask, const LLInve  }  // Called when something changed in the global model (new item, item coming through the wire, rename, move, etc...) (CHUI-849) -static LLTrace::BlockTimerStatHandle FTM_REFRESH("Inventory Refresh");  void LLInventoryPanel::modelChanged(U32 mask)  { -	LL_RECORD_BLOCK_TIME(FTM_REFRESH); +    LL_PROFILE_ZONE_SCOPED;  	if (mViewsInitialized != VIEWS_INITIALIZED) return; @@ -1691,10 +1690,9 @@ void LLInventoryPanel::removeItemID(const LLUUID& id)  	}  } -LLTrace::BlockTimerStatHandle FTM_GET_ITEM_BY_ID("Get FolderViewItem by ID");  LLFolderViewItem* LLInventoryPanel::getItemByID(const LLUUID& id)  { -	LL_RECORD_BLOCK_TIME(FTM_GET_ITEM_BY_ID); +    LL_PROFILE_ZONE_SCOPED;  	std::map<LLUUID, LLFolderViewItem*>::iterator map_it;  	map_it = mItemMap.find(id); diff --git a/indra/newview/llmaterialmgr.cpp b/indra/newview/llmaterialmgr.cpp index 52b9fb40ae..11aa607393 100644 --- a/indra/newview/llmaterialmgr.cpp +++ b/indra/newview/llmaterialmgr.cpp @@ -580,11 +580,9 @@ void LLMaterialMgr::onPutResponse(bool success, const LLSD& content)  	}  } -static LLTrace::BlockTimerStatHandle FTM_MATERIALS_IDLE("Idle Materials"); -  void LLMaterialMgr::onIdle(void*)  { -	LL_RECORD_BLOCK_TIME(FTM_MATERIALS_IDLE); +    LL_PROFILE_ZONE_SCOPED;  	LLMaterialMgr* instancep = LLMaterialMgr::getInstance(); diff --git a/indra/newview/llpersistentnotificationstorage.cpp b/indra/newview/llpersistentnotificationstorage.cpp index f95ab9928d..20cf4df56b 100644 --- a/indra/newview/llpersistentnotificationstorage.cpp +++ b/indra/newview/llpersistentnotificationstorage.cpp @@ -47,11 +47,9 @@ LLPersistentNotificationStorage::~LLPersistentNotificationStorage()  {  } -static LLTrace::BlockTimerStatHandle FTM_SAVE_NOTIFICATIONS("Save Notifications"); -  void LLPersistentNotificationStorage::saveNotifications()  { -	LL_RECORD_BLOCK_TIME(FTM_SAVE_NOTIFICATIONS); +    LL_PROFILE_ZONE_SCOPED;  	boost::intrusive_ptr<LLPersistentNotificationChannel> history_channel = boost::dynamic_pointer_cast<LLPersistentNotificationChannel>(LLNotifications::instance().getChannel("Persistent"));  	if (!history_channel) @@ -90,11 +88,9 @@ void LLPersistentNotificationStorage::saveNotifications()  	writeNotifications(output);  } -static LLTrace::BlockTimerStatHandle FTM_LOAD_NOTIFICATIONS("Load Notifications"); -  void LLPersistentNotificationStorage::loadNotifications()  { -	LL_RECORD_BLOCK_TIME(FTM_LOAD_NOTIFICATIONS); +    LL_PROFILE_ZONE_SCOPED;  	LL_INFOS("LLPersistentNotificationStorage") << "start loading notifications" << LL_ENDL; diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp index f48ce680fd..30ca7ae539 100644 --- a/indra/newview/llphysicsmotion.cpp +++ b/indra/newview/llphysicsmotion.cpp @@ -453,6 +453,7 @@ F32 LLPhysicsMotion::calculateAcceleration_local(const F32 velocity_local, const  BOOL LLPhysicsMotionController::onUpdate(F32 time, U8* joint_mask)  { +    LL_PROFILE_ZONE_SCOPED;          // Skip if disabled globally.          if (!gSavedSettings.getBOOL("AvatarPhysics"))          { diff --git a/indra/newview/llscenemonitor.cpp b/indra/newview/llscenemonitor.cpp index f9baf5fbd3..177bc84cee 100644 --- a/indra/newview/llscenemonitor.cpp +++ b/indra/newview/llscenemonitor.cpp @@ -332,9 +332,6 @@ bool LLSceneMonitor::needsUpdate() const  	return mDiffState == NEED_DIFF;  } -static LLTrace::BlockTimerStatHandle FTM_GENERATE_SCENE_LOAD_DITHER_TEXTURE("Generate Scene Load Dither Texture"); -static LLTrace::BlockTimerStatHandle FTM_SCENE_LOAD_IMAGE_DIFF("Scene Load Image Diff"); -  static LLStaticHashedString sDitherScale("dither_scale");  static LLStaticHashedString sDitherScaleS("dither_scale_s");  static LLStaticHashedString sDitherScaleT("dither_scale_t"); @@ -356,14 +353,12 @@ void LLSceneMonitor::compare()  		return;   	} -	LL_RECORD_BLOCK_TIME(FTM_SCENE_LOAD_IMAGE_DIFF);  	mDiffState = EXECUTE_DIFF;  	S32 width = gViewerWindow->getWindowWidthRaw();  	S32 height = gViewerWindow->getWindowHeightRaw();  	if(!mDiff)  	{ -		LL_RECORD_BLOCK_TIME(FTM_GENERATE_SCENE_LOAD_DITHER_TEXTURE);  		mDiff = new LLRenderTarget();  		mDiff->allocate(width, height, GL_RGBA, false, false, LLTexUnit::TT_TEXTURE, true); @@ -371,7 +366,6 @@ void LLSceneMonitor::compare()  	}  	else if(mDiff->getWidth() != width || mDiff->getHeight() != height)  	{ -		LL_RECORD_BLOCK_TIME(FTM_GENERATE_SCENE_LOAD_DITHER_TEXTURE);  		mDiff->resize(width, height);  		generateDitheringTexture(width, height);  	} @@ -427,8 +421,6 @@ void LLSceneMonitor::calcDiffAggregate()  {  #ifdef LL_WINDOWS -	LL_RECORD_BLOCK_TIME(FTM_SCENE_LOAD_IMAGE_DIFF); -  	if(mDiffState != EXECUTE_DIFF && !mDebugViewerVisible)  	{  		return; @@ -481,8 +473,6 @@ void LLSceneMonitor::calcDiffAggregate()  static LLTrace::EventStatHandle<> sFramePixelDiff("FramePixelDifference");  void LLSceneMonitor::fetchQueryResult()  { -	LL_RECORD_BLOCK_TIME(FTM_SCENE_LOAD_IMAGE_DIFF); -  	// also throttle timing here, to avoid going below sample time due to phasing with frame capture  	static LLCachedControl<F32>  scene_load_sample_time_control(gSavedSettings, "SceneLoadingMonitorSampleTime");  	F32Seconds scene_load_sample_time = (F32Seconds)scene_load_sample_time_control(); diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index ca48c9d58c..17f2970f99 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -49,10 +49,9 @@ using namespace LLNotificationsUI;  bool LLScreenChannel::mWasStartUpToastShown = false; -LLTrace::BlockTimerStatHandle FTM_GET_CHANNEL_RECT("Calculate Notification Channel Region");  LLRect LLScreenChannelBase::getChannelRect()  { -	LL_RECORD_BLOCK_TIME(FTM_GET_CHANNEL_RECT); +    LL_PROFILE_ZONE_SCOPED;  	if (mFloaterSnapRegion == NULL)  	{ diff --git a/indra/newview/llscripteditor.cpp b/indra/newview/llscripteditor.cpp index cd3a4dfd11..c6bb2f19dd 100644 --- a/indra/newview/llscripteditor.cpp +++ b/indra/newview/llscripteditor.cpp @@ -138,11 +138,9 @@ void LLScriptEditor::initKeywords()  	mKeywords.initialize(LLSyntaxIdLSL::getInstance()->getKeywordsXML());  } -LLTrace::BlockTimerStatHandle FTM_SYNTAX_HIGHLIGHTING("Syntax Highlighting"); -  void LLScriptEditor::loadKeywords()  { -	LL_RECORD_BLOCK_TIME(FTM_SYNTAX_HIGHLIGHTING); +    LL_PROFILE_ZONE_SCOPED;  	mKeywords.processTokens();  	segment_vec_t segment_list; @@ -160,7 +158,7 @@ void LLScriptEditor::updateSegments()  {  	if (mReflowIndex < S32_MAX && mKeywords.isLoaded() && mParseOnTheFly)  	{ -		LL_RECORD_BLOCK_TIME(FTM_SYNTAX_HIGHLIGHTING); +        LL_PROFILE_ZONE_SCOPED;  		// HACK:  No non-ascii keywords for now  		segment_vec_t segment_list;  		mKeywords.findSegments(&segment_list, getWText(), mDefaultColor.get(), *this); diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 50884762a8..53247031b4 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -97,6 +97,8 @@  #include "llglheaders.h"  #include "llinventoryobserver.h" +LLSelectMgr* LLSimpleton<LLSelectMgr>::sInstance = nullptr; +  LLViewerObject* getSelectedParentObject(LLViewerObject *object) ;  //  // Consts @@ -209,8 +211,6 @@ void LLSelectMgr::cleanupGlobals()  	LLSelectMgr::getInstance()->clearSelections();  } -// Build time optimization, generate this function once here -template class LLSelectMgr* LLSingleton<class LLSelectMgr>::getInstance();  //-----------------------------------------------------------------------------  // LLSelectMgr()  //----------------------------------------------------------------------------- diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index 57fdfce152..0fd2e74090 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -407,11 +407,8 @@ private:      LLObjectSelectionHandle					mSelectedObjects;  }; -class LLSelectMgr : public LLEditMenuHandler, public LLSingleton<LLSelectMgr> +class LLSelectMgr : public LLEditMenuHandler, public LLSimpleton<LLSelectMgr>  { -	LLSINGLETON(LLSelectMgr); -	~LLSelectMgr(); -  public:  	static BOOL					sRectSelectInclusive;	// do we need to surround an object to pick it?  	static BOOL					sRenderHiddenSelections;	// do we show selection silhouettes that are occluded? @@ -437,6 +434,9 @@ public:  	LLCachedControl<bool>					mDebugSelectMgr;  public: +    LLSelectMgr(); +    ~LLSelectMgr(); +  	static void cleanupGlobals();  	// LLEditMenuHandler interface diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp index 6a88a8ef2c..0c59de5ea0 100644 --- a/indra/newview/llsettingsvo.cpp +++ b/indra/newview/llsettingsvo.cpp @@ -666,6 +666,7 @@ void LLSettingsVOSky::updateSettings()  void LLSettingsVOSky::applySpecial(void *ptarget, bool force)  { +    LL_PROFILE_ZONE_SCOPED      LLVector4 light_direction = LLEnvironment::instance().getClampedLightNorm();      LLShaderUniforms* shader = &((LLShaderUniforms*)ptarget)[LLGLSLShader::SG_DEFAULT]; @@ -908,6 +909,8 @@ LLSD LLSettingsVOWater::convertToLegacy(const LLSettingsWater::ptr_t &pwater)  //-------------------------------------------------------------------------  void LLSettingsVOWater::applySpecial(void *ptarget, bool force)  { +    LL_PROFILE_ZONE_SCOPED +      LLEnvironment& env = LLEnvironment::instance();      auto group = LLGLSLShader::SG_WATER; diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 5cac9cd7ae..30b7124550 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -55,9 +55,6 @@  #include "llviewershadermgr.h"  #include "llcontrolavatar.h" -static LLTrace::BlockTimerStatHandle FTM_FRUSTUM_CULL("Frustum Culling"); -static LLTrace::BlockTimerStatHandle FTM_CULL_REBOUND("Cull Rebound Partition"); -  extern bool gShiftFrame;  static U32 sZombieGroups = 0; @@ -409,11 +406,6 @@ void LLSpatialGroup::rebuildMesh()  	}  } -static LLTrace::BlockTimerStatHandle FTM_REBUILD_VBO("VBO Rebuilt"); -static LLTrace::BlockTimerStatHandle FTM_ADD_GEOMETRY_COUNT("Add Geometry"); -static LLTrace::BlockTimerStatHandle FTM_CREATE_VB("Create VB"); -static LLTrace::BlockTimerStatHandle FTM_GET_GEOMETRY("Get Geometry"); -  void LLSpatialPartition::rebuildGeom(LLSpatialGroup* group)  {  	if (group->isDead() || !group->hasState(LLSpatialGroup::GEOM_DIRTY)) @@ -427,7 +419,7 @@ void LLSpatialPartition::rebuildGeom(LLSpatialGroup* group)  		group->mLastUpdateViewAngle = group->mViewAngle;  	} -	LL_RECORD_BLOCK_TIME(FTM_REBUILD_VBO);	 +    LL_PROFILE_ZONE_SCOPED;  	group->clearDrawMap(); @@ -435,15 +427,12 @@ void LLSpatialPartition::rebuildGeom(LLSpatialGroup* group)  	U32 index_count = 0;  	U32 vertex_count = 0; -	{ -		LL_RECORD_BLOCK_TIME(FTM_ADD_GEOMETRY_COUNT); -		addGeometryCount(group, vertex_count, index_count); -	} - +    addGeometryCount(group, vertex_count, index_count); +	  	if (vertex_count > 0 && index_count > 0)  	{ //create vertex buffer containing volume geometry for this node  		{ -			LL_RECORD_BLOCK_TIME(FTM_CREATE_VB); +  			group->mBuilt = 1.f;  			if (group->mVertexBuffer.isNull() ||  				!group->mVertexBuffer->isWriteable() || @@ -458,7 +447,6 @@ void LLSpatialPartition::rebuildGeom(LLSpatialGroup* group)  					group->mVertexBuffer = NULL;  					group->mBufferMap.clear();  				} -				stop_glerror();  			}  			else  			{ @@ -471,13 +459,11 @@ void LLSpatialPartition::rebuildGeom(LLSpatialGroup* group)  					group->mVertexBuffer = NULL;  					group->mBufferMap.clear();  				} -				stop_glerror();  			}  		}  		if (group->mVertexBuffer)  		{ -			LL_RECORD_BLOCK_TIME(FTM_GET_GEOMETRY);  			getGeometry(group);  		}  	} @@ -1489,12 +1475,12 @@ void LLSpatialPartition::resetVertexBuffers()  BOOL LLSpatialPartition::getVisibleExtents(LLCamera& camera, LLVector3& visMin, LLVector3& visMax)  { +    LL_PROFILE_ZONE_SCOPED;  	LLVector4a visMina, visMaxa;  	visMina.load3(visMin.mV);  	visMaxa.load3(visMax.mV);  	{ -		LL_RECORD_BLOCK_TIME(FTM_CULL_REBOUND);		  		LLSpatialGroup* group = (LLSpatialGroup*) mOctree->getListener(0);  		group->rebound();  	} @@ -1516,11 +1502,11 @@ BOOL LLSpatialPartition::visibleObjectsInFrustum(LLCamera& camera)  S32 LLSpatialPartition::cull(LLCamera &camera, std::vector<LLDrawable *>* results, BOOL for_select)  { +    LL_PROFILE_ZONE_SCOPED;  #if LL_OCTREE_PARANOIA_CHECK  	((LLSpatialGroup*)mOctree->getListener(0))->checkStates();  #endif  	{ -		LL_RECORD_BLOCK_TIME(FTM_CULL_REBOUND);		  		LLSpatialGroup* group = (LLSpatialGroup*) mOctree->getListener(0);  		group->rebound();  	} @@ -1537,37 +1523,32 @@ S32 LLSpatialPartition::cull(LLCamera &camera, std::vector<LLDrawable *>* result  S32 LLSpatialPartition::cull(LLCamera &camera, bool do_occlusion)  { +    LL_PROFILE_ZONE_SCOPED;  #if LL_OCTREE_PARANOIA_CHECK  	((LLSpatialGroup*)mOctree->getListener(0))->checkStates();  #endif -	{ -		LL_RECORD_BLOCK_TIME(FTM_CULL_REBOUND);		 -		LLSpatialGroup* group = (LLSpatialGroup*) mOctree->getListener(0); -		group->rebound(); -	} +	LLSpatialGroup* group = (LLSpatialGroup*) mOctree->getListener(0); +	group->rebound();  #if LL_OCTREE_PARANOIA_CHECK  	((LLSpatialGroup*)mOctree->getListener(0))->validate();  #endif -	if (LLPipeline::sShadowRender) -	{ -		LL_RECORD_BLOCK_TIME(FTM_FRUSTUM_CULL); -		LLOctreeCullShadow culler(&camera); -		culler.traverse(mOctree); -	} -	else if (mInfiniteFarClip || !LLPipeline::sUseFarClip) -	{ -		LL_RECORD_BLOCK_TIME(FTM_FRUSTUM_CULL);		 -		LLOctreeCullNoFarClip culler(&camera); -		culler.traverse(mOctree); -	} -	else -	{ -		LL_RECORD_BLOCK_TIME(FTM_FRUSTUM_CULL);		 -		LLOctreeCull culler(&camera); -		culler.traverse(mOctree); -	} +    if (LLPipeline::sShadowRender) +    { +        LLOctreeCullShadow culler(&camera); +        culler.traverse(mOctree); +    } +    else if (mInfiniteFarClip || !LLPipeline::sUseFarClip) +    { +        LLOctreeCullNoFarClip culler(&camera); +        culler.traverse(mOctree); +    } +    else +    { +        LLOctreeCull culler(&camera); +        culler.traverse(mOctree); +    }  	return 0;  } @@ -4048,8 +4029,7 @@ LLDrawInfo::LLDrawInfo(U16 start, U16 end, U32 count, U32 offset,  					   LLViewerTexture* texture, LLVertexBuffer* buffer,  					   bool selected,  					   BOOL fullbright, U8 bump, BOOL particle, F32 part_size) -:	LLTrace::MemTrackableNonVirtual<LLDrawInfo, 16>("LLDrawInfo"), -	mVertexBuffer(buffer), +:	mVertexBuffer(buffer),  	mTexture(texture),  	mTextureMatrix(NULL),  	mModelMatrix(NULL), diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index 6ef82fac9c..8cc50e71b1 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -56,14 +56,14 @@ class LLViewerRegion;  void pushVerts(LLFace* face, U32 mask); -class LLDrawInfo : public LLRefCount, public LLTrace::MemTrackableNonVirtual<LLDrawInfo, 16> +class LLDrawInfo : public LLRefCount  { +    LL_ALIGN_NEW;  protected:  	~LLDrawInfo();	  public:  	LLDrawInfo(const LLDrawInfo& rhs) -	:	LLTrace::MemTrackableNonVirtual<LLDrawInfo, 16>("LLDrawInfo")  	{  		*this = rhs;  	} diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp index 27a87ee1a0..5ebce115f6 100644 --- a/indra/newview/llviewercamera.cpp +++ b/indra/newview/llviewercamera.cpp @@ -54,6 +54,8 @@  // System includes  #include <iomanip> // for setprecision +LLViewerCamera* LLSimpleton<LLViewerCamera>::sInstance = nullptr; +  LLTrace::CountStatHandle<> LLViewerCamera::sVelocityStat("camera_velocity");  LLTrace::CountStatHandle<> LLViewerCamera::sAngularVelocityStat("camera_angular_velocity"); @@ -81,9 +83,6 @@ glh::matrix4f gl_pick_matrix(GLfloat x, GLfloat y, GLfloat width, GLfloat height  	return glh::matrix4f(m);  } -// Build time optimization, generate this once in .cpp file -template class LLViewerCamera* LLSingleton<class LLViewerCamera>::getInstance(); -  LLViewerCamera::LLViewerCamera() : LLCamera()  {  	calcProjection(getFar()); diff --git a/indra/newview/llviewercamera.h b/indra/newview/llviewercamera.h index fb07a3fb2d..549778a841 100644 --- a/indra/newview/llviewercamera.h +++ b/indra/newview/llviewercamera.h @@ -38,25 +38,11 @@ class LLViewerObject;  const BOOL FOR_SELECTION = TRUE;  const BOOL NOT_FOR_SELECTION = FALSE; -// Build time optimization, generate this once in .cpp file -#ifndef LLVIEWERCAMERA_CPP -extern template class LLViewerCamera* LLSingleton<class LLViewerCamera>::getInstance(); -#endif - -LL_ALIGN_PREFIX(16) -class LLViewerCamera : public LLCamera, public LLSingleton<LLViewerCamera> +class alignas(16) LLViewerCamera : public LLCamera, public LLSimpleton<LLViewerCamera>  { -	LLSINGLETON(LLViewerCamera); +    LL_ALIGN_NEW  public: -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} +    LLViewerCamera();  	typedef enum  	{ @@ -141,7 +127,7 @@ protected:  	S16					mZoomSubregion;  public: -} LL_ALIGN_POSTFIX(16); +};  #endif // LL_LLVIEWERCAMERA_H diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 1236695e4f..6368286f6e 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -809,13 +809,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)  			{  				LL_RECORD_BLOCK_TIME(FTM_IMAGE_UPDATE_CLASS); -				LLTrace::CountStatHandle<>* velocity_stat = LLViewerCamera::getVelocityStat(); -				LLTrace::CountStatHandle<>* angular_velocity_stat = LLViewerCamera::getAngularVelocityStat(); -				LLViewerTexture::updateClass(LLTrace::get_frame_recording().getPeriodMeanPerSec(*velocity_stat), -											LLTrace::get_frame_recording().getPeriodMeanPerSec(*angular_velocity_stat)); +				LLViewerTexture::updateClass();  			} -			  			{  				LL_RECORD_BLOCK_TIME(FTM_IMAGE_UPDATE_BUMP);  				gBumpImageList.updateImages();  // must be called before gTextureList version so that it's textures are thrown out first. @@ -1285,7 +1281,6 @@ void render_ui(F32 zoom_factor, int subfield)  	if(LLSceneMonitor::getInstance()->needsUpdate())  	{ -		LL_RECORD_BLOCK_TIME(FTM_RENDER_UI_SCENE_MON);  		gGL.pushMatrix();  		gViewerWindow->setup2DRender();  		LLSceneMonitor::getInstance()->compare(); @@ -1334,12 +1329,9 @@ void render_ui(F32 zoom_factor, int subfield)  			}  			gGL.flush(); -			{ -				LL_RECORD_BLOCK_TIME(FTM_RENDER_UI_DEBUG_TEXT); -				gViewerWindow->setup2DRender(); -				gViewerWindow->updateDebugText(); -				gViewerWindow->drawDebugText(); -			} +			gViewerWindow->setup2DRender(); +			gViewerWindow->updateDebugText(); +			gViewerWindow->drawDebugText();  			LLVertexBuffer::unbind();  		} diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp index 63ad708e59..3e385a46e4 100644 --- a/indra/newview/llviewerjointmesh.cpp +++ b/indra/newview/llviewerjointmesh.cpp @@ -362,7 +362,6 @@ void LLViewerJointMesh::updateFaceSizes(U32 &num_vertices, U32& num_indices, F32  //-----------------------------------------------------------------------------  // updateFaceData()  //----------------------------------------------------------------------------- -static LLTrace::BlockTimerStatHandle FTM_AVATAR_FACE("Avatar Face");  void LLViewerJointMesh::updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_wind, bool terse_update)  { @@ -383,9 +382,8 @@ void LLViewerJointMesh::updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_w  	 // since mMesh is being copied into mVertexBuffer every frame  		return;  	} - - -	LL_RECORD_BLOCK_TIME(FTM_AVATAR_FACE); +     +    LL_PROFILE_ZONE_SCOPED;  	LLStrider<LLVector3> verticesp;  	LLStrider<LLVector3> normalsp; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index ad81cb07c1..534c03d581 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -8314,6 +8314,7 @@ class LLViewHighlightTransparent : public view_listener_t  	bool handleEvent(const LLSD& userdata)  	{  		LLDrawPoolAlpha::sShowDebugAlpha = !LLDrawPoolAlpha::sShowDebugAlpha; +        gPipeline.resetVertexBuffers();  		return true;  	}  }; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 5e99d13206..52a65abf9b 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -2219,11 +2219,9 @@ protected:  	}  }; -static LLTrace::BlockTimerStatHandle FTM_PROCESS_IMPROVED_IM("Process IM"); -  void process_improved_im(LLMessageSystem *msg, void **user_data)  { -    LL_RECORD_BLOCK_TIME(FTM_PROCESS_IMPROVED_IM); +    LL_PROFILE_ZONE_SCOPED;      LLUUID from_id;      BOOL from_group; @@ -3267,10 +3265,9 @@ const F32 THRESHOLD_HEAD_ROT_QDOT = 0.9997f;	// ~= 2.5 degrees -- if its less th  const F32 MAX_HEAD_ROT_QDOT = 0.99999f;			// ~= 0.5 degrees -- if its greater than this then no need to update head_rot  												// between these values we delay the updates (but no more than one second) -static LLTrace::BlockTimerStatHandle FTM_AGENT_UPDATE_SEND("Send Message"); -  void send_agent_update(BOOL force_send, BOOL send_reliable)  { +    LL_PROFILE_ZONE_SCOPED;  	if (gAgent.getTeleportState() != LLAgent::TELEPORT_NONE)  	{  		// We don't care if they want to send an agent update, they're not allowed to until the simulator @@ -3451,7 +3448,6 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)  		}  		*/ -		LL_RECORD_BLOCK_TIME(FTM_AGENT_UPDATE_SEND);  		// Build the message  		msg->newMessageFast(_PREHASH_AgentUpdate);  		msg->nextBlockFast(_PREHASH_AgentData); @@ -3701,11 +3697,9 @@ void process_terse_object_update_improved(LLMessageSystem *mesgsys, void **user_  	}  } -static LLTrace::BlockTimerStatHandle FTM_PROCESS_OBJECTS("Process Kill Objects"); -  void process_kill_object(LLMessageSystem *mesgsys, void **user_data)  { -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_OBJECTS); +    LL_PROFILE_ZONE_SCOPED;  	LLUUID		id; diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 0832415e1e..c671aec224 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -146,16 +146,14 @@ const S32 MAX_OBJECT_BINARY_DATA_SIZE = 60 + 16;  const F64 INVENTORY_UPDATE_WAIT_TIME_DESYNC = 5; // seconds  const F64 INVENTORY_UPDATE_WAIT_TIME_OUTDATED = 1; -static LLTrace::BlockTimerStatHandle FTM_CREATE_OBJECT("Create Object"); -  // static  LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp, S32 flags)  { +    LL_PROFILE_ZONE_SCOPED;      LL_DEBUGS("ObjectUpdate") << "creating " << id << LL_ENDL;      dumpStack("ObjectUpdateStack");  	LLViewerObject *res = NULL; -	LL_RECORD_BLOCK_TIME(FTM_CREATE_OBJECT);  	if (gNonInteractive  		&& pcode != LL_PCODE_LEGACY_AVATAR @@ -252,8 +250,7 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco  }  LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp, BOOL is_global) -:	LLTrace::MemTrackable<LLViewerObject>("LLViewerObject"), -	LLPrimitive(), +:	LLPrimitive(),  	mChildList(),  	mID(id),  	mLocalID(0), @@ -2517,9 +2514,6 @@ void LLViewerObject::loadFlags(U32 flags)  void LLViewerObject::idleUpdate(LLAgent &agent, const F64 &frame_time)  { -	//static LLTrace::BlockTimerStatHandle ftm("Viewer Object"); -	//LL_RECORD_BLOCK_TIME(ftm); -  	if (!mDead)  	{  		if (!mStatic && sVelocityInterpolate && !isSelected()) diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 250c4ac328..bef8e3e7e3 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -110,8 +110,7 @@ struct PotentialReturnableObject  class LLViewerObject   :	public LLPrimitive,   	public LLRefCount,  -	public LLGLUpdate, -	public LLTrace::MemTrackable<LLViewerObject> +	public LLGLUpdate  {  protected:  	virtual ~LLViewerObject(); // use unref() diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 097b5e3645..971a355a65 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -849,8 +849,6 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent)  	LLVOAvatar::cullAvatarsByPixelArea();  } -static LLTrace::BlockTimerStatHandle FTM_IDLE_COPY("Idle Copy"); -  void LLViewerObjectList::update(LLAgent &agent)  {  	LL_PROFILE_ZONE_SCOPED @@ -906,8 +904,6 @@ void LLViewerObjectList::update(LLAgent &agent)  	U32 idle_count = 0;  	{ -		LL_RECORD_BLOCK_TIME(FTM_IDLE_COPY); -   		for (std::vector<LLPointer<LLViewerObject> >::iterator active_iter = mActiveObjects.begin();  			active_iter != mActiveObjects.end(); active_iter++)  		{ @@ -1352,11 +1348,9 @@ void LLViewerObjectList::cleanupReferences(LLViewerObject *objectp)  	}  } -static LLTrace::BlockTimerStatHandle FTM_REMOVE_DRAWABLE("Remove Drawable"); -  void LLViewerObjectList::removeDrawable(LLDrawable* drawablep)  { -	LL_RECORD_BLOCK_TIME(FTM_REMOVE_DRAWABLE); +    LL_PROFILE_ZONE_SCOPED;  	if (!drawablep)  	{ @@ -1645,12 +1639,9 @@ void LLViewerObjectList::onPhysicsFlagsFetchFailure(const LLUUID& object_id)  	mPendingPhysicsFlags.erase(object_id);  } -static LLTrace::BlockTimerStatHandle FTM_SHIFT_OBJECTS("Shift Objects"); -static LLTrace::BlockTimerStatHandle FTM_PIPELINE_SHIFT("Pipeline Shift"); -static LLTrace::BlockTimerStatHandle FTM_REGION_SHIFT("Region Shift"); -  void LLViewerObjectList::shiftObjects(const LLVector3 &offset)  { +    LL_PROFILE_ZONE_SCOPED;  	// This is called when we shift our origin when we cross region boundaries...  	// We need to update many object caches, I'll document this more as I dig through the code  	// cleaning things out... @@ -1660,7 +1651,6 @@ void LLViewerObjectList::shiftObjects(const LLVector3 &offset)  		return;  	} -	LL_RECORD_BLOCK_TIME(FTM_SHIFT_OBJECTS);  	LLViewerObject *objectp;  	for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter) @@ -1678,16 +1668,10 @@ void LLViewerObjectList::shiftObjects(const LLVector3 &offset)  		}  	} -	{ -		LL_RECORD_BLOCK_TIME(FTM_PIPELINE_SHIFT);  	gPipeline.shiftObjects(offset); -	} - -	{ -		LL_RECORD_BLOCK_TIME(FTM_REGION_SHIFT); +	  	LLWorld::getInstance()->shiftRegions(offset);  } -}  void LLViewerObjectList::repartitionObjects()  { diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp index 6365df09e1..868cf75d11 100644 --- a/indra/newview/llvieweroctree.cpp +++ b/indra/newview/llvieweroctree.cpp @@ -231,8 +231,7 @@ S32 AABBSphereIntersectR2(const LLVector4a& min, const LLVector4a& max, const LL  //class LLViewerOctreeEntry definitions  //-----------------------------------------------------------------------------------  LLViewerOctreeEntry::LLViewerOctreeEntry()  -:	LLTrace::MemTrackable<LLViewerOctreeEntry, 16>("LLViewerOctreeEntry"), -	mGroup(NULL), +:	mGroup(NULL),  	mBinRadius(0.f),  	mBinIndex(-1),  	mVisible(0) @@ -458,8 +457,7 @@ LLViewerOctreeGroup::~LLViewerOctreeGroup()  }  LLViewerOctreeGroup::LLViewerOctreeGroup(OctreeNode* node) -:	LLTrace::MemTrackable<LLViewerOctreeGroup, 16>("LLViewerOctreeGroup"), -	mOctreeNode(node), +:	mOctreeNode(node),  	mAnyVisible(0),  	mState(CLEAN)  { @@ -545,6 +543,7 @@ void LLViewerOctreeGroup::unbound()  //virtual   void LLViewerOctreeGroup::rebound()  { +    LL_PROFILE_ZONE_SCOPED;  	if (!isDirty())  	{	  		return; @@ -1039,11 +1038,9 @@ void LLOcclusionCullingGroup::clearOcclusionState(U32 state, S32 mode)  	}  } -static LLTrace::BlockTimerStatHandle FTM_OCCLUSION_READBACK("Readback Occlusion"); -static LLTrace::BlockTimerStatHandle FTM_OCCLUSION_WAIT("Occlusion Wait"); -  BOOL LLOcclusionCullingGroup::earlyFail(LLCamera* camera, const LLVector4a* bounds)  { +    LL_PROFILE_ZONE_SCOPED;  	if (camera->getOrigin().isExactlyZero())  	{  		return FALSE; @@ -1094,7 +1091,7 @@ void LLOcclusionCullingGroup::checkOcclusion()  {  	if (LLPipeline::sUseOcclusion > 1)  	{ -		LL_RECORD_BLOCK_TIME(FTM_OCCLUSION_READBACK); +        LL_PROFILE_ZONE_SCOPED;  		LLOcclusionCullingGroup* parent = (LLOcclusionCullingGroup*)getParent();  		if (parent && parent->isOcclusionState(LLOcclusionCullingGroup::OCCLUDED))  		{	//if the parent has been marked as occluded, the child is implicitly occluded @@ -1106,19 +1103,8 @@ void LLOcclusionCullingGroup::checkOcclusion()  			GLuint available = 0;  			if (mOcclusionQuery[LLViewerCamera::sCurCameraID])  			{ +                LL_PROFILE_ZONE_NAMED("co - query available")  				glGetQueryObjectuivARB(mOcclusionQuery[LLViewerCamera::sCurCameraID], GL_QUERY_RESULT_AVAILABLE_ARB, &available); - -				static LLCachedControl<bool> wait_for_query(gSavedSettings, "RenderSynchronousOcclusion", true); - -				if (wait_for_query && mOcclusionIssued[LLViewerCamera::sCurCameraID] < gFrameCount) -				{ //query was issued last frame, wait until it's available -					S32 max_loop = 1024; -					LL_RECORD_BLOCK_TIME(FTM_OCCLUSION_WAIT); -					while (!available && max_loop-- > 0) -					{ -						glGetQueryObjectuivARB(mOcclusionQuery[LLViewerCamera::sCurCameraID], GL_QUERY_RESULT_AVAILABLE_ARB, &available); -					} -				}  			}  			else  			{ @@ -1130,6 +1116,7 @@ void LLOcclusionCullingGroup::checkOcclusion()  				GLuint res = 1;  				if (!isOcclusionState(DISCARD_QUERY) && mOcclusionQuery[LLViewerCamera::sCurCameraID])  				{ +                    LL_PROFILE_ZONE_NAMED("co - query result")  					glGetQueryObjectuivARB(mOcclusionQuery[LLViewerCamera::sCurCameraID], GL_QUERY_RESULT_ARB, &res);	  #if LL_TRACK_PENDING_OCCLUSION_QUERIES  					sPendingQueries.erase(mOcclusionQuery[LLViewerCamera::sCurCameraID]); @@ -1173,19 +1160,9 @@ void LLOcclusionCullingGroup::checkOcclusion()  	}  } -static LLTrace::BlockTimerStatHandle FTM_PUSH_OCCLUSION_VERTS("Push Occlusion"); -static LLTrace::BlockTimerStatHandle FTM_SET_OCCLUSION_STATE("Occlusion State"); -static LLTrace::BlockTimerStatHandle FTM_OCCLUSION_EARLY_FAIL("Occlusion Early Fail"); -static LLTrace::BlockTimerStatHandle FTM_OCCLUSION_ALLOCATE("Allocate"); -static LLTrace::BlockTimerStatHandle FTM_OCCLUSION_BUILD("Build"); -static LLTrace::BlockTimerStatHandle FTM_OCCLUSION_BEGIN_QUERY("Begin Query"); -static LLTrace::BlockTimerStatHandle FTM_OCCLUSION_END_QUERY("End Query"); -static LLTrace::BlockTimerStatHandle FTM_OCCLUSION_SET_BUFFER("Set Buffer"); -static LLTrace::BlockTimerStatHandle FTM_OCCLUSION_DRAW_WATER("Draw Water"); -static LLTrace::BlockTimerStatHandle FTM_OCCLUSION_DRAW("Draw"); -  void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector4a* shift)  { +    LL_PROFILE_ZONE_SCOPED;  	if (mSpatialPartition->isOcclusionEnabled() && LLPipeline::sUseOcclusion > 1)  	{  		//move mBounds to the agent space if necessary @@ -1206,7 +1183,7 @@ void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector4a* sh  		// Don't cull hole/edge water, unless we have the GL_ARB_depth_clamp extension  		if (earlyFail(camera, bounds))  		{ -			LL_RECORD_BLOCK_TIME(FTM_OCCLUSION_EARLY_FAIL); +            LL_PROFILE_ZONE_NAMED("doOcclusion - early fail");  			setOcclusionState(LLOcclusionCullingGroup::DISCARD_QUERY);  			assert_states_valid(this);  			clearOcclusionState(LLOcclusionCullingGroup::OCCLUDED, LLOcclusionCullingGroup::STATE_MODE_DIFF); @@ -1217,11 +1194,10 @@ void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector4a* sh  			if (!isOcclusionState(QUERY_PENDING) || isOcclusionState(DISCARD_QUERY))  			{  				{ //no query pending, or previous query to be discarded -					LL_RECORD_BLOCK_TIME(FTM_RENDER_OCCLUSION); +                    LL_PROFILE_ZONE_NAMED("doOcclusion - render");  					if (!mOcclusionQuery[LLViewerCamera::sCurCameraID])  					{ -						LL_RECORD_BLOCK_TIME(FTM_OCCLUSION_ALLOCATE);  						mOcclusionQuery[LLViewerCamera::sCurCameraID] = getNewOcclusionQueryObjectName();  					} @@ -1246,15 +1222,12 @@ void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector4a* sh  					add(sOcclusionQueries, 1);  					{ -						LL_RECORD_BLOCK_TIME(FTM_PUSH_OCCLUSION_VERTS); +                        LL_PROFILE_ZONE_NAMED("doOcclusion - push");  						//store which frame this query was issued on  						mOcclusionIssued[LLViewerCamera::sCurCameraID] = gFrameCount; -						{ -							LL_RECORD_BLOCK_TIME(FTM_OCCLUSION_BEGIN_QUERY); -							glBeginQueryARB(mode, mOcclusionQuery[LLViewerCamera::sCurCameraID]);					 -						} +    					glBeginQueryARB(mode, mOcclusionQuery[LLViewerCamera::sCurCameraID]);					  						LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr;  						llassert(shader); @@ -1266,7 +1239,7 @@ void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector4a* sh  						if (!use_depth_clamp && mSpatialPartition->mDrawableType == LLDrawPool::POOL_VOIDWATER)  						{ -							LL_RECORD_BLOCK_TIME(FTM_OCCLUSION_DRAW_WATER); +                            LL_PROFILE_ZONE_NAMED("doOcclusion - draw water");  							LLGLSquashToFarClip squash;  							if (camera->getOrigin().isExactlyZero()) @@ -1281,7 +1254,7 @@ void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector4a* sh  						}  						else  						{ -							LL_RECORD_BLOCK_TIME(FTM_OCCLUSION_DRAW); +                            LL_PROFILE_ZONE_NAMED("doOcclusion - draw");  							if (camera->getOrigin().isExactlyZero())  							{ //origin is invalid, draw entire box  								gPipeline.mCubeVB->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, 0); @@ -1292,17 +1265,13 @@ void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector4a* sh  								gPipeline.mCubeVB->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, get_box_fan_indices(camera, bounds[0]));  							}  						} - - -						{ -							LL_RECORD_BLOCK_TIME(FTM_OCCLUSION_END_QUERY); -							glEndQueryARB(mode); -						} +	 +						glEndQueryARB(mode);  					}  				}  				{ -					LL_RECORD_BLOCK_TIME(FTM_SET_OCCLUSION_STATE); +                    LL_PROFILE_ZONE_NAMED("doOcclusion - set state");  					setOcclusionState(LLOcclusionCullingGroup::QUERY_PENDING);  					clearOcclusionState(LLOcclusionCullingGroup::DISCARD_QUERY);  				} diff --git a/indra/newview/llvieweroctree.h b/indra/newview/llvieweroctree.h index 219ec7e8da..11ba7e4f1e 100644 --- a/indra/newview/llvieweroctree.h +++ b/indra/newview/llvieweroctree.h @@ -71,8 +71,9 @@ S32 AABBSphereIntersectR2(const LLVector3& min, const LLVector3& max, const LLVe  //defines data needed for octree of an entry  //LL_ALIGN_PREFIX(16) -class LLViewerOctreeEntry : public LLRefCount, public LLTrace::MemTrackable<LLViewerOctreeEntry, 16> +class LLViewerOctreeEntry : public LLRefCount  { +    LL_ALIGN_NEW  	friend class LLViewerOctreeEntryData;  public: @@ -178,8 +179,9 @@ protected:  //defines an octree group for an octree node, which contains multiple entries.  //LL_ALIGN_PREFIX(16)  class LLViewerOctreeGroup -:	public LLOctreeListener<LLViewerOctreeEntry>, public LLTrace::MemTrackable<LLViewerOctreeGroup, 16> +:	public LLOctreeListener<LLViewerOctreeEntry>  { +    LL_ALIGN_NEW  	friend class LLViewerOctreeCull;  protected:  	virtual ~LLViewerOctreeGroup(); @@ -201,7 +203,6 @@ public:  	LLViewerOctreeGroup(OctreeNode* node);  	LLViewerOctreeGroup(const LLViewerOctreeGroup& rhs) -	: LLTrace::MemTrackable<LLViewerOctreeGroup, 16>("LLViewerOctreeGroup")  	{  		*this = rhs;  	} diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 34847d8618..fbc5830a5c 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -481,8 +481,6 @@ const F32 GPU_MEMORY_CHECK_WAIT_TIME = 1.0f;  F32 texmem_lower_bound_scale = 0.85f;  F32 texmem_middle_bound_scale = 0.925f; -static LLTrace::BlockTimerStatHandle FTM_TEXTURE_MEMORY_CHECK("Memory Check"); -  //static   bool LLViewerTexture::isMemoryForTextureLow()  { @@ -531,8 +529,6 @@ void LLViewerTexture::getGPUMemoryForTextures(S32Megabytes &gpu, S32Megabytes &p      timer.reset();      { -        LL_RECORD_BLOCK_TIME(FTM_TEXTURE_MEMORY_CHECK); -          if (gGLManager.mHasATIMemInfo)          {              S32 meminfo[4]; @@ -555,11 +551,8 @@ void LLViewerTexture::getGPUMemoryForTextures(S32Megabytes &gpu, S32Megabytes &p      }  } -static LLTrace::BlockTimerStatHandle FTM_TEXTURE_UPDATE_MEDIA("Media"); -static LLTrace::BlockTimerStatHandle FTM_TEXTURE_UPDATE_TEST("Test"); -  //static -void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity) +void LLViewerTexture::updateClass()  {      LL_PROFILE_ZONE_SCOPED;  	sCurrentTime = gFrameTimeSeconds; @@ -567,14 +560,10 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity  	LLTexturePipelineTester* tester = (LLTexturePipelineTester*)LLMetricPerformanceTesterBasic::getTester(sTesterName);  	if (tester)  	{ -		LL_RECORD_BLOCK_TIME(FTM_TEXTURE_UPDATE_TEST);  		tester->update();  	} -	{ -		LL_RECORD_BLOCK_TIME(FTM_TEXTURE_UPDATE_MEDIA); -		LLViewerMediaTexture::updateClass(); -	} +	LLViewerMediaTexture::updateClass();  	sBoundTextureMemory = LLImageGL::sBoundTextureMemory;  	sTotalTextureMemory = LLImageGL::sGlobalTextureMemory; @@ -2614,6 +2603,7 @@ void LLViewerFetchedTexture::pauseLoadedCallbacks(const LLLoadedCallbackEntry::s  bool LLViewerFetchedTexture::doLoadedCallbacks()  { +    LL_PROFILE_ZONE_SCOPED;  	static const F32 MAX_INACTIVE_TIME = 900.f ; //seconds  	static const F32 MAX_IDLE_WAIT_TIME = 5.f ; //seconds @@ -3419,6 +3409,7 @@ bool LLViewerLODTexture::scaleDown()  //static  void LLViewerMediaTexture::updateClass()  { +    LL_PROFILE_ZONE_SCOPED;  	static const F32 MAX_INACTIVE_TIME = 30.f;  #if 0 diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index a5a1fb2c16..f9f1bfef44 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -114,7 +114,7 @@ protected:  public:	  	static void initClass(); -	static void updateClass(const F32 velocity, const F32 angular_velocity) ; +	static void updateClass();  	LLViewerTexture(BOOL usemipmaps = TRUE);  	LLViewerTexture(const LLUUID& id, BOOL usemipmaps) ; diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index db740b69e9..fe26cd67a4 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -68,7 +68,6 @@ void (*LLViewerTextureList::sUUIDCallback)(void **, const LLUUID&) = NULL;  S32 LLViewerTextureList::sNumImages = 0;  LLViewerTextureList gTextureList; -static LLTrace::BlockTimerStatHandle FTM_PROCESS_IMAGES("Process Images");  ETexListType get_element_type(S32 priority)  { @@ -761,18 +760,10 @@ void LLViewerTextureList::dirtyImage(LLViewerFetchedTexture *image)  }  //////////////////////////////////////////////////////////////////////////// -static LLTrace::BlockTimerStatHandle FTM_IMAGE_MARK_DIRTY("Dirty Images"); -static LLTrace::BlockTimerStatHandle FTM_IMAGE_UPDATE_PRIORITIES("Prioritize"); -static LLTrace::BlockTimerStatHandle FTM_IMAGE_CALLBACKS("Callbacks"); -static LLTrace::BlockTimerStatHandle FTM_IMAGE_FETCH("Fetch"); -static LLTrace::BlockTimerStatHandle FTM_FAST_CACHE_IMAGE_FETCH("Fast Cache Fetch"); -static LLTrace::BlockTimerStatHandle FTM_IMAGE_CREATE("Create"); -static LLTrace::BlockTimerStatHandle FTM_IMAGE_STATS("Stats"); -static LLTrace::BlockTimerStatHandle FTM_UPDATE_TEXTURES("Update Textures");  void LLViewerTextureList::updateImages(F32 max_time)  { -	LL_RECORD_BLOCK_TIME(FTM_UPDATE_TEXTURES); +    LL_PROFILE_ZONE_SCOPED;  	static BOOL cleared = FALSE;  	if(gTeleportDisplay)  	{ @@ -798,62 +789,44 @@ void LLViewerTextureList::updateImages(F32 max_time)  		sample(FORMATTED_MEM, F64Bytes(LLImageFormatted::sGlobalFormattedMemory));  	} -	{ -		//loading from fast cache  -		LL_RECORD_BLOCK_TIME(FTM_FAST_CACHE_IMAGE_FETCH); -		max_time -= updateImagesLoadingFastCache(max_time); -	} - -	{ -		LL_RECORD_BLOCK_TIME(FTM_IMAGE_UPDATE_PRIORITIES); -		updateImagesDecodePriorities(); -	} - -	F32 total_max_time = max_time; - -	{ -		LL_RECORD_BLOCK_TIME(FTM_IMAGE_FETCH); -		max_time -= updateImagesFetchTextures(max_time); -	} +	//loading from fast cache  +	max_time -= updateImagesLoadingFastCache(max_time); -	{ -		LL_RECORD_BLOCK_TIME(FTM_IMAGE_CREATE); -		max_time = llmax(max_time, total_max_time*.50f); // at least 50% of max_time -		max_time -= updateImagesCreateTextures(max_time); -	} +	updateImagesDecodePriorities(); +	 +    F32 total_max_time = max_time; + +	max_time -= updateImagesFetchTextures(max_time); +		 +	max_time = llmax(max_time, total_max_time*.50f); // at least 50% of max_time +	max_time -= updateImagesCreateTextures(max_time);  	if (!mDirtyTextureList.empty())  	{ -		LL_RECORD_BLOCK_TIME(FTM_IMAGE_MARK_DIRTY);  		gPipeline.dirtyPoolObjectTextures(mDirtyTextureList);  		mDirtyTextureList.clear();  	} +	bool didone = false; +	for (image_list_t::iterator iter = mCallbackList.begin(); +		iter != mCallbackList.end(); )  	{ -		LL_RECORD_BLOCK_TIME(FTM_IMAGE_CALLBACKS); -		bool didone = false; -		for (image_list_t::iterator iter = mCallbackList.begin(); -			iter != mCallbackList.end(); ) +		//trigger loaded callbacks on local textures immediately +		LLViewerFetchedTexture* image = *iter++; +		if (!image->getUrl().empty())  		{ -			//trigger loaded callbacks on local textures immediately -			LLViewerFetchedTexture* image = *iter++; -			if (!image->getUrl().empty()) -			{ -				// Do stuff to handle callbacks, update priorities, etc. -				didone = image->doLoadedCallbacks(); -			} -			else if (!didone) -			{ -				// Do stuff to handle callbacks, update priorities, etc. -				didone = image->doLoadedCallbacks(); -			} +			// Do stuff to handle callbacks, update priorities, etc. +			didone = image->doLoadedCallbacks(); +		} +		else if (!didone) +		{ +			// Do stuff to handle callbacks, update priorities, etc. +			didone = image->doLoadedCallbacks();  		}  	} +	 -	{ -		LL_RECORD_BLOCK_TIME(FTM_IMAGE_STATS); -		updateImagesUpdateStats(); -	} +	updateImagesUpdateStats();  }  void LLViewerTextureList::clearFetchingRequests() @@ -1497,8 +1470,8 @@ void LLViewerTextureList::receiveImageHeader(LLMessageSystem *msg, void **user_d  {  	static LLCachedControl<bool> log_texture_traffic(gSavedSettings,"LogTextureNetworkTraffic", false) ; -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_IMAGES); -	 +    LL_PROFILE_ZONE_SCOPED; +  	// Receive image header, copy into image object and decompresses   	// if this is a one-packet image.  @@ -1569,7 +1542,7 @@ void LLViewerTextureList::receiveImagePacket(LLMessageSystem *msg, void **user_d  {  	static LLCachedControl<bool> log_texture_traffic(gSavedSettings,"LogTextureNetworkTraffic", false) ; -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_IMAGES); +    LL_PROFILE_ZONE_SCOPED;  	// Receives image packet, copy into image object,  	// checks if all packets received, decompresses if so.  @@ -1642,7 +1615,7 @@ void LLViewerTextureList::receiveImagePacket(LLMessageSystem *msg, void **user_d  // static  void LLViewerTextureList::processImageNotInDatabase(LLMessageSystem *msg,void **user_data)  { -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_IMAGES); +    LL_PROFILE_ZONE_SCOPED;  	LLUUID image_id;  	msg->getUUIDFast(_PREHASH_ImageID, _PREHASH_ID, image_id); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index a588d05ff7..4a179146f8 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -328,6 +328,7 @@ public:  	// must return FALSE when the motion is completed.  	virtual BOOL onUpdate(F32 time, U8* joint_mask)  	{ +        LL_PROFILE_ZONE_SCOPED;  		F32 nx[2];  		nx[0]=time*TORSO_NOISE_SPEED;  		nx[1]=0.0f; @@ -448,6 +449,7 @@ public:  	// must return FALSE when the motion is completed.  	virtual BOOL onUpdate(F32 time, U8* joint_mask)  	{ +        LL_PROFILE_ZONE_SCOPED;  		mBreatheRate = 1.f;  		F32 breathe_amt = (sinf(mBreatheRate * time) * BREATHE_ROT_MOTION_STRENGTH); @@ -549,6 +551,7 @@ public:  	// must return FALSE when the motion is completed.  	virtual BOOL onUpdate(F32 time, U8* joint_mask)  	{ +        LL_PROFILE_ZONE_SCOPED;  		mPelvisState->setPosition(LLVector3::zero);  		return TRUE; @@ -1318,11 +1321,9 @@ void LLVOAvatar::updateSpatialExtents(LLVector4a& newMin, LLVector4a &newMax)  } -static LLTrace::BlockTimerStatHandle FTM_AVATAR_EXTENT_UPDATE("Av Upd Extent"); -  void LLVOAvatar::calculateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax)  { -    LL_RECORD_BLOCK_TIME(FTM_AVATAR_EXTENT_UPDATE); +    LL_PROFILE_ZONE_SCOPED;      S32 box_detail = gSavedSettings.getS32("AvatarBoundingBoxComplexity");      if (getOverallAppearance() != AOA_NORMAL) @@ -2491,10 +2492,6 @@ S32 LLVOAvatar::setTETexture(const U8 te, const LLUUID& uuid)  	return setTETextureCore(te, image);  } -static LLTrace::BlockTimerStatHandle FTM_AVATAR_UPDATE("Avatar Update"); -static LLTrace::BlockTimerStatHandle FTM_AVATAR_UPDATE_COMPLEXITY("Avatar Update Complexity"); -static LLTrace::BlockTimerStatHandle FTM_JOINT_UPDATE("Update Joints"); -  //------------------------------------------------------------------------  // LLVOAvatar::dumpAnimationState()  //------------------------------------------------------------------------ @@ -2527,7 +2524,7 @@ void LLVOAvatar::dumpAnimationState()  //------------------------------------------------------------------------  void LLVOAvatar::idleUpdate(LLAgent &agent, const F64 &time)  { -	LL_RECORD_BLOCK_TIME(FTM_AVATAR_UPDATE); +    LL_PROFILE_ZONE_SCOPED;  	if (isDead())  	{ @@ -2563,8 +2560,6 @@ void LLVOAvatar::idleUpdate(LLAgent &agent, const F64 &time)  	// force asynchronous drawable update  	if(mDrawable.notNull())  	{	 -		LL_RECORD_BLOCK_TIME(FTM_JOINT_UPDATE); -	  		if (isSitting() && getParent())  		{  			LLViewerObject *root_object = (LLViewerObject*)getRoot(); @@ -2664,9 +2659,8 @@ void LLVOAvatar::idleUpdate(LLAgent &agent, const F64 &time)      if ((LLFrameTimer::getFrameCount() + mID.mData[0]) % compl_upd_freq == 0)      { -        LL_RECORD_BLOCK_TIME(FTM_AVATAR_UPDATE_COMPLEXITY); -	idleUpdateRenderComplexity(); -} +        idleUpdateRenderComplexity(); +    }      idleUpdateDebugInfo();  } @@ -2779,10 +2773,9 @@ void LLVOAvatar::idleUpdateVoiceVisualizer(bool voice_enabled)  	}//if ( voiceEnabled )  }		 -static LLTrace::BlockTimerStatHandle FTM_ATTACHMENT_UPDATE("Update Attachments"); -  void LLVOAvatar::idleUpdateMisc(bool detailed_update)  { +    LL_PROFILE_ZONE_SCOPED;  	if (LLVOAvatar::sJointDebug)  	{  		LL_INFOS() << getFullname() << ": joint touches: " << LLJoint::sNumTouches << " updates: " << LLJoint::sNumUpdates << LL_ENDL; @@ -2796,7 +2789,6 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)  	// update attachments positions  	if (detailed_update)  	{ -		LL_RECORD_BLOCK_TIME(FTM_ATTACHMENT_UPDATE);  		for (attachment_map_t::iterator iter = mAttachmentPoints.begin();   			 iter != mAttachmentPoints.end();  			 ++iter) @@ -7132,10 +7124,9 @@ void LLVOAvatar::updateGL()  //-----------------------------------------------------------------------------  // updateGeometry()  //----------------------------------------------------------------------------- -static LLTrace::BlockTimerStatHandle FTM_UPDATE_AVATAR("Update Avatar");  BOOL LLVOAvatar::updateGeometry(LLDrawable *drawable)  { -	LL_RECORD_BLOCK_TIME(FTM_UPDATE_AVATAR); +    LL_PROFILE_ZONE_SCOPED;  	if (!(gPipeline.hasRenderType(mIsControlAvatar ? LLPipeline::RENDER_TYPE_CONTROL_AV : LLPipeline::RENDER_TYPE_AVATAR)))  	{  		return TRUE; @@ -10193,6 +10184,7 @@ void showRigInfoTabExtents(LLVOAvatar *avatar, LLJointRiggingInfoTab& tab, S32&  void LLVOAvatar::getAssociatedVolumes(std::vector<LLVOVolume*>& volumes)  { +    LL_PROFILE_ZONE_SCOPED;  	for ( LLVOAvatar::attachment_map_t::iterator iter = mAttachmentPoints.begin(); iter != mAttachmentPoints.end(); ++iter )  	{  		LLViewerJointAttachment* attachment = iter->second; @@ -10250,27 +10242,19 @@ void LLVOAvatar::getAssociatedVolumes(std::vector<LLVOVolume*>& volumes)      }  } -static LLTrace::BlockTimerStatHandle FTM_AVATAR_RIGGING_INFO_UPDATE("Av Upd Rig Info"); -static LLTrace::BlockTimerStatHandle FTM_AVATAR_RIGGING_KEY_UPDATE("Av Upd Rig Key"); -static LLTrace::BlockTimerStatHandle FTM_AVATAR_RIGGING_AVOL_UPDATE("Av Upd Avol"); -  // virtual  void LLVOAvatar::updateRiggingInfo()  { -    LL_RECORD_BLOCK_TIME(FTM_AVATAR_RIGGING_INFO_UPDATE); +    LL_PROFILE_ZONE_SCOPED;      LL_DEBUGS("RigSpammish") << getFullname() << " updating rig tab" << LL_ENDL;      std::vector<LLVOVolume*> volumes; -	{ -		LL_RECORD_BLOCK_TIME(FTM_AVATAR_RIGGING_AVOL_UPDATE); -		getAssociatedVolumes(volumes); -	} +	getAssociatedVolumes(volumes);  	std::map<LLUUID,S32> curr_rigging_info_key;  	{ -		LL_RECORD_BLOCK_TIME(FTM_AVATAR_RIGGING_KEY_UPDATE);  		// Get current rigging info key  		for (std::vector<LLVOVolume*>::iterator it = volumes.begin(); it != volumes.end(); ++it)  		{ @@ -10432,6 +10416,7 @@ void LLVOAvatar::updateImpostorRendering(U32 newMaxNonImpostorsValue)  void LLVOAvatar::idleUpdateRenderComplexity()  { +    LL_PROFILE_ZONE_SCOPED;      if (isControlAvatar())      {          LLControlAvatar *cav = dynamic_cast<LLControlAvatar*>(this); diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 39adaab8ca..7042406091 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -87,6 +87,7 @@ class LLVOAvatar :  	public LLViewerObject,  	public boost::signals2::trackable  { +    LL_ALIGN_NEW;  	LOG_CLASS(LLVOAvatar);  public: @@ -99,16 +100,6 @@ public:   **/  public: -	void* operator new(size_t size) -	{ -		return LLTrace::MemTrackable<LLViewerObject>::aligned_new<16>(size); -	} - -	void operator delete(void* ptr, size_t size) -	{ -		LLTrace::MemTrackable<LLViewerObject>::aligned_delete<16>(ptr, size); -	} -  	LLVOAvatar(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);  	virtual void		markDead();  	static void			initClass(); // Initialize data that's only init'd once per class. diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp index 5ebc65405f..e10a9f9bcb 100644 --- a/indra/newview/llvocache.cpp +++ b/indra/newview/llvocache.cpp @@ -63,8 +63,7 @@ BOOL check_write(LLAPRFile* apr_file, void* src, S32 n_bytes)  //---------------------------------------------------------------------------  LLVOCacheEntry::LLVOCacheEntry(U32 local_id, U32 crc, LLDataPackerBinaryBuffer &dp) -:	LLTrace::MemTrackable<LLVOCacheEntry, 16>("LLVOCacheEntry"), -	LLViewerOctreeEntryData(LLViewerOctreeEntry::LLVOCACHEENTRY), +:	LLViewerOctreeEntryData(LLViewerOctreeEntry::LLVOCACHEENTRY),  	mLocalID(local_id),  	mCRC(crc),  	mUpdateFlags(-1), @@ -83,8 +82,7 @@ LLVOCacheEntry::LLVOCacheEntry(U32 local_id, U32 crc, LLDataPackerBinaryBuffer &  }  LLVOCacheEntry::LLVOCacheEntry() -:	LLTrace::MemTrackable<LLVOCacheEntry, 16>("LLVOCacheEntry"), -	LLViewerOctreeEntryData(LLViewerOctreeEntry::LLVOCACHEENTRY), +:	LLViewerOctreeEntryData(LLViewerOctreeEntry::LLVOCACHEENTRY),  	mLocalID(0),  	mCRC(0),  	mUpdateFlags(-1), @@ -102,8 +100,7 @@ LLVOCacheEntry::LLVOCacheEntry()  }  LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file) -:	LLTrace::MemTrackable<LLVOCacheEntry, 16>("LLVOCacheEntry"), -	LLViewerOctreeEntryData(LLViewerOctreeEntry::LLVOCACHEENTRY),  +:	LLViewerOctreeEntryData(LLViewerOctreeEntry::LLVOCACHEENTRY),   	mBuffer(NULL),  	mUpdateFlags(-1),  	mState(INACTIVE), @@ -619,7 +616,6 @@ void LLVOCacheGroup::handleChildAddition(const OctreeNode* parent, OctreeNode* c  }  LLVOCachePartition::LLVOCachePartition(LLViewerRegion* regionp) -:	LLTrace::MemTrackable<LLVOCachePartition>("LLVOCachePartition")  {  	mLODPeriod = 16;  	mRegionp = regionp; diff --git a/indra/newview/llvocache.h b/indra/newview/llvocache.h index dd6afd6b85..c510ff77fc 100644 --- a/indra/newview/llvocache.h +++ b/indra/newview/llvocache.h @@ -38,9 +38,9 @@  class LLCamera;  class LLVOCacheEntry  -:	public LLViewerOctreeEntryData, -	public LLTrace::MemTrackable<LLVOCacheEntry, 16> +:	public LLViewerOctreeEntryData  { +    LL_ALIGN_NEW  public:  	enum   	{ @@ -185,7 +185,7 @@ protected:  	virtual ~LLVOCacheGroup();  }; -class LLVOCachePartition : public LLViewerOctreePartition, public LLTrace::MemTrackable<LLVOCachePartition> +class LLVOCachePartition : public LLViewerOctreePartition  {  public:  	LLVOCachePartition(LLViewerRegion* regionp); diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp index 345e87eea8..9a41eedb54 100644 --- a/indra/newview/llvograss.cpp +++ b/indra/newview/llvograss.cpp @@ -661,11 +661,9 @@ void LLGrassPartition::addGeometryCount(LLSpatialGroup* group, U32& vertex_count  	}  } -static LLTrace::BlockTimerStatHandle FTM_REBUILD_GRASS_VB("Grass VB"); -  void LLGrassPartition::getGeometry(LLSpatialGroup* group)  { -	LL_RECORD_BLOCK_TIME(FTM_REBUILD_GRASS_VB); +    LL_PROFILE_ZONE_SCOPED;  	std::sort(mFaceList.begin(), mFaceList.end(), LLFace::CompareDistanceGreater()); diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp index b31afca61d..068e8a131d 100644 --- a/indra/newview/llvopartgroup.cpp +++ b/indra/newview/llvopartgroup.cpp @@ -306,10 +306,9 @@ LLVector3 LLVOPartGroup::getCameraPosition() const  	return gAgentCamera.getCameraPositionAgent();  } -static LLTrace::BlockTimerStatHandle FTM_UPDATE_PARTICLES("Update Particles");  BOOL LLVOPartGroup::updateGeometry(LLDrawable *drawable)  { -	LL_RECORD_BLOCK_TIME(FTM_UPDATE_PARTICLES); +    LL_PROFILE_ZONE_SCOPED;  	dirtySpatialGroup(); @@ -754,10 +753,9 @@ LLHUDParticlePartition::LLHUDParticlePartition(LLViewerRegion* regionp) :  	mPartitionType = LLViewerRegion::PARTITION_HUD_PARTICLE;  } -static LLTrace::BlockTimerStatHandle FTM_REBUILD_PARTICLE_VBO("Particle VBO"); -  void LLParticlePartition::rebuildGeom(LLSpatialGroup* group)  { +    LL_PROFILE_ZONE_SCOPED;  	if (group->isDead() || !group->hasState(LLSpatialGroup::GEOM_DIRTY))  	{  		return; @@ -769,8 +767,6 @@ void LLParticlePartition::rebuildGeom(LLSpatialGroup* group)  		group->mLastUpdateViewAngle = group->mViewAngle;  	} -	LL_RECORD_BLOCK_TIME(FTM_REBUILD_PARTICLE_VBO);	 -  	group->clearDrawMap();  	//get geometry count @@ -843,11 +839,9 @@ void LLParticlePartition::addGeometryCount(LLSpatialGroup* group, U32& vertex_co  } -static LLTrace::BlockTimerStatHandle FTM_REBUILD_PARTICLE_GEOM("Particle Geom"); -  void LLParticlePartition::getGeometry(LLSpatialGroup* group)  { -	LL_RECORD_BLOCK_TIME(FTM_REBUILD_PARTICLE_GEOM); +    LL_PROFILE_ZONE_SCOPED;  	std::sort(mFaceList.begin(), mFaceList.end(), LLFace::CompareDistanceGreater()); diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index 322e4f110a..72ec8390a4 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -79,11 +79,6 @@ namespace      const LLVector2 TEX10 = LLVector2(1.f, 0.f);      const LLVector2 TEX11 = LLVector2(1.f, 1.f); -    LLTrace::BlockTimerStatHandle FTM_VOSKY_UPDATETIMER("VOSky Update Timer Tick"); -    LLTrace::BlockTimerStatHandle FTM_VOSKY_CALC("VOSky Update Calculations"); -    LLTrace::BlockTimerStatHandle FTM_VOSKY_CREATETEXTURES("VOSky Update Textures"); -    LLTrace::BlockTimerStatHandle FTM_VOSKY_UPDATEFORCED("VOSky Update Forced"); -      F32Seconds UPDATE_EXPRY(0.25f);      const F32 UPDATE_MIN_DELTA_THRESHOLD = 0.0005f; @@ -515,6 +510,7 @@ void LLVOSky::cacheEnvironment(LLSettingsSky::ptr_t psky,AtmosphericsVars& atmos  void LLVOSky::calc()  { +    LL_PROFILE_ZONE_SCOPED;      LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky();      cacheEnvironment(psky,m_atmosphericsVars); @@ -685,6 +681,8 @@ bool LLVOSky::updateSky()  		return TRUE;  	} +    LL_PROFILE_ZONE_SCOPED; +  	static S32 next_frame = 0;      mNeedUpdate = mForceUpdate; @@ -705,7 +703,6 @@ bool LLVOSky::updateSky()      if (mCubeMapUpdateStage < 0)      { -        LL_RECORD_BLOCK_TIME(FTM_VOSKY_CALC);          calc();          bool same_atmospherics = approximatelyEqual(m_lastAtmosphericsVars, m_atmosphericsVars, UPDATE_MIN_DELTA_THRESHOLD); @@ -722,7 +719,7 @@ bool LLVOSky::updateSky()  	}      else if (mCubeMapUpdateStage == NUM_CUBEMAP_FACES)  	{ -        LL_RECORD_BLOCK_TIME(FTM_VOSKY_UPDATEFORCED); +        LL_PROFILE_ZONE_NAMED("updateSky - forced");          LLSkyTex::stepCurrent();          bool is_alm_wl_sky = gPipeline.canUseWindLightShaders(); @@ -783,7 +780,7 @@ bool LLVOSky::updateSky()      // run 0 to 5 faces, each face in own frame      else if (mCubeMapUpdateStage >= 0 && mCubeMapUpdateStage < NUM_CUBEMAP_FACES)  	{ -        LL_RECORD_BLOCK_TIME(FTM_VOSKY_CREATETEXTURES); +        LL_PROFILE_ZONE_NAMED("updateSky - create");          S32 side = mCubeMapUpdateStage;          // CPU hungry part, createSkyTexture() is math heavy          // Prior to EEP it was mostly per tile, but since EPP it is per face. @@ -973,11 +970,9 @@ void LLVOSky::setBloomTextures(const LLUUID& bloom_texture, const LLUUID& bloom_      }  } -static LLTrace::BlockTimerStatHandle FTM_GEO_SKY("Sky Geometry"); -  BOOL LLVOSky::updateGeometry(LLDrawable *drawable)  { -	LL_RECORD_BLOCK_TIME(FTM_GEO_SKY); +    LL_PROFILE_ZONE_SCOPED;  	if (mFace[FACE_REFLECTION] == NULL)  	{  		LLDrawPoolWater *poolp = (LLDrawPoolWater*) gPipeline.getPool(LLDrawPool::POOL_WATER); diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp index b5560d3d79..4d25e8c7bd 100644 --- a/indra/newview/llvosurfacepatch.cpp +++ b/indra/newview/llvosurfacepatch.cpp @@ -212,7 +212,6 @@ LLDrawable *LLVOSurfacePatch::createDrawable(LLPipeline *pipeline)  	return mDrawable;  } -static LLTrace::BlockTimerStatHandle FTM_UPDATE_TERRAIN("Update Terrain");  void LLVOSurfacePatch::updateGL()  { @@ -225,7 +224,7 @@ void LLVOSurfacePatch::updateGL()  BOOL LLVOSurfacePatch::updateGeometry(LLDrawable *drawable)  { -	LL_RECORD_BLOCK_TIME(FTM_UPDATE_TERRAIN); +    LL_PROFILE_ZONE_SCOPED;  	dirtySpatialGroup(TRUE); @@ -1071,10 +1070,9 @@ LLVertexBuffer* LLTerrainPartition::createVertexBuffer(U32 type_mask, U32 usage)  	return new LLVertexBufferTerrain();  } -static LLTrace::BlockTimerStatHandle FTM_REBUILD_TERRAIN_VB("Terrain VB");  void LLTerrainPartition::getGeometry(LLSpatialGroup* group)  { -	LL_RECORD_BLOCK_TIME(FTM_REBUILD_TERRAIN_VB); +    LL_PROFILE_ZONE_SCOPED;  	LLVertexBuffer* buffer = group->mVertexBuffer; diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index 41099cb570..493162b47b 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -493,11 +493,9 @@ LLDrawable* LLVOTree::createDrawable(LLPipeline *pipeline)  const S32 LEAF_INDICES = 24;  const S32 LEAF_VERTICES = 16; -static LLTrace::BlockTimerStatHandle FTM_UPDATE_TREE("Update Tree"); -  BOOL LLVOTree::updateGeometry(LLDrawable *drawable)  { -	LL_RECORD_BLOCK_TIME(FTM_UPDATE_TREE); +    LL_PROFILE_ZONE_SCOPED;  	if(mTrunkLOD >= sMAX_NUM_TREE_LOD_LEVELS) //do not display the tree.  	{ diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index b86935b081..893c5f4fac 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -103,10 +103,6 @@ S32 LLVOVolume::mRenderComplexity_current = 0;  LLPointer<LLObjectMediaDataClient> LLVOVolume::sObjectMediaClient = NULL;  LLPointer<LLObjectMediaNavigateClient> LLVOVolume::sObjectMediaNavigateClient = NULL; -static LLTrace::BlockTimerStatHandle FTM_GEN_TRIANGLES("Generate Triangles"); -static LLTrace::BlockTimerStatHandle FTM_GEN_VOLUME("Generate Volumes"); -static LLTrace::BlockTimerStatHandle FTM_VOLUME_TEXTURES("Volume Textures"); -  extern BOOL gGLDebugLoggingEnabled;  // Implementation class of LLMediaDataClientObject.  See llmediadataclient.h @@ -692,7 +688,7 @@ BOOL LLVOVolume::isVisible() const  void LLVOVolume::updateTextureVirtualSize(bool forced)  { -	LL_RECORD_BLOCK_TIME(FTM_VOLUME_TEXTURES); +    LL_PROFILE_ZONE_SCOPED;  	// Update the pixel area of all faces      if (mDrawable.isNull()) @@ -971,6 +967,7 @@ LLDrawable *LLVOVolume::createDrawable(LLPipeline *pipeline)  BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms_in, const S32 detail, bool unique_volume)  { +    LL_PROFILE_ZONE_SCOPED;  	LLVolumeParams volume_params = params_in;  	S32 last_lod = mVolumep.notNull() ? LLVolumeLODGroup::getVolumeDetailFromScale(mVolumep->getDetail()) : -1; @@ -1598,6 +1595,7 @@ BOOL LLVOVolume::setParent(LLViewerObject* parent)  // NOTE: regenFaces() MUST be followed by genTriangles()!  void LLVOVolume::regenFaces()  { +    LL_PROFILE_ZONE_SCOPED;  	// remove existing faces  	BOOL count_changed = mNumFaces != getNumTEs(); @@ -1645,6 +1643,7 @@ void LLVOVolume::regenFaces()  BOOL LLVOVolume::genBBoxes(BOOL force_global)  { +    LL_PROFILE_ZONE_SCOPED;  	BOOL res = TRUE;  	LLVector4a min,max; @@ -1855,12 +1854,9 @@ void LLVOVolume::updateRelativeXform(bool force_identity)  	}  } -static LLTrace::BlockTimerStatHandle FTM_GEN_FLEX("Generate Flexies"); -static LLTrace::BlockTimerStatHandle FTM_UPDATE_PRIMITIVES("Update Primitives"); -static LLTrace::BlockTimerStatHandle FTM_UPDATE_RIGGED_VOLUME("Update Rigged"); -  bool LLVOVolume::lodOrSculptChanged(LLDrawable *drawable, BOOL &compiled)  { +    LL_PROFILE_ZONE_SCOPED;  	bool regen_faces = false;  	LLVolume *old_volumep, *new_volumep; @@ -1873,7 +1869,6 @@ bool LLVOVolume::lodOrSculptChanged(LLDrawable *drawable, BOOL &compiled)  	old_volumep = NULL;  	{ -		LL_RECORD_BLOCK_TIME(FTM_GEN_VOLUME);  		const LLVolumeParams &volume_params = getVolume()->getParams();  		setVolume(volume_params, 0);  	} @@ -1901,7 +1896,6 @@ bool LLVOVolume::lodOrSculptChanged(LLDrawable *drawable, BOOL &compiled)  		drawable->setState(LLDrawable::REBUILD_VOLUME); // for face->genVolumeTriangles()  		{ -			LL_RECORD_BLOCK_TIME(FTM_GEN_TRIANGLES);  			regen_faces = new_num_faces != old_num_faces || mNumFaces != (S32)getNumTEs();  			if (regen_faces)  			{ @@ -1926,14 +1920,11 @@ bool LLVOVolume::lodOrSculptChanged(LLDrawable *drawable, BOOL &compiled)  BOOL LLVOVolume::updateGeometry(LLDrawable *drawable)  { -	LL_RECORD_BLOCK_TIME(FTM_UPDATE_PRIMITIVES); +    LL_PROFILE_ZONE_SCOPED;  	if (mDrawable->isState(LLDrawable::REBUILD_RIGGED))  	{ -		{ -			LL_RECORD_BLOCK_TIME(FTM_UPDATE_RIGGED_VOLUME); -			updateRiggedVolume(); -		} +		updateRiggedVolume();  		genBBoxes(FALSE);  		mDrawable->clearState(LLDrawable::REBUILD_RIGGED);  	} @@ -1942,7 +1933,6 @@ BOOL LLVOVolume::updateGeometry(LLDrawable *drawable)  	{  		BOOL res;  		{ -			LL_RECORD_BLOCK_TIME(FTM_GEN_FLEX);  			res = mVolumeImpl->doUpdateGeometry(drawable);  		}  		updateFaceFlags(); @@ -1982,7 +1972,6 @@ BOOL LLVOVolume::updateGeometry(LLDrawable *drawable)  		}  		if (!was_regen_faces) { -			LL_RECORD_BLOCK_TIME(FTM_GEN_TRIANGLES);  			regenFaces();  		} @@ -2005,7 +1994,6 @@ BOOL LLVOVolume::updateGeometry(LLDrawable *drawable)  	{  		compiled = TRUE;  		// All it did was move or we changed the texture coordinate offset -		LL_RECORD_BLOCK_TIME(FTM_GEN_TRIANGLES);  		genBBoxes(FALSE);  	} @@ -3717,11 +3705,9 @@ void LLVOVolume::afterReparent()  }  //---------------------------------------------------------------------------- -static LLTrace::BlockTimerStatHandle FTM_VOVOL_RIGGING_INFO("VOVol Rigging Info"); -  void LLVOVolume::updateRiggingInfo()  { -    LL_RECORD_BLOCK_TIME(FTM_VOVOL_RIGGING_INFO); +    LL_PROFILE_ZONE_SCOPED;      if (isRiggedMesh())      {          const LLMeshSkinInfo* skin = getSkinInfo(); @@ -4726,6 +4712,7 @@ void LLVOVolume::clearRiggedVolume()  void LLVOVolume::updateRiggedVolume(bool force_update)  { +    LL_PROFILE_ZONE_SCOPED;  	//Update mRiggedVolume to match current animation frame of avatar.   	//Also update position/size in octree.   @@ -4761,11 +4748,9 @@ void LLVOVolume::updateRiggedVolume(bool force_update)  	mRiggedVolume->update(skin, avatar, volume);  } -static LLTrace::BlockTimerStatHandle FTM_SKIN_RIGGED("Skin"); -static LLTrace::BlockTimerStatHandle FTM_RIGGED_OCTREE("Octree"); -  void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, const LLVolume* volume)  { +    LL_PROFILE_ZONE_SCOPED;  	bool copy = false;  	if (volume->getNumVolumeFaces() != getNumVolumeFaces())  	{  @@ -4829,8 +4814,6 @@ void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, cons  			if (pos && dst_face.mExtents)  			{ -				LL_RECORD_BLOCK_TIME(FTM_SKIN_RIGGED); -                  U32 max_joints = LLSkinningUtil::getMaxJointCount();                  rigged_vert_count += dst_face.mNumVertices;                  rigged_face_count++; @@ -4901,8 +4884,7 @@ void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, cons  			}  			{ -				LL_RECORD_BLOCK_TIME(FTM_RIGGED_OCTREE); -				delete dst_face.mOctree; +    			delete dst_face.mOctree;  				dst_face.mOctree = NULL;  				LLVector4a size; @@ -5066,11 +5048,9 @@ void LLVolumeGeometryManager::freeFaces()  	sAlphaFaces = NULL;  } -static LLTrace::BlockTimerStatHandle FTM_REGISTER_FACE("Register Face"); -  void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep, U32 type)  { -	LL_RECORD_BLOCK_TIME(FTM_REGISTER_FACE); +    LL_PROFILE_ZONE_SCOPED;  	if (   type == LLRenderPass::PASS_ALPHA   		&& facep->getTextureEntry()->getMaterialParams().notNull()   		&& !facep->getVertexBuffer()->hasDataType(LLVertexBuffer::TYPE_TANGENT) @@ -5302,10 +5282,6 @@ void LLVolumeGeometryManager::getGeometry(LLSpatialGroup* group)  } -static LLTrace::BlockTimerStatHandle FTM_REBUILD_VOLUME_VB("Volume VB"); -static LLTrace::BlockTimerStatHandle FTM_REBUILD_VOLUME_FACE_LIST("Build Face List"); -static LLTrace::BlockTimerStatHandle FTM_REBUILD_VOLUME_GEN_DRAW_INFO("Gen Draw Info"); -  static LLDrawPoolAvatar* get_avatar_drawpool(LLViewerObject* vobj)  {  	LLVOAvatar* avatar = vobj->getAvatar(); @@ -5409,8 +5385,19 @@ void handleRenderAutoMuteByteLimitChanged(const LLSD& new_value)  	}  } +// add a face pointer to a list of face pointers without going over MAX_COUNT faces +template<typename T> +static inline void add_face(T** list, U32& count, T* face) +{ +    if (count < MAX_FACE_COUNT) +    { +        list[count++] = face; +    } +} +  void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  { +    LL_PROFILE_ZONE_SCOPED;  	if (group->changeLOD())  	{  		group->mLastUpdateDistance = group->mDistance; @@ -5427,8 +5414,6 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  		return;  	} -	LL_RECORD_BLOCK_TIME(FTM_REBUILD_VOLUME_VB); -  	group->mBuilt = 1.f;  	LLSpatialBridge* bridge = group->getSpatialPartition()->asBridge(); @@ -5485,7 +5470,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  #endif  	{ -		LL_RECORD_BLOCK_TIME(FTM_REBUILD_VOLUME_FACE_LIST); +        LL_PROFILE_ZONE_NAMED("rebuildGeom - face list");  		//get all the faces into a list  		for (LLSpatialGroup::element_iter drawable_iter = group->getDataBegin();  @@ -5826,21 +5811,19 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  					{  						if (facep->canRenderAsMask())  						{ //can be treated as alpha mask -							if (simple_count < MAX_FACE_COUNT) -							{ -								sSimpleFaces[simple_count++] = facep; -							} +                            add_face(sSimpleFaces, simple_count, facep);  						}  						else  						{ -							if (te->getColor().mV[3] > 0.f) -							{ //only treat as alpha in the pipeline if < 100% transparent -								drawablep->setState(LLDrawable::HAS_ALPHA); -							} -							if (alpha_count < MAX_FACE_COUNT) -							{ -								sAlphaFaces[alpha_count++] = facep; -							} +                            if (te->getColor().mV[3] > 0.f) +                            { //only treat as alpha in the pipeline if < 100% transparent +                                drawablep->setState(LLDrawable::HAS_ALPHA); +                                add_face(sAlphaFaces, alpha_count, facep); +                            } +                            else if (LLDrawPoolAlpha::sShowDebugAlpha) +                            { +                                add_face(sAlphaFaces, alpha_count, facep); +                            }  						}  					}  					else @@ -5860,81 +5843,51 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  								{  									if (mat->getSpecularID().notNull())  									{ //has normal and specular maps (needs texcoord1, texcoord2, and tangent) -										if (normspec_count < MAX_FACE_COUNT) -										{ -											sNormSpecFaces[normspec_count++] = facep; -										} +                                        add_face(sNormSpecFaces, normspec_count, facep);  									}  									else  									{ //has normal map (needs texcoord1 and tangent) -										if (norm_count < MAX_FACE_COUNT) -										{ -											sNormFaces[norm_count++] = facep; -										} +                                        add_face(sNormFaces, norm_count, facep);  									}  								}  								else if (mat->getSpecularID().notNull())  								{ //has specular map but no normal map, needs texcoord2 -									if (spec_count < MAX_FACE_COUNT) -									{ -										sSpecFaces[spec_count++] = facep; -									} +                                    add_face(sSpecFaces, spec_count, facep);  								}  								else  								{ //has neither specular map nor normal map, only needs texcoord0 -									if (simple_count < MAX_FACE_COUNT) -									{ -										sSimpleFaces[simple_count++] = facep; -									} +                                    add_face(sSimpleFaces, simple_count, facep);  								}									  							}  							else if (te->getBumpmap())  							{ //needs normal + tangent -								if (bump_count < MAX_FACE_COUNT) -								{ -									sBumpFaces[bump_count++] = facep; -								} +                                add_face(sBumpFaces, bump_count, facep);  							}  							else if (te->getShiny() || !te->getFullbright())  							{ //needs normal -								if (simple_count < MAX_FACE_COUNT) -								{ -									sSimpleFaces[simple_count++] = facep; -								} +                                add_face(sSimpleFaces, simple_count, facep);  							}  							else   							{ //doesn't need normal  								facep->setState(LLFace::FULLBRIGHT); -								if (fullbright_count < MAX_FACE_COUNT) -								{ -									sFullbrightFaces[fullbright_count++] = facep; -								} +                                add_face(sFullbrightFaces, fullbright_count, facep);  							}  						}  						else  						{  							if (te->getBumpmap() && LLPipeline::sRenderBump)  							{ //needs normal + tangent -								if (bump_count < MAX_FACE_COUNT) -								{ -									sBumpFaces[bump_count++] = facep; -								} +                                add_face(sBumpFaces, bump_count, facep);  							}  							else if ((te->getShiny() && LLPipeline::sRenderBump) ||  								!(te->getFullbright() || bake_sunlight))  							{ //needs normal -								if (simple_count < MAX_FACE_COUNT) -								{ -									sSimpleFaces[simple_count++] = facep; -								} +                                add_face(sSimpleFaces, simple_count, facep);  							}  							else   							{ //doesn't need normal  								facep->setState(LLFace::FULLBRIGHT); -								if (fullbright_count < MAX_FACE_COUNT) -								{ -									sFullbrightFaces[fullbright_count++] = facep; -								} +                                add_face(sFullbrightFaces, fullbright_count, facep);  							}  						}  					} @@ -6036,23 +5989,16 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  	mFaceList.clear();  } -static LLTrace::BlockTimerStatHandle FTM_REBUILD_MESH_FLUSH("Flush Mesh"); -  void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)  { +    LL_PROFILE_ZONE_SCOPED;  	llassert(group);  	if (group && group->hasState(LLSpatialGroup::MESH_DIRTY) && !group->hasState(LLSpatialGroup::GEOM_DIRTY))  	{ -		LL_RECORD_BLOCK_TIME(FTM_REBUILD_VOLUME_VB);  		{ -			// SL-15709 -- NOTE: Tracy only allows one ZoneScoped per function. -			// Solutions are: -			// 1. Use a new scope -			// 2. Use named zones -			// 3. Use transient zones -			LL_RECORD_BLOCK_TIME(FTM_REBUILD_VOLUME_GEN_DRAW_INFO); //make sure getgeometryvolume shows up in the right place in timers +            LL_PROFILE_ZONE_NAMED("rebuildMesh - gen draw info"); -			group->mBuilt = 1.f; +            group->mBuilt = 1.f;  			S32 num_mapped_vertex_buffer = LLVertexBuffer::sMappedCount ; @@ -6123,7 +6069,7 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)  			}  			{ -				LL_RECORD_BLOCK_TIME(FTM_REBUILD_MESH_FLUSH); +                LL_PROFILE_ZONE_NAMED("rebuildMesh - flush");  				for (LLVertexBuffer** iter = locked_buffer, ** end_iter = locked_buffer+buffer_count; iter != end_iter; ++iter)  				{  					(*iter)->flush(); @@ -6166,10 +6112,7 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)  			group->clearState(LLSpatialGroup::MESH_DIRTY | LLSpatialGroup::NEW_DRAWINFO);  		} - -	} // Tracy integration - -//	llassert(!group || !group->isState(LLSpatialGroup::NEW_DRAWINFO)); +	}   }  struct CompareBatchBreakerModified @@ -6202,19 +6145,10 @@ struct CompareBatchBreakerModified  	}  }; -static LLTrace::BlockTimerStatHandle FTM_GEN_DRAW_INFO_SORT("Draw Info Face Sort"); -static LLTrace::BlockTimerStatHandle FTM_GEN_DRAW_INFO_FACE_SIZE("Face Sizing"); -static LLTrace::BlockTimerStatHandle FTM_GEN_DRAW_INFO_ALLOCATE("Allocate VB"); -static LLTrace::BlockTimerStatHandle FTM_GEN_DRAW_INFO_FIND_VB("Find VB"); -static LLTrace::BlockTimerStatHandle FTM_GEN_DRAW_INFO_RESIZE_VB("Resize VB"); - - - -  U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace** faces, U32 face_count, BOOL distance_sort, BOOL batch_textures, BOOL no_materials)  { -	LL_RECORD_BLOCK_TIME(FTM_REBUILD_VOLUME_GEN_DRAW_INFO); +    LL_PROFILE_ZONE_SCOPED;  	U32 geometryBytes = 0;  	U32 buffer_usage = group->mBufferUsage; @@ -6246,7 +6180,7 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace  	max_vertices = llmin(max_vertices, (U32) 65535);  	{ -		LL_RECORD_BLOCK_TIME(FTM_GEN_DRAW_INFO_SORT); +        LL_PROFILE_ZONE_NAMED("genDrawInfo - sort");  		if (!distance_sort)  		{  			//sort faces by things that break batches @@ -6332,7 +6266,7 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace  		U32 texture_count = 0;  		{ -			LL_RECORD_BLOCK_TIME(FTM_GEN_DRAW_INFO_FACE_SIZE); +            LL_PROFILE_ZONE_NAMED("genDrawInfo - face size");  			if (batch_textures)  			{  				U8 cur_tex = 0; @@ -6455,7 +6389,7 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace  		LLPointer<LLVertexBuffer> buffer;  		{ -			LL_RECORD_BLOCK_TIME(FTM_GEN_DRAW_INFO_ALLOCATE); +            LL_PROFILE_ZONE_NAMED("genDrawInfo - allocate");  			buffer = createVertexBuffer(mask, buffer_usage);  			if(!buffer->allocateBuffer(geom_count, index_count, TRUE))  			{ @@ -6843,6 +6777,8 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace  void LLGeometryManager::addGeometryCount(LLSpatialGroup* group, U32 &vertex_count, U32 &index_count)  {	 +    LL_PROFILE_ZONE_SCOPED; +  	//initialize to default usage for this partition  	U32 usage = group->getSpatialPartition()->mBufferUsage; diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp index 12def24a0d..efe6aa158e 100644 --- a/indra/newview/llvowater.cpp +++ b/indra/newview/llvowater.cpp @@ -114,11 +114,9 @@ LLDrawable *LLVOWater::createDrawable(LLPipeline *pipeline)  	return mDrawable;  } -static LLTrace::BlockTimerStatHandle FTM_UPDATE_WATER("Update Water"); -  BOOL LLVOWater::updateGeometry(LLDrawable *drawable)  { -	LL_RECORD_BLOCK_TIME(FTM_UPDATE_WATER); +    LL_PROFILE_ZONE_SCOPED;  	LLFace *face;  	if (drawable->getNumFaces() < 1) diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp index e292c4b8d8..d1f584cbca 100644 --- a/indra/newview/llvowlsky.cpp +++ b/indra/newview/llvowlsky.cpp @@ -142,11 +142,9 @@ void LLVOWLSky::restoreGL()  	gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL, TRUE);  } -static LLTrace::BlockTimerStatHandle FTM_GEO_SKY("Windlight Sky Geometry"); -  BOOL LLVOWLSky::updateGeometry(LLDrawable * drawable)  { -    LL_RECORD_BLOCK_TIME(FTM_GEO_SKY); +    LL_PROFILE_ZONE_SCOPED;  	LLStrider<LLVector3>	vertices;  	LLStrider<LLVector2>	texCoords;  	LLStrider<U16>			indices; diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index c7b0a2bfb4..0a8457eb2c 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -62,6 +62,8 @@  #include <cstring> +LLWorld* LLSimpleton<LLWorld>::sInstance = nullptr; +  //  // Globals  // @@ -135,6 +137,7 @@ void LLWorld::destroyClass()  	LLDrawable::incrementVisible();  	LLSceneMonitor::deleteSingleton(); +    LLWorld::deleteSingleton();  } @@ -1077,6 +1080,7 @@ void LLWorld::updateWaterObjects()  void LLWorld::shiftRegions(const LLVector3& offset)  { +    LL_PROFILE_ZONE_SCOPED;  	for (region_list_t::const_iterator i = getRegionList().begin(); i != getRegionList().end(); ++i)  	{  		LLViewerRegion* region = *i; @@ -1147,11 +1151,9 @@ void LLWorld::disconnectRegions()  	}  } -static LLTrace::BlockTimerStatHandle FTM_ENABLE_SIMULATOR("Enable Sim"); -  void process_enable_simulator(LLMessageSystem *msg, void **user_data)  { -	LL_RECORD_BLOCK_TIME(FTM_ENABLE_SIMULATOR); +    LL_PROFILE_ZONE_SCOPED;  	// enable the appropriate circuit for this simulator and   	// add its values into the gSimulator structure  	U64		handle; @@ -1217,12 +1219,11 @@ public:  	}  }; -static LLTrace::BlockTimerStatHandle FTM_DISABLE_REGION("Disable Region");  // disable the circuit to this simulator  // Called in response to "DisableSimulator" message.  void process_disable_simulator(LLMessageSystem *mesgsys, void **user_data)  { -    LL_RECORD_BLOCK_TIME(FTM_DISABLE_REGION); +    LL_PROFILE_ZONE_SCOPED;      LLHost host = mesgsys->getSender(); diff --git a/indra/newview/llworld.h b/indra/newview/llworld.h index 98552bc4d1..69f2df4203 100644 --- a/indra/newview/llworld.h +++ b/indra/newview/llworld.h @@ -59,11 +59,12 @@ class LLVOAvatar;  // as simulators are connected to, viewer_regions are popped off the stack and connected as required  // as simulators are removed, they are pushed back onto the stack -class LLWorld : public LLSingleton<LLWorld> +class LLWorld : public LLSimpleton<LLWorld>  { -	LLSINGLETON(LLWorld);  public: -	void destroyClass(); +    LLWorld(); + +    void destroyClass();  	LLViewerRegion*	addRegion(const U64 ®ion_handle, const LLHost &host);  		// safe to call if already present, does the "right thing" if diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 7aa05fb22f..6ed6e20b03 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -238,7 +238,6 @@ const LLMatrix4* gGLLastMatrix = NULL;  LLTrace::BlockTimerStatHandle FTM_RENDER_GEOMETRY("Render Geometry");  LLTrace::BlockTimerStatHandle FTM_RENDER_GRASS("Grass");  LLTrace::BlockTimerStatHandle FTM_RENDER_INVISIBLE("Invisible"); -LLTrace::BlockTimerStatHandle FTM_RENDER_OCCLUSION("Occlusion");  LLTrace::BlockTimerStatHandle FTM_RENDER_SHINY("Shiny");  LLTrace::BlockTimerStatHandle FTM_RENDER_SIMPLE("Simple");  LLTrace::BlockTimerStatHandle FTM_RENDER_TERRAIN("Terrain"); @@ -253,14 +252,12 @@ LLTrace::BlockTimerStatHandle FTM_RENDER_MATERIALS("Render Materials");  LLTrace::BlockTimerStatHandle FTM_RENDER_FULLBRIGHT("Fullbright");  LLTrace::BlockTimerStatHandle FTM_RENDER_GLOW("Glow");  LLTrace::BlockTimerStatHandle FTM_GEO_UPDATE("Geo Update"); -LLTrace::BlockTimerStatHandle FTM_PIPELINE_CREATE("Pipeline Create");  LLTrace::BlockTimerStatHandle FTM_POOLRENDER("RenderPool");  LLTrace::BlockTimerStatHandle FTM_POOLS("Pools");  LLTrace::BlockTimerStatHandle FTM_DEFERRED_POOLRENDER("RenderPool (Deferred)");  LLTrace::BlockTimerStatHandle FTM_DEFERRED_POOLS("Pools (Deferred)");  LLTrace::BlockTimerStatHandle FTM_POST_DEFERRED_POOLRENDER("RenderPool (Post)");  LLTrace::BlockTimerStatHandle FTM_POST_DEFERRED_POOLS("Pools (Post)"); -LLTrace::BlockTimerStatHandle FTM_RENDER_BLOOM_FBO("First FBO");  LLTrace::BlockTimerStatHandle FTM_STATESORT("Sort Draw State");  LLTrace::BlockTimerStatHandle FTM_PIPELINE("Pipeline");  LLTrace::BlockTimerStatHandle FTM_CLIENT_COPY("Client Copy"); @@ -269,11 +266,8 @@ LLTrace::BlockTimerStatHandle FTM_RENDER_DEFERRED("Deferred Shading");  LLTrace::BlockTimerStatHandle FTM_RENDER_UI_HUD("HUD");  LLTrace::BlockTimerStatHandle FTM_RENDER_UI_3D("3D");  LLTrace::BlockTimerStatHandle FTM_RENDER_UI_2D("2D"); -LLTrace::BlockTimerStatHandle FTM_RENDER_UI_DEBUG_TEXT("Debug Text"); -LLTrace::BlockTimerStatHandle FTM_RENDER_UI_SCENE_MON("Scene Mon");  static LLTrace::BlockTimerStatHandle FTM_STATESORT_DRAWABLE("Sort Drawables"); -static LLTrace::BlockTimerStatHandle FTM_STATESORT_POSTSORT("Post Sort");  static LLStaticHashedString sTint("tint");  static LLStaticHashedString sAmbiance("ambiance"); @@ -727,8 +721,6 @@ void LLPipeline::destroyGL()  	}  } -static LLTrace::BlockTimerStatHandle FTM_RESIZE_SCREEN_TEXTURE("Resize Screen Texture"); -  void LLPipeline::requestResizeScreenTexture()  {      gResizeScreenTexture = TRUE; @@ -748,7 +740,6 @@ void LLPipeline::resizeShadowTexture()  void LLPipeline::resizeScreenTexture()  { -	LL_RECORD_BLOCK_TIME(FTM_RESIZE_SCREEN_TEXTURE);  	if (gPipeline.canUseVertexShaders() && assertInitialized())  	{  		GLuint resX = gViewerWindow->getWorldViewWidthRaw(); @@ -1518,6 +1509,7 @@ public:  // Called when a texture changes # of channels (causes faces to move to alpha pool)  void LLPipeline::dirtyPoolObjectTextures(const std::set<LLViewerFetchedTexture*>& textures)  { +    LL_PROFILE_ZONE_SCOPED;  	assertInitialized();  	// *TODO: This is inefficient and causes frame spikes; need a better way to do this @@ -1729,15 +1721,9 @@ void LLPipeline::allocDrawable(LLViewerObject *vobj)  } -static LLTrace::BlockTimerStatHandle FTM_UNLINK("Unlink"); -static LLTrace::BlockTimerStatHandle FTM_REMOVE_FROM_MOVE_LIST("Movelist"); -static LLTrace::BlockTimerStatHandle FTM_REMOVE_FROM_SPATIAL_PARTITION("Spatial Partition"); -static LLTrace::BlockTimerStatHandle FTM_REMOVE_FROM_LIGHT_SET("Light Set"); -static LLTrace::BlockTimerStatHandle FTM_REMOVE_FROM_HIGHLIGHT_SET("Highlight Set"); -  void LLPipeline::unlinkDrawable(LLDrawable *drawable)  { -	LL_RECORD_BLOCK_TIME(FTM_UNLINK); +    LL_PROFILE_ZONE_SCOPED;  	assertInitialized(); @@ -1746,7 +1732,6 @@ void LLPipeline::unlinkDrawable(LLDrawable *drawable)  	// Based on flags, remove the drawable from the queues that it's on.  	if (drawablep->isState(LLDrawable::ON_MOVE_LIST))  	{ -		LL_RECORD_BLOCK_TIME(FTM_REMOVE_FROM_MOVE_LIST);  		LLDrawable::drawable_vector_t::iterator iter = std::find(mMovedList.begin(), mMovedList.end(), drawablep);  		if (iter != mMovedList.end())  		{ @@ -1756,7 +1741,6 @@ void LLPipeline::unlinkDrawable(LLDrawable *drawable)  	if (drawablep->getSpatialGroup())  	{ -		LL_RECORD_BLOCK_TIME(FTM_REMOVE_FROM_SPATIAL_PARTITION);  		if (!drawablep->getSpatialGroup()->getSpatialPartition()->remove(drawablep, drawablep->getSpatialGroup()))  		{  #ifdef LL_RELEASE_FOR_DOWNLOAD @@ -1767,30 +1751,24 @@ void LLPipeline::unlinkDrawable(LLDrawable *drawable)  		}  	} -	{ -		LL_RECORD_BLOCK_TIME(FTM_REMOVE_FROM_LIGHT_SET); -		mLights.erase(drawablep); +	mLights.erase(drawablep); -		for (light_set_t::iterator iter = mNearbyLights.begin(); -					iter != mNearbyLights.end(); iter++) +	for (light_set_t::iterator iter = mNearbyLights.begin(); +				iter != mNearbyLights.end(); iter++) +	{ +		if (iter->drawable == drawablep)  		{ -			if (iter->drawable == drawablep) -			{ -				mNearbyLights.erase(iter); -				break; -			} +			mNearbyLights.erase(iter); +			break;  		}  	} -	{ -		LL_RECORD_BLOCK_TIME(FTM_REMOVE_FROM_HIGHLIGHT_SET); -		HighlightItem item(drawablep); -		mHighlightSet.erase(item); +	HighlightItem item(drawablep); +	mHighlightSet.erase(item); -		if (mHighlightObject == drawablep) -		{ -			mHighlightObject = NULL; -		} +	if (mHighlightObject == drawablep) +	{ +		mHighlightObject = NULL;  	}  	for (U32 i = 0; i < 2; ++i) @@ -1805,14 +1783,12 @@ void LLPipeline::unlinkDrawable(LLDrawable *drawable)  			mTargetShadowSpotLight[i] = NULL;  		}  	} - -  }  //static  void LLPipeline::removeMutedAVsLights(LLVOAvatar* muted_avatar)  { -	LL_RECORD_BLOCK_TIME(FTM_REMOVE_FROM_LIGHT_SET); +    LL_PROFILE_ZONE_SCOPED;  	for (light_set_t::iterator iter = gPipeline.mNearbyLights.begin();  		 iter != gPipeline.mNearbyLights.end(); iter++)  	{ @@ -1840,7 +1816,7 @@ U32 LLPipeline::addObject(LLViewerObject *vobj)  void LLPipeline::createObjects(F32 max_dtime)  { -	LL_RECORD_BLOCK_TIME(FTM_PIPELINE_CREATE); +    LL_PROFILE_ZONE_SCOPED;  	LLTimer update_timer; @@ -1864,6 +1840,7 @@ void LLPipeline::createObjects(F32 max_dtime)  void LLPipeline::createObject(LLViewerObject* vobj)  { +    LL_PROFILE_ZONE_SCOPED;  	LLDrawable* drawablep = vobj->mDrawable;  	if (!drawablep) @@ -2010,14 +1987,9 @@ void LLPipeline::updateMovedList(LLDrawable::drawable_vector_t& moved_list)  	}  } -static LLTrace::BlockTimerStatHandle FTM_OCTREE_BALANCE("Balance Octree"); -static LLTrace::BlockTimerStatHandle FTM_UPDATE_MOVE("Update Move"); -static LLTrace::BlockTimerStatHandle FTM_RETEXTURE("Retexture"); -static LLTrace::BlockTimerStatHandle FTM_MOVED_LIST("Moved List"); -  void LLPipeline::updateMove()  { -	LL_RECORD_BLOCK_TIME(FTM_UPDATE_MOVE); +    LL_PROFILE_ZONE_SCOPED;  	if (FreezeTime)  	{ @@ -2026,49 +1998,38 @@ void LLPipeline::updateMove()  	assertInitialized(); +	for (LLDrawable::drawable_set_t::iterator iter = mRetexturedList.begin(); +			iter != mRetexturedList.end(); ++iter)  	{ -		LL_RECORD_BLOCK_TIME(FTM_RETEXTURE); - -		for (LLDrawable::drawable_set_t::iterator iter = mRetexturedList.begin(); -			 iter != mRetexturedList.end(); ++iter) +		LLDrawable* drawablep = *iter; +		if (drawablep && !drawablep->isDead())  		{ -			LLDrawable* drawablep = *iter; -			if (drawablep && !drawablep->isDead()) -			{ -				drawablep->updateTexture(); -			} +			drawablep->updateTexture();  		} -		mRetexturedList.clear();  	} +	mRetexturedList.clear(); -	{ -		LL_RECORD_BLOCK_TIME(FTM_MOVED_LIST); -		updateMovedList(mMovedList); -	} +	updateMovedList(mMovedList);  	//balance octrees +	for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();  +		iter != LLWorld::getInstance()->getRegionList().end(); ++iter)  	{ - 		LL_RECORD_BLOCK_TIME(FTM_OCTREE_BALANCE); - -		for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();  -			iter != LLWorld::getInstance()->getRegionList().end(); ++iter) +		LLViewerRegion* region = *iter; +		for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++)  		{ -			LLViewerRegion* region = *iter; -			for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++) +			LLSpatialPartition* part = region->getSpatialPartition(i); +			if (part)  			{ -				LLSpatialPartition* part = region->getSpatialPartition(i); -				if (part) -				{ -					part->mOctree->balance(); -				} +				part->mOctree->balance();  			} +		} -			//balance the VO Cache tree -			LLVOCachePartition* vo_part = region->getVOCachePartition(); -			if(vo_part) -			{ -				vo_part->mOctree->balance(); -			} +		//balance the VO Cache tree +		LLVOCachePartition* vo_part = region->getVOCachePartition(); +		if(vo_part) +		{ +			vo_part->mOctree->balance();  		}  	}  } @@ -2752,14 +2713,10 @@ bool LLPipeline::updateDrawableGeom(LLDrawable* drawablep, bool priority)  	return update_complete;  } -static LLTrace::BlockTimerStatHandle FTM_SEED_VBO_POOLS("Seed VBO Pool"); - -static LLTrace::BlockTimerStatHandle FTM_UPDATE_GL("Update GL"); -  void LLPipeline::updateGL()  { +    LL_PROFILE_ZONE_SCOPED;  	{ -		LL_RECORD_BLOCK_TIME(FTM_UPDATE_GL);  		while (!LLGLUpdate::sGLQ.empty())  		{  			LLGLUpdate* glu = LLGLUpdate::sGLQ.front(); @@ -2770,15 +2727,13 @@ void LLPipeline::updateGL()  	}  	{ //seed VBO Pools -		LL_RECORD_BLOCK_TIME(FTM_SEED_VBO_POOLS);  		LLVertexBuffer::seedPools();  	}  } -static LLTrace::BlockTimerStatHandle FTM_REBUILD_PRIORITY_GROUPS("Rebuild Priority Groups"); -  void LLPipeline::clearRebuildGroups()  { +    LL_PROFILE_ZONE_SCOPED;  	LLSpatialGroup::sg_vector_t	hudGroups;  	mGroupQ1Locked = true; @@ -2883,7 +2838,7 @@ void LLPipeline::clearRebuildDrawables()  void LLPipeline::rebuildPriorityGroups()  { -	LL_RECORD_BLOCK_TIME(FTM_REBUILD_PRIORITY_GROUPS); +    LL_PROFILE_ZONE_SCOPED;  	LLTimer update_timer;  	assertInitialized(); @@ -2905,8 +2860,6 @@ void LLPipeline::rebuildPriorityGroups()  } -static LLTrace::BlockTimerStatHandle FTM_REBUILD_GROUPS("Rebuild Groups"); -  void LLPipeline::rebuildGroups()  {  	if (mGroupQ2.empty()) @@ -2914,7 +2867,7 @@ void LLPipeline::rebuildGroups()  		return;  	} -	LL_RECORD_BLOCK_TIME(FTM_REBUILD_GROUPS); +    LL_PROFILE_ZONE_SCOPED;  	mGroupQ2Locked = true;  	// Iterate through some drawables on the non-priority build queue  	S32 size = (S32) mGroupQ2.size(); @@ -3160,12 +3113,9 @@ void LLPipeline::markShift(LLDrawable *drawablep)  	}  } -static LLTrace::BlockTimerStatHandle FTM_SHIFT_DRAWABLE("Shift Drawable"); -static LLTrace::BlockTimerStatHandle FTM_SHIFT_OCTREE("Shift Octree"); -static LLTrace::BlockTimerStatHandle FTM_SHIFT_HUD("Shift HUD"); -  void LLPipeline::shiftObjects(const LLVector3 &offset)  { +    LL_PROFILE_ZONE_SCOPED;  	assertInitialized();  	glClear(GL_DEPTH_BUFFER_BIT); @@ -3174,46 +3124,36 @@ void LLPipeline::shiftObjects(const LLVector3 &offset)  	LLVector4a offseta;  	offseta.load3(offset.mV); +	for (LLDrawable::drawable_vector_t::iterator iter = mShiftList.begin(); +			iter != mShiftList.end(); iter++)  	{ -		LL_RECORD_BLOCK_TIME(FTM_SHIFT_DRAWABLE); - -		for (LLDrawable::drawable_vector_t::iterator iter = mShiftList.begin(); -			 iter != mShiftList.end(); iter++) +		LLDrawable *drawablep = *iter; +		if (drawablep->isDead())  		{ -			LLDrawable *drawablep = *iter; -			if (drawablep->isDead()) -			{ -				continue; -			}	 -			drawablep->shiftPos(offseta);	 -			drawablep->clearState(LLDrawable::ON_SHIFT_LIST); -		} -		mShiftList.resize(0); +			continue; +		}	 +		drawablep->shiftPos(offseta);	 +		drawablep->clearState(LLDrawable::ON_SHIFT_LIST);  	} - +	mShiftList.resize(0); +	for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();  +			iter != LLWorld::getInstance()->getRegionList().end(); ++iter)  	{ -		LL_RECORD_BLOCK_TIME(FTM_SHIFT_OCTREE); -		for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();  -				iter != LLWorld::getInstance()->getRegionList().end(); ++iter) +		LLViewerRegion* region = *iter; +		for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++)  		{ -			LLViewerRegion* region = *iter; -			for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++) +			LLSpatialPartition* part = region->getSpatialPartition(i); +			if (part)  			{ -				LLSpatialPartition* part = region->getSpatialPartition(i); -				if (part) -				{ -					part->shift(offseta); -				} +				part->shift(offseta);  			}  		}  	} -	{ -		LL_RECORD_BLOCK_TIME(FTM_SHIFT_HUD); -		LLHUDText::shiftAll(offset); -		LLHUDNameTag::shiftAll(offset); -	} +	LLHUDText::shiftAll(offset); +	LLHUDNameTag::shiftAll(offset); +  	display_update_camera();  } @@ -3244,10 +3184,9 @@ void LLPipeline::markPartitionMove(LLDrawable* drawable)  	}  } -static LLTrace::BlockTimerStatHandle FTM_PROCESS_PARTITIONQ("PartitionQ");  void LLPipeline::processPartitionQ()  { -	LL_RECORD_BLOCK_TIME(FTM_PROCESS_PARTITIONQ); +    LL_PROFILE_ZONE_SCOPED;  	for (LLDrawable::drawable_list_t::iterator iter = mPartitionQ.begin(); iter != mPartitionQ.end(); ++iter)  	{  		LLDrawable* drawable = *iter; @@ -3347,8 +3286,6 @@ void LLPipeline::markRebuild(LLDrawable *drawablep, LLDrawable::EDrawableFlags f  	}  } -static LLTrace::BlockTimerStatHandle FTM_RESET_DRAWORDER("Reset Draw Order"); -  void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result)  {  	if (hasAnyRenderType(LLPipeline::RENDER_TYPE_AVATAR, @@ -3362,7 +3299,6 @@ void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result)  					  LLPipeline::END_RENDER_TYPES))  	{  		//clear faces from face pools -		LL_RECORD_BLOCK_TIME(FTM_RESET_DRAWORDER);  		gPipeline.resetDrawOrders();  	} @@ -3811,7 +3747,7 @@ void LLPipeline::touchTextures(LLDrawInfo* info)  void LLPipeline::postSort(LLCamera& camera)  { -	LL_RECORD_BLOCK_TIME(FTM_STATESORT_POSTSORT); +    LL_PROFILE_ZONE_SCOPED;  	assertInitialized(); @@ -4837,6 +4773,7 @@ void LLPipeline::renderGeomShadow(LLCamera& camera)  void LLPipeline::addTrianglesDrawn(S32 index_count, U32 render_type)  { +    LL_PROFILE_ZONE_SCOPED;  	assertInitialized();  	S32 count = 0;  	if (render_type == LLRender::TRIANGLE_STRIP) @@ -5617,11 +5554,9 @@ void LLPipeline::renderDebug()  	}  } -static LLTrace::BlockTimerStatHandle FTM_REBUILD_POOLS("Rebuild Pools"); -  void LLPipeline::rebuildPools()  { -	LL_RECORD_BLOCK_TIME(FTM_REBUILD_POOLS); +    LL_PROFILE_ZONE_SCOPED;  	assertInitialized(); @@ -5965,6 +5900,7 @@ void LLPipeline::removeFromQuickLookup( LLDrawPool* poolp )  void LLPipeline::resetDrawOrders()  { +    LL_PROFILE_ZONE_SCOPED;  	assertInitialized();  	// Iterate through all of the draw pools and rebuild them.  	for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter) @@ -7380,8 +7316,6 @@ void LLPipeline::resetVertexBuffers()  	mResetVertexBuffers = true;  } -static LLTrace::BlockTimerStatHandle FTM_RESET_VB("Reset VB"); -  void LLPipeline::doResetVertexBuffers(bool forced)  {  	if (!mResetVertexBuffers) @@ -7403,7 +7337,7 @@ void LLPipeline::doResetVertexBuffers(bool forced)  		}  	} -	LL_RECORD_BLOCK_TIME(FTM_RESET_VB); +    LL_PROFILE_ZONE_SCOPED;  	mResetVertexBuffers = false;  	mCubeVB = NULL; @@ -7603,11 +7537,8 @@ void LLPipeline::renderFinalize()      if (sRenderGlow)      { -        { -            LL_RECORD_BLOCK_TIME(FTM_RENDER_BLOOM_FBO); -            mGlow[2].bindTarget(); -            mGlow[2].clear(); -        } +        mGlow[2].bindTarget(); +        mGlow[2].clear();          gGlowExtractProgram.bind();          F32 minLum = llmax((F32) RenderGlowMinLuminance, 0.0f); @@ -7673,11 +7604,8 @@ void LLPipeline::renderFinalize()          for (S32 i = 0; i < kernel; i++)          { -            { -                LL_RECORD_BLOCK_TIME(FTM_RENDER_BLOOM_FBO); -                mGlow[i % 2].bindTarget(); -                mGlow[i % 2].clear(); -            } +            mGlow[i % 2].bindTarget(); +            mGlow[i % 2].clear();              if (i == 0)              { @@ -8194,11 +8122,9 @@ void LLPipeline::renderFinalize()      LLGLState::checkTextureChannels();  } -static LLTrace::BlockTimerStatHandle FTM_BIND_DEFERRED("Bind Deferred"); -  void LLPipeline::bindDeferredShader(LLGLSLShader& shader, LLRenderTarget* light_target)  { -	LL_RECORD_BLOCK_TIME(FTM_BIND_DEFERRED); +    LL_PROFILE_ZONE_SCOPED;      LLRenderTarget* deferred_target       = &mDeferredScreen;      LLRenderTarget* deferred_depth_target = &mDeferredDepth; @@ -8458,16 +8384,7 @@ LLVector4 pow4fsrgb(LLVector4 v, F32 f)  	return v;  } -static LLTrace::BlockTimerStatHandle FTM_GI_TRACE("Trace"); -static LLTrace::BlockTimerStatHandle FTM_GI_GATHER("Gather"); -static LLTrace::BlockTimerStatHandle FTM_SUN_SHADOW("Shadow Map"); -static LLTrace::BlockTimerStatHandle FTM_SOFTEN_SHADOW("Shadow Soften"); -static LLTrace::BlockTimerStatHandle FTM_EDGE_DETECTION("Find Edges"); -static LLTrace::BlockTimerStatHandle FTM_LOCAL_LIGHTS("Local Lights"); -static LLTrace::BlockTimerStatHandle FTM_ATMOSPHERICS("Atmospherics"); -static LLTrace::BlockTimerStatHandle FTM_FULLSCREEN_LIGHTS("Fullscreen Lights"); -static LLTrace::BlockTimerStatHandle FTM_PROJECTORS("Projectors"); -static LLTrace::BlockTimerStatHandle FTM_POST("Post"); +static LLTrace::BlockTimerStatHandle FTM_DEFERRED_LIGHTING("Deferred Lighting");  void LLPipeline::renderDeferredLighting(LLRenderTarget *screen_target)  { @@ -8475,6 +8392,7 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget *screen_target)      {          return;      } +    LL_RECORD_BLOCK_TIME(FTM_DEFERRED_LIGHTING);      LLRenderTarget *deferred_target       = &mDeferredScreen;      LLRenderTarget *deferred_depth_target = &mDeferredDepth; @@ -8547,7 +8465,7 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget *screen_target)          {              deferred_light_target->bindTarget();              {  // paint shadow/SSAO light map (direct lighting lightmap) -                LL_RECORD_BLOCK_TIME(FTM_SUN_SHADOW); +                LL_PROFILE_ZONE_NAMED("renderDeferredLighting - sun shadow");                  bindDeferredShader(gDeferredSunProgram, deferred_light_target);                  mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX);                  glClearColor(1, 1, 1, 1); @@ -8593,7 +8511,7 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget *screen_target)          if (RenderDeferredSSAO)          {  // soften direct lighting lightmap -            LL_RECORD_BLOCK_TIME(FTM_SOFTEN_SHADOW); +            LL_PROFILE_ZONE_NAMED("renderDeferredLighting - soften shadow");              // blur lightmap              screen_target->bindTarget();              glClearColor(1, 1, 1, 1); @@ -8671,7 +8589,7 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget *screen_target)          {  // apply sunlight contribution              LLGLSLShader &soften_shader = LLPipeline::sUnderWaterRender ? gDeferredSoftenWaterProgram : gDeferredSoftenProgram; -            LL_RECORD_BLOCK_TIME(FTM_ATMOSPHERICS); +            LL_PROFILE_ZONE_NAMED("renderDeferredLighting - atmospherics");              bindDeferredShader(soften_shader);              LLEnvironment &environment = LLEnvironment::instance(); @@ -8737,6 +8655,7 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget *screen_target)              LLVertexBuffer::unbind();              { +                LL_PROFILE_ZONE_NAMED("renderDeferredLighting - local lights");                  bindDeferredShader(gDeferredLightProgram);                  if (mCubeVB.isNull()) @@ -8807,7 +8726,6 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget *screen_target)                                  continue;                              } -                            LL_RECORD_BLOCK_TIME(FTM_LOCAL_LIGHTS);                              gDeferredLightProgram.uniform3fv(LLShaderMgr::LIGHT_CENTER, 1, c);                              gDeferredLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s);                              gDeferredLightProgram.uniform3fv(LLShaderMgr::DIFFUSE_COLOR, 1, col.mV); @@ -8843,6 +8761,7 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget *screen_target)              if (!spot_lights.empty())              { +                LL_PROFILE_ZONE_NAMED("renderDeferredLighting - projectors");                  LLGLDepthTest depth(GL_TRUE, GL_FALSE);                  bindDeferredShader(gDeferredSpotLightProgram); @@ -8852,7 +8771,6 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget *screen_target)                  for (LLDrawable::drawable_list_t::iterator iter = spot_lights.begin(); iter != spot_lights.end(); ++iter)                  { -                    LL_RECORD_BLOCK_TIME(FTM_PROJECTORS);                      LLDrawable *drawablep = *iter;                      LLVOVolume *volume = drawablep->getVOVolume(); @@ -8888,6 +8806,7 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget *screen_target)              vert[2].set(3, 1, 0);              { +                LL_PROFILE_ZONE_NAMED("renderDeferredLighting - fullscreen lights");                  LLGLDepthTest depth(GL_FALSE);                  // full screen blit @@ -8907,7 +8826,6 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget *screen_target)                  while (!fullscreen_lights.empty())                  { -                    LL_RECORD_BLOCK_TIME(FTM_FULLSCREEN_LIGHTS);                      light[count] = fullscreen_lights.front();                      fullscreen_lights.pop_front();                      col[count] = light_colors.front(); @@ -8939,7 +8857,6 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget *screen_target)                  for (LLDrawable::drawable_list_t::iterator iter = fullscreen_spot_lights.begin(); iter != fullscreen_spot_lights.end(); ++iter)                  { -                    LL_RECORD_BLOCK_TIME(FTM_PROJECTORS);                      LLDrawable *drawablep           = *iter;                      LLVOVolume *volume              = drawablep->getVOVolume();                      LLVector3   center              = drawablep->getPositionAgent(); @@ -9849,10 +9766,9 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera  	LLPipeline::sShadowRender = false;  } -static LLTrace::BlockTimerStatHandle FTM_VISIBLE_CLOUD("Visible Cloud");  bool LLPipeline::getVisiblePointCloud(LLCamera& camera, LLVector3& min, LLVector3& max, std::vector<LLVector3>& fp, LLVector3 light_dir)  { -	LL_RECORD_BLOCK_TIME(FTM_VISIBLE_CLOUD); +    LL_PROFILE_ZONE_SCOPED;  	//get point cloud of intersection of frust and min, max  	if (getVisibleExtents(camera, min, max)) @@ -10109,9 +10025,6 @@ LLRenderTarget* LLPipeline::getShadowTarget(U32 i)  }  static LLTrace::BlockTimerStatHandle FTM_GEN_SUN_SHADOW("Gen Sun Shadow"); -static LLTrace::BlockTimerStatHandle FTM_GEN_SUN_SHADOW_SETUP("Sun Shadow Setup"); -static LLTrace::BlockTimerStatHandle FTM_GEN_SUN_SHADOW_RENDER_DIRECTIONAL("Render Dir"); -static LLTrace::BlockTimerStatHandle FTM_GEN_SUN_SHADOW_SPOT_SETUP("Spot Shadow Setup");  static LLTrace::BlockTimerStatHandle FTM_GEN_SUN_SHADOW_SPOT_RENDER("Spot Shadow Render");  void LLPipeline::generateSunShadow(LLCamera& camera) @@ -10907,14 +10820,11 @@ void LLPipeline::renderGroups(LLRenderPass* pass, U32 type, U32 mask, bool textu  	}  } -static LLTrace::BlockTimerStatHandle FTM_IMPOSTOR_MARK_VISIBLE("Impostor Mark Visible"); -static LLTrace::BlockTimerStatHandle FTM_IMPOSTOR_SETUP("Impostor Setup"); -static LLTrace::BlockTimerStatHandle FTM_IMPOSTOR_BACKGROUND("Impostor Background"); -static LLTrace::BlockTimerStatHandle FTM_IMPOSTOR_ALLOCATE("Impostor Allocate"); -static LLTrace::BlockTimerStatHandle FTM_IMPOSTOR_RESIZE("Impostor Resize"); +static LLTrace::BlockTimerStatHandle FTM_GENERATE_IMPOSTOR("Generate Impostor");  void LLPipeline::generateImpostor(LLVOAvatar* avatar)  { +    LL_RECORD_BLOCK_TIME(FTM_GENERATE_IMPOSTOR);  	LLGLState::checkStates();  	LLGLState::checkTextureChannels();  	LLGLState::checkClientArrays(); @@ -10989,7 +10899,6 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)  	LLViewerCamera* viewer_camera = LLViewerCamera::getInstance();  	{ -		LL_RECORD_BLOCK_TIME(FTM_IMPOSTOR_MARK_VISIBLE);  		markVisible(avatar->mDrawable, *viewer_camera);  		LLVOAvatar::attachment_map_t::iterator iter; @@ -11018,7 +10927,6 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)  	U32 resX = 0;  	{ -		LL_RECORD_BLOCK_TIME(FTM_IMPOSTOR_SETUP);  		const LLVector4a* ext = avatar->mDrawable->getSpatialExtents();  		LLVector3 pos(avatar->getRenderPosition()+avatar->getImpostorOffset()); @@ -11075,9 +10983,6 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)  		if (!avatar->mImpostor.isComplete())  		{ -			LL_RECORD_BLOCK_TIME(FTM_IMPOSTOR_ALLOCATE); -			 -  			if (LLPipeline::sRenderDeferred)  			{  				avatar->mImpostor.allocate(resX,resY,GL_SRGB8_ALPHA8,TRUE,FALSE); @@ -11094,7 +10999,6 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)  		}  		else if(resX != avatar->mImpostor.getWidth() || resY != avatar->mImpostor.getHeight())  		{ -			LL_RECORD_BLOCK_TIME(FTM_IMPOSTOR_RESIZE);  			avatar->mImpostor.resize(resX,resY);  		} @@ -11156,7 +11060,6 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)  	LLDrawPoolAvatar::sMinimumAlpha = old_alpha;  	{ //create alpha mask based on depth buffer (grey out if muted) -		LL_RECORD_BLOCK_TIME(FTM_IMPOSTOR_BACKGROUND);  		if (LLPipeline::sRenderDeferred)  		{  			GLuint buff = GL_COLOR_ATTACHMENT0; diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 8ffbddca21..b87a726647 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -66,7 +66,6 @@ bool setup_hud_matrices(const LLRect& screen_region); // specify portion of scre  extern LLTrace::BlockTimerStatHandle FTM_RENDER_GEOMETRY;  extern LLTrace::BlockTimerStatHandle FTM_RENDER_GRASS;  extern LLTrace::BlockTimerStatHandle FTM_RENDER_INVISIBLE; -extern LLTrace::BlockTimerStatHandle FTM_RENDER_OCCLUSION;  extern LLTrace::BlockTimerStatHandle FTM_RENDER_SHINY;  extern LLTrace::BlockTimerStatHandle FTM_RENDER_SIMPLE;  extern LLTrace::BlockTimerStatHandle FTM_RENDER_TERRAIN; @@ -87,8 +86,6 @@ extern LLTrace::BlockTimerStatHandle FTM_CLIENT_COPY;  extern LLTrace::BlockTimerStatHandle FTM_RENDER_UI_HUD;  extern LLTrace::BlockTimerStatHandle FTM_RENDER_UI_3D;  extern LLTrace::BlockTimerStatHandle FTM_RENDER_UI_2D; -extern LLTrace::BlockTimerStatHandle FTM_RENDER_UI_DEBUG_TEXT; -extern LLTrace::BlockTimerStatHandle FTM_RENDER_UI_SCENE_MON;  class LLPipeline  { | 
