diff options
| author | MaksymS ProductEngine <msavchenko@productengine.com> | 2012-08-31 00:38:16 +0300 | 
|---|---|---|
| committer | MaksymS ProductEngine <msavchenko@productengine.com> | 2012-08-31 00:38:16 +0300 | 
| commit | d1481a599fa8bd65f505e0bd9dec33370a3c68c8 (patch) | |
| tree | 9813d3eaee5ea8c1b59dc5fb8bb4cfca99a2d888 | |
| parent | 5a03b8282da64433c2525f0950e8fb86995f66dc (diff) | |
MAINT-1486 FIXED Crash on login (Unhandled exception)
| -rw-r--r-- | indra/llcommon/llfasttimer.cpp | 39 | ||||
| -rw-r--r-- | indra/llcommon/llfasttimer.h | 1 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llflexibleobject.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llspatialpartition.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llviewerdisplay.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llvowlsky.cpp | 2 | 
7 files changed, 44 insertions, 12 deletions
diff --git a/indra/llcommon/llfasttimer.cpp b/indra/llcommon/llfasttimer.cpp index ff6806082c..670c90351e 100644 --- a/indra/llcommon/llfasttimer.cpp +++ b/indra/llcommon/llfasttimer.cpp @@ -128,13 +128,6 @@ public:  	LLFastTimer::NamedTimer& createNamedTimer(const std::string& name, LLFastTimer::FrameState* state)  	{ -		timer_map_t::iterator found_it = mTimers.find(name); -		if (found_it != mTimers.end()) -		{ -			llerrs << "Duplicate timer declaration for: " << name << llendl; -			return *found_it->second; -		} -  		LLFastTimer::NamedTimer* timer = new LLFastTimer::NamedTimer(name);  		timer->setFrameState(state);  		timer->setParent(mTimerRoot); @@ -155,7 +148,7 @@ public:  	LLFastTimer::NamedTimer* getRootTimer() { return mTimerRoot; } -	typedef std::map<std::string, LLFastTimer::NamedTimer*> timer_map_t; +	typedef std::multimap<std::string, LLFastTimer::NamedTimer*> timer_map_t;  	timer_map_t::iterator beginTimers() { return mTimers.begin(); }  	timer_map_t::iterator endTimers() { return mTimers.end(); }  	S32 timerCount() { return mTimers.size(); } @@ -646,6 +639,36 @@ const LLFastTimer::NamedTimer* LLFastTimer::getTimerByName(const std::string& na  	return NamedTimerFactory::instance().getTimerByName(name);  } +//static +bool LLFastTimer::checkForDuplicates(std::string& duplicates) +{ +	typedef NamedTimerFactory::timer_map_t::iterator timer_iterator; + +	bool duplicateFound = false; +	NamedTimerFactory& namedFactory = NamedTimerFactory::instance(); + +	if (namedFactory.timerCount() > 1) +	{ +		timer_iterator endPosition = namedFactory.endTimers(); +		timer_iterator ti = namedFactory.beginTimers(); +		std::string prevKey = ti->first; + +		for (ti++; ti != endPosition; ti++) +		{ +			const std::string& curKey = ti->first; +			if (0 == curKey.compare(prevKey)) +			{ +				if (duplicateFound) duplicates += ", "; +				duplicates += curKey; +				duplicateFound = true; +			} +			prevKey = curKey; +		} +	} + +	return duplicateFound; +} +  LLFastTimer::LLFastTimer(LLFastTimer::FrameState* state)  :	mFrameState(state)  { diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h index e42e549df5..b0d3ea5d60 100644 --- a/indra/llcommon/llfasttimer.h +++ b/indra/llcommon/llfasttimer.h @@ -224,6 +224,7 @@ public:  	static void writeLog(std::ostream& os);  	static const NamedTimer* getTimerByName(const std::string& name); +	static bool checkForDuplicates(std::string& duplicates);  	struct CurTimerData  	{ diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index bf01627bad..78151510d5 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -703,6 +703,14 @@ bool LLAppViewer::init()  	LL_INFOS("InitInfo") << "Configuration initialized." << LL_ENDL ; +	std::string duplicates; +	if(LLFastTimer::checkForDuplicates(duplicates)) +	{ +		LL_WARNS("InitInfo") << "There are duplicates created by LLFastTimer::DeclareTimer with names: '" +			<< duplicates << "'" << LL_ENDL; +		return false; +	} +  	//set the max heap size.  	initMaxHeapSize() ; diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index 22c265cb8a..a37e27363f 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -48,7 +48,7 @@ std::vector<LLVolumeImplFlexible*> LLVolumeImplFlexible::sInstanceList;  std::vector<S32> LLVolumeImplFlexible::sUpdateDelay;  static LLFastTimer::DeclareTimer FTM_FLEXIBLE_REBUILD("Rebuild"); -static LLFastTimer::DeclareTimer FTM_DO_FLEXIBLE_UPDATE("Update"); +static LLFastTimer::DeclareTimer FTM_DO_FLEXIBLE_UPDATE("Flexible Update");  // LLFlexibleObjectData::pack/unpack now in llprimitive.cpp diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 30f796a78e..5083478392 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -55,7 +55,7 @@  #include "llviewershadermgr.h"  static LLFastTimer::DeclareTimer FTM_FRUSTUM_CULL("Frustum Culling"); -static LLFastTimer::DeclareTimer FTM_CULL_REBOUND("Cull Rebound"); +static LLFastTimer::DeclareTimer FTM_CULL_REBOUND("Cull Rebound Partition");  const F32 SG_OCCLUSION_FUDGE = 0.25f;  #define SG_DISCARD_TOLERANCE 0.01f diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 705edc27f6..ffeea2f4df 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -217,7 +217,7 @@ static LLFastTimer::DeclareTimer FTM_UPDATE_SKY("Update Sky");  static LLFastTimer::DeclareTimer FTM_UPDATE_TEXTURES("Update Textures");  static LLFastTimer::DeclareTimer FTM_IMAGE_UPDATE("Update Images");  static LLFastTimer::DeclareTimer FTM_IMAGE_UPDATE_CLASS("Class"); -static LLFastTimer::DeclareTimer FTM_IMAGE_UPDATE_BUMP("Bump"); +static LLFastTimer::DeclareTimer FTM_IMAGE_UPDATE_BUMP("Image Update Bump");  static LLFastTimer::DeclareTimer FTM_IMAGE_UPDATE_LIST("List");  static LLFastTimer::DeclareTimer FTM_IMAGE_UPDATE_DELETE("Delete");  static LLFastTimer::DeclareTimer FTM_RESIZE_WINDOW("Resize Window"); diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp index a33f42cf84..7f17fd3e56 100644 --- a/indra/newview/llvowlsky.cpp +++ b/indra/newview/llvowlsky.cpp @@ -301,7 +301,7 @@ void LLVOWLSky::restoreGL()  	gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL, TRUE);  } -static LLFastTimer::DeclareTimer FTM_GEO_SKY("Sky Geometry"); +static LLFastTimer::DeclareTimer FTM_GEO_SKY("Windlight Sky Geometry");  BOOL LLVOWLSky::updateGeometry(LLDrawable * drawable)  {  | 
