mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-17 12:49:49 +02:00
added if to not track ParticleErase packets
This commit is contained in:
parent
7d238402ab
commit
e89d33dc60
8 changed files with 86 additions and 11 deletions
|
@ -365,4 +365,18 @@ void OctreeQueryNode::dumpOutOfView() {
|
|||
|
||||
void OctreeQueryNode::incrementSequenceNumber() {
|
||||
_sequenceNumber++;
|
||||
}
|
||||
|
||||
void OctreeQueryNode::updatePacketTimestamp() {
|
||||
|
||||
int numBytesPacketHeader = populatePacketHeader(reinterpret_cast<char*>(_octreePacket), _myPacketType);
|
||||
_octreePacketAt = _octreePacket + numBytesPacketHeader;
|
||||
_octreePacketAt += sizeof(OCTREE_PACKET_FLAGS);
|
||||
_octreePacketAt += sizeof(OCTREE_PACKET_SEQUENCE);
|
||||
|
||||
// pack in timestamp
|
||||
OCTREE_PACKET_SENT_TIME now = usecTimestampNow();
|
||||
OCTREE_PACKET_SENT_TIME* timeAt = (OCTREE_PACKET_SENT_TIME*)_octreePacketAt;
|
||||
*timeAt = now;
|
||||
|
||||
}
|
|
@ -101,6 +101,8 @@ public:
|
|||
bool isShuttingDown() const { return _isShuttingDown; }
|
||||
|
||||
void incrementSequenceNumber();
|
||||
|
||||
void updatePacketTimestamp();
|
||||
|
||||
private slots:
|
||||
void sendThreadFinished();
|
||||
|
|
|
@ -142,12 +142,18 @@ int OctreeSendThread::handlePacketSend(OctreeQueryNode* nodeData, int& trueBytes
|
|||
}
|
||||
|
||||
const unsigned char* messageData = nodeData->getPacket();
|
||||
//unsigned char messageData[MAX_PACKET_SIZE];
|
||||
//memcpy(messageData, nodeData->getPacket(), MAX_PACKET_SIZE); // DEBUG: make copy of message to send
|
||||
|
||||
int numBytesPacketHeader = numBytesForPacketHeader(reinterpret_cast<const char*>(messageData));
|
||||
const unsigned char* dataAt = messageData + numBytesPacketHeader;
|
||||
dataAt += sizeof(OCTREE_PACKET_FLAGS);
|
||||
OCTREE_PACKET_SEQUENCE sequence = (*(OCTREE_PACKET_SEQUENCE*)dataAt);
|
||||
dataAt += sizeof(OCTREE_PACKET_SEQUENCE);
|
||||
|
||||
OCTREE_PACKET_SENT_TIME timestamp = (*(OCTREE_PACKET_SENT_TIME*)dataAt);
|
||||
dataAt += sizeof(OCTREE_PACKET_SENT_TIME);
|
||||
|
||||
|
||||
// If we've got a stats message ready to send, then see if we can piggyback them together
|
||||
if (nodeData->stats.isReadyToSend() && !nodeData->isShuttingDown()) {
|
||||
|
@ -161,6 +167,7 @@ int OctreeSendThread::handlePacketSend(OctreeQueryNode* nodeData, int& trueBytes
|
|||
|
||||
// copy voxel message to back of stats message
|
||||
memcpy(statsMessage + statsMessageLength, nodeData->getPacket(), nodeData->getPacketLength());
|
||||
//memcpy(statsMessage + statsMessageLength, messageData, nodeData->getPacketLength());
|
||||
statsMessageLength += nodeData->getPacketLength();
|
||||
|
||||
// since a stats message is only included on end of scene, don't consider any of these bytes "wasted", since
|
||||
|
@ -203,6 +210,7 @@ int OctreeSendThread::handlePacketSend(OctreeQueryNode* nodeData, int& trueBytes
|
|||
|
||||
OctreeServer::didCallWriteDatagram(this);
|
||||
NodeList::getInstance()->writeDatagram((char*) nodeData->getPacket(), nodeData->getPacketLength(), _node);
|
||||
//NodeList::getInstance()->writeDatagram((char*)messageData, nodeData->getPacketLength(), _node);
|
||||
|
||||
packetSent = true;
|
||||
|
||||
|
@ -223,6 +231,7 @@ int OctreeSendThread::handlePacketSend(OctreeQueryNode* nodeData, int& trueBytes
|
|||
// just send the voxel packet
|
||||
OctreeServer::didCallWriteDatagram(this);
|
||||
NodeList::getInstance()->writeDatagram((char*) nodeData->getPacket(), nodeData->getPacketLength(), _node);
|
||||
//NodeList::getInstance()->writeDatagram((char*)messageData, nodeData->getPacketLength(), _node);
|
||||
packetSent = true;
|
||||
|
||||
int thisWastedBytes = MAX_PACKET_SIZE - nodeData->getPacketLength();
|
||||
|
@ -245,7 +254,6 @@ int OctreeSendThread::handlePacketSend(OctreeQueryNode* nodeData, int& trueBytes
|
|||
nodeData->incrementSequenceNumber();
|
||||
nodeData->resetOctreePacket();
|
||||
}
|
||||
|
||||
return packetsSent;
|
||||
}
|
||||
|
||||
|
|
|
@ -3301,7 +3301,12 @@ void Application::trackIncomingVoxelPacket(const QByteArray& packet, const Share
|
|||
_octreeSceneStatsLock.lockForWrite();
|
||||
if (_octreeServerSceneStats.find(nodeUUID) != _octreeServerSceneStats.end()) {
|
||||
OctreeSceneStats& stats = _octreeServerSceneStats[nodeUUID];
|
||||
stats.trackIncomingOctreePacket(packet, wasStatsPacket, sendingNode->getClockSkewUsec());
|
||||
if (stats.trackIncomingOctreePacket(packet, wasStatsPacket, sendingNode->getClockSkewUsec())) {
|
||||
|
||||
// DEBUG! unreasonable flight time
|
||||
qDebug() << " sending node type: " << NodeType::getNodeTypeName(sendingNode->getType()) << "\n";
|
||||
//qDebug() << "\t\t clock skew: " << sendingNode->getClockSkewUsec();
|
||||
}
|
||||
}
|
||||
_octreeSceneStatsLock.unlock();
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ void VoxelPacketProcessor::processPacket(const SharedNodePointer& sendingNode, c
|
|||
}
|
||||
|
||||
PacketType voxelPacketType = packetTypeForPacket(mutablePacket);
|
||||
|
||||
|
||||
// note: PacketType_OCTREE_STATS can have PacketType_VOXEL_DATA
|
||||
// immediately following them inside the same packet. So, we process the PacketType_OCTREE_STATS first
|
||||
// then process any remaining bytes as if it was another packet
|
||||
|
@ -81,6 +81,7 @@ void VoxelPacketProcessor::processPacket(const SharedNodePointer& sendingNode, c
|
|||
|
||||
|
||||
if (Menu::getInstance()->isOptionChecked(MenuOption::Voxels)) {
|
||||
if (voxelPacketType != PacketTypeParticleErase)
|
||||
app->trackIncomingVoxelPacket(mutablePacket, sendingNode, wasStatsPacket);
|
||||
|
||||
if (sendingNode) {
|
||||
|
|
|
@ -268,6 +268,44 @@ qint64 LimitedNodeList::writeUnverifiedDatagram(const QByteArray& datagram, cons
|
|||
|
||||
qint64 LimitedNodeList::writeDatagram(const char* data, qint64 size, const SharedNodePointer& destinationNode,
|
||||
const HifiSockAddr& overridenSockAddr) {
|
||||
/*
|
||||
QByteArray datagram(data, size);
|
||||
|
||||
qDebug() << "\t writeDatagram()...";
|
||||
|
||||
PacketType type = packetTypeForPacket(datagram);
|
||||
if (type != PacketType::PacketTypeParticleErase) {
|
||||
|
||||
qDebug() << "\t\t type: " << (unsigned char)type;
|
||||
qDebug() << "\t\t UUID: " << uuidFromPacketHeader(datagram);
|
||||
qDebug() << "\t\t MD5: " << hashFromPacketHeader(datagram);
|
||||
|
||||
|
||||
int numBytesPacketHeader = numBytesForPacketHeader(datagram);
|
||||
const unsigned char* dataAt = reinterpret_cast<const unsigned char*>(datagram.data()) + numBytesPacketHeader;
|
||||
|
||||
unsigned char flags = (*(unsigned char*)(dataAt));
|
||||
dataAt += sizeof(unsigned char);
|
||||
qDebug() << "\t\t flags: " << QString::number(flags, 2);
|
||||
|
||||
uint16_t sequence = (*(uint16_t*)dataAt);
|
||||
dataAt += sizeof(uint16_t);
|
||||
qDebug() << "\t\t sequence: " << QString::number(sequence, 16);
|
||||
|
||||
quint64 sentAt = (*(quint64*)dataAt);
|
||||
dataAt += sizeof(quint64);
|
||||
qDebug() << "\t\t sent at: " << QString::number(sentAt, 16) << "\n";
|
||||
}
|
||||
else {
|
||||
qDebug() << "size: " << size;
|
||||
const char* dataAt = data;
|
||||
for (int i = 0; i < size; i++) {
|
||||
unsigned char byte = *((unsigned char*)dataAt);
|
||||
dataAt += sizeof(unsigned char);
|
||||
qDebug() << "\t\t " << QString::number(byte, 16);
|
||||
}
|
||||
}*/
|
||||
|
||||
return writeDatagram(QByteArray(data, size), destinationNode, overridenSockAddr);
|
||||
}
|
||||
|
||||
|
|
|
@ -839,7 +839,7 @@ const char* OctreeSceneStats::getItemValue(Item item) {
|
|||
return _itemValueBuffer;
|
||||
}
|
||||
|
||||
void OctreeSceneStats::trackIncomingOctreePacket(const QByteArray& packet,
|
||||
bool OctreeSceneStats::trackIncomingOctreePacket(const QByteArray& packet,
|
||||
bool wasStatsPacket, int nodeClockSkewUsec) {
|
||||
const bool wantExtraDebugging = false;
|
||||
|
||||
|
@ -857,8 +857,8 @@ void OctreeSceneStats::trackIncomingOctreePacket(const QByteArray& packet,
|
|||
//bool packetIsColored = oneAtBit(flags, PACKET_IS_COLOR_BIT);
|
||||
//bool packetIsCompressed = oneAtBit(flags, PACKET_IS_COMPRESSED_BIT);
|
||||
|
||||
OCTREE_PACKET_SENT_TIME arrivedAt = usecTimestampNow();
|
||||
int flightTime = arrivedAt - sentAt + nodeClockSkewUsec;
|
||||
OCTREE_PACKET_SENT_TIME arrivedAt = usecTimestampNow(); // DEBUG!!!
|
||||
qint64 flightTime = arrivedAt - sentAt + nodeClockSkewUsec;
|
||||
|
||||
if (wantExtraDebugging) {
|
||||
qDebug() << "sentAt:" << sentAt << " usecs";
|
||||
|
@ -866,13 +866,20 @@ void OctreeSceneStats::trackIncomingOctreePacket(const QByteArray& packet,
|
|||
qDebug() << "nodeClockSkewUsec:" << nodeClockSkewUsec << " usecs";
|
||||
qDebug() << "flightTime:" << flightTime << " usecs";
|
||||
}
|
||||
|
||||
|
||||
|
||||
//qDebug() << "\t" << QString::number(sequence, 16) << "\t sentAt:" << QString::number(sentAt, 16) << " usecs";
|
||||
|
||||
// Guard against possible corrupted packets... with bad timestamps
|
||||
const int MAX_RESONABLE_FLIGHT_TIME = 200 * USECS_PER_SECOND; // 200 seconds is more than enough time for a packet to arrive
|
||||
const int MIN_RESONABLE_FLIGHT_TIME = 0;
|
||||
if (flightTime > MAX_RESONABLE_FLIGHT_TIME || flightTime < MIN_RESONABLE_FLIGHT_TIME) {
|
||||
qDebug() << "ignoring unreasonable packet... flightTime:" << flightTime;
|
||||
return; // ignore any packets that are unreasonable
|
||||
qDebug() << "\t sentAt:" << QString::number(sentAt, 16) << " usecs";
|
||||
qDebug() << "\t arrivedAt:" << QString::number(arrivedAt, 16) << " usecs";
|
||||
qDebug() << "\t nodeClockSkewUsec:" << nodeClockSkewUsec << " usecs";
|
||||
qDebug() << "\t flightTime:" << flightTime << " usecs";
|
||||
return true; // ignore any packets that are unreasonable
|
||||
}
|
||||
|
||||
// determine our expected sequence number... handle rollover appropriately
|
||||
|
@ -884,7 +891,7 @@ void OctreeSceneStats::trackIncomingOctreePacket(const QByteArray& packet,
|
|||
int sequenceOffset = (sequence - expected);
|
||||
if (sequenceOffset > MAX_RESONABLE_SEQUENCE_OFFSET || sequenceOffset < MIN_RESONABLE_SEQUENCE_OFFSET) {
|
||||
qDebug() << "ignoring unreasonable packet... sequence:" << sequence << "_incomingLastSequence:" << _incomingLastSequence;
|
||||
return; // ignore any packets that are unreasonable
|
||||
return false; // ignore any packets that are unreasonable
|
||||
}
|
||||
|
||||
// track packets here...
|
||||
|
@ -985,6 +992,6 @@ void OctreeSceneStats::trackIncomingOctreePacket(const QByteArray& packet,
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -158,7 +158,7 @@ public:
|
|||
quint64 getLastFullTotalBytes() const { return _lastFullTotalBytes; }
|
||||
|
||||
// Used in client implementations to track individual octree packets
|
||||
void trackIncomingOctreePacket(const QByteArray& packet, bool wasStatsPacket, int nodeClockSkewUsec);
|
||||
bool trackIncomingOctreePacket(const QByteArray& packet, bool wasStatsPacket, int nodeClockSkewUsec);
|
||||
|
||||
quint32 getIncomingPackets() const { return _incomingPacket; }
|
||||
quint64 getIncomingBytes() const { return _incomingBytes; }
|
||||
|
|
Loading…
Reference in a new issue