SH-3931 WIP Interesting: Add graphs to visualize scene load metrics

convert scene monitor to use extendable periodic recording
meow-7.2.2
Richard Linden 2013-04-23 18:52:34 -07:00
parent 62c8844414
commit c673716385
4 changed files with 76 additions and 47 deletions

View File

@ -464,8 +464,62 @@ void PeriodicRecording::appendPeriodicRecording( PeriodicRecording& other )
other.setPlayState(other_play_state);
}
LLUnit<LLUnits::Seconds, F64> PeriodicRecording::getDuration()
{
LLUnit<LLUnits::Seconds, F64> duration;
size_t num_periods = mRecordingPeriods.size();
for (size_t i = 1; i <= num_periods; i++)
{
size_t index = (mCurPeriod + num_periods - i) % num_periods;
duration += mRecordingPeriods[index].getDuration();
}
return duration;
}
LLTrace::Recording PeriodicRecording::snapshotCurRecording() const
{
Recording recording_copy(getCurRecording());
recording_copy.stop();
return recording_copy;
}
Recording& PeriodicRecording::getLastRecording()
{
U32 num_periods = mRecordingPeriods.size();
return mRecordingPeriods[(mCurPeriod + num_periods - 1) % num_periods];
}
const Recording& PeriodicRecording::getLastRecording() const
{
return getPrevRecording(1);
}
Recording& PeriodicRecording::getCurRecording()
{
return mRecordingPeriods[mCurPeriod];
}
const Recording& PeriodicRecording::getCurRecording() const
{
return mRecordingPeriods[mCurPeriod];
}
Recording& PeriodicRecording::getPrevRecording( U32 offset )
{
U32 num_periods = mRecordingPeriods.size();
offset = llclamp(offset, 0u, num_periods - 1);
return mRecordingPeriods[(mCurPeriod + num_periods - offset) % num_periods];
}
const Recording& PeriodicRecording::getPrevRecording( U32 offset ) const
{
U32 num_periods = mRecordingPeriods.size();
offset = llclamp(offset, 0u, num_periods - 1);
return mRecordingPeriods[(mCurPeriod + num_periods - offset) % num_periods];
}
void PeriodicRecording::start()
{
getCurRecording().start();
@ -577,6 +631,13 @@ void ExtendableRecording::splitFrom(ExtendableRecording& other)
// ExtendablePeriodicRecording
///////////////////////////////////////////////////////////////////////
ExtendablePeriodicRecording::ExtendablePeriodicRecording()
: mAcceptedRecording(0),
mPotentialRecording(0)
{
}
void ExtendablePeriodicRecording::extend()
{
// stop recording to get latest data

View File

@ -254,49 +254,16 @@ namespace LLTrace
void nextPeriod();
U32 getNumPeriods() { return mRecordingPeriods.size(); }
LLUnit<LLUnits::Seconds, F64> getDuration();
void appendPeriodicRecording(PeriodicRecording& other);
Recording& getLastRecording()
{
U32 num_periods = mRecordingPeriods.size();
return mRecordingPeriods[(mCurPeriod + num_periods - 1) % num_periods];
}
const Recording& getLastRecording() const
{
return getPrevRecording(1);
}
Recording& getCurRecording()
{
return mRecordingPeriods[mCurPeriod];
}
const Recording& getCurRecording() const
{
return mRecordingPeriods[mCurPeriod];
}
Recording& getPrevRecording(U32 offset)
{
U32 num_periods = mRecordingPeriods.size();
offset = llclamp(offset, 0u, num_periods - 1);
return mRecordingPeriods[(mCurPeriod + num_periods - offset) % num_periods];
}
const Recording& getPrevRecording(U32 offset) const
{
U32 num_periods = mRecordingPeriods.size();
offset = llclamp(offset, 0u, num_periods - 1);
return mRecordingPeriods[(mCurPeriod + num_periods - offset) % num_periods];
}
Recording snapshotCurRecording() const
{
Recording recording_copy(getCurRecording());
recording_copy.stop();
return recording_copy;
}
Recording& getLastRecording();
const Recording& getLastRecording() const;
Recording& getCurRecording();
const Recording& getCurRecording() const;
Recording& getPrevRecording(U32 offset);
const Recording& getPrevRecording(U32 offset) const;
Recording snapshotCurRecording() const;
template <typename T>
typename T::value_t getPeriodMin(const TraceType<T>& stat, size_t num_periods = U32_MAX) const
@ -447,10 +414,11 @@ namespace LLTrace
: public LLStopWatchControlsMixin<ExtendablePeriodicRecording>
{
public:
ExtendablePeriodicRecording();
void extend();
PeriodicRecording& getAcceptedRecording() { return mAcceptedRecording; }
const PeriodicRecording& getAcceptedRecording() const {return mAcceptedRecording;}
PeriodicRecording& getAcceptedRecording() { return mAcceptedRecording; }
const PeriodicRecording& getAcceptedRecording() const {return mAcceptedRecording;}
// implementation for LLStopWatchControlsMixin
/*virtual*/ void start();

View File

@ -73,7 +73,7 @@ LLSceneMonitor::LLSceneMonitor() :
mFrames[0] = NULL;
mFrames[1] = NULL;
mRecording = new LLTrace::ExtendableRecording();
mRecording = new LLTrace::ExtendablePeriodicRecording();
mRecording->start();
}

View File

@ -63,7 +63,7 @@ public:
bool isEnabled()const {return mEnabled;}
bool needsUpdate() const;
LLTrace::ExtendableRecording* getRecording() const {return mRecording;}
LLTrace::ExtendablePeriodicRecording* getRecording() const {return mRecording;}
void dumpToFile(std::string file_name);
bool hasResults() const { return !mMonitorResults.empty();}
@ -102,7 +102,7 @@ private:
std::vector<LLAnimPauseRequest> mAvatarPauseHandles;
LLTrace::ExtendableRecording* mRecording;
LLTrace::ExtendablePeriodicRecording* mRecording;
//---------------------------------------
typedef struct _monitor_result