Skip to content

Commit 024da37

Browse files
authored
Add support for Normalized Frametime Variation (NVFT) (#4395)
* Add support for Normalized Frametime Variation (NVFT) * Add normalized period jitter
1 parent 82e6e42 commit 024da37

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed

indra/newview/llviewerstats.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,8 @@ LLTrace::SampleStatHandle<U32> FRAMETIME_JITTER_EVENTS("frametimeevents", "Numbe
234234
FRAMETIME_JITTER_EVENTS_LAST_MINUTE("frametimeeventslastmin", "Number of frametime events in the last minute.");
235235

236236
LLTrace::SampleStatHandle<F64> NOTRMALIZED_FRAMETIME_JITTER_SESSION("normalizedframetimejitter", "Normalized frametime jitter over the session.");
237+
LLTrace::SampleStatHandle<F64> NFTV("nftv", "Normalized frametime variation.");
238+
LLTrace::SampleStatHandle<F64> NORMALIZED_FRAMTIME_JITTER_PERIOD("normalizedframetimejitterperiod", "Normalized frametime jitter over the last 5 seconds.");
237239

238240
LLTrace::EventStatHandle<LLUnit<F64, LLUnits::Meters> > AGENT_POSITION_SNAP("agentpositionsnap", "agent position corrections");
239241

@@ -322,6 +324,8 @@ void LLViewerStats::updateFrameStats(const F64Seconds time_diff)
322324
sample(LLStatViewer::FRAMETIME_JITTER_CUMULATIVE, mTotalFrametimeJitter);
323325
sample(LLStatViewer::NOTRMALIZED_FRAMETIME_JITTER_SESSION, mTotalFrametimeJitter / mTotalTime);
324326

327+
mLastNoramlizedSessionJitter = mTotalFrametimeJitter / mTotalTime;
328+
325329
static LLCachedControl<F32> frameTimeEventThreshold(gSavedSettings, "StatsFrametimeEventThreshold", 0.1f);
326330

327331
if (time_diff - mLastTimeDiff > mLastTimeDiff * frameTimeEventThreshold())
@@ -360,6 +364,27 @@ void LLViewerStats::updateFrameStats(const F64Seconds time_diff)
360364
sample(LLStatViewer::FRAMETIME_JITTER_99TH, ninety_ninth_percentile);
361365
sample(LLStatViewer::FRAMETIME_JITTER_95TH, ninety_fifth_percentile);
362366

367+
F64 averageFrameTime = 0;
368+
for (const auto& frame_time : mFrameTimes)
369+
{
370+
averageFrameTime += frame_time.value();
371+
}
372+
averageFrameTime /= mFrameTimes.size();
373+
374+
sample(LLStatViewer::NFTV, frame_time_stddev / averageFrameTime);
375+
mLastNormalizedFrametimeVariance = frame_time_stddev / averageFrameTime;
376+
377+
// Add up all of the jitter values.
378+
F64 totalJitter = 0;
379+
for (const auto& frame_jitter : mFrameTimesJitter)
380+
{
381+
totalJitter += frame_jitter.value();
382+
}
383+
384+
mLastNormalizedPeriodJitter = totalJitter / mLastFrameTimeSample;
385+
386+
sample(LLStatViewer::NORMALIZED_FRAMTIME_JITTER_PERIOD, mLastNormalizedPeriodJitter);
387+
363388
mFrameTimes.clear();
364389
mFrameTimesJitter.clear();
365390
mLastFrameTimeSample = F64Seconds(0);
@@ -648,6 +673,11 @@ void send_viewer_stats(bool include_preferences)
648673

649674
// send fps only for time app spends in foreground
650675
agent["fps"] = (F32)gForegroundFrameCount / gForegroundTime.getElapsedTimeF32();
676+
677+
agent["normalized_session_jitter"] = LLViewerStats::instance().getLastNormalizedSessionJitter();
678+
agent["normalized_frametime_variance"] = LLViewerStats::instance().getLastNormalizedFrametimeVariance();
679+
agent["normalized_period_jitter"] = LLViewerStats::instance().getLastNormalizedPeriodJitter();
680+
651681
agent["version"] = LLVersionInfo::instance().getChannelAndVersion();
652682
std::string language = LLUI::getLanguage();
653683
agent["language"] = language;

indra/newview/llviewerstats.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,10 @@ class LLViewerStats : public LLSingleton<LLViewerStats>
271271
LLTrace::Recording& getRecording() { return mRecording; }
272272
const LLTrace::Recording& getRecording() const { return mRecording; }
273273

274+
F64 getLastNormalizedSessionJitter() const { return mLastNoramlizedSessionJitter; }
275+
F64 getLastNormalizedFrametimeVariance() const { return mLastNormalizedFrametimeVariance; }
276+
F64 getLastNormalizedPeriodJitter() const { return mLastNormalizedPeriodJitter; }
277+
274278
private:
275279
LLTrace::Recording mRecording;
276280

@@ -286,6 +290,11 @@ class LLViewerStats : public LLSingleton<LLViewerStats>
286290
F64Seconds mTimeSinceLastEventSample;
287291
std::vector<F64Seconds> mFrameTimes; // used for frame time stats
288292
std::vector<F64Seconds> mFrameTimesJitter; // used for frame time jitter stats
293+
294+
F64 mLastNoramlizedSessionJitter; // used for frame time jitter stats
295+
F64 mLastNormalizedFrametimeVariance; // Used when submitting jitter stats
296+
F64 mLastNormalizedPeriodJitter;
297+
289298
};
290299

291300
static const F32 SEND_STATS_PERIOD = 300.0f;

indra/newview/skins/default/xui/en/floater_stats.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,14 @@
5858
label="normalized sess. jitter"
5959
decimal_digits="4"
6060
stat="normalizedframetimejitter"/>
61+
<stat_bar name="normalized_period_jitter"
62+
label="normalized period jitter"
63+
decimal_digits="4"
64+
stat="normalizedframetimejitterperiod"/>
65+
<stat_bar name="normalized_frametime_variation"
66+
label="normalized frametime variation"
67+
decimal_digits="4"
68+
stat="nftv"/>
6169
<stat_bar name="frame_events_per_minute"
6270
label="frame events/minute"
6371
decimal_digits="2"

0 commit comments

Comments
 (0)