12 #ifndef hifi_OctreeProcessor_h
13 #define hifi_OctreeProcessor_h
15 #include <glm/glm.hpp>
20 #include <udt/PacketHeaders.h>
21 #include <SharedUtil.h>
24 #include "OctreePacketData.h"
28 class OctreeProcessor :
public QObject,
public QEnableSharedFromThis<OctreeProcessor> {
31 virtual ~OctreeProcessor();
33 virtual char getMyNodeType()
const = 0;
34 virtual PacketType getMyQueryMessageType()
const = 0;
35 virtual PacketType getExpectedPacketType()
const = 0;
37 virtual void setTree(OctreePointer newTree);
40 virtual void processDatagram(ReceivedMessage& message, SharedNodePointer sourceNode);
46 virtual void clearDomainAndNonOwnedEntities();
49 float getAverageElementsPerPacket()
const {
return _elementsPerPacket.getAverage(); }
50 float getAverageEntitiesPerPacket()
const {
return _entitiesPerPacket.getAverage(); }
52 float getAveragePacketsPerSecond()
const {
return _packetsPerSecond.getAverage(); }
53 float getAverageElementsPerSecond()
const {
return _elementsPerSecond.getAverage(); }
54 float getAverageEntitiesPerSecond()
const {
return _entitiesPerSecond.getAverage(); }
56 float getAverageWaitLockPerPacket()
const {
return _waitLockPerPacket.getAverage(); }
57 float getAverageUncompressPerPacket()
const {
return _uncompressPerPacket.getAverage(); }
58 float getAverageReadBitstreamPerPacket()
const {
return _readBitstreamPerPacket.getAverage(); }
60 OCTREE_PACKET_SEQUENCE getLastOctreeMessageSequence()
const {
return _lastOctreeMessageSequence; }
63 virtual OctreePointer createTree() = 0;
66 bool _managedTree {
false };
68 SimpleMovingAverage _elementsPerPacket;
69 SimpleMovingAverage _entitiesPerPacket;
71 SimpleMovingAverage _packetsPerSecond;
72 SimpleMovingAverage _elementsPerSecond;
73 SimpleMovingAverage _entitiesPerSecond;
75 SimpleMovingAverage _waitLockPerPacket;
76 SimpleMovingAverage _uncompressPerPacket;
77 SimpleMovingAverage _readBitstreamPerPacket;
79 quint64 _lastWindowAt = 0;
80 int _packetsInLastWindow = 0;
81 int _elementsInLastWindow = 0;
82 int _entitiesInLastWindow = 0;
83 std::atomic<OCTREE_PACKET_SEQUENCE> _lastOctreeMessageSequence;