mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-10 09:36:27 +02:00
ability to see Stats in JavaScript + example script which outputs the stats to the console/logviewer
This commit is contained in:
parent
ec9bf0791b
commit
6d4e4af0a5
4 changed files with 85 additions and 13 deletions
67
examples/example/misc/statsExample.js
Normal file
67
examples/example/misc/statsExample.js
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
//
|
||||||
|
// statsExample.js
|
||||||
|
// examples/example/misc
|
||||||
|
//
|
||||||
|
// Created by Thijs Wenker on 24 Sept 2015
|
||||||
|
// Copyright 2015 High Fidelity, Inc.
|
||||||
|
//
|
||||||
|
// Prints the stats to the console.
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
//
|
||||||
|
|
||||||
|
// The stats to be displayed
|
||||||
|
var stats = [
|
||||||
|
'serverCount',
|
||||||
|
'framerate', // a.k.a. FPS
|
||||||
|
'simrate',
|
||||||
|
'avatarSimrate',
|
||||||
|
'avatarCount',
|
||||||
|
'packetInCount',
|
||||||
|
'packetOutCount',
|
||||||
|
'mbpsIn',
|
||||||
|
'mbpsOut',
|
||||||
|
'audioPing',
|
||||||
|
'avatarPing',
|
||||||
|
'entitiesPing',
|
||||||
|
'assetPing',
|
||||||
|
'velocity',
|
||||||
|
'yaw',
|
||||||
|
'avatarMixerKbps',
|
||||||
|
'avatarMixerPps',
|
||||||
|
'audioMixerKbps',
|
||||||
|
'audioMixerPps',
|
||||||
|
'downloads',
|
||||||
|
'downloadsPending',
|
||||||
|
'triangles',
|
||||||
|
'quads',
|
||||||
|
'materialSwitches',
|
||||||
|
'meshOpaque',
|
||||||
|
'meshTranslucent',
|
||||||
|
'opaqueConsidered',
|
||||||
|
'opaqueOutOfView',
|
||||||
|
'opaqueTooSmall',
|
||||||
|
'translucentConsidered',
|
||||||
|
'translucentOutOfView',
|
||||||
|
'translucentTooSmall',
|
||||||
|
'sendingMode',
|
||||||
|
'packetStats',
|
||||||
|
'lodStatus',
|
||||||
|
'timingStats',
|
||||||
|
'serverElements',
|
||||||
|
'serverInternal',
|
||||||
|
'serverLeaves',
|
||||||
|
'localElements',
|
||||||
|
'localInternal',
|
||||||
|
'localLeaves'
|
||||||
|
];
|
||||||
|
|
||||||
|
// Force update the stats, in case the stats panel is invisible
|
||||||
|
Stats.forceUpdateStats();
|
||||||
|
|
||||||
|
// Loop through the stats and display them
|
||||||
|
for (var i in stats) {
|
||||||
|
var stat = stats[i];
|
||||||
|
print(stat + " = " + Stats[stat]);
|
||||||
|
}
|
|
@ -4063,6 +4063,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri
|
||||||
scriptEngine->registerFunction("WebWindow", WebWindowClass::constructor, 1);
|
scriptEngine->registerFunction("WebWindow", WebWindowClass::constructor, 1);
|
||||||
|
|
||||||
scriptEngine->registerGlobalObject("Menu", MenuScriptingInterface::getInstance());
|
scriptEngine->registerGlobalObject("Menu", MenuScriptingInterface::getInstance());
|
||||||
|
scriptEngine->registerGlobalObject("Stats", Stats::getInstance());
|
||||||
scriptEngine->registerGlobalObject("Settings", SettingsScriptingInterface::getInstance());
|
scriptEngine->registerGlobalObject("Settings", SettingsScriptingInterface::getInstance());
|
||||||
scriptEngine->registerGlobalObject("AudioDevice", AudioDeviceScriptingInterface::getInstance());
|
scriptEngine->registerGlobalObject("AudioDevice", AudioDeviceScriptingInterface::getInstance());
|
||||||
scriptEngine->registerGlobalObject("AnimationCache", DependencyManager::get<AnimationCache>().data());
|
scriptEngine->registerGlobalObject("AnimationCache", DependencyManager::get<AnimationCache>().data());
|
||||||
|
|
|
@ -89,14 +89,14 @@ bool Stats::includeTimingRecord(const QString& name) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Stats::updateStats() {
|
void Stats::updateStats(bool force) {
|
||||||
if (!Menu::getInstance()->isOptionChecked(MenuOption::Stats)) {
|
if (!force) {
|
||||||
if (isVisible()) {
|
if (!Menu::getInstance()->isOptionChecked(MenuOption::Stats)) {
|
||||||
setVisible(false);
|
if (isVisible()) {
|
||||||
}
|
setVisible(false);
|
||||||
return;
|
}
|
||||||
} else {
|
return;
|
||||||
if (!isVisible()) {
|
} else if (!isVisible()) {
|
||||||
setVisible(true);
|
setVisible(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -161,7 +161,7 @@ void Stats::updateStats() {
|
||||||
STAT_UPDATE(position, QVector3D(avatarPos.x, avatarPos.y, avatarPos.z));
|
STAT_UPDATE(position, QVector3D(avatarPos.x, avatarPos.y, avatarPos.z));
|
||||||
STAT_UPDATE_FLOAT(velocity, glm::length(myAvatar->getVelocity()), 0.1f);
|
STAT_UPDATE_FLOAT(velocity, glm::length(myAvatar->getVelocity()), 0.1f);
|
||||||
STAT_UPDATE_FLOAT(yaw, myAvatar->getBodyYaw(), 0.1f);
|
STAT_UPDATE_FLOAT(yaw, myAvatar->getBodyYaw(), 0.1f);
|
||||||
if (_expanded) {
|
if (_expanded || force) {
|
||||||
SharedNodePointer avatarMixer = nodeList->soloNodeOfType(NodeType::AvatarMixer);
|
SharedNodePointer avatarMixer = nodeList->soloNodeOfType(NodeType::AvatarMixer);
|
||||||
if (avatarMixer) {
|
if (avatarMixer) {
|
||||||
STAT_UPDATE(avatarMixerKbps, roundf(
|
STAT_UPDATE(avatarMixerKbps, roundf(
|
||||||
|
@ -175,7 +175,7 @@ void Stats::updateStats() {
|
||||||
STAT_UPDATE(avatarMixerPps, -1);
|
STAT_UPDATE(avatarMixerPps, -1);
|
||||||
}
|
}
|
||||||
SharedNodePointer audioMixerNode = nodeList->soloNodeOfType(NodeType::AudioMixer);
|
SharedNodePointer audioMixerNode = nodeList->soloNodeOfType(NodeType::AudioMixer);
|
||||||
if (audioMixerNode) {
|
if (audioMixerNode || force) {
|
||||||
STAT_UPDATE(audioMixerKbps, roundf(
|
STAT_UPDATE(audioMixerKbps, roundf(
|
||||||
bandwidthRecorder->getAverageInputKilobitsPerSecond(NodeType::AudioMixer) +
|
bandwidthRecorder->getAverageInputKilobitsPerSecond(NodeType::AudioMixer) +
|
||||||
bandwidthRecorder->getAverageOutputKilobitsPerSecond(NodeType::AudioMixer)));
|
bandwidthRecorder->getAverageOutputKilobitsPerSecond(NodeType::AudioMixer)));
|
||||||
|
@ -230,7 +230,7 @@ void Stats::updateStats() {
|
||||||
totalLeaves += stats.getTotalLeaves();
|
totalLeaves += stats.getTotalLeaves();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_expanded) {
|
if (_expanded || force) {
|
||||||
if (serverCount == 0) {
|
if (serverCount == 0) {
|
||||||
sendingModeStream << "---";
|
sendingModeStream << "---";
|
||||||
}
|
}
|
||||||
|
@ -272,7 +272,7 @@ void Stats::updateStats() {
|
||||||
STAT_UPDATE(serverElements, (int)totalNodes);
|
STAT_UPDATE(serverElements, (int)totalNodes);
|
||||||
STAT_UPDATE(localElements, (int)OctreeElement::getNodeCount());
|
STAT_UPDATE(localElements, (int)OctreeElement::getNodeCount());
|
||||||
|
|
||||||
if (_expanded) {
|
if (_expanded || force) {
|
||||||
STAT_UPDATE(serverInternal, (int)totalInternal);
|
STAT_UPDATE(serverInternal, (int)totalInternal);
|
||||||
STAT_UPDATE(serverLeaves, (int)totalLeaves);
|
STAT_UPDATE(serverLeaves, (int)totalLeaves);
|
||||||
// Local Voxels
|
// Local Voxels
|
||||||
|
|
|
@ -81,7 +81,7 @@ public:
|
||||||
const QString& monospaceFont() {
|
const QString& monospaceFont() {
|
||||||
return _monospaceFont;
|
return _monospaceFont;
|
||||||
}
|
}
|
||||||
void updateStats();
|
void updateStats(bool force = false);
|
||||||
|
|
||||||
bool isExpanded() { return _expanded; }
|
bool isExpanded() { return _expanded; }
|
||||||
bool isTimingExpanded() { return _timingExpanded; }
|
bool isTimingExpanded() { return _timingExpanded; }
|
||||||
|
@ -93,6 +93,9 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void forceUpdateStats() { updateStats(true); }
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void expandedChanged();
|
void expandedChanged();
|
||||||
void timingExpandedChanged();
|
void timingExpandedChanged();
|
||||||
|
@ -149,3 +152,4 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_Stats_h
|
#endif // hifi_Stats_h
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue