summaryrefslogtreecommitdiff
path: root/indra/llcommon
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llcommon')
-rw-r--r--indra/llcommon/llerrorlegacy.h4
-rw-r--r--indra/llcommon/llfasttimer.h66
-rw-r--r--indra/llcommon/llpointer.h1
-rw-r--r--indra/llcommon/llrefcount.cpp11
-rw-r--r--indra/llcommon/llrefcount.h14
5 files changed, 55 insertions, 41 deletions
diff --git a/indra/llcommon/llerrorlegacy.h b/indra/llcommon/llerrorlegacy.h
index 7a970b1466..9920921a58 100644
--- a/indra/llcommon/llerrorlegacy.h
+++ b/indra/llcommon/llerrorlegacy.h
@@ -75,6 +75,10 @@ const int LL_ERR_PRICE_MISMATCH = -23018;
#define SHOW_ASSERT
#else // _DEBUG
+#ifdef LL_RELEASE_WITH_DEBUG_INFO
+#define SHOW_ASSERT
+#endif // LL_RELEASE_WITH_DEBUG_INFO
+
#ifdef RELEASE_SHOW_DEBUG
#define SHOW_DEBUG
#endif
diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h
index cd76bfe709..8af79c90fd 100644
--- a/indra/llcommon/llfasttimer.h
+++ b/indra/llcommon/llfasttimer.h
@@ -1,11 +1,11 @@
-/**
+/**
* @file llfasttimer.h
* @brief Declaration of a fast timer.
*
* $LicenseInfo:firstyear=2004&license=viewergpl$
- *
+ *
* Copyright (c) 2004-2009, Linden Research, Inc.
- *
+ *
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
@@ -13,17 +13,17 @@
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- *
+ *
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
- *
+ *
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
- *
+ *
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
@@ -69,7 +69,7 @@
inline U32 get_cpu_clock_count_32()
{
U32 ret_val;
- __asm
+ __asm
{
_emit 0x0f
_emit 0x31
@@ -85,7 +85,7 @@ inline U32 get_cpu_clock_count_32()
inline U64 get_cpu_clock_count_64()
{
U64 ret_val;
- __asm
+ __asm
{
_emit 0x0f
_emit 0x31
@@ -99,21 +99,21 @@ inline U64 get_cpu_clock_count_64()
#else
#define LL_INLINE
#endif
-
-#if (LL_LINUX || LL_SOLARIS || LL_DARWIN) && (defined(__i386__) || defined(__amd64__))
-inline U32 get_cpu_clock_count_32()
-{
- U64 x;
- __asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
- return (U32)x >> 8;
-}
-
-inline U32 get_cpu_clock_count_64()
-{
- U64 x;
- __asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
- return x >> 8;
-}
+
+#if (LL_LINUX || LL_SOLARIS || LL_DARWIN) && (defined(__i386__) || defined(__amd64__))
+inline U32 get_cpu_clock_count_32()
+{
+ U64 x;
+ __asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
+ return (U32)x >> 8;
+}
+
+inline U32 get_cpu_clock_count_64()
+{
+ U64 x;
+ __asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
+ return x >> 8;
+}
#endif
#if ( LL_DARWIN && !(defined(__i386__) || defined(__amd64__))) || (LL_SOLARIS && defined(__sparc__))
@@ -128,7 +128,7 @@ inline U32 get_cpu_clock_count_32()
}
inline U32 get_cpu_clock_count_64()
-{
+{
return get_clock_count();
}
#endif
@@ -158,7 +158,7 @@ public:
};
// stores a "named" timer instance to be reused via multiple LLFastTimer stack instances
- class LL_COMMON_API NamedTimer
+ class LL_COMMON_API NamedTimer
: public LLInstanceTracker<NamedTimer>
{
friend class DeclareTimer;
@@ -193,7 +193,7 @@ public:
FrameState& getFrameState() const;
- private:
+ private:
friend class LLFastTimer;
friend class NamedTimerFactory;
@@ -204,14 +204,14 @@ public:
// recursive call to gather total time from children
static void accumulateTimings();
- // updates cumulative times and hierarchy,
+ // updates cumulative times and hierarchy,
// can be called multiple times in a frame, at any point
static void processTimes();
static void buildHierarchy();
static void resetFrame();
static void reset();
-
+
//
// members
//
@@ -247,7 +247,7 @@ public:
private:
NamedTimer& mTimer;
- FrameState* mFrameState;
+ FrameState* mFrameState;
};
public:
@@ -267,7 +267,7 @@ public:
frame_state->mCalls++;
// keep current parent as long as it is active when we are
frame_state->mMoveUpTree |= (frame_state->mParent->mActiveCount == 0);
-
+
LLFastTimer::CurTimerData* cur_timer_data = &LLFastTimer::sCurTimerData;
mLastTimerData = *cur_timer_data;
cur_timer_data->mCurTimer = this;
@@ -305,7 +305,7 @@ public:
U64 timer_end = get_cpu_clock_count_64();
sTimerCycles += timer_end - timer_start;
sTimerCalls++;
-#endif
+#endif
}
public:
@@ -321,13 +321,13 @@ public:
typedef std::vector<FrameState> info_list_t;
static info_list_t& getFrameStateList();
-
+
// call this once a frame to reset timers
static void nextFrame();
// dumps current cumulative frame stats to log
// call nextFrame() to reset timers
- static void dumpCurTimes();
+ static void dumpCurTimes();
// call this to reset timer hierarchy, averages, etc.
static void reset();
diff --git a/indra/llcommon/llpointer.h b/indra/llcommon/llpointer.h
index 2c37eadcc6..e6c736a263 100644
--- a/indra/llcommon/llpointer.h
+++ b/indra/llcommon/llpointer.h
@@ -95,7 +95,6 @@ public:
bool notNull() const { return (mPointer != NULL); }
operator Type*() const { return mPointer; }
- operator const Type*() const { return mPointer; }
bool operator !=(Type* ptr) const { return (mPointer != ptr); }
bool operator ==(Type* ptr) const { return (mPointer == ptr); }
bool operator ==(const LLPointer<Type>& ptr) const { return (mPointer == ptr.mPointer); }
diff --git a/indra/llcommon/llrefcount.cpp b/indra/llcommon/llrefcount.cpp
index 33b6875fb0..c90b52f482 100644
--- a/indra/llcommon/llrefcount.cpp
+++ b/indra/llcommon/llrefcount.cpp
@@ -35,6 +35,17 @@
#include "llerror.h"
+LLRefCount::LLRefCount(const LLRefCount& other)
+: mRef(0)
+{
+}
+
+LLRefCount& LLRefCount::operator=(const LLRefCount&)
+{
+ // do nothing, since ref count is specific to *this* reference
+ return *this;
+}
+
LLRefCount::LLRefCount() :
mRef(0)
{
diff --git a/indra/llcommon/llrefcount.h b/indra/llcommon/llrefcount.h
index 9ab844eb22..a18f6706a9 100644
--- a/indra/llcommon/llrefcount.h
+++ b/indra/llcommon/llrefcount.h
@@ -41,22 +41,20 @@
class LL_COMMON_API LLRefCount
{
-private:
- LLRefCount(const LLRefCount& other); // no implementation
-private:
- LLRefCount& operator=(const LLRefCount&); // no implementation
protected:
+ LLRefCount(const LLRefCount& other);
+ LLRefCount& operator=(const LLRefCount&);
virtual ~LLRefCount(); // use unref()
public:
LLRefCount();
- void ref()
+ void ref() const
{
mRef++;
}
- S32 unref()
+ S32 unref() const
{
llassert(mRef >= 1);
if (0 == --mRef)
@@ -67,13 +65,15 @@ public:
return mRef;
}
+ //NOTE: when passing around a const LLRefCount object, this can return different results
+ // at different types, since mRef is mutable
S32 getNumRefs() const
{
return mRef;
}
private:
- S32 mRef;
+ mutable S32 mRef;
};
#endif