Merge
commit
d13f26a6fc
|
|
@ -1290,9 +1290,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>b853b8a3ab31eed95661a707a2979b5b</string>
|
||||
<string>037e1befefa64505c50fa40fe68e558e</string>
|
||||
<key>url</key>
|
||||
<string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llappearanceutility-interesting-source/rev/280817/arch/Linux/installer/llappearanceutility_source-0.1-linux-20130909.tar.bz2</string>
|
||||
<string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llappearanceutility-interesting-source/rev/282772/arch/Linux/installer/llappearanceutility_source-0.1-linux-20131023.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux</string>
|
||||
|
|
|
|||
|
|
@ -60,14 +60,14 @@ namespace LLTrace
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
// statics
|
||||
|
||||
bool BlockTimerStatHandle::sLog = false;
|
||||
std::string BlockTimerStatHandle::sLogName = "";
|
||||
bool BlockTimerStatHandle::sMetricLog = false;
|
||||
bool BlockTimer::sLog = false;
|
||||
std::string BlockTimer::sLogName = "";
|
||||
bool BlockTimer::sMetricLog = false;
|
||||
|
||||
#if LL_LINUX || LL_SOLARIS
|
||||
U64 BlockTimerStatHandle::sClockResolution = 1000000000; // Nanosecond resolution
|
||||
U64 BlockTimer::sClockResolution = 1000000000; // Nanosecond resolution
|
||||
#else
|
||||
U64 BlockTimerStatHandle::sClockResolution = 1000000; // Microsecond resolution
|
||||
U64 BlockTimer::sClockResolution = 1000000; // Microsecond resolution
|
||||
#endif
|
||||
|
||||
static LLMutex* sLogLock = NULL;
|
||||
|
|
@ -132,19 +132,19 @@ struct SortTimerByName
|
|||
};
|
||||
|
||||
static BlockTimerStatHandle sRootTimer("root", NULL);
|
||||
BlockTimerStatHandle& BlockTimerStatHandle::getRootTimeBlock()
|
||||
BlockTimerStatHandle& BlockTimer::getRootTimeBlock()
|
||||
{
|
||||
return sRootTimer;
|
||||
}
|
||||
|
||||
void BlockTimerStatHandle::pushLog(LLSD log)
|
||||
void BlockTimer::pushLog(LLSD log)
|
||||
{
|
||||
LLMutexLock lock(sLogLock);
|
||||
|
||||
sLogQueue.push(log);
|
||||
}
|
||||
|
||||
void BlockTimerStatHandle::setLogLock(LLMutex* lock)
|
||||
void BlockTimer::setLogLock(LLMutex* lock)
|
||||
{
|
||||
sLogLock = lock;
|
||||
}
|
||||
|
|
@ -152,12 +152,12 @@ void BlockTimerStatHandle::setLogLock(LLMutex* lock)
|
|||
|
||||
//static
|
||||
#if (LL_DARWIN || LL_LINUX || LL_SOLARIS) && !(defined(__i386__) || defined(__amd64__))
|
||||
U64 BlockTimerStatHandle::countsPerSecond()
|
||||
U64 BlockTimer::countsPerSecond()
|
||||
{
|
||||
return sClockResolution;
|
||||
}
|
||||
#else // windows or x86-mac or x86-linux or x86-solaris
|
||||
U64 BlockTimerStatHandle::countsPerSecond()
|
||||
U64 BlockTimer::countsPerSecond()
|
||||
{
|
||||
#if LL_FASTTIMER_USE_RDTSC || !LL_WINDOWS
|
||||
//getCPUFrequency returns MHz and sCPUClockFrequency wants to be in Hz
|
||||
|
|
@ -191,18 +191,18 @@ TimeBlockTreeNode& BlockTimerStatHandle::getTreeNode() const
|
|||
}
|
||||
|
||||
|
||||
void BlockTimerStatHandle::bootstrapTimerTree()
|
||||
void BlockTimer::bootstrapTimerTree()
|
||||
{
|
||||
for (BlockTimerStatHandle::instance_tracker_t::instance_iter it = BlockTimerStatHandle::instance_tracker_t::beginInstances(), end_it = BlockTimerStatHandle::instance_tracker_t::endInstances();
|
||||
it != end_it;
|
||||
++it)
|
||||
{
|
||||
BlockTimerStatHandle& timer = static_cast<BlockTimerStatHandle&>(*it);
|
||||
if (&timer == &BlockTimerStatHandle::getRootTimeBlock()) continue;
|
||||
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() == &BlockTimerStatHandle::getRootTimeBlock())
|
||||
if (timer.getParent() == &BlockTimer::getRootTimeBlock())
|
||||
{
|
||||
TimeBlockAccumulator& accumulator = timer.getCurrentAccumulator();
|
||||
|
||||
|
|
@ -220,9 +220,9 @@ void BlockTimerStatHandle::bootstrapTimerTree()
|
|||
// bump timers up tree if they have been flagged as being in the wrong place
|
||||
// do this in a bottom up order to promote descendants first before promoting ancestors
|
||||
// this preserves partial order derived from current frame's observations
|
||||
void BlockTimerStatHandle::incrementalUpdateTimerTree()
|
||||
void BlockTimer::incrementalUpdateTimerTree()
|
||||
{
|
||||
for(block_timer_tree_df_post_iterator_t it = begin_block_timer_tree_df_post(BlockTimerStatHandle::getRootTimeBlock());
|
||||
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)
|
||||
{
|
||||
|
|
@ -236,7 +236,7 @@ void BlockTimerStatHandle::incrementalUpdateTimerTree()
|
|||
}
|
||||
|
||||
// skip root timer
|
||||
if (timerp != &BlockTimerStatHandle::getRootTimeBlock())
|
||||
if (timerp != &BlockTimer::getRootTimeBlock())
|
||||
{
|
||||
TimeBlockAccumulator& accumulator = timerp->getCurrentAccumulator();
|
||||
|
||||
|
|
@ -260,7 +260,7 @@ void BlockTimerStatHandle::incrementalUpdateTimerTree()
|
|||
}
|
||||
|
||||
|
||||
void BlockTimerStatHandle::updateTimes()
|
||||
void BlockTimer::updateTimes()
|
||||
{
|
||||
// walk up stack of active timers and accumulate current time while leaving timing structures active
|
||||
BlockTimerStackRecord* stack_record = LLThreadLocalSingletonPointer<BlockTimerStackRecord>::getInstance();
|
||||
|
|
@ -292,7 +292,7 @@ static LLTrace::BlockTimerStatHandle FTM_PROCESS_TIMES("Process FastTimer Times"
|
|||
|
||||
// not thread safe, so only call on main thread
|
||||
//static
|
||||
void BlockTimerStatHandle::processTimes()
|
||||
void BlockTimer::processTimes()
|
||||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_PROCESS_TIMES);
|
||||
get_clock_count(); // good place to calculate clock frequency
|
||||
|
|
@ -339,7 +339,7 @@ bool BlockTimerStatHandle::hasChildren()
|
|||
}
|
||||
|
||||
// static
|
||||
void BlockTimerStatHandle::logStats()
|
||||
void BlockTimer::logStats()
|
||||
{
|
||||
// get ready for next frame
|
||||
if (sLog)
|
||||
|
|
@ -388,13 +388,13 @@ void BlockTimerStatHandle::logStats()
|
|||
}
|
||||
|
||||
//static
|
||||
void BlockTimerStatHandle::dumpCurTimes()
|
||||
void BlockTimer::dumpCurTimes()
|
||||
{
|
||||
LLTrace::PeriodicRecording& frame_recording = LLTrace::get_frame_recording();
|
||||
LLTrace::Recording& last_frame_recording = frame_recording.getLastRecording();
|
||||
|
||||
// walk over timers in depth order and output timings
|
||||
for(block_timer_tree_df_iterator_t it = begin_timer_tree(BlockTimerStatHandle::getRootTimeBlock());
|
||||
for(block_timer_tree_df_iterator_t it = begin_timer_tree(BlockTimer::getRootTimeBlock());
|
||||
it != end_timer_tree();
|
||||
++it)
|
||||
{
|
||||
|
|
@ -422,7 +422,7 @@ void BlockTimerStatHandle::dumpCurTimes()
|
|||
}
|
||||
|
||||
//static
|
||||
void BlockTimerStatHandle::writeLog(std::ostream& os)
|
||||
void BlockTimer::writeLog(std::ostream& os)
|
||||
{
|
||||
while (!sLogQueue.empty())
|
||||
{
|
||||
|
|
@ -478,9 +478,9 @@ void TimeBlockAccumulator::reset( const TimeBlockAccumulator* other )
|
|||
|
||||
F64Seconds BlockTimer::getElapsedTime()
|
||||
{
|
||||
U64 total_time = BlockTimerStatHandle::getCPUClockCount64() - mStartTime;
|
||||
U64 total_time = getCPUClockCount64() - mStartTime;
|
||||
|
||||
return F64Seconds((F64)total_time / (F64)BlockTimerStatHandle::countsPerSecond());
|
||||
return F64Seconds((F64)total_time / (F64)BlockTimer::countsPerSecond());
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -51,77 +51,7 @@ public:
|
|||
|
||||
F64Seconds getElapsedTime();
|
||||
|
||||
private:
|
||||
friend class BlockTimerStatHandle;
|
||||
// FIXME: this friendship exists so that each thread can instantiate a root timer,
|
||||
// which could be a derived class with a public constructor instead, possibly
|
||||
friend class ThreadRecorder;
|
||||
friend BlockTimer timeThisBlock(BlockTimerStatHandle&);
|
||||
|
||||
BlockTimer(BlockTimerStatHandle& timer);
|
||||
#if !defined(MSC_VER) || MSC_VER < 1700
|
||||
// Visual Studio 2010 has a bug where capturing an object returned by value
|
||||
// into a local reference requires access to the copy constructor at the call site.
|
||||
// This appears to be fixed in 2012.
|
||||
public:
|
||||
#endif
|
||||
// no-copy
|
||||
BlockTimer(const BlockTimer& other) {};
|
||||
|
||||
private:
|
||||
U64 mStartTime;
|
||||
BlockTimerStackRecord mParentTimerData;
|
||||
};
|
||||
|
||||
// this dummy function assists in allocating a block timer with stack-based lifetime.
|
||||
// this is done by capturing the return value in a stack-allocated const reference variable.
|
||||
// (This is most easily done using the macro LL_RECORD_BLOCK_TIME)
|
||||
// Otherwise, it would be possible to store a BlockTimer on the heap, resulting in non-nested lifetimes,
|
||||
// which would break the invariants of the timing hierarchy logic
|
||||
LL_FORCE_INLINE class BlockTimer timeThisBlock(class BlockTimerStatHandle& timer)
|
||||
{
|
||||
return BlockTimer(timer);
|
||||
}
|
||||
|
||||
// stores a "named" timer instance to be reused via multiple BlockTimer stack instances
|
||||
class BlockTimerStatHandle
|
||||
: public StatType<TimeBlockAccumulator>
|
||||
{
|
||||
public:
|
||||
BlockTimerStatHandle(const char* name, const char* description = "");
|
||||
|
||||
TimeBlockTreeNode& getTreeNode() const;
|
||||
BlockTimerStatHandle* getParent() const { return getTreeNode().getParent(); }
|
||||
void setParent(BlockTimerStatHandle* parent) { getTreeNode().setParent(parent); }
|
||||
|
||||
typedef std::vector<BlockTimerStatHandle*>::iterator child_iter;
|
||||
typedef std::vector<BlockTimerStatHandle*>::const_iterator child_const_iter;
|
||||
child_iter beginChildren();
|
||||
child_iter endChildren();
|
||||
bool hasChildren();
|
||||
std::vector<BlockTimerStatHandle*>& getChildren();
|
||||
|
||||
StatType<TimeBlockAccumulator::CallCountFacet>& callCount()
|
||||
{
|
||||
return static_cast<StatType<TimeBlockAccumulator::CallCountFacet>&>(*(StatType<TimeBlockAccumulator>*)this);
|
||||
}
|
||||
|
||||
StatType<TimeBlockAccumulator::SelfTimeFacet>& selfTime()
|
||||
{
|
||||
return static_cast<StatType<TimeBlockAccumulator::SelfTimeFacet>&>(*(StatType<TimeBlockAccumulator>*)this);
|
||||
}
|
||||
|
||||
static BlockTimerStatHandle& getRootTimeBlock();
|
||||
static void pushLog(LLSD sd);
|
||||
static void setLogLock(class LLMutex* mutex);
|
||||
static void writeLog(std::ostream& os);
|
||||
static void updateTimes();
|
||||
|
||||
// dumps current cumulative frame stats to log
|
||||
// call nextFrame() to reset timers
|
||||
static void dumpCurTimes();
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Important note: These implementations must be FAST!
|
||||
//
|
||||
|
|
@ -143,14 +73,14 @@ public:
|
|||
//#undef _interlockedbittestandset
|
||||
//#undef _interlockedbittestandreset
|
||||
|
||||
//inline U32 BlockTimerStatHandle::getCPUClockCount32()
|
||||
//inline U32 getCPUClockCount32()
|
||||
//{
|
||||
// U64 time_stamp = __rdtsc();
|
||||
// return (U32)(time_stamp >> 8);
|
||||
//}
|
||||
//
|
||||
//// return full timer value, *not* shifted by 8 bits
|
||||
//inline U64 BlockTimerStatHandle::getCPUClockCount64()
|
||||
//inline U64 getCPUClockCount64()
|
||||
//{
|
||||
// return __rdtsc();
|
||||
//}
|
||||
|
|
@ -257,6 +187,12 @@ public:
|
|||
|
||||
#endif
|
||||
|
||||
static BlockTimerStatHandle& getRootTimeBlock();
|
||||
static void pushLog(LLSD sd);
|
||||
static void setLogLock(class LLMutex* mutex);
|
||||
static void writeLog(std::ostream& os);
|
||||
static void updateTimes();
|
||||
|
||||
static U64 countsPerSecond();
|
||||
|
||||
// updates cumulative times and hierarchy,
|
||||
|
|
@ -269,13 +205,79 @@ public:
|
|||
// call this once a frame to periodically log timers
|
||||
static void logStats();
|
||||
|
||||
bool mCollapsed; // don't show children
|
||||
// dumps current cumulative frame stats to log
|
||||
// call nextFrame() to reset timers
|
||||
static void dumpCurTimes();
|
||||
|
||||
private:
|
||||
friend class BlockTimerStatHandle;
|
||||
// FIXME: this friendship exists so that each thread can instantiate a root timer,
|
||||
// which could be a derived class with a public constructor instead, possibly
|
||||
friend class ThreadRecorder;
|
||||
friend BlockTimer timeThisBlock(BlockTimerStatHandle&);
|
||||
|
||||
BlockTimer(BlockTimerStatHandle& timer);
|
||||
#if !defined(MSC_VER) || MSC_VER < 1700
|
||||
// Visual Studio 2010 has a bug where capturing an object returned by value
|
||||
// into a local reference requires access to the copy constructor at the call site.
|
||||
// This appears to be fixed in 2012.
|
||||
public:
|
||||
#endif
|
||||
// no-copy
|
||||
BlockTimer(const BlockTimer& other) {};
|
||||
|
||||
private:
|
||||
U64 mStartTime;
|
||||
BlockTimerStackRecord mParentTimerData;
|
||||
|
||||
public:
|
||||
// statics
|
||||
static std::string sLogName;
|
||||
static bool sMetricLog,
|
||||
sLog;
|
||||
static U64 sClockResolution;
|
||||
static std::string sLogName;
|
||||
static bool sMetricLog,
|
||||
sLog;
|
||||
static U64 sClockResolution;
|
||||
|
||||
};
|
||||
|
||||
// this dummy function assists in allocating a block timer with stack-based lifetime.
|
||||
// this is done by capturing the return value in a stack-allocated const reference variable.
|
||||
// (This is most easily done using the macro LL_RECORD_BLOCK_TIME)
|
||||
// Otherwise, it would be possible to store a BlockTimer on the heap, resulting in non-nested lifetimes,
|
||||
// which would break the invariants of the timing hierarchy logic
|
||||
LL_FORCE_INLINE class BlockTimer timeThisBlock(class BlockTimerStatHandle& timer)
|
||||
{
|
||||
return BlockTimer(timer);
|
||||
}
|
||||
|
||||
// stores a "named" timer instance to be reused via multiple BlockTimer stack instances
|
||||
class BlockTimerStatHandle
|
||||
: public StatType<TimeBlockAccumulator>
|
||||
{
|
||||
public:
|
||||
BlockTimerStatHandle(const char* name, const char* description = "");
|
||||
|
||||
TimeBlockTreeNode& getTreeNode() const;
|
||||
BlockTimerStatHandle* getParent() const { return getTreeNode().getParent(); }
|
||||
void setParent(BlockTimerStatHandle* parent) { getTreeNode().setParent(parent); }
|
||||
|
||||
typedef std::vector<BlockTimerStatHandle*>::iterator child_iter;
|
||||
typedef std::vector<BlockTimerStatHandle*>::const_iterator child_const_iter;
|
||||
child_iter beginChildren();
|
||||
child_iter endChildren();
|
||||
bool hasChildren();
|
||||
std::vector<BlockTimerStatHandle*>& getChildren();
|
||||
|
||||
StatType<TimeBlockAccumulator::CallCountFacet>& callCount()
|
||||
{
|
||||
return static_cast<StatType<TimeBlockAccumulator::CallCountFacet>&>(*(StatType<TimeBlockAccumulator>*)this);
|
||||
}
|
||||
|
||||
StatType<TimeBlockAccumulator::SelfTimeFacet>& selfTime()
|
||||
{
|
||||
return static_cast<StatType<TimeBlockAccumulator::SelfTimeFacet>&>(*(StatType<TimeBlockAccumulator>*)this);
|
||||
}
|
||||
|
||||
bool mCollapsed; // don't show children
|
||||
};
|
||||
|
||||
// iterators and helper functions for walking the call hierarchy of block timers in different ways
|
||||
|
|
@ -307,14 +309,14 @@ LL_FORCE_INLINE BlockTimer::BlockTimer(BlockTimerStatHandle& timer)
|
|||
cur_timer_data->mTimeBlock = &timer;
|
||||
cur_timer_data->mChildTime = 0;
|
||||
|
||||
mStartTime = BlockTimerStatHandle::getCPUClockCount64();
|
||||
mStartTime = getCPUClockCount64();
|
||||
#endif
|
||||
}
|
||||
|
||||
LL_FORCE_INLINE BlockTimer::~BlockTimer()
|
||||
{
|
||||
#if LL_FAST_TIMER_ON
|
||||
U64 total_time = BlockTimerStatHandle::getCPUClockCount64() - mStartTime;
|
||||
U64 total_time = getCPUClockCount64() - mStartTime;
|
||||
BlockTimerStackRecord* cur_timer_data = LLThreadLocalSingletonPointer<BlockTimerStackRecord>::getInstance();
|
||||
if (!cur_timer_data) return;
|
||||
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ LLMetricPerformanceTesterBasic* LLMetricPerformanceTesterBasic::getTester(std::s
|
|||
// Return TRUE if this metric is requested or if the general default "catch all" metric is requested
|
||||
BOOL LLMetricPerformanceTesterBasic::isMetricLogRequested(std::string name)
|
||||
{
|
||||
return (LLTrace::BlockTimerStatHandle::sMetricLog && ((LLTrace::BlockTimerStatHandle::sLogName == name) || (LLTrace::BlockTimerStatHandle::sLogName == DEFAULT_METRIC_NAME)));
|
||||
return (LLTrace::BlockTimer::sMetricLog && ((LLTrace::BlockTimer::sLogName == name) || (LLTrace::BlockTimer::sLogName == DEFAULT_METRIC_NAME)));
|
||||
}
|
||||
|
||||
/*static*/
|
||||
|
|
@ -194,7 +194,7 @@ void LLMetricPerformanceTesterBasic::preOutputTestResults(LLSD* sd)
|
|||
|
||||
void LLMetricPerformanceTesterBasic::postOutputTestResults(LLSD* sd)
|
||||
{
|
||||
LLTrace::BlockTimerStatHandle::pushLog(*sd);
|
||||
LLTrace::BlockTimer::pushLog(*sd);
|
||||
}
|
||||
|
||||
void LLMetricPerformanceTesterBasic::outputTestResults()
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ F64Seconds Recording::getSum(const StatType<TimeBlockAccumulator>& stat)
|
|||
const TimeBlockAccumulator& accumulator = mBuffers->mStackTimers[stat.getIndex()];
|
||||
const TimeBlockAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mStackTimers[stat.getIndex()] : NULL;
|
||||
return F64Seconds((F64)(accumulator.mTotalTimeCounter) + (F64)(active_accumulator ? active_accumulator->mTotalTimeCounter : 0))
|
||||
/ (F64)LLTrace::BlockTimerStatHandle::countsPerSecond();
|
||||
/ (F64)LLTrace::BlockTimer::countsPerSecond();
|
||||
}
|
||||
|
||||
F64Seconds Recording::getSum(const StatType<TimeBlockAccumulator::SelfTimeFacet>& stat)
|
||||
|
|
@ -171,7 +171,7 @@ F64Seconds Recording::getSum(const StatType<TimeBlockAccumulator::SelfTimeFacet>
|
|||
update();
|
||||
const TimeBlockAccumulator& accumulator = mBuffers->mStackTimers[stat.getIndex()];
|
||||
const TimeBlockAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mStackTimers[stat.getIndex()] : NULL;
|
||||
return F64Seconds((F64)(accumulator.mSelfTimeCounter) + (F64)(active_accumulator ? active_accumulator->mSelfTimeCounter : 0) / (F64)LLTrace::BlockTimerStatHandle::countsPerSecond());
|
||||
return F64Seconds((F64)(accumulator.mSelfTimeCounter) + (F64)(active_accumulator ? active_accumulator->mSelfTimeCounter : 0) / (F64)LLTrace::BlockTimer::countsPerSecond());
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -190,7 +190,7 @@ F64Seconds Recording::getPerSec(const StatType<TimeBlockAccumulator>& stat)
|
|||
const TimeBlockAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mStackTimers[stat.getIndex()] : NULL;
|
||||
|
||||
return F64Seconds((F64)(accumulator.mTotalTimeCounter + (active_accumulator ? active_accumulator->mTotalTimeCounter : 0))
|
||||
/ ((F64)LLTrace::BlockTimerStatHandle::countsPerSecond() * mElapsedSeconds.value()));
|
||||
/ ((F64)LLTrace::BlockTimer::countsPerSecond() * mElapsedSeconds.value()));
|
||||
}
|
||||
|
||||
F64Seconds Recording::getPerSec(const StatType<TimeBlockAccumulator::SelfTimeFacet>& stat)
|
||||
|
|
@ -200,7 +200,7 @@ F64Seconds Recording::getPerSec(const StatType<TimeBlockAccumulator::SelfTimeFac
|
|||
const TimeBlockAccumulator* active_accumulator = mActiveBuffers ? &mActiveBuffers->mStackTimers[stat.getIndex()] : NULL;
|
||||
|
||||
return F64Seconds((F64)(accumulator.mSelfTimeCounter + (active_accumulator ? active_accumulator->mSelfTimeCounter : 0))
|
||||
/ ((F64)LLTrace::BlockTimerStatHandle::countsPerSecond() * mElapsedSeconds.value()));
|
||||
/ ((F64)LLTrace::BlockTimer::countsPerSecond() * mElapsedSeconds.value()));
|
||||
}
|
||||
|
||||
F32 Recording::getPerSec(const StatType<TimeBlockAccumulator::CallCountFacet>& stat)
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ void ThreadRecorder::init()
|
|||
LLThreadLocalSingletonPointer<BlockTimerStackRecord>::setInstance(&mBlockTimerStackRecord);
|
||||
//NB: the ordering of initialization in this function is very fragile due to a large number of implicit dependencies
|
||||
set_thread_recorder(this);
|
||||
BlockTimerStatHandle& root_time_block = BlockTimerStatHandle::getRootTimeBlock();
|
||||
BlockTimerStatHandle& root_time_block = BlockTimer::getRootTimeBlock();
|
||||
|
||||
BlockTimerStackRecord* timer_stack = LLThreadLocalSingletonPointer<BlockTimerStackRecord>::getInstance();
|
||||
timer_stack->mTimeBlock = &root_time_block;
|
||||
|
|
@ -78,7 +78,7 @@ void ThreadRecorder::init()
|
|||
mRootTimer = new BlockTimer(root_time_block);
|
||||
timer_stack->mActiveTimer = mRootTimer;
|
||||
|
||||
BlockTimerStatHandle::getRootTimeBlock().getCurrentAccumulator().mActiveCount = 1;
|
||||
BlockTimer::getRootTimeBlock().getCurrentAccumulator().mActiveCount = 1;
|
||||
|
||||
claim_alloc(gTraceMemStat, this);
|
||||
claim_alloc(gTraceMemStat, mRootTimer);
|
||||
|
|
@ -138,7 +138,7 @@ AccumulatorBufferGroup* ThreadRecorder::activate( AccumulatorBufferGroup* record
|
|||
{
|
||||
AccumulatorBufferGroup& prev_active_recording = mActiveRecordings.back()->mPartialRecording;
|
||||
prev_active_recording.sync();
|
||||
BlockTimerStatHandle::updateTimes();
|
||||
BlockTimer::updateTimes();
|
||||
prev_active_recording.handOffTo(active_recording->mPartialRecording);
|
||||
}
|
||||
mActiveRecordings.push_back(active_recording);
|
||||
|
|
@ -152,7 +152,7 @@ ThreadRecorder::active_recording_list_t::iterator ThreadRecorder::bringUpToDate(
|
|||
if (mActiveRecordings.empty()) return mActiveRecordings.end();
|
||||
|
||||
mActiveRecordings.back()->mPartialRecording.sync();
|
||||
BlockTimerStatHandle::updateTimes();
|
||||
BlockTimer::updateTimes();
|
||||
|
||||
active_recording_list_t::reverse_iterator it, end_it;
|
||||
for (it = mActiveRecordings.rbegin(), end_it = mActiveRecordings.rend();
|
||||
|
|
|
|||
|
|
@ -627,7 +627,7 @@ public:
|
|||
|
||||
while (!LLAppViewer::instance()->isQuitting())
|
||||
{
|
||||
LLTrace::BlockTimerStatHandle::writeLog(os);
|
||||
LLTrace::BlockTimer::writeLog(os);
|
||||
os.flush();
|
||||
ms_sleep(32);
|
||||
}
|
||||
|
|
@ -1315,9 +1315,9 @@ bool LLAppViewer::mainLoop()
|
|||
#endif
|
||||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_FRAME);
|
||||
LLTrace::BlockTimerStatHandle::processTimes();
|
||||
LLTrace::BlockTimer::processTimes();
|
||||
LLTrace::get_frame_recording().nextPeriod();
|
||||
LLTrace::BlockTimerStatHandle::logStats();
|
||||
LLTrace::BlockTimer::logStats();
|
||||
|
||||
LLTrace::get_master_thread_recorder()->pullFromChildren();
|
||||
|
||||
|
|
@ -1662,9 +1662,9 @@ bool LLAppViewer::cleanup()
|
|||
if (LLFastTimerView::sAnalyzePerformance)
|
||||
{
|
||||
LL_INFOS() << "Analyzing performance" << LL_ENDL;
|
||||
std::string baseline_name = LLTrace::BlockTimerStatHandle::sLogName + "_baseline.slp";
|
||||
std::string current_name = LLTrace::BlockTimerStatHandle::sLogName + ".slp";
|
||||
std::string report_name = LLTrace::BlockTimerStatHandle::sLogName + "_report.csv";
|
||||
std::string baseline_name = LLTrace::BlockTimer::sLogName + "_baseline.slp";
|
||||
std::string current_name = LLTrace::BlockTimer::sLogName + ".slp";
|
||||
std::string report_name = LLTrace::BlockTimer::sLogName + "_report.csv";
|
||||
|
||||
LLFastTimerView::doAnalysis(
|
||||
gDirUtilp->getExpandedFilename(LL_PATH_LOGS, baseline_name),
|
||||
|
|
@ -2018,9 +2018,9 @@ bool LLAppViewer::cleanup()
|
|||
{
|
||||
LL_INFOS() << "Analyzing performance" << LL_ENDL;
|
||||
|
||||
std::string baseline_name = LLTrace::BlockTimerStatHandle::sLogName + "_baseline.slp";
|
||||
std::string current_name = LLTrace::BlockTimerStatHandle::sLogName + ".slp";
|
||||
std::string report_name = LLTrace::BlockTimerStatHandle::sLogName + "_report.csv";
|
||||
std::string baseline_name = LLTrace::BlockTimer::sLogName + "_baseline.slp";
|
||||
std::string current_name = LLTrace::BlockTimer::sLogName + ".slp";
|
||||
std::string report_name = LLTrace::BlockTimer::sLogName + "_report.csv";
|
||||
|
||||
LLFastTimerView::doAnalysis(
|
||||
gDirUtilp->getExpandedFilename(LL_PATH_LOGS, baseline_name),
|
||||
|
|
@ -2139,10 +2139,10 @@ bool LLAppViewer::initThreads()
|
|||
enable_threads && true,
|
||||
app_metrics_qa_mode);
|
||||
|
||||
if (LLTrace::BlockTimerStatHandle::sLog || LLTrace::BlockTimerStatHandle::sMetricLog)
|
||||
if (LLTrace::BlockTimer::sLog || LLTrace::BlockTimer::sMetricLog)
|
||||
{
|
||||
LLTrace::BlockTimerStatHandle::setLogLock(new LLMutex(NULL));
|
||||
mFastTimerLogThread = new LLFastTimerLogThread(LLTrace::BlockTimerStatHandle::sLogName);
|
||||
LLTrace::BlockTimer::setLogLock(new LLMutex(NULL));
|
||||
mFastTimerLogThread = new LLFastTimerLogThread(LLTrace::BlockTimer::sLogName);
|
||||
mFastTimerLogThread->start();
|
||||
}
|
||||
|
||||
|
|
@ -2597,18 +2597,18 @@ bool LLAppViewer::initConfiguration()
|
|||
|
||||
if (gSavedSettings.getBOOL("LogPerformance"))
|
||||
{
|
||||
LLTrace::BlockTimerStatHandle::sLog = true;
|
||||
LLTrace::BlockTimerStatHandle::sLogName = std::string("performance");
|
||||
LLTrace::BlockTimer::sLog = true;
|
||||
LLTrace::BlockTimer::sLogName = std::string("performance");
|
||||
}
|
||||
|
||||
std::string test_name(gSavedSettings.getString("LogMetrics"));
|
||||
if (! test_name.empty())
|
||||
{
|
||||
LLTrace::BlockTimerStatHandle::sMetricLog = TRUE ;
|
||||
LLTrace::BlockTimer::sMetricLog = TRUE ;
|
||||
// '--logmetrics' is specified with a named test metric argument so the data gathering is done only on that test
|
||||
// In the absence of argument, every metric would be gathered (makes for a rather slow run and hard to decipher report...)
|
||||
LL_INFOS() << "'--logmetrics' argument : " << test_name << LL_ENDL;
|
||||
LLTrace::BlockTimerStatHandle::sLogName = test_name;
|
||||
LLTrace::BlockTimer::sLogName = test_name;
|
||||
}
|
||||
|
||||
if (clp.hasOption("graphicslevel"))
|
||||
|
|
|
|||
|
|
@ -924,13 +924,13 @@ void LLFastTimerView::outputAllMetrics()
|
|||
//static
|
||||
void LLFastTimerView::doAnalysis(std::string baseline, std::string target, std::string output)
|
||||
{
|
||||
if(BlockTimerStatHandle::sLog)
|
||||
if(BlockTimer::sLog)
|
||||
{
|
||||
doAnalysisDefault(baseline, target, output) ;
|
||||
return ;
|
||||
}
|
||||
|
||||
if(BlockTimerStatHandle::sMetricLog)
|
||||
if(BlockTimer::sMetricLog)
|
||||
{
|
||||
LLMetricPerformanceTesterBasic::doAnalysisMetrics(baseline, target, output) ;
|
||||
return ;
|
||||
|
|
|
|||
|
|
@ -7491,7 +7491,7 @@ void handle_dump_avatar_local_textures(void*)
|
|||
|
||||
void handle_dump_timers()
|
||||
{
|
||||
LLTrace::BlockTimerStatHandle::dumpCurTimes();
|
||||
LLTrace::BlockTimer::dumpCurTimes();
|
||||
}
|
||||
|
||||
void handle_debug_avatar_textures(void*)
|
||||
|
|
|
|||
Loading…
Reference in New Issue