diff --git a/panda/src/grutil/config_grutil.cxx b/panda/src/grutil/config_grutil.cxx index 98ff1e0012..044766e84e 100644 --- a/panda/src/grutil/config_grutil.cxx +++ b/panda/src/grutil/config_grutil.cxx @@ -34,12 +34,18 @@ ConfigureFn(config_grutil) { init_libgrutil(); } +ConfigVariableBool frame_rate_meter_milliseconds +("frame-rate-meter-milliseconds", false); + ConfigVariableDouble frame_rate_meter_update_interval ("frame-rate-meter-update-interval", 1.5); ConfigVariableString frame_rate_meter_text_pattern ("frame-rate-meter-text-pattern", "%0.1f fps"); +ConfigVariableString frame_rate_meter_ms_text_pattern +("frame-rate-meter-ms-text-pattern", "%0.1f ms"); + ConfigVariableInt frame_rate_meter_layer_sort ("frame-rate-meter-layer-sort", 1000); diff --git a/panda/src/grutil/config_grutil.h b/panda/src/grutil/config_grutil.h index eb84add0d3..7d110d106f 100644 --- a/panda/src/grutil/config_grutil.h +++ b/panda/src/grutil/config_grutil.h @@ -24,8 +24,10 @@ NotifyCategoryDecl(grutil, EXPCL_PANDA_GRUTIL, EXPTP_PANDA_GRUTIL); +extern ConfigVariableBool frame_rate_meter_milliseconds; extern ConfigVariableDouble frame_rate_meter_update_interval; extern ConfigVariableString frame_rate_meter_text_pattern; +extern ConfigVariableString frame_rate_meter_ms_text_pattern; extern ConfigVariableInt frame_rate_meter_layer_sort; extern ConfigVariableDouble frame_rate_meter_scale; extern ConfigVariableDouble frame_rate_meter_side_margins; diff --git a/panda/src/grutil/frameRateMeter.cxx b/panda/src/grutil/frameRateMeter.cxx index fb5b82f0e1..7e4f779a8b 100644 --- a/panda/src/grutil/frameRateMeter.cxx +++ b/panda/src/grutil/frameRateMeter.cxx @@ -38,9 +38,15 @@ FrameRateMeter(const string &name) : TextNode(name) { Thread *current_thread = Thread::get_current_thread(); + _show_milliseconds = frame_rate_meter_milliseconds; + if (_show_milliseconds) { + _text_pattern = frame_rate_meter_ms_text_pattern; + } else { + _text_pattern = frame_rate_meter_text_pattern; + } + _update_interval = frame_rate_meter_update_interval; _last_update = 0.0f; - _text_pattern = frame_rate_meter_text_pattern; _clock_object = ClockObject::get_global_clock(); // The top of the visible frame is 80% of the line height, based on @@ -184,16 +190,21 @@ void FrameRateMeter:: do_update(Thread *current_thread) { _last_update = _clock_object->get_frame_time(current_thread); - double frame_rate = _clock_object->get_average_frame_rate(current_thread); + double value = _clock_object->get_average_frame_rate(current_thread); double deviation = _clock_object->calc_frame_rate_deviation(current_thread); + if (_show_milliseconds) { + value = 1000.0 / value; + deviation = 1000.0 / deviation; + } + static const size_t buffer_size = 1024; char buffer[buffer_size]; #if defined(WIN32_VC) || defined(WIN64_VC) // Windows doesn't define snprintf(). Hope we don't overflow. - sprintf(buffer, _text_pattern.c_str(), frame_rate, deviation); + sprintf(buffer, _text_pattern.c_str(), value, deviation); #else - snprintf(buffer, buffer_size, _text_pattern.c_str(), frame_rate, deviation); + snprintf(buffer, buffer_size, _text_pattern.c_str(), value, deviation); #endif nassertv(strlen(buffer) < buffer_size); diff --git a/panda/src/grutil/frameRateMeter.h b/panda/src/grutil/frameRateMeter.h index acc2a312e5..2f95bbaf72 100644 --- a/panda/src/grutil/frameRateMeter.h +++ b/panda/src/grutil/frameRateMeter.h @@ -71,6 +71,7 @@ private: PT(DisplayRegion) _display_region; NodePath _root; + bool _show_milliseconds; double _update_interval; double _last_update; string _text_pattern;