summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorMaksymS ProductEngine <msavchenko@productengine.com>2012-08-31 00:38:16 +0300
committerMaksymS ProductEngine <msavchenko@productengine.com>2012-08-31 00:38:16 +0300
commitd1481a599fa8bd65f505e0bd9dec33370a3c68c8 (patch)
tree9813d3eaee5ea8c1b59dc5fb8bb4cfca99a2d888 /indra
parent5a03b8282da64433c2525f0950e8fb86995f66dc (diff)
MAINT-1486 FIXED Crash on login (Unhandled exception)
Diffstat (limited to 'indra')
-rw-r--r--indra/llcommon/llfasttimer.cpp39
-rw-r--r--indra/llcommon/llfasttimer.h1
-rw-r--r--indra/newview/llappviewer.cpp8
-rw-r--r--indra/newview/llflexibleobject.cpp2
-rw-r--r--indra/newview/llspatialpartition.cpp2
-rw-r--r--indra/newview/llviewerdisplay.cpp2
-rw-r--r--indra/newview/llvowlsky.cpp2
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)
{