mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 04:44:11 +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->registerGlobalObject("Menu", MenuScriptingInterface::getInstance());
|
||||
scriptEngine->registerGlobalObject("Stats", Stats::getInstance());
|
||||
scriptEngine->registerGlobalObject("Settings", SettingsScriptingInterface::getInstance());
|
||||
scriptEngine->registerGlobalObject("AudioDevice", AudioDeviceScriptingInterface::getInstance());
|
||||
scriptEngine->registerGlobalObject("AnimationCache", DependencyManager::get<AnimationCache>().data());
|
||||
|
|
|
@ -89,14 +89,14 @@ bool Stats::includeTimingRecord(const QString& name) {
|
|||
}
|
||||
|
||||
|
||||
void Stats::updateStats() {
|
||||
if (!Menu::getInstance()->isOptionChecked(MenuOption::Stats)) {
|
||||
if (isVisible()) {
|
||||
setVisible(false);
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
if (!isVisible()) {
|
||||
void Stats::updateStats(bool force) {
|
||||
if (!force) {
|
||||
if (!Menu::getInstance()->isOptionChecked(MenuOption::Stats)) {
|
||||
if (isVisible()) {
|
||||
setVisible(false);
|
||||
}
|
||||
return;
|
||||
} else if (!isVisible()) {
|
||||
setVisible(true);
|
||||
}
|
||||
}
|
||||
|
@ -161,7 +161,7 @@ void Stats::updateStats() {
|
|||
STAT_UPDATE(position, QVector3D(avatarPos.x, avatarPos.y, avatarPos.z));
|
||||
STAT_UPDATE_FLOAT(velocity, glm::length(myAvatar->getVelocity()), 0.1f);
|
||||
STAT_UPDATE_FLOAT(yaw, myAvatar->getBodyYaw(), 0.1f);
|
||||
if (_expanded) {
|
||||
if (_expanded || force) {
|
||||
SharedNodePointer avatarMixer = nodeList->soloNodeOfType(NodeType::AvatarMixer);
|
||||
if (avatarMixer) {
|
||||
STAT_UPDATE(avatarMixerKbps, roundf(
|
||||
|
@ -175,7 +175,7 @@ void Stats::updateStats() {
|
|||
STAT_UPDATE(avatarMixerPps, -1);
|
||||
}
|
||||
SharedNodePointer audioMixerNode = nodeList->soloNodeOfType(NodeType::AudioMixer);
|
||||
if (audioMixerNode) {
|
||||
if (audioMixerNode || force) {
|
||||
STAT_UPDATE(audioMixerKbps, roundf(
|
||||
bandwidthRecorder->getAverageInputKilobitsPerSecond(NodeType::AudioMixer) +
|
||||
bandwidthRecorder->getAverageOutputKilobitsPerSecond(NodeType::AudioMixer)));
|
||||
|
@ -230,7 +230,7 @@ void Stats::updateStats() {
|
|||
totalLeaves += stats.getTotalLeaves();
|
||||
}
|
||||
}
|
||||
if (_expanded) {
|
||||
if (_expanded || force) {
|
||||
if (serverCount == 0) {
|
||||
sendingModeStream << "---";
|
||||
}
|
||||
|
@ -272,7 +272,7 @@ void Stats::updateStats() {
|
|||
STAT_UPDATE(serverElements, (int)totalNodes);
|
||||
STAT_UPDATE(localElements, (int)OctreeElement::getNodeCount());
|
||||
|
||||
if (_expanded) {
|
||||
if (_expanded || force) {
|
||||
STAT_UPDATE(serverInternal, (int)totalInternal);
|
||||
STAT_UPDATE(serverLeaves, (int)totalLeaves);
|
||||
// Local Voxels
|
||||
|
|
|
@ -81,7 +81,7 @@ public:
|
|||
const QString& monospaceFont() {
|
||||
return _monospaceFont;
|
||||
}
|
||||
void updateStats();
|
||||
void updateStats(bool force = false);
|
||||
|
||||
bool isExpanded() { return _expanded; }
|
||||
bool isTimingExpanded() { return _timingExpanded; }
|
||||
|
@ -93,6 +93,9 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
public slots:
|
||||
void forceUpdateStats() { updateStats(true); }
|
||||
|
||||
signals:
|
||||
void expandedChanged();
|
||||
void timingExpandedChanged();
|
||||
|
@ -149,3 +152,4 @@ private:
|
|||
};
|
||||
|
||||
#endif // hifi_Stats_h
|
||||
|
||||
|
|
Loading…
Reference in a new issue