From cc60359a6c8b91d5df8c21f09f416b5d2ae87e94 Mon Sep 17 00:00:00 2001 From: lawnjelly Date: Fri, 28 Apr 2023 09:02:11 +0100 Subject: [PATCH] MessageQueue - Fix max usage performance statistic Fixes to keep track of the maximum usage over time, rather than current usage. --- core/message_queue.cpp | 4 ++-- core/message_queue.h | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/message_queue.cpp b/core/message_queue.cpp index 6e1bf25b8ae..ab0c102f59c 100644 --- a/core/message_queue.cpp +++ b/core/message_queue.cpp @@ -251,8 +251,7 @@ void MessageQueue::statistics() { } int MessageQueue::get_max_buffer_usage() const { - // Note this may be better read_buffer, or a combination, depending when this is read. - return buffers[write_buffer].data.size(); + return _buffer_size_monitor.max_size_overall; } void MessageQueue::_call_function(Object *p_target, const StringName &p_func, const Variant *p_args, int p_argcount, bool p_show_error) { @@ -392,6 +391,7 @@ void MessageQueue::flush() { _THREAD_SAFE_LOCK_ // keep track of the maximum used size, so we can downsize buffers when appropriate _buffer_size_monitor.max_size = MAX(buffer_data_size, _buffer_size_monitor.max_size); + _buffer_size_monitor.max_size_overall = MAX(buffer_data_size, _buffer_size_monitor.max_size_overall); // flip buffers, this is the only part that requires a lock SWAP(read_buffer, write_buffer); diff --git a/core/message_queue.h b/core/message_queue.h index 4d6307534d3..c261238f689 100644 --- a/core/message_queue.h +++ b/core/message_queue.h @@ -70,6 +70,9 @@ class MessageQueue { struct BufferSizeMonitor { uint32_t max_size = 0; uint32_t flush_count = 0; + + // Only used for performance statistics. + uint32_t max_size_overall = 0; } _buffer_size_monitor; void _call_function(Object *p_target, const StringName &p_func, const Variant *p_args, int p_argcount, bool p_show_error); @@ -97,6 +100,7 @@ public: bool is_flushing() const; int get_max_buffer_usage() const; + int get_current_buffer_usage() const; MessageQueue(); ~MessageQueue();