summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/llcommon/lltrace.h36
-rw-r--r--indra/llcommon/lltracerecording.h16
-rw-r--r--indra/llui/llstatbar.cpp107
-rw-r--r--indra/llui/llstatbar.h4
-rw-r--r--indra/newview/llappviewer.cpp9
-rw-r--r--indra/newview/llfloaterjoystick.cpp4
-rw-r--r--indra/newview/llscenemonitor.cpp59
-rw-r--r--indra/newview/llscenemonitor.h12
-rw-r--r--indra/newview/llviewerpartsim.cpp14
-rw-r--r--indra/newview/llviewerpartsim.h2
-rw-r--r--indra/newview/llworld.cpp3
-rw-r--r--indra/newview/skins/default/xui/en/floater_scene_load_stats.xml42
-rw-r--r--indra/newview/skins/default/xui/en/floater_stats.xml71
13 files changed, 195 insertions, 184 deletions
diff --git a/indra/llcommon/lltrace.h b/indra/llcommon/lltrace.h
index 71bf1e53e4..a574be02da 100644
--- a/indra/llcommon/lltrace.h
+++ b/indra/llcommon/lltrace.h
@@ -86,20 +86,17 @@ private:
AccumulatorBuffer(StaticAllocationMarker m)
: mStorageSize(0),
- mStorage(NULL),
- mNextStorageSlot(0)
- {
- }
+ mStorage(NULL)
+ {}
public:
AccumulatorBuffer(const AccumulatorBuffer& other = *getDefaultBuffer())
: mStorageSize(0),
- mStorage(NULL),
- mNextStorageSlot(other.mNextStorageSlot)
+ mStorage(NULL)
{
resize(other.mStorageSize);
- for (S32 i = 0; i < mNextStorageSlot; i++)
+ for (S32 i = 0; i < sNextStorageSlot; i++)
{
mStorage[i] = other.mStorage[i];
}
@@ -126,9 +123,8 @@ public:
void addSamples(const AccumulatorBuffer<ACCUMULATOR>& other)
{
- llassert(mNextStorageSlot == other.mNextStorageSlot);
-
- for (size_t i = 0; i < mNextStorageSlot; i++)
+ llassert(mStorageSize >= sNextStorageSlot && other.mStorageSize > sNextStorageSlot);
+ for (size_t i = 0; i < sNextStorageSlot; i++)
{
mStorage[i].addSamples(other.mStorage[i]);
}
@@ -136,7 +132,8 @@ public:
void copyFrom(const AccumulatorBuffer<ACCUMULATOR>& other)
{
- for (size_t i = 0; i < mNextStorageSlot; i++)
+ llassert(mStorageSize >= sNextStorageSlot && other.mStorageSize > sNextStorageSlot);
+ for (size_t i = 0; i < sNextStorageSlot; i++)
{
mStorage[i] = other.mStorage[i];
}
@@ -144,7 +141,8 @@ public:
void reset(const AccumulatorBuffer<ACCUMULATOR>* other = NULL)
{
- for (size_t i = 0; i < mNextStorageSlot; i++)
+ llassert(mStorageSize >= sNextStorageSlot);
+ for (size_t i = 0; i < sNextStorageSlot; i++)
{
mStorage[i].reset(other ? &other->mStorage[i] : NULL);
}
@@ -172,7 +170,7 @@ public:
{
llerrs << "Attempting to declare trace object after program initialization. Trace objects should be statically initialized." << llendl;
}
- size_t next_slot = mNextStorageSlot++;
+ size_t next_slot = sNextStorageSlot++;
if (next_slot >= mStorageSize)
{
resize(mStorageSize + (mStorageSize >> 2));
@@ -208,7 +206,7 @@ public:
size_t size() const
{
- return mNextStorageSlot;
+ return sNextStorageSlot;
}
static self_t* getDefaultBuffer()
@@ -226,11 +224,15 @@ public:
}
private:
- ACCUMULATOR* mStorage;
- size_t mStorageSize;
- size_t mNextStorageSlot;
+ ACCUMULATOR* mStorage;
+ size_t mStorageSize;
+ static size_t sNextStorageSlot;
};
+template<typename ACCUMULATOR> size_t AccumulatorBuffer<ACCUMULATOR>::sNextStorageSlot = 0;
+
+
+
//TODO: replace with decltype when C++11 is enabled
template<typename T>
struct MeanValueType
diff --git a/indra/llcommon/lltracerecording.h b/indra/llcommon/lltracerecording.h
index a6fb07ac15..68f437a231 100644
--- a/indra/llcommon/lltracerecording.h
+++ b/indra/llcommon/lltracerecording.h
@@ -305,7 +305,7 @@ namespace LLTrace
U32 num_periods = mRecordingPeriods.size();
for (S32 i = 0; i < num_periods; i++)
{
- min_val = llmin(min_val, mRecordingPeriods[i].getSum(stat));
+ min_val = llmin(min_val, mRecordingPeriods[(mCurPeriod + i) % num_periods].getSum(stat));
}
return min_val;
}
@@ -317,7 +317,7 @@ namespace LLTrace
U32 num_periods = mRecordingPeriods.size();
for (S32 i = 0; i < num_periods; i++)
{
- min_val = llmin(min_val, mRecordingPeriods[i].getPerSec(stat));
+ min_val = llmin(min_val, mRecordingPeriods[(mCurPeriod + i) % num_periods].getPerSec(stat));
}
return min_val;
}
@@ -329,7 +329,7 @@ namespace LLTrace
U32 num_periods = mRecordingPeriods.size();
for (S32 i = 0; i < num_periods; i++)
{
- max_val = llmax(max_val, mRecordingPeriods[i].getSum(stat));
+ max_val = llmax(max_val, mRecordingPeriods[(mCurPeriod + i) % num_periods].getSum(stat));
}
return max_val;
}
@@ -339,9 +339,9 @@ namespace LLTrace
{
F64 max_val = (std::numeric_limits<F64>::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[i].getPerSec(stat));
+ max_val = llmax(max_val, mRecordingPeriods[(mCurPeriod + i) % num_periods].getPerSec(stat));
}
return max_val;
}
@@ -353,9 +353,9 @@ namespace LLTrace
U32 num_periods = mRecordingPeriods.size();
for (S32 i = 0; i < num_periods; i++)
{
- if (mRecordingPeriods[i].getDuration() > 0.f)
+ if (mRecordingPeriods[(mCurPeriod + i) % num_periods].getDuration() > 0.f)
{
- mean += mRecordingPeriods[i].getSum(stat);
+ mean += mRecordingPeriods[(mCurPeriod + i) % num_periods].getSum(stat);
}
}
mean /= num_periods;
@@ -371,7 +371,7 @@ namespace LLTrace
{
if (mRecordingPeriods[i].getDuration() > 0.f)
{
- mean += mRecordingPeriods[i].getPerSec(stat);
+ mean += mRecordingPeriods[(mCurPeriod + i) % num_periods].getPerSec(stat);
}
}
mean /= num_periods;
diff --git a/indra/llui/llstatbar.cpp b/indra/llui/llstatbar.cpp
index cda40aac72..d9f3d14ef0 100644
--- a/indra/llui/llstatbar.cpp
+++ b/indra/llui/llstatbar.cpp
@@ -52,7 +52,6 @@ LLStatBar::LLStatBar(const Params& p)
mMeasurementFloatp(LLTrace::MeasurementStatHandle<>::getInstance(p.stat)),
mMeasurementIntp(LLTrace::MeasurementStatHandle<S64>::getInstance(p.stat)),
mTickSpacing(p.tick_spacing),
- mLabelSpacing(p.label_spacing),
mPrecision(p.precision),
mUpdatesPerSec(p.update_rate),
mUnitScale(p.unit_scale),
@@ -68,26 +67,32 @@ LLStatBar::LLStatBar(const Params& p)
BOOL LLStatBar::handleMouseDown(S32 x, S32 y, MASK mask)
{
- if (mDisplayBar)
+ BOOL handled = LLView::handleMouseDown(x, y, mask);
+ if (!handled)
{
- if (mDisplayHistory)
+ if (mDisplayBar)
{
- mDisplayBar = FALSE;
- mDisplayHistory = FALSE;
+ if (mDisplayHistory || mOrientation == HORIZONTAL)
+ {
+ mDisplayBar = FALSE;
+ mDisplayHistory = FALSE;
+ }
+ else
+ {
+ mDisplayHistory = TRUE;
+ }
}
else
{
- mDisplayHistory = TRUE;
+ mDisplayBar = TRUE;
+ if (mOrientation == HORIZONTAL)
+ {
+ mDisplayHistory = TRUE;
+ }
}
+ LLView* parent = getParent();
+ parent->reshape(parent->getRect().getWidth(), parent->getRect().getHeight(), FALSE);
}
- else
- {
- mDisplayBar = TRUE;
- }
-
- LLView* parent = getParent();
- parent->reshape(parent->getRect().getWidth(), parent->getRect().getHeight(), FALSE);
-
return TRUE;
}
@@ -200,10 +205,10 @@ void LLStatBar::draw()
if (mScaleRange && num_samples)
{
- F32 cur_max = mLabelSpacing;
- while(max > cur_max)
+ F32 cur_max = mTickSpacing;
+ while(max > cur_max && mMaxBar > cur_max)
{
- cur_max += mLabelSpacing;
+ cur_max += mTickSpacing;
}
mCurMaxBar = LLSmoothInterpolation::lerp(mCurMaxBar, cur_max, 0.05f);
}
@@ -254,42 +259,51 @@ void LLStatBar::draw()
// Draw the tick marks.
LLGLSUIDefault gls_ui;
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-
- for (F32 tick_value = mMinBar + mLabelSpacing; tick_value <= mCurMaxBar; tick_value += mTickSpacing)
+ S32 last_tick = 0;
+ S32 last_label = 0;
+ const S32 MIN_TICK_SPACING = mOrientation == HORIZONTAL ? 20 : 30;
+ const S32 MIN_LABEL_SPACING = mOrientation == HORIZONTAL ? 40 : 60;
+ for (F32 tick_value = mMinBar + mTickSpacing; tick_value <= mCurMaxBar; tick_value += mTickSpacing)
{
const S32 begin = llfloor((tick_value - mMinBar)*value_scale);
const S32 end = begin + tick_width;
- if (mOrientation == HORIZONTAL)
+ if (begin - last_tick < MIN_TICK_SPACING)
{
- gl_rect_2d(bar_left, end, bar_right - tick_length/2, begin, LLColor4(1.f, 1.f, 1.f, 0.1f));
+ continue;
}
- else
- {
- gl_rect_2d(begin, bar_top, end, bar_bottom - tick_length/2, LLColor4(1.f, 1.f, 1.f, 0.1f));
- }
- }
+ last_tick = begin;
- // Draw the tick labels (and big ticks).
- for (F32 tick_value = mMinBar + mLabelSpacing; tick_value <= mCurMaxBar; tick_value += mLabelSpacing)
- {
- const S32 begin = llfloor((tick_value - mMinBar)*value_scale);
- const S32 end = begin + tick_width;
tick_label = llformat( value_format.c_str(), tick_value);
- // draw labels for the tick marks
if (mOrientation == HORIZONTAL)
{
- gl_rect_2d(bar_left, end, bar_right - tick_length, begin, LLColor4(1.f, 1.f, 1.f, 0.25f));
- LLFontGL::getFontMonospace()->renderUTF8(tick_label, 0, bar_right, begin,
- LLColor4(1.f, 1.f, 1.f, 0.5f),
- LLFontGL::LEFT, LLFontGL::VCENTER);
+ if (begin - last_label > MIN_LABEL_SPACING)
+ {
+ gl_rect_2d(bar_left, end, bar_right - tick_length, begin, LLColor4(1.f, 1.f, 1.f, 0.25f));
+ LLFontGL::getFontMonospace()->renderUTF8(tick_label, 0, bar_right, begin,
+ LLColor4(1.f, 1.f, 1.f, 0.5f),
+ LLFontGL::LEFT, LLFontGL::VCENTER);
+ last_label = begin;
+ }
+ else
+ {
+ gl_rect_2d(bar_left, end, bar_right - tick_length/2, begin, LLColor4(1.f, 1.f, 1.f, 0.1f));
+ }
}
else
{
- gl_rect_2d(begin, bar_top, end, bar_bottom - tick_length, LLColor4(1.f, 1.f, 1.f, 0.25f));
- LLFontGL::getFontMonospace()->renderUTF8(tick_label, 0, begin - 1, bar_bottom - tick_length,
- LLColor4(1.f, 1.f, 1.f, 0.5f),
- LLFontGL::RIGHT, LLFontGL::TOP);
+ if (begin - last_label > MIN_LABEL_SPACING)
+ {
+ gl_rect_2d(begin, bar_top, end, bar_bottom - tick_length, LLColor4(1.f, 1.f, 1.f, 0.25f));
+ LLFontGL::getFontMonospace()->renderUTF8(tick_label, 0, begin - 1, bar_bottom - tick_length,
+ LLColor4(1.f, 1.f, 1.f, 0.5f),
+ LLFontGL::RIGHT, LLFontGL::TOP);
+ last_label = begin;
+ }
+ else
+ {
+ gl_rect_2d(begin, bar_top, end, bar_bottom - tick_length/2, LLColor4(1.f, 1.f, 1.f, 0.1f));
+ }
}
}
@@ -457,12 +471,11 @@ void LLStatBar::setStat(const std::string& stat_name)
}
-void LLStatBar::setRange(F32 bar_min, F32 bar_max, F32 tick_spacing, F32 label_spacing)
+void LLStatBar::setRange(F32 bar_min, F32 bar_max, F32 tick_spacing)
{
mMinBar = bar_min;
mMaxBar = bar_max;
mTickSpacing = tick_spacing;
- mLabelSpacing = label_spacing;
}
LLRect LLStatBar::getRequiredRect()
@@ -473,14 +486,7 @@ LLRect LLStatBar::getRequiredRect()
{
if (mDisplayHistory)
{
- if (mOrientation == HORIZONTAL)
- {
- rect.mTop = mMaxHeight;
- }
- else
- {
- rect.mTop = 35 + llmin(mMaxHeight, llmin(mNumFrames, (S32)LLTrace::get_frame_recording().getNumPeriods()));
- }
+ rect.mTop = mMaxHeight;
}
else
{
@@ -493,3 +499,4 @@ LLRect LLStatBar::getRequiredRect()
}
return rect;
}
+
diff --git a/indra/llui/llstatbar.h b/indra/llui/llstatbar.h
index 74a3ebde2f..db667aa07d 100644
--- a/indra/llui/llstatbar.h
+++ b/indra/llui/llstatbar.h
@@ -43,7 +43,6 @@ public:
Optional<F32> bar_min,
bar_max,
tick_spacing,
- label_spacing,
update_rate,
unit_scale;
@@ -66,7 +65,6 @@ public:
bar_min("bar_min", 0.0f),
bar_max("bar_max", 50.0f),
tick_spacing("tick_spacing", 10.0f),
- label_spacing("label_spacing", 10.0f),
precision("precision", 0),
update_rate("update_rate", 5.0f),
unit_scale("unit_scale", 1.f),
@@ -90,7 +88,7 @@ public:
void setStat(const std::string& stat_name);
- void setRange(F32 bar_min, F32 bar_max, F32 tick_spacing, F32 label_spacing);
+ void setRange(F32 bar_min, F32 bar_max, F32 tick_spacing);
void getRange(F32& bar_min, F32& bar_max) { bar_min = mMinBar; bar_max = mMaxBar; }
/*virtual*/ LLRect getRequiredRect(); // Return the height of this object, given the set options.
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 6b50c62ea6..0b0db432c8 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -97,6 +97,7 @@
#include "llcallfloater.h"
#include "llfloatertexturefetchdebugger.h"
#include "llspellcheck.h"
+#include "llscenemonitor.h"
// Linden library includes
#include "llavatarnamecache.h"
@@ -1566,6 +1567,14 @@ bool LLAppViewer::cleanup()
// workaround for DEV-35406 crash on shutdown
LLEventPumps::instance().reset();
+ //dump scene loading monitor results
+ if(LLSceneMonitor::getInstance()->hasResults())
+ {
+ std::string file_name = "scene_monitor_results.csv";
+ LLSceneMonitor::getInstance()->dumpToFile(
+ gDirUtilp->getExpandedFilename(LL_PATH_LOGS, file_name));
+ }
+
if (LLFastTimerView::sAnalyzePerformance)
{
llinfos << "Analyzing performance" << llendl;
diff --git a/indra/newview/llfloaterjoystick.cpp b/indra/newview/llfloaterjoystick.cpp
index 7fcebc965a..dbdf3e5e9f 100644
--- a/indra/newview/llfloaterjoystick.cpp
+++ b/indra/newview/llfloaterjoystick.cpp
@@ -85,7 +85,7 @@ void LLFloaterJoystick::draw()
if (llabs(value) > maxbar)
{
F32 range = llabs(value);
- mAxisStatsBar[i]->setRange(-range, range, range * 0.25f, range * 0.5f);
+ mAxisStatsBar[i]->setRange(-range, range, range * 0.25f);
}
}
}
@@ -106,7 +106,7 @@ BOOL LLFloaterJoystick::postBuild()
if (mAxisStatsBar[i])
{
mAxisStatsBar[i]->setStat(stat_name);
- mAxisStatsBar[i]->setRange(-range, range, range * 0.25f, range * 0.5f);
+ mAxisStatsBar[i]->setRange(-range, range, range * 0.25f);
}
}
diff --git a/indra/newview/llscenemonitor.cpp b/indra/newview/llscenemonitor.cpp
index c69f276aa2..c06d9d2689 100644
--- a/indra/newview/llscenemonitor.cpp
+++ b/indra/newview/llscenemonitor.cpp
@@ -39,6 +39,7 @@
#include "llspatialpartition.h"
#include "llagent.h"
#include "pipeline.h"
+#include "llviewerpartsim.h"
LLSceneMonitorView* gSceneMonitorView = NULL;
@@ -64,6 +65,7 @@ LLSceneMonitor::LLSceneMonitor() :
mHasNewDiff(FALSE),
mHasNewQueryResult(FALSE),
mDebugViewerVisible(FALSE),
+ mQuitting(FALSE),
mQueryObject(0),
mSamplingTime(1.0f),
mDiffPixelRatio(0.5f)
@@ -77,6 +79,7 @@ LLSceneMonitor::LLSceneMonitor() :
LLSceneMonitor::~LLSceneMonitor()
{
+ mQuitting = TRUE;
destroyClass();
}
@@ -273,8 +276,12 @@ void LLSceneMonitor::freezeScene()
// freeze everything else
gSavedSettings.setBOOL("FreezeTime", TRUE);
+ //disable sky, water and clouds
gPipeline.clearRenderTypeMask(LLPipeline::RENDER_TYPE_SKY, LLPipeline::RENDER_TYPE_WL_SKY,
LLPipeline::RENDER_TYPE_WATER, LLPipeline::RENDER_TYPE_CLOUDS, LLPipeline::END_RENDER_TYPES);
+
+ //disable particle system
+ LLViewerPartSim::getInstance()->enable(false);
}
void LLSceneMonitor::unfreezeScene()
@@ -282,11 +289,20 @@ void LLSceneMonitor::unfreezeScene()
//thaw all avatars
mAvatarPauseHandles.clear();
+ if(mQuitting)
+ {
+ return; //we are quitting viewer.
+ }
+
// thaw everything else
gSavedSettings.setBOOL("FreezeTime", FALSE);
+ //enable sky, water and clouds
gPipeline.setRenderTypeMask(LLPipeline::RENDER_TYPE_SKY, LLPipeline::RENDER_TYPE_WL_SKY,
LLPipeline::RENDER_TYPE_WATER, LLPipeline::RENDER_TYPE_CLOUDS, LLPipeline::END_RENDER_TYPES);
+
+ //enable particle system
+ LLViewerPartSim::getInstance()->enable(true);
}
void LLSceneMonitor::capture()
@@ -484,13 +500,51 @@ void LLSceneMonitor::fetchQueryResult()
mDiffResult = count * 0.5f / (mDiff->getWidth() * mDiff->getHeight() * mDiffPixelRatio * mDiffPixelRatio); //0.5 -> (front face + back face)
- if(mDiffResult > 0.01f)
+ addMonitorResult();
+}
+
+void LLSceneMonitor::addMonitorResult()
+{
+ const F32 diff_threshold = 0.001f;
+ if(mDiffResult < diff_threshold)
{
+ return;
+ }
+
mRecording->extend();
sample(sFramePixelDiff, mDiffResult);
+
+ ll_monitor_result_t result;
+ result.mTimeStamp = LLImageGL::sLastFrameTime;
+ result.mDiff = mDiffResult;
+ mMonitorResults.push_back(result);
}
- //llinfos << count << " : " << mDiffResult << llendl;
+
+//dump results to a file _scene_monitor_results.csv
+void LLSceneMonitor::dumpToFile(std::string file_name)
+{
+ if(mMonitorResults.empty())
+ {
+ return; //nothing to dump
+ }
+
+ std::ofstream os(file_name.c_str());
+
+ //total scene loading time
+ os << llformat("Scene Loading time: %.4f seconds\n", (F32)getRecording()->getAcceptedRecording().getDuration().value());
+
+ S32 num_results = mMonitorResults.size();
+ for(S32 i = 0; i < num_results; i++)
+ {
+ os << llformat("%.4f %.4f\n", mMonitorResults[i].mTimeStamp, mMonitorResults[i].mDiff);
+ }
+
+ os.flush();
+ os.close();
+
+ mMonitorResults.clear();
}
+
//-------------------------------------------------------------------------------------------------------------
//definition of class LLSceneMonitorView
//-------------------------------------------------------------------------------------------------------------
@@ -511,6 +565,7 @@ void LLSceneMonitorView::onClickCloseBtn()
void LLSceneMonitorView::setVisible(BOOL visible)
{
+ visible = visible && LLGLSLShader::sNoFixedFunction;
LLSceneMonitor::getInstance()->setDebugViewerVisible(visible);
LLView::setVisible(visible);
diff --git a/indra/newview/llscenemonitor.h b/indra/newview/llscenemonitor.h
index 709650e206..c897b237b6 100644
--- a/indra/newview/llscenemonitor.h
+++ b/indra/newview/llscenemonitor.h
@@ -64,6 +64,8 @@ public:
bool needsUpdate() const;
LLTrace::ExtendableRecording* getRecording() const {return mRecording;}
+ void dumpToFile(std::string file_name);
+ bool hasResults() const { return !mMonitorResults.empty();}
private:
void freezeScene();
@@ -72,12 +74,14 @@ private:
bool preCapture();
void generateDitheringTexture(S32 width, S32 height);
+ void addMonitorResult();
private:
BOOL mEnabled;
BOOL mNeedsUpdateDiff;
BOOL mHasNewDiff;
BOOL mHasNewQueryResult;
BOOL mDebugViewerVisible;
+ BOOL mQuitting;
LLRenderTarget* mFrames[2];
LLRenderTarget* mDiff;
@@ -99,6 +103,14 @@ private:
std::vector<LLAnimPauseRequest> mAvatarPauseHandles;
LLTrace::ExtendableRecording* mRecording;
+
+ //---------------------------------------
+ typedef struct _monitor_result
+ {
+ F32 mTimeStamp;
+ F32 mDiff;
+ } ll_monitor_result_t;
+ std::vector<ll_monitor_result_t> mMonitorResults;
};
class LLSceneMonitorView : public LLFloater
diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp
index 8acdc08b00..a23a15da32 100644
--- a/indra/newview/llviewerpartsim.cpp
+++ b/indra/newview/llviewerpartsim.cpp
@@ -467,6 +467,20 @@ LLViewerPartSim::LLViewerPartSim()
mID = ++id_seed;
}
+//enable/disable particle system
+void LLViewerPartSim::enable(bool enabled)
+{
+ if(!enabled && sMaxParticleCount > 0)
+ {
+ sMaxParticleCount = 0; //disable
+ }
+ else if(enabled && sMaxParticleCount < 1)
+ {
+ sMaxParticleCount = llmin(gSavedSettings.getS32("RenderMaxPartCount"), LL_MAX_PARTICLE_COUNT);
+ }
+
+ return;
+}
void LLViewerPartSim::destroyClass()
{
diff --git a/indra/newview/llviewerpartsim.h b/indra/newview/llviewerpartsim.h
index c91fcf0691..27bfcd4343 100644
--- a/indra/newview/llviewerpartsim.h
+++ b/indra/newview/llviewerpartsim.h
@@ -134,6 +134,8 @@ public:
typedef std::vector<LLViewerPartGroup *> group_list_t;
typedef std::vector<LLPointer<LLViewerPartSource> > source_list_t;
+ void enable(bool enabled);
+
void shift(const LLVector3 &offset);
void updateSimulation();
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index 12eea513da..9401773886 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -728,7 +728,8 @@ void LLWorld::updateNetStats()
add(LLStatViewer::PACKETS_LOST, packets_lost);
if (packets_in)
{
- sample(LLStatViewer::PACKETS_LOST_PERCENT, 100.f * ((F32)packets_lost/(F32)packets_in));
+ F32 packet_loss = 100.f * ((F32)packets_lost/(F32)packets_in);
+ sample(LLStatViewer::PACKETS_LOST_PERCENT, packet_loss);
}
mLastPacketsIn = gMessageSystem->mPacketsIn;
diff --git a/indra/newview/skins/default/xui/en/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/en/floater_scene_load_stats.xml
index f4021d210a..246e8bb256 100644
--- a/indra/newview/skins/default/xui/en/floater_scene_load_stats.xml
+++ b/indra/newview/skins/default/xui/en/floater_scene_load_stats.xml
@@ -8,7 +8,8 @@
save_visibility="true"
title="SCENE LOAD STATISTICS"
width="260">
- <button top="20"
+ <button follows="top|left"
+ top="20"
bottom="60"
left="10"
width="100"
@@ -41,7 +42,6 @@
stat="FramePixelDifference"
bar_max="100"
tick_spacing="10"
- label_spacing="20"
unit_scale="100"
precision="0"/>
<stat_bar name="bandwidth"
@@ -51,7 +51,6 @@
stat="kbitstat"
bar_max="5000"
tick_spacing="500"
- label_spacing="1000"
precision="0"/>
<stat_bar name="packet_loss"
label="Packet Loss"
@@ -60,7 +59,6 @@
stat="packetslostpercentstat"
bar_max="5"
tick_spacing="0.5"
- label_spacing="1"
precision="3"
show_bar="false"
show_mean="true"/>
@@ -81,7 +79,6 @@
stat="numobjectsstat"
bar_max="50000"
tick_spacing="5000"
- label_spacing="10000"
precision="0"
show_bar="false"/>
<stat_bar name="newobjs"
@@ -91,7 +88,6 @@
stat="numnewobjectsstat"
bar_max="2000"
tick_spacing="200"
- label_spacing="400"
show_bar="false"/>
<stat_bar name="object_cache_hits"
label="Object Cache Hit Rate"
@@ -100,7 +96,6 @@
bar_max="100"
unit_label="%"
tick_spacing="20"
- label_spacing="20"
show_history="true"
show_bar="false"/>
</stat_view>
@@ -115,7 +110,6 @@
bar_max="100.f"
unit_label="%"
tick_spacing="20"
- label_spacing="20"
show_history="true"
show_bar="false"/>
<stat_bar name="texture_cache_read_latency"
@@ -125,7 +119,6 @@
stat="texture_cache_read_latency"
bar_max="1000.f"
tick_spacing="100"
- label_spacing="200"
show_history="true"
show_bar="false"/>
<stat_bar name="numimagesstat"
@@ -134,7 +127,6 @@
stat="numimagesstat"
bar_max="8000.f"
tick_spacing="2000.f"
- label_spacing="4000.f"
show_bar="false"/>
<stat_bar name="numrawimagesstat"
label="Raw Count"
@@ -142,7 +134,6 @@
stat="numrawimagesstat"
bar_max="8000.f"
tick_spacing="2000.f"
- label_spacing="4000.f"
show_bar="false"/>
</stat_view>
<!--Network Stats-->
@@ -157,7 +148,6 @@
unit_label="/sec"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
precision="1"
show_bar="false"/>
<stat_bar name="packetsoutstat"
@@ -167,7 +157,6 @@
unit_label="/sec"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
precision="1"
show_bar="false"/>
<stat_bar name="objectkbitstat"
@@ -177,7 +166,6 @@
unit_label="kbps"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
precision="1"
show_bar="false"/>
<stat_bar name="texturekbitstat"
@@ -187,7 +175,6 @@
unit_label="kbps"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
precision="1"
show_bar="false"/>
<stat_bar name="assetkbitstat"
@@ -197,7 +184,6 @@
unit_label="kbps"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
precision="1"
show_bar="false"/>
<stat_bar name="layerskbitstat"
@@ -207,7 +193,6 @@
unit_label="kbps"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
precision="1"
show_bar="false"/>
<stat_bar name="actualinkbitstat"
@@ -217,7 +202,6 @@
unit_label="kbps"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
precision="1"
show_bar="false"/>
<stat_bar name="actualoutkbitstat"
@@ -227,7 +211,6 @@
unit_label="kbps"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
precision="1"
show_bar="false"/>
<stat_bar name="vfspendingoperations"
@@ -250,7 +233,6 @@
precision="0"
bar_max="30000.f"
tick_spacing="5000.f"
- label_spacing="10000.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simactiveobjects"
@@ -260,7 +242,6 @@
precision="0"
bar_max="5000.f"
tick_spacing="750.f"
- label_spacing="1250.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simactivescripts"
@@ -270,7 +251,6 @@
precision="0"
bar_max="15000.f"
tick_spacing="1875.f"
- label_spacing="3750.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="siminpps"
@@ -281,7 +261,6 @@
precision="0"
bar_max="2000.f"
tick_spacing="250.f"
- label_spacing="1000.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simoutpps"
@@ -292,7 +271,6 @@
precision="0"
bar_max="2000.f"
tick_spacing="250.f"
- label_spacing="1000.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simpendingdownloads"
@@ -302,7 +280,6 @@
precision="0"
bar_max="800.f"
tick_spacing="100.f"
- label_spacing="200.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simpendinguploads"
@@ -312,7 +289,6 @@
precision="0"
bar_max="100.f"
tick_spacing="25.f"
- label_spacing="50.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simtotalunackedbytes"
@@ -323,7 +299,6 @@
precision="1"
bar_max="100000.f"
tick_spacing="25000.f"
- label_spacing="50000.f"
show_bar="false"
show_mean="false"/>
<stat_view name="simperf"
@@ -337,7 +312,6 @@
precision="3"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simnetmsec"
@@ -348,7 +322,6 @@
precision="3"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simsimphysicsmsec"
@@ -359,7 +332,6 @@
precision="3"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simsimothermsec"
@@ -370,7 +342,6 @@
precision="3"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simagentmsec"
@@ -381,7 +352,6 @@
precision="3"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simimagesmsec"
@@ -392,7 +362,6 @@
precision="3"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simscriptmsec"
@@ -403,7 +372,6 @@
precision="3"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simsparemsec"
@@ -414,7 +382,6 @@
precision="3"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false"/>
<!--2nd level time blocks under 'Details' second-->
@@ -429,7 +396,6 @@
precision="3"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simsimphysicsshapeupdatemsec"
@@ -440,7 +406,6 @@
precision="3"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simsimphysicsothermsec"
@@ -451,7 +416,6 @@
precision="3"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simsleepmsec"
@@ -462,7 +426,6 @@
precision="3"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false"/>
<stat_bar name="simpumpiomsec"
@@ -473,7 +436,6 @@
precision="3"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false"/>
</stat_view>
diff --git a/indra/newview/skins/default/xui/en/floater_stats.xml b/indra/newview/skins/default/xui/en/floater_stats.xml
index a3f2fb0b9c..f98fcc349e 100644
--- a/indra/newview/skins/default/xui/en/floater_stats.xml
+++ b/indra/newview/skins/default/xui/en/floater_stats.xml
@@ -31,18 +31,17 @@
<stat_view
name="basic"
label="Basic"
+ follows="left|top|right"
show_label="true"
setting="OpenDebugStatBasic">
<stat_bar
name="fps"
- orientation="horizontal"
label="FPS"
unit_label="fps"
stat="fpsstat"
bar_min="0"
bar_max="60"
tick_spacing="6"
- label_spacing="12"
precision="1"
show_bar="true"
show_history="true">
@@ -55,7 +54,6 @@
bar_min="0"
bar_max="5000"
tick_spacing="500"
- label_spacing="1000"
precision="0"
show_bar="true"
show_history="false">
@@ -68,7 +66,6 @@
bar_min="0"
bar_max="5"
tick_spacing="0.5"
- label_spacing="1"
precision="3"
show_bar="false"
show_mean="true">
@@ -81,7 +78,6 @@
bar_min="0"
bar_max="5000"
tick_spacing="500"
- label_spacing="1000"
precision="0"
show_bar="false"
show_mean="false">
@@ -91,11 +87,13 @@
<stat_view
name="advanced"
label="Advanced"
+ follows="left|top|right"
show_label="true"
setting="OpenDebugStatAdvanced">
<stat_view
name="render"
label="Render"
+ follows="left|top|right"
show_label="true"
setting="OpenDebugStatRender">
<stat_bar
@@ -107,7 +105,6 @@
bar_min="0"
bar_max="10000"
tick_spacing="1000"
- label_spacing="2000"
precision="0"
show_per_sec="false"
show_bar="false">
@@ -121,7 +118,6 @@
bar_min="0"
bar_max="200000"
tick_spacing="25000"
- label_spacing="50000"
precision="0"
show_bar="false">
</stat_bar>
@@ -133,7 +129,6 @@
bar_min="0"
bar_max="50000"
tick_spacing="5000"
- label_spacing="10000"
precision="0"
show_bar="false">
</stat_bar>
@@ -145,7 +140,6 @@
bar_min="0"
bar_max="2000"
tick_spacing="200"
- label_spacing="400"
show_bar="false">
</stat_bar>
<stat_bar
@@ -156,7 +150,6 @@
bar_max="100"
unit_label="%"
tick_spacing="20"
- label_spacing="20"
show_history="true"
show_bar="false">
</stat_bar>
@@ -165,6 +158,7 @@
<stat_view
name="texture"
label="Texture"
+ follows="left|top|right"
show_label="true">
<stat_bar
name="texture_cache_hits"
@@ -174,7 +168,6 @@
bar_max="100.f"
unit_label="%"
tick_spacing="20"
- label_spacing="20"
show_history="true"
show_bar="false">
</stat_bar>
@@ -186,7 +179,6 @@
bar_min="0.f"
bar_max="1000.f"
tick_spacing="100"
- label_spacing="200"
show_history="true"
show_bar="false">
</stat_bar>
@@ -197,7 +189,6 @@
bar_min="0.f"
bar_max="8000.f"
tick_spacing="2000.f"
- label_spacing="4000.f"
show_bar="false">
</stat_bar>
@@ -208,7 +199,6 @@
bar_min="0.f"
bar_max="8000.f"
tick_spacing="2000.f"
- label_spacing="4000.f"
show_bar="false">
</stat_bar>
@@ -221,7 +211,6 @@
bar_min="0.f"
bar_max="400.f"
tick_spacing="100.f"
- label_spacing="200.f"
precision="1"
show_bar="false">
</stat_bar>
@@ -235,7 +224,6 @@
bar_min="0.f"
bar_max="400.f"
tick_spacing="100.f"
- label_spacing="200.f"
precision="3"
show_bar="false">
</stat_bar>
@@ -249,7 +237,6 @@
bar_min="0.f"
bar_max="400.f"
tick_spacing="100.f"
- label_spacing="200.f"
precision="3"
show_bar="false">
</stat_bar>
@@ -263,7 +250,6 @@
bar_min="0.f"
bar_max="400.f"
tick_spacing="100.f"
- label_spacing="200.f"
precision="3"
show_bar="false">
</stat_bar>
@@ -272,6 +258,7 @@
<stat_view
name="network"
label="Network"
+ follows="left|top|right"
show_label="true"
setting="OpenDebugStatNet">
<stat_bar
@@ -282,7 +269,6 @@
bar_min="0.f"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
precision="1"
show_bar="false">
</stat_bar>
@@ -295,7 +281,6 @@
bar_min="0.f"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
precision="1"
show_bar="false" >
</stat_bar>
@@ -308,7 +293,6 @@
bar_min="0.f"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
precision="1"
show_bar="false" >
</stat_bar>
@@ -321,7 +305,6 @@
bar_min="0.f"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
precision="1"
show_bar="false" >
</stat_bar>
@@ -334,7 +317,6 @@
bar_min="0.f"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
precision="1"
show_bar="false" >
</stat_bar>
@@ -347,7 +329,6 @@
bar_min="0.f"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
precision="1"
show_bar="false" >
</stat_bar>
@@ -360,7 +341,6 @@
bar_min="0.f"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
precision="1"
show_bar="false"
show_history="false" >
@@ -374,7 +354,6 @@
bar_min="0.f"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
precision="1"
show_bar="false"
show_history="false">
@@ -393,6 +372,7 @@
<stat_view
name="sim"
label="Simulator"
+ follows="left|top|right"
show_label="true"
setting="OpenDebugStatSim">
<stat_bar
@@ -403,7 +383,6 @@
bar_min="0.f"
bar_max="1.f"
tick_spacing="0.16666f"
- label_spacing="0.33333f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -416,7 +395,6 @@
bar_min="0.f"
bar_max="45.f"
tick_spacing="7.5f"
- label_spacing="15.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -429,7 +407,6 @@
bar_min="0.f"
bar_max="45.f"
tick_spacing="7.5.f"
- label_spacing="15.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -437,6 +414,7 @@
<stat_view
name="physicsdetail"
label="Physics Details"
+ follows="left|top|right"
show_label="true">
<stat_bar
name="physicspinnedtasks"
@@ -446,7 +424,6 @@
bar_min="0.f"
bar_max="500.f"
tick_spacing="50.f"
- label_spacing="100.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -459,7 +436,6 @@
bar_min="0.f"
bar_max="500.f"
tick_spacing="50.f"
- label_spacing="100.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -473,7 +449,6 @@
bar_min="0.f"
bar_max="1024.f"
tick_spacing="128.f"
- label_spacing="256.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -487,7 +462,6 @@
bar_min="0.f"
bar_max="100.f"
tick_spacing="25.f"
- label_spacing="50.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -500,7 +474,6 @@
bar_min="0.f"
bar_max="80.f"
tick_spacing="10.f"
- label_spacing="40.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -513,7 +486,6 @@
bar_min="0.f"
bar_max="40.f"
tick_spacing="5.f"
- label_spacing="10.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -526,7 +498,6 @@
bar_min="0.f"
bar_max="30000.f"
tick_spacing="5000.f"
- label_spacing="10000.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -539,7 +510,6 @@
bar_min="0.f"
bar_max="5000.f"
tick_spacing="750.f"
- label_spacing="1250.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -552,7 +522,6 @@
bar_min="0.f"
bar_max="15000.f"
tick_spacing="1875.f"
- label_spacing="3750.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -564,7 +533,6 @@
bar_min="0"
bar_max="100"
tick_spacing="10"
- label_spacing="20"
precision="3"
show_bar="false"
show_mean="true">
@@ -579,7 +547,6 @@
bar_min="0.f"
bar_max="5000.f"
tick_spacing="750.f"
- label_spacing="1250.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -587,6 +554,7 @@
<stat_view
name="simpathfinding"
label="Pathfinding"
+ follows="left|top|right"
show_label="true">
<stat_bar
name="simsimaistepmsec"
@@ -597,7 +565,6 @@
bar_min="0.f"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -610,7 +577,6 @@
bar_min="0"
bar_max="45"
tick_spacing="4"
- label_spacing="8"
show_bar="false">
</stat_bar>
<stat_bar
@@ -621,7 +587,6 @@
bar_min="0"
bar_max="100"
tick_spacing="10"
- label_spacing="20"
precision="1"
show_bar="false"
show_mean="true">
@@ -637,7 +602,6 @@
bar_min="0.f"
bar_max="2000.f"
tick_spacing="250.f"
- label_spacing="1000.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -651,7 +615,6 @@
bar_min="0.f"
bar_max="2000.f"
tick_spacing="250.f"
- label_spacing="1000.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -664,7 +627,6 @@
bar_min="0.f"
bar_max="800.f"
tick_spacing="100.f"
- label_spacing="200.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -677,7 +639,6 @@
bar_min="0.f"
bar_max="100.f"
tick_spacing="25.f"
- label_spacing="50.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -691,7 +652,6 @@
bar_min="0.f"
bar_max="100000.f"
tick_spacing="25000.f"
- label_spacing="50000.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -699,6 +659,7 @@
<stat_view
name="simperf"
label="Time (ms)"
+ follows="left|top|right"
show_label="true">
<stat_bar
name="simframemsec"
@@ -709,7 +670,6 @@
bar_min="0.f"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -723,7 +683,6 @@
bar_min="0.f"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -737,7 +696,6 @@
bar_min="0.f"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -751,7 +709,6 @@
bar_min="0.f"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -765,7 +722,6 @@
bar_min="0.f"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -779,7 +735,6 @@
bar_min="0.f"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -793,7 +748,6 @@
bar_min="0.f"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -807,7 +761,6 @@
bar_min="0.f"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -815,6 +768,7 @@
<stat_view
name="timedetails"
label="Time Details (ms)"
+ follows="left|top|right"
show_label="true">
<stat_bar
name="simsimphysicsstepmsec"
@@ -825,7 +779,6 @@
bar_min="0.f"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -838,7 +791,6 @@
bar_min="0.f"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -851,7 +803,6 @@
bar_min="0.f"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -864,7 +815,6 @@
bar_min="0.f"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false" >
</stat_bar>
@@ -877,7 +827,6 @@
bar_min="0.f"
bar_max="40.f"
tick_spacing="10.f"
- label_spacing="20.f"
show_bar="false"
show_mean="false" >
</stat_bar>