defer transmitting until frame has begin properly

This commit is contained in:
David Rose 2009-01-22 20:18:02 +00:00
parent 42fa5dd7ac
commit c85f5e39f5
4 changed files with 27 additions and 5 deletions

View File

@ -184,6 +184,8 @@ new_frame(int thread_index) {
}
float frame_start = get_real_time();
int frame_number = -1;
PStatFrameData frame_data;
if (!pthread->_frame_data.is_empty()) {
// Collector 0 is the whole frame.
@ -201,7 +203,8 @@ new_frame(int thread_index) {
pthread->_frame_data.add_level(i, ptd._level);
}
}
transmit_frame_data(thread_index);
pthread->_frame_data.swap(frame_data);
frame_number = pthread->_frame_number;
}
pthread->_frame_data.clear();
@ -211,6 +214,10 @@ new_frame(int thread_index) {
// Also record the time for the PStats operation itself.
int pstats_index = PStatClient::_pstats_pcollector.get_index();
_client->start(pstats_index, thread_index, frame_start);
if (frame_number != -1) {
transmit_frame_data(thread_index, frame_number, frame_data);
}
_client->stop(pstats_index, thread_index, get_real_time());
}
@ -221,7 +228,8 @@ new_frame(int thread_index) {
// transmit the latest data to the PStatServer.
////////////////////////////////////////////////////////////////////
void PStatClientImpl::
transmit_frame_data(int thread_index) {
transmit_frame_data(int thread_index, int frame_number,
const PStatFrameData &frame_data) {
nassertv(thread_index >= 0 && thread_index < _client->_num_threads);
PStatClient::InternalThread *thread = _client->get_thread_ptr(thread_index);
if (_is_connected && thread->_is_active) {
@ -243,11 +251,11 @@ transmit_frame_data(int thread_index) {
datagram.add_uint8(0);
datagram.add_uint16(thread_index);
datagram.add_uint32(thread->_frame_number);
datagram.add_uint32(frame_number);
bool sent;
if (!thread->_frame_data.write_datagram(datagram, _client)) {
if (!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;

View File

@ -74,7 +74,8 @@ public:
void new_frame(int thread_index);
private:
void transmit_frame_data(int thread_index);
void transmit_frame_data(int thread_index, int frame_number,
const PStatFrameData &frame_data);
void transmit_control_data();

View File

@ -58,6 +58,18 @@ clear() {
_level_data.clear();
}
////////////////////////////////////////////////////////////////////
// Function: PStatFrameData::swap
// Access: Public
// Description: Exchanges the data in this object with the data in
// the other.
////////////////////////////////////////////////////////////////////
INLINE void PStatFrameData::
swap(PStatFrameData &other) {
_time_data.swap(other._time_data);
_level_data.swap(other._level_data);
}
////////////////////////////////////////////////////////////////////
// Function: PStatFrameData::add_start
// Access: Public

View File

@ -39,6 +39,7 @@ public:
INLINE bool is_level_empty() const;
INLINE bool is_empty() const;
INLINE void clear();
INLINE void swap(PStatFrameData &other);
INLINE void add_start(int index, float time);
INLINE void add_stop(int index, float time);