more stats

This commit is contained in:
Brad Hefta-Gaub 2017-02-08 16:51:00 -08:00
parent 357cc052e1
commit 6c41a25032
6 changed files with 89 additions and 22 deletions

View file

@ -373,6 +373,7 @@ float Avatar::getSimulationRate(const QString& rateName) {
} else if (rateName == "jointData") {
return _jointDataSimulationRate.rate();
}
return 0.0f;
}
bool Avatar::isLookingAtMe(AvatarSharedPointer avatar) const {

View file

@ -134,7 +134,12 @@ Q_LOGGING_CATEGORY(trace_simulation_avatar, "trace.simulation.avatar");
float AvatarManager::getAvatarDataRate(const QUuid& sessionID, const QString& rateName) {
auto avatar = getAvatarBySessionID(sessionID);
return avatar->getDataRate(rateName);
return avatar ? avatar->getDataRate(rateName) : 0.0f;
}
float AvatarManager::getAvatarUpdateRate(const QUuid& sessionID, const QString& rateName) {
auto avatar = getAvatarBySessionID(sessionID);
return avatar ? avatar->getUpdateRate(rateName) : 0.0f;
}
float AvatarManager::getAvatarSimulationRate(const QUuid& sessionID, const QString& rateName) {

View file

@ -70,6 +70,7 @@ public:
void handleCollisionEvents(const CollisionEvents& collisionEvents);
Q_INVOKABLE float getAvatarDataRate(const QUuid& sessionID, const QString& rateName = QString(""));
Q_INVOKABLE float getAvatarUpdateRate(const QUuid& sessionID, const QString& rateName = QString(""));
Q_INVOKABLE float getAvatarSimulationRate(const QUuid& sessionID, const QString& rateName = QString(""));
Q_INVOKABLE RayToAvatarIntersectionResult findRayIntersection(const PickRay& ray,

View file

@ -670,6 +670,7 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) {
sourceBuffer += sizeof(AvatarDataPacket::AvatarGlobalPosition);
int numBytesRead = sourceBuffer - startSection;
_globalPositionRate.increment(numBytesRead);
_globalPositionUpdateRate.increment();
// if we don't have a parent, make sure to also set our local position
if (!hasParent()) {
@ -698,6 +699,7 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) {
sourceBuffer += sizeof(AvatarDataPacket::AvatarBoundingBox);
int numBytesRead = sourceBuffer - startSection;
_avatarBoundingBoxRate.increment(numBytesRead);
_avatarBoundingBoxUpdateRate.increment();
}
if (hasAvatarOrientation) {
@ -713,6 +715,7 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) {
}
int numBytesRead = sourceBuffer - startSection;
_avatarOrientationRate.increment(numBytesRead);
_avatarOrientationUpdateRate.increment();
}
if (hasAvatarScale) {
@ -732,6 +735,7 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) {
sourceBuffer += sizeof(AvatarDataPacket::AvatarScale);
int numBytesRead = sourceBuffer - startSection;
_avatarScaleRate.increment(numBytesRead);
_avatarScaleUpdateRate.increment();
}
if (hasLookAtPosition) {
@ -750,6 +754,7 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) {
sourceBuffer += sizeof(AvatarDataPacket::LookAtPosition);
int numBytesRead = sourceBuffer - startSection;
_lookAtPositionRate.increment(numBytesRead);
_lookAtPositionUpdateRate.increment();
}
if (hasAudioLoudness) {
@ -770,6 +775,7 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) {
_headData->setAudioLoudness(audioLoudness);
int numBytesRead = sourceBuffer - startSection;
_audioLoudnessRate.increment(numBytesRead);
_audioLoudnessUpdateRate.increment();
}
if (hasSensorToWorldMatrix) {
@ -790,6 +796,7 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) {
sourceBuffer += sizeof(AvatarDataPacket::SensorToWorldMatrix);
int numBytesRead = sourceBuffer - startSection;
_sensorToWorldRate.increment(numBytesRead);
_sensorToWorldUpdateRate.increment();
}
if (hasAdditionalFlags) {
@ -833,6 +840,7 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) {
}
int numBytesRead = sourceBuffer - startSection;
_additionalFlagsRate.increment(numBytesRead);
_additionalFlagsUpdateRate.increment();
}
// FIXME -- make sure to handle the existance of a parent vs a change in the parent...
@ -855,7 +863,9 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) {
int numBytesRead = sourceBuffer - startSection;
_parentInfoRate.increment(numBytesRead);
} else {
_parentInfoUpdateRate.increment();
}
else {
// FIXME - this aint totally right, for switching to parent/no-parent
_parentID = QUuid();
}
@ -877,6 +887,7 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) {
sourceBuffer += sizeof(AvatarDataPacket::AvatarLocalPosition);
int numBytesRead = sourceBuffer - startSection;
_localPositionRate.increment(numBytesRead);
_localPositionUpdateRate.increment();
}
if (hasFaceTrackerInfo) {
@ -899,6 +910,7 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) {
sourceBuffer += coefficientsSize;
int numBytesRead = sourceBuffer - startSection;
_faceTrackerRate.increment(numBytesRead);
_faceTrackerUpdateRate.increment();
}
if (hasJointData) {
@ -991,12 +1003,14 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) {
int numBytesRead = sourceBuffer - startSection;
_jointDataRate.increment(numBytesRead);
_jointDataUpdateRate.increment();
}
int numBytesRead = sourceBuffer - startPosition;
_averageBytesReceived.updateAverage(numBytesRead);
_parseBufferRate.increment(numBytesRead);
_parseBufferUpdateRate.increment();
return numBytesRead;
}
@ -1032,6 +1046,36 @@ float AvatarData::getDataRate(const QString& rateName) {
return 0.0f;
}
float AvatarData::getUpdateRate(const QString& rateName) {
if (rateName == "") {
return _parseBufferUpdateRate.rate();
} else if (rateName == "globalPosition") {
return _globalPositionUpdateRate.rate();
} else if (rateName == "localPosition") {
return _localPositionUpdateRate.rate();
} else if (rateName == "avatarBoundingBox") {
return _avatarBoundingBoxUpdateRate.rate();
} else if (rateName == "avatarOrientation") {
return _avatarOrientationUpdateRate.rate();
} else if (rateName == "avatarScale") {
return _avatarScaleUpdateRate.rate();
} else if (rateName == "lookAtPosition") {
return _lookAtPositionUpdateRate.rate();
} else if (rateName == "audioLoudness") {
return _audioLoudnessUpdateRate.rate();
} else if (rateName == "sensorToWorkMatrix") {
return _sensorToWorldUpdateRate.rate();
} else if (rateName == "additionalFlags") {
return _additionalFlagsUpdateRate.rate();
} else if (rateName == "parentInfo") {
return _parentInfoUpdateRate.rate();
} else if (rateName == "faceTracker") {
return _faceTrackerUpdateRate.rate();
} else if (rateName == "jointData") {
return _jointDataUpdateRate.rate();
}
return 0.0f;
}
int AvatarData::getAverageBytesReceivedPerSecond() const {
return lrint(_averageBytesReceived.getAverageSampleValuePerSecond());

View file

@ -528,7 +528,8 @@ public:
Q_INVOKABLE glm::mat4 getControllerLeftHandMatrix() const;
Q_INVOKABLE glm::mat4 getControllerRightHandMatrix() const;
float getDataRate(const QString& rateName = QString(""));
Q_INVOKABLE float getDataRate(const QString& rateName = QString(""));
Q_INVOKABLE float getUpdateRate(const QString& rateName = QString(""));
int getJointCount() { return _jointData.size(); }
@ -644,7 +645,7 @@ protected:
quint64 _lastToByteArray { 0 }; // tracks the last time we did a toByteArray
// Some rate data for incoming data
// Some rate data for incoming data in bytes
RateCounter<> _parseBufferRate;
RateCounter<> _globalPositionRate;
RateCounter<> _localPositionRate;
@ -659,6 +660,21 @@ protected:
RateCounter<> _faceTrackerRate;
RateCounter<> _jointDataRate;
// Some rate data for incoming data updates
RateCounter<> _parseBufferUpdateRate;
RateCounter<> _globalPositionUpdateRate;
RateCounter<> _localPositionUpdateRate;
RateCounter<> _avatarBoundingBoxUpdateRate;
RateCounter<> _avatarOrientationUpdateRate;
RateCounter<> _avatarScaleUpdateRate;
RateCounter<> _lookAtPositionUpdateRate;
RateCounter<> _audioLoudnessUpdateRate;
RateCounter<> _sensorToWorldUpdateRate;
RateCounter<> _additionalFlagsUpdateRate;
RateCounter<> _parentInfoUpdateRate;
RateCounter<> _faceTrackerUpdateRate;
RateCounter<> _jointDataUpdateRate;
glm::vec3 _globalBoundingBoxDimensions;
glm::vec3 _globalBoundingBoxOffset;

View file

@ -60,24 +60,24 @@ function updateOverlays() {
var overlayPosition = avatar.getJointPosition("Head");
overlayPosition.y += 1.05;
var text = "--- Data from Mixer ----------------------\n"
+"All: " + AvatarManager.getAvatarDataRate(avatarID).toFixed(2) + "\n"
+" GP: " + AvatarManager.getAvatarDataRate(avatarID,"globalPosition").toFixed(2) + "\n"
+" LP: " + AvatarManager.getAvatarDataRate(avatarID,"localPosition").toFixed(2) + "\n"
+" BB: " + AvatarManager.getAvatarDataRate(avatarID,"avatarBoundingBox").toFixed(2) + "\n"
+" AO: " + AvatarManager.getAvatarDataRate(avatarID,"avatarOrientation").toFixed(2) + "\n"
+" AS: " + AvatarManager.getAvatarDataRate(avatarID,"avatarScale").toFixed(2) + "\n"
+" LA: " + AvatarManager.getAvatarDataRate(avatarID,"lookAtPosition").toFixed(2) + "\n"
+" AL: " + AvatarManager.getAvatarDataRate(avatarID,"audioLoudness").toFixed(2) + "\n"
+" SW: " + AvatarManager.getAvatarDataRate(avatarID,"sensorToWorkMatrix").toFixed(2) + "\n"
+" AF: " + AvatarManager.getAvatarDataRate(avatarID,"additionalFlags").toFixed(2) + "\n"
+" PI: " + AvatarManager.getAvatarDataRate(avatarID,"parentInfo").toFixed(2) + "\n"
+" FT: " + AvatarManager.getAvatarDataRate(avatarID,"faceTracker").toFixed(2) + "\n"
+" JD: " + AvatarManager.getAvatarDataRate(avatarID,"jointData").toFixed(2)
+"--- Simulation ----------------------\n"
var text = "--- Data from Mixer ---\n"
+"All: " + AvatarManager.getAvatarDataRate(avatarID).toFixed(2) + "kbps (" + AvatarManager.getAvatarUpdateRate(avatarID).toFixed(2) + "hz)" + "\n"
+" GP: " + AvatarManager.getAvatarDataRate(avatarID,"globalPosition").toFixed(2) + "kbps (" + AvatarManager.getAvatarUpdateRate(avatarID,"globalPosition").toFixed(2) + "hz)" + "\n"
+" LP: " + AvatarManager.getAvatarDataRate(avatarID,"localPosition").toFixed(2) + "kbps (" + AvatarManager.getAvatarUpdateRate(avatarID,"localPosition").toFixed(2) + "hz)" + "\n"
+" BB: " + AvatarManager.getAvatarDataRate(avatarID,"avatarBoundingBox").toFixed(2) + "kbps (" + AvatarManager.getAvatarUpdateRate(avatarID,"avatarBoundingBox").toFixed(2) + "hz)" + "\n"
+" AO: " + AvatarManager.getAvatarDataRate(avatarID,"avatarOrientation").toFixed(2) + "kbps (" + AvatarManager.getAvatarUpdateRate(avatarID,"avatarOrientation").toFixed(2) + "hz)" + "\n"
+" AS: " + AvatarManager.getAvatarDataRate(avatarID,"avatarScale").toFixed(2) + "kbps (" + AvatarManager.getAvatarUpdateRate(avatarID,"avatarScale").toFixed(2) + "hz)" + "\n"
+" LA: " + AvatarManager.getAvatarDataRate(avatarID,"lookAtPosition").toFixed(2) + "kbps (" + AvatarManager.getAvatarUpdateRate(avatarID,"lookAtPosition").toFixed(2) + "hz)" + "\n"
+" AL: " + AvatarManager.getAvatarDataRate(avatarID,"audioLoudness").toFixed(2) + "kbps (" + AvatarManager.getAvatarUpdateRate(avatarID,"audioLoudness").toFixed(2) + "hz)" + "\n"
+" SW: " + AvatarManager.getAvatarDataRate(avatarID,"sensorToWorkMatrix").toFixed(2) + "kbps (" + AvatarManager.getAvatarUpdateRate(avatarID,"sensorToWorkMatrix").toFixed(2) + "hz)" + "\n"
+" AF: " + AvatarManager.getAvatarDataRate(avatarID,"additionalFlags").toFixed(2) + "kbps (" + AvatarManager.getAvatarUpdateRate(avatarID,"additionalFlags").toFixed(2) + "hz)" + "\n"
+" PI: " + AvatarManager.getAvatarDataRate(avatarID,"parentInfo").toFixed(2) + "kbps (" + AvatarManager.getAvatarUpdateRate(avatarID,"parentInfo").toFixed(2) + "hz)" + "\n"
+" FT: " + AvatarManager.getAvatarDataRate(avatarID,"faceTracker").toFixed(2) + "kbps (" + AvatarManager.getAvatarUpdateRate(avatarID,"faceTracker").toFixed(2) + "hz)" + "\n"
+" JD: " + AvatarManager.getAvatarDataRate(avatarID,"jointData").toFixed(2) + "kbps (" + AvatarManager.getAvatarUpdateRate(avatarID,"jointData").toFixed(2) + "hz)" + "\n"
+"--- Simulation ---\n"
+"All: " + AvatarManager.getAvatarSimulationRate(avatarID,"avatar").toFixed(2) + "\n"
+" SM: " + AvatarManager.getAvatarSimulationRate(avatarID,"skeletonModel").toFixed(2) + "\n"
+" JS: " + AvatarManager.getAvatarSimulationRate(avatarID,"jointData").toFixed(2) + "\n"
+" JD: " + AvatarManager.getAvatarSimulationRate(avatarID,"jointData").toFixed(2) + "\n"
if (avatarID in debugOverlays) {
// keep the overlay above the current position of this avatar
@ -90,8 +90,8 @@ function updateOverlays() {
var newOverlay = Overlays.addOverlay("text3d", {
position: overlayPosition,
dimensions: {
x: 1,
y: 13 * 0.13
x: 1.25,
y: 18 * 0.13
},
lineHeight: 0.1,
font:{size:0.1},