Overte C++ Documentation
OctreeProcessor.h
1 //
2 // OctreeProcessor.h
3 // libraries/octree/src
4 //
5 // Created by Brad Hefta-Gaub on 12/6/13.
6 // Copyright 2013 High Fidelity, Inc.
7 //
8 // Distributed under the Apache License, Version 2.0.
9 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10 //
11 
12 #ifndef hifi_OctreeProcessor_h
13 #define hifi_OctreeProcessor_h
14 
15 #include <glm/glm.hpp>
16 #include <stdint.h>
17 
18 #include <QObject>
19 
20 #include <udt/PacketHeaders.h>
21 #include <SharedUtil.h>
22 
23 #include "Octree.h"
24 #include "OctreePacketData.h"
25 
26 
27 // Generic client side Octree renderer class.
28 class OctreeProcessor : public QObject, public QEnableSharedFromThis<OctreeProcessor> {
29  Q_OBJECT
30 public:
31  virtual ~OctreeProcessor();
32 
33  virtual char getMyNodeType() const = 0;
34  virtual PacketType getMyQueryMessageType() const = 0;
35  virtual PacketType getExpectedPacketType() const = 0;
36 
37  virtual void setTree(OctreePointer newTree);
38 
40  virtual void processDatagram(ReceivedMessage& message, SharedNodePointer sourceNode);
41 
43  virtual void init();
44 
46  virtual void clearDomainAndNonOwnedEntities();
47  virtual void clear();
48 
49  float getAverageElementsPerPacket() const { return _elementsPerPacket.getAverage(); }
50  float getAverageEntitiesPerPacket() const { return _entitiesPerPacket.getAverage(); }
51 
52  float getAveragePacketsPerSecond() const { return _packetsPerSecond.getAverage(); }
53  float getAverageElementsPerSecond() const { return _elementsPerSecond.getAverage(); }
54  float getAverageEntitiesPerSecond() const { return _entitiesPerSecond.getAverage(); }
55 
56  float getAverageWaitLockPerPacket() const { return _waitLockPerPacket.getAverage(); }
57  float getAverageUncompressPerPacket() const { return _uncompressPerPacket.getAverage(); }
58  float getAverageReadBitstreamPerPacket() const { return _readBitstreamPerPacket.getAverage(); }
59 
60  OCTREE_PACKET_SEQUENCE getLastOctreeMessageSequence() const { return _lastOctreeMessageSequence; }
61 
62 protected:
63  virtual OctreePointer createTree() = 0;
64 
65  OctreePointer _tree;
66  bool _managedTree { false };
67 
68  SimpleMovingAverage _elementsPerPacket;
69  SimpleMovingAverage _entitiesPerPacket;
70 
71  SimpleMovingAverage _packetsPerSecond;
72  SimpleMovingAverage _elementsPerSecond;
73  SimpleMovingAverage _entitiesPerSecond;
74 
75  SimpleMovingAverage _waitLockPerPacket;
76  SimpleMovingAverage _uncompressPerPacket;
77  SimpleMovingAverage _readBitstreamPerPacket;
78 
79  quint64 _lastWindowAt = 0;
80  int _packetsInLastWindow = 0;
81  int _elementsInLastWindow = 0;
82  int _entitiesInLastWindow = 0;
83  std::atomic<OCTREE_PACKET_SEQUENCE> _lastOctreeMessageSequence;
84 
85 };
86 
87 #endif // hifi_OctreeProcessor_h