From 551f0aaba3b0514eea1c616f55210f6e867a96e5 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 18 Aug 2015 01:37:11 -0700 Subject: [PATCH] show how many times per second Application::idle is called --- interface/resources/qml/Stats.qml | 5 +++++ interface/src/Application.cpp | 19 +++++++++++++------ interface/src/Application.h | 8 ++++++++ interface/src/ui/Stats.cpp | 1 + interface/src/ui/Stats.h | 2 ++ 5 files changed, 29 insertions(+), 6 deletions(-) diff --git a/interface/resources/qml/Stats.qml b/interface/resources/qml/Stats.qml index 996f9f02ef..b7081afadf 100644 --- a/interface/resources/qml/Stats.qml +++ b/interface/resources/qml/Stats.qml @@ -47,6 +47,11 @@ Item { font.pixelSize: root.fontSize text: "Framerate: " + root.framerate } + Text { + color: root.fontColor; + font.pixelSize: root.fontSize + text: "Simrate: " + root.simrate + } Text { color: root.fontColor; font.pixelSize: root.fontSize diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 4e790bfa88..58ef83efff 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -89,7 +89,6 @@ #include #include #include -#include #include #include #include @@ -2003,19 +2002,27 @@ void Application::checkFPS() { void Application::idle() { PROFILE_RANGE(__FUNCTION__); - static SimpleAverage interIdleDurations; + + static uint64_t lastIdleStart{ 0 }; static uint64_t lastIdleEnd{ 0 }; + uint64_t now = usecTimestampNow(); + uint64_t idleStartToStartDuration = now - lastIdleStart; + + if (lastIdleStart > 0 && idleStartToStartDuration > 0) { + _simsPerSecond.updateAverage((float)USECS_PER_SECOND / (float)idleStartToStartDuration); + } + + lastIdleStart = now; if (lastIdleEnd != 0) { - uint64_t now = usecTimestampNow(); - interIdleDurations.update(now - lastIdleEnd); + _interIdleDurations.update(now - lastIdleEnd); static uint64_t lastReportTime = now; if ((now - lastReportTime) >= (USECS_PER_SECOND)) { static QString LOGLINE("Average inter-idle time: %1 us for %2 samples"); if (Menu::getInstance()->isOptionChecked(MenuOption::LogExtraTimings)) { - qCDebug(interfaceapp_timing) << LOGLINE.arg((int)interIdleDurations.getAverage()).arg(interIdleDurations.getCount()); + qCDebug(interfaceapp_timing) << LOGLINE.arg((int)_interIdleDurations.getAverage()).arg(_interIdleDurations.getCount()); } - interIdleDurations.reset(); + _interIdleDurations.reset(); lastReportTime = now; } } diff --git a/interface/src/Application.h b/interface/src/Application.h index e0d4fa559d..fd57406249 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -38,6 +38,8 @@ #include #include #include +#include +#include #include "AudioClient.h" #include "Bookmarks.h" @@ -350,6 +352,9 @@ public: const QRect& getMirrorViewRect() const { return _mirrorViewRect; } + float getAverageInterIdleDuration() { return _interIdleDurations.getAverage(); } + float getAverageSimsPerSecond() { return _simsPerSecond.getAverage(); } + signals: /// Fired when we're simulating; allows external parties to hook in. @@ -681,6 +686,9 @@ private: EntityItemID _keyboardFocusedItem; quint64 _lastAcceptedKeyPress = 0; + + SimpleAverage _interIdleDurations; + SimpleMovingAverage _simsPerSecond; }; #endif // hifi_Application_h diff --git a/interface/src/ui/Stats.cpp b/interface/src/ui/Stats.cpp index d7c4bb5ed7..74e3a8f44f 100644 --- a/interface/src/ui/Stats.cpp +++ b/interface/src/ui/Stats.cpp @@ -114,6 +114,7 @@ void Stats::updateStats() { STAT_UPDATE(avatarCount, avatarManager->size() - 1); STAT_UPDATE(serverCount, nodeList->size()); STAT_UPDATE(framerate, (int)qApp->getFps()); + STAT_UPDATE(simrate, (int)Application::getInstance()->getAverageSimsPerSecond()); auto bandwidthRecorder = DependencyManager::get(); STAT_UPDATE(packetInCount, bandwidthRecorder->getCachedTotalAverageInputPacketsPerSecond()); diff --git a/interface/src/ui/Stats.h b/interface/src/ui/Stats.h index af6824d1a3..4f0619d9c8 100644 --- a/interface/src/ui/Stats.h +++ b/interface/src/ui/Stats.h @@ -30,6 +30,7 @@ class Stats : public QQuickItem { STATS_PROPERTY(int, serverCount, 0) STATS_PROPERTY(int, framerate, 0) + STATS_PROPERTY(int, simrate, 0) STATS_PROPERTY(int, avatarCount, 0) STATS_PROPERTY(int, packetInCount, 0) STATS_PROPERTY(int, packetOutCount, 0) @@ -95,6 +96,7 @@ signals: void timingExpandedChanged(); void serverCountChanged(); void framerateChanged(); + void simrateChanged(); void avatarCountChanged(); void packetInCountChanged(); void packetOutCountChanged();