summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorRichard Linden <none@none>2013-04-11 19:12:27 -0700
committerRichard Linden <none@none>2013-04-11 19:12:27 -0700
commitbdc6d58b7e84bc81977148995b0028f7420eee65 (patch)
tree9bb49c521a79b5da1d2e510c7a5691b971135fa8 /indra
parentae028e79872f166db8e514ca3b442c7807d6ebdb (diff)
SH-3931 WIP Interesting: Add graphs to visualize scene load metrics
added ability to query periodic timer for specific number of periods used that to do smaller time averaged window for camera speed
Diffstat (limited to 'indra')
-rw-r--r--indra/llcommon/lltracerecording.h74
-rw-r--r--indra/llui/llstatbar.cpp36
-rw-r--r--indra/newview/llviewercamera.cpp2
3 files changed, 67 insertions, 45 deletions
diff --git a/indra/llcommon/lltracerecording.h b/indra/llcommon/lltracerecording.h
index 9ebcbdd8ce..6cf6f4f84f 100644
--- a/indra/llcommon/lltracerecording.h
+++ b/indra/llcommon/lltracerecording.h
@@ -297,63 +297,80 @@ namespace LLTrace
}
template <typename T>
- typename T::value_t getPeriodMin(const TraceType<T>& stat) const
+ typename T::value_t getPeriodMin(const TraceType<T>& stat, U32 num_periods = S32_MAX) const
{
+ size_t total_periods = mRecordingPeriods.size();
+ num_periods = llmin(num_periods, total_periods);
+
typename T::value_t min_val = (std::numeric_limits<typename T::value_t>::max)();
- U32 num_periods = mRecordingPeriods.size();
- for (S32 i = 0; i < num_periods; i++)
+ for (S32 i = 1; i <= num_periods; i++)
{
- min_val = llmin(min_val, mRecordingPeriods[(mCurPeriod + i) % num_periods].getSum(stat));
+ S32 index = (mCurPeriod + total_periods - i) % total_periods;
+ min_val = llmin(min_val, mRecordingPeriods[index].getSum(stat));
}
return min_val;
}
template <typename T>
- F64 getPeriodMinPerSec(const TraceType<T>& stat) const
+ F64 getPeriodMinPerSec(const TraceType<T>& stat, U32 num_periods = S32_MAX) const
{
+ size_t total_periods = mRecordingPeriods.size();
+ num_periods = llmin(num_periods, total_periods);
+
F64 min_val = (std::numeric_limits<F64>::max)();
- U32 num_periods = mRecordingPeriods.size();
- for (S32 i = 0; i < num_periods; i++)
+ for (S32 i = 1; i <= num_periods; i++)
{
- min_val = llmin(min_val, mRecordingPeriods[(mCurPeriod + i) % num_periods].getPerSec(stat));
+ S32 index = (mCurPeriod + total_periods - i) % total_periods;
+ min_val = llmin(min_val, mRecordingPeriods[index].getPerSec(stat));
}
return min_val;
}
template <typename T>
- typename T::value_t getPeriodMax(const TraceType<T>& stat) const
+ typename T::value_t getPeriodMax(const TraceType<T>& stat, U32 num_periods = S32_MAX) const
{
+ size_t total_periods = mRecordingPeriods.size();
+ num_periods = llmin(num_periods, total_periods);
+
typename T::value_t max_val = (std::numeric_limits<typename T::value_t>::min)();
- U32 num_periods = mRecordingPeriods.size();
- for (S32 i = 0; i < num_periods; i++)
+ for (S32 i = 1; i <= num_periods; i++)
{
- max_val = llmax(max_val, mRecordingPeriods[(mCurPeriod + i) % num_periods].getSum(stat));
+ S32 index = (mCurPeriod + total_periods - i) % total_periods;
+ max_val = llmax(max_val, mRecordingPeriods[index].getSum(stat));
}
return max_val;
}
template <typename T>
- F64 getPeriodMaxPerSec(const TraceType<T>& stat) const
+ F64 getPeriodMaxPerSec(const TraceType<T>& stat, U32 num_periods = S32_MAX) const
{
+ size_t total_periods = mRecordingPeriods.size();
+ num_periods = llmin(num_periods, total_periods);
+
F64 max_val = (std::numeric_limits<F64>::min)();
- U32 num_periods = mRecordingPeriods.size();
- for (S32 i = 1; i < num_periods; i++)
+ for (S32 i = 1; i <= num_periods; i++)
{
- max_val = llmax(max_val, mRecordingPeriods[(mCurPeriod + i) % num_periods].getPerSec(stat));
+ S32 index = (mCurPeriod + total_periods - i) % total_periods;
+ max_val = llmax(max_val, mRecordingPeriods[index].getPerSec(stat));
}
return max_val;
}
template <typename T>
- typename T::value_t getPeriodMean(const TraceType<T>& stat) const
+ typename T::value_t getPeriodMean(const TraceType<T>& stat, U32 num_periods = S32_MAX) const
{
+ size_t total_periods = mRecordingPeriods.size();
+ num_periods = llmin(num_periods, total_periods);
+
typename T::value_t mean = 0.0;
- U32 num_periods = mRecordingPeriods.size();
- for (S32 i = 0; i < num_periods; i++)
+ if (num_periods <= 0) { return mean; }
+
+ for (S32 i = 1; i <= num_periods; i++)
{
- if (mRecordingPeriods[(mCurPeriod + i) % num_periods].getDuration() > 0.f)
+ S32 index = (mCurPeriod + total_periods - i) % total_periods;
+ if (mRecordingPeriods[index].getDuration() > 0.f)
{
- mean += mRecordingPeriods[(mCurPeriod + i) % num_periods].getSum(stat);
+ mean += mRecordingPeriods[index].getSum(stat);
}
}
mean /= num_periods;
@@ -361,15 +378,20 @@ namespace LLTrace
}
template <typename T>
- typename T::value_t getPeriodMeanPerSec(const TraceType<T>& stat) const
+ typename T::value_t getPeriodMeanPerSec(const TraceType<T>& stat, U32 num_periods = S32_MAX) const
{
+ size_t total_periods = mRecordingPeriods.size();
+ num_periods = llmin(num_periods, total_periods);
+
typename T::value_t mean = 0.0;
- U32 num_periods = mRecordingPeriods.size();
- for (S32 i = 0; i < num_periods; i++)
+ if (num_periods <= 0) { return mean; }
+
+ for (S32 i = 1; i <= num_periods; i++)
{
- if (mRecordingPeriods[i].getDuration() > 0.f)
+ S32 index = (mCurPeriod + total_periods - i) % total_periods;
+ if (mRecordingPeriods[index].getDuration() > 0.f)
{
- mean += mRecordingPeriods[(mCurPeriod + i) % num_periods].getPerSec(stat);
+ mean += mRecordingPeriods[index].getPerSec(stat);
}
}
mean /= num_periods;
diff --git a/indra/llui/llstatbar.cpp b/indra/llui/llstatbar.cpp
index 46eea368e5..70ba59b130 100644
--- a/indra/llui/llstatbar.cpp
+++ b/indra/llui/llstatbar.cpp
@@ -112,16 +112,16 @@ void LLStatBar::draw()
if (mPerSec)
{
current = last_frame_recording.getPerSec(*mCountFloatp);
- min = frame_recording.getPeriodMinPerSec(*mCountFloatp);
- max = frame_recording.getPeriodMaxPerSec(*mCountFloatp);
- mean = frame_recording.getPeriodMeanPerSec(*mCountFloatp);
+ min = frame_recording.getPeriodMinPerSec(*mCountFloatp, mNumFrames);
+ max = frame_recording.getPeriodMaxPerSec(*mCountFloatp, mNumFrames);
+ mean = frame_recording.getPeriodMeanPerSec(*mCountFloatp, mNumFrames);
}
else
{
current = last_frame_recording.getSum(*mCountFloatp);
- min = frame_recording.getPeriodMin(*mCountFloatp);
- max = frame_recording.getPeriodMax(*mCountFloatp);
- mean = frame_recording.getPeriodMean(*mCountFloatp);
+ min = frame_recording.getPeriodMin(*mCountFloatp, mNumFrames);
+ max = frame_recording.getPeriodMax(*mCountFloatp, mNumFrames);
+ mean = frame_recording.getPeriodMean(*mCountFloatp, mNumFrames);
}
}
else if (mCountIntp)
@@ -131,16 +131,16 @@ void LLStatBar::draw()
if (mPerSec)
{
current = last_frame_recording.getPerSec(*mCountIntp);
- min = frame_recording.getPeriodMinPerSec(*mCountIntp);
- max = frame_recording.getPeriodMaxPerSec(*mCountIntp);
- mean = frame_recording.getPeriodMeanPerSec(*mCountIntp);
+ min = frame_recording.getPeriodMinPerSec(*mCountIntp, mNumFrames);
+ max = frame_recording.getPeriodMaxPerSec(*mCountIntp, mNumFrames);
+ mean = frame_recording.getPeriodMeanPerSec(*mCountIntp, mNumFrames);
}
else
{
current = last_frame_recording.getSum(*mCountIntp);
- min = frame_recording.getPeriodMin(*mCountIntp);
- max = frame_recording.getPeriodMax(*mCountIntp);
- mean = frame_recording.getPeriodMean(*mCountIntp);
+ min = frame_recording.getPeriodMin(*mCountIntp, mNumFrames);
+ max = frame_recording.getPeriodMax(*mCountIntp, mNumFrames);
+ mean = frame_recording.getPeriodMean(*mCountIntp, mNumFrames);
}
}
else if (mMeasurementFloatp)
@@ -148,18 +148,18 @@ void LLStatBar::draw()
LLTrace::Recording& last_frame_recording = frame_recording.getLastRecording();
current = last_frame_recording.getLastValue(*mMeasurementFloatp);
- min = frame_recording.getPeriodMin(*mMeasurementFloatp);
- max = frame_recording.getPeriodMax(*mMeasurementFloatp);
- mean = frame_recording.getPeriodMean(*mMeasurementFloatp);
+ min = frame_recording.getPeriodMin(*mMeasurementFloatp, mNumFrames);
+ max = frame_recording.getPeriodMax(*mMeasurementFloatp, mNumFrames);
+ mean = frame_recording.getPeriodMean(*mMeasurementFloatp, mNumFrames);
}
else if (mMeasurementIntp)
{
LLTrace::Recording& last_frame_recording = frame_recording.getLastRecording();
current = last_frame_recording.getLastValue(*mMeasurementIntp);
- min = frame_recording.getPeriodMin(*mMeasurementIntp);
- max = frame_recording.getPeriodMax(*mMeasurementIntp);
- mean = frame_recording.getPeriodMean(*mMeasurementIntp);
+ min = frame_recording.getPeriodMin(*mMeasurementIntp, mNumFrames);
+ max = frame_recording.getPeriodMax(*mMeasurementIntp, mNumFrames);
+ mean = frame_recording.getPeriodMean(*mMeasurementIntp, mNumFrames);
}
current *= mUnitScale;
diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp
index 9ca5f07f35..1f5bdc8589 100644
--- a/indra/newview/llviewercamera.cpp
+++ b/indra/newview/llviewercamera.cpp
@@ -170,7 +170,7 @@ void LLViewerCamera::updateCameraLocation(const LLVector3 &center,
add(sVelocityStat, dpos);
add(sAngularVelocityStat, drot);
- mAverageSpeed = LLTrace::get_frame_recording().getPeriodMeanPerSec(sVelocityStat);
+ mAverageSpeed = LLTrace::get_frame_recording().getPeriodMeanPerSec(sVelocityStat, 50);
mAverageAngularSpeed = LLTrace::get_frame_recording().getPeriodMeanPerSec(sAngularVelocityStat);
mCosHalfCameraFOV = cosf(0.5f * getView() * llmax(1.0f, getAspect()));