defer transmitting until frame has begin properly
This commit is contained in:
parent
42fa5dd7ac
commit
c85f5e39f5
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue