14 #ifndef hifi_OctreeInboundPacketProcessor_h
15 #define hifi_OctreeInboundPacketProcessor_h
17 #include <QtCore/QSharedPointer>
19 #include <ReceivedPacketProcessor.h>
21 #include "SequenceNumberStats.h"
25 class SingleSenderStats {
29 quint64 getAverageTransitTimePerPacket()
const {
return _totalPackets == 0 ? 0 : _totalTransitTime / _totalPackets; }
30 quint64 getAverageProcessTimePerPacket()
const {
return _totalPackets == 0 ? 0 : _totalProcessTime / _totalPackets; }
31 quint64 getAverageLockWaitTimePerPacket()
const {
return _totalPackets == 0 ? 0 : _totalLockWaitTime / _totalPackets; }
32 quint64 getTotalElementsProcessed()
const {
return _totalElementsInPacket; }
33 quint64 getTotalPacketsProcessed()
const {
return _totalPackets; }
34 quint64 getAverageProcessTimePerElement()
const
35 {
return _totalElementsInPacket == 0 ? 0 : _totalProcessTime / _totalElementsInPacket; }
36 quint64 getAverageLockWaitTimePerElement()
const
37 {
return _totalElementsInPacket == 0 ? 0 : _totalLockWaitTime / _totalElementsInPacket; }
39 const SequenceNumberStats& getIncomingEditSequenceNumberStats()
const {
return _incomingEditSequenceNumberStats; }
40 SequenceNumberStats& getIncomingEditSequenceNumberStats() {
return _incomingEditSequenceNumberStats; }
42 void trackInboundPacket(
unsigned short int incomingSequence, quint64 transitTime,
43 int editsInPacket, quint64 processTime, quint64 lockWaitTime);
45 quint64 _totalTransitTime;
46 quint64 _totalProcessTime;
47 quint64 _totalLockWaitTime;
48 quint64 _totalElementsInPacket;
49 quint64 _totalPackets;
50 SequenceNumberStats _incomingEditSequenceNumberStats;
53 typedef QHash<QUuid, SingleSenderStats> NodeToSenderStatsMap;
54 typedef QHash<QUuid, SingleSenderStats>::iterator NodeToSenderStatsMapIterator;
55 typedef QHash<QUuid, SingleSenderStats>::const_iterator NodeToSenderStatsMapConstIterator;
65 quint64 getAverageTransitTimePerPacket()
const {
return _totalPackets == 0 ? 0 : _totalTransitTime / _totalPackets; }
66 quint64 getAverageProcessTimePerPacket()
const {
return _totalPackets == 0 ? 0 : _totalProcessTime / _totalPackets; }
67 quint64 getAverageLockWaitTimePerPacket()
const {
return _totalPackets == 0 ? 0 : _totalLockWaitTime / _totalPackets; }
68 quint64 getTotalElementsProcessed()
const {
return _totalElementsInPacket; }
69 quint64 getTotalPacketsProcessed()
const {
return _totalPackets; }
70 quint64 getAverageProcessTimePerElement()
const
71 {
return _totalElementsInPacket == 0 ? 0 : _totalProcessTime / _totalElementsInPacket; }
72 quint64 getAverageLockWaitTimePerElement()
const
73 {
return _totalElementsInPacket == 0 ? 0 : _totalLockWaitTime / _totalElementsInPacket; }
77 NodeToSenderStatsMap getSingleSenderStats() { QReadLocker locker(&_senderStatsLock);
return _singleSenderStats; }
79 virtual void terminating()
override { _shuttingDown =
true; ReceivedPacketProcessor::terminating(); }
83 virtual void processPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer sendingNode)
override;
90 int sendNackPackets();
93 void trackInboundPacket(
const QUuid& nodeUUID,
unsigned short int sequence, quint64 transitTime,
94 int elementsInPacket, quint64 processTime, quint64 lockWaitTime);
97 int _receivedPacketCount;
99 std::atomic<uint64_t> _totalTransitTime;
100 std::atomic<uint64_t> _totalProcessTime;
101 std::atomic<uint64_t> _totalLockWaitTime;
102 std::atomic<uint64_t> _totalElementsInPacket;
103 std::atomic<uint64_t> _totalPackets;
105 NodeToSenderStatsMap _singleSenderStats;
106 QReadWriteLock _senderStatsLock;
108 std::atomic<uint64_t> _lastNackTime;
Definition: OctreeInboundPacketProcessor.h:60
virtual void preProcess() override
Override to do work before the packets processing loop. Default does nothing.
Definition: OctreeInboundPacketProcessor.cpp:61
virtual void processPacket(QSharedPointer< ReceivedMessage > message, SharedNodePointer sendingNode) override
Definition: OctreeInboundPacketProcessor.cpp:79
virtual uint32_t getMaxWait() const override
Determines the timeout of the wait when there are no packets to process. Default value is 100ms to al...
Definition: OctreeInboundPacketProcessor.cpp:51
virtual void midProcess() override
Override to do work inside the packet processing loop after a packet is processed....
Definition: OctreeInboundPacketProcessor.cpp:70
Handles assignments of type OctreeServer - sending octrees to various clients.
Definition: OctreeServer.h:38
Generalized threaded processor for handling received inbound packets.
Definition: ReceivedPacketProcessor.h:25