filter out overlarge frames

This commit is contained in:
David Rose 2007-07-02 20:18:17 +00:00
parent 88d1ee7836
commit 8d8a4cf620
3 changed files with 23 additions and 6 deletions

View File

@ -247,10 +247,15 @@ transmit_frame_data(int thread_index) {
datagram.add_uint16(thread_index); datagram.add_uint16(thread_index);
datagram.add_uint32(thread->_frame_number); datagram.add_uint32(thread->_frame_number);
thread->_frame_data.write_datagram(datagram);
bool sent; bool sent;
if (_writer.is_valid_for_udp(datagram)) {
if (!thread->_frame_data.write_datagram(datagram, _client)) {
// Too many events to fit in a single datagram. Maybe it was
// a long frame load or something. Just drop the datagram.
sent = false;
} else if (_writer.is_valid_for_udp(datagram)) {
if (_udp_count * _udp_count_factor < _tcp_count * _tcp_count_factor) { if (_udp_count * _udp_count_factor < _tcp_count * _tcp_count_factor) {
// Send this one as a UDP packet. // Send this one as a UDP packet.
nassertv(_got_udp_port); nassertv(_got_udp_port);

View File

@ -18,6 +18,7 @@
#include "pStatFrameData.h" #include "pStatFrameData.h"
#include "pStatClientVersion.h" #include "pStatClientVersion.h"
#include "config_pstats.h"
#include "datagram.h" #include "datagram.h"
#include "datagramIterator.h" #include "datagramIterator.h"
@ -39,11 +40,19 @@ sort_time() {
// Function: PStatFrameData::write_datagram // Function: PStatFrameData::write_datagram
// Access: Public // Access: Public
// Description: Writes the definition of the FrameData to the // Description: Writes the definition of the FrameData to the
// datagram. // datagram. Returns true on success, false on failure.
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void PStatFrameData:: bool PStatFrameData::
write_datagram(Datagram &destination) const { write_datagram(Datagram &destination, PStatClient *client) const {
Data::const_iterator di; Data::const_iterator di;
if (_time_data.size() >= 65536 || _level_data.size() >= 65536) {
pstats_cat.info()
<< "Dropping frame with " << _time_data.size()
<< " time measurements and " << _level_data.size()
<< " level measurements.\n";
return false;
}
destination.add_uint16(_time_data.size()); destination.add_uint16(_time_data.size());
for (di = _time_data.begin(); di != _time_data.end(); ++di) { for (di = _time_data.begin(); di != _time_data.end(); ++di) {
destination.add_uint16((*di)._index); destination.add_uint16((*di)._index);
@ -54,6 +63,8 @@ write_datagram(Datagram &destination) const {
destination.add_uint16((*di)._index); destination.add_uint16((*di)._index);
destination.add_float32((*di)._value); destination.add_float32((*di)._value);
} }
return true;
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////

View File

@ -28,6 +28,7 @@
class Datagram; class Datagram;
class DatagramIterator; class DatagramIterator;
class PStatClientVersion; class PStatClientVersion;
class PStatClient;
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Class : PStatFrameData // Class : PStatFrameData
@ -62,7 +63,7 @@ public:
INLINE int get_level_collector(int n) const; INLINE int get_level_collector(int n) const;
INLINE float get_level(int n) const; INLINE float get_level(int n) const;
void write_datagram(Datagram &destination) const; bool write_datagram(Datagram &destination, PStatClient *client) const;
void read_datagram(DatagramIterator &source, PStatClientVersion *version); void read_datagram(DatagramIterator &source, PStatClientVersion *version);
private: private: