add stats for elements and entities per incoming packet

This commit is contained in:
ZappoMan 2015-07-02 16:19:13 -07:00
parent b568e895ec
commit 0c0b8dbbc1
7 changed files with 51 additions and 7 deletions

View file

@ -52,6 +52,8 @@ OctreeStatsDialog::OctreeStatsDialog(QWidget* parent, NodeToOctreeSceneStats* mo
_localElements = AddStatItem("Local Elements");
_localElementsMemory = AddStatItem("Elements Memory");
_sendingMode = AddStatItem("Sending Mode");
_entityPackets = AddStatItem("Entity Packets");
_entityUpdateTime = AddStatItem("Entity Update Time");
_entityUpdates = AddStatItem("Entity Updates");
@ -207,11 +209,27 @@ void OctreeStatsDialog::paintEvent(QPaintEvent* event) {
"Leaves: " << qPrintable(serversLeavesString) << "";
label->setText(statsValue.str().c_str());
// Entity Edits update time
label = _labels[_entityPackets];
auto entities = Application::getInstance()->getEntities();
auto entitiesTree = entities->getTree();
auto averageElementsPerPacket = entities->getAverageElementsPerPacket();
auto averageEntitiesPerPacket = entities->getAverageEntitiesPerPacket();
QString averageElementsPerPacketString = locale.toString(averageElementsPerPacket);
QString averageEntitiesPerPacketString = locale.toString(averageEntitiesPerPacket);
statsValue.str("");
statsValue <<
"Elements: " << qPrintable(averageEntitiesPerPacketString) << " per packet / " <<
"Entities: " << qPrintable(averageEntitiesPerPacketString) << " per packet";
label->setText(statsValue.str().c_str());
// Entity Edits update time
label = _labels[_entityUpdateTime];
auto entities = Application::getInstance()->getEntities()->getTree();
auto averageEditDelta = entities->getAverageEditDeltas();
auto maxEditDelta = entities->getMaxEditDelta();
auto averageEditDelta = entitiesTree->getAverageEditDeltas();
auto maxEditDelta = entitiesTree->getMaxEditDelta();
QString averageEditDeltaString = locale.toString((uint)averageEditDelta);
QString maxEditDeltaString = locale.toString((uint)maxEditDelta);
@ -225,8 +243,8 @@ void OctreeStatsDialog::paintEvent(QPaintEvent* event) {
// Entity Edits
label = _labels[_entityUpdates];
auto totalTrackedEdits = entities->getTotalTrackedEdits();
auto bytesPerEdit = entities->getAverageEditBytes();
auto totalTrackedEdits = entitiesTree->getTotalTrackedEdits();
auto bytesPerEdit = entitiesTree->getAverageEditBytes();
// track our updated per second
const quint64 SAMPLING_WINDOW = USECS_PER_SECOND / SAMPLES_PER_SECOND;

View file

@ -66,6 +66,8 @@ private:
int _entityUpdateTime;
int _entityUpdates;
int _entityPackets;
const int SAMPLES_PER_SECOND = 10;
SimpleMovingAverage _averageUpdatesPerSecond;
quint64 _lastWindowAt = 0;

View file

@ -346,6 +346,8 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef
return 0;
}
args.entitiesPerPacket++;
// Header bytes
// object ID [16 bytes]
// ByteCountCoded(type code) [~1 byte]

View file

@ -702,6 +702,8 @@ int EntityTreeElement::readElementDataFromBuffer(const unsigned char* data, int
int bytesRead = 0;
uint16_t numberOfEntities = 0;
int expectedBytesPerEntity = EntityItem::expectedBytes();
args.elementsPerPacket++;
if (bytesLeftToRead >= (int)sizeof(numberOfEntities)) {
// read our entities in....

View file

@ -195,6 +195,8 @@ public:
SharedNodePointer sourceNode;
bool wantImportProgress;
PacketVersion bitstreamVersion;
int elementsPerPacket = 0;
int entitiesPerPacket = 0;
ReadBitstreamToTreeParams(
bool includeColor = WANT_COLOR,

View file

@ -101,6 +101,9 @@ void OctreeRenderer::processDatagram(const QByteArray& dataByteArray, const Shar
sequence, flightTime, packetLength, dataBytes);
}
int elementsPerPacket = 0;
int entitiesPerPacket = 0;
int subsection = 1;
while (dataBytes > 0) {
if (packetIsCompressed) {
@ -139,13 +142,21 @@ void OctreeRenderer::processDatagram(const QByteArray& dataByteArray, const Shar
qCDebug(octree) << "OctreeRenderer::processDatagram() ******* END _tree->readBitstreamToTree()...";
}
_tree->unlock();
dataBytes -= sectionLength;
dataAt += sectionLength;
elementsPerPacket += args.elementsPerPacket;
entitiesPerPacket += args.entitiesPerPacket;
}
subsection++;
}
subsection++;
_elementsPerPacket.updateAverage(elementsPerPacket);
_entitiesPerPacket.updateAverage(entitiesPerPacket);
}
}
bool OctreeRenderer::renderOperation(OctreeElement* element, void* extraData) {

View file

@ -61,12 +61,19 @@ public:
/// clears the tree
virtual void clear();
float getAverageElementsPerPacket() const { return _elementsPerPacket.getAverage(); }
float getAverageEntitiesPerPacket() const { return _entitiesPerPacket.getAverage(); }
protected:
virtual Octree* createTree() = 0;
Octree* _tree;
bool _managedTree;
ViewFrustum* _viewFrustum;
SimpleMovingAverage _elementsPerPacket;
SimpleMovingAverage _entitiesPerPacket;
};
#endif // hifi_OctreeRenderer_h