diff options
-rw-r--r-- | gtk2_ardour/generic_pluginui.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/plugin_ui.cc | 52 | ||||
-rw-r--r-- | gtk2_ardour/plugin_ui.h | 7 |
3 files changed, 62 insertions, 0 deletions
diff --git a/gtk2_ardour/generic_pluginui.cc b/gtk2_ardour/generic_pluginui.cc index b4092b9483..7347e001f8 100644 --- a/gtk2_ardour/generic_pluginui.cc +++ b/gtk2_ardour/generic_pluginui.cc @@ -156,6 +156,9 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol } else { pack_end (plugin_analysis_expander, false, false); } + + pack_end (cpuload_expander, false, false); + if (!plugin->get_docs().empty()) { pack_end (description_expander, false, false); } diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc index a91a0b8197..96dcdc1615 100644 --- a/gtk2_ardour/plugin_ui.cc +++ b/gtk2_ardour/plugin_ui.cc @@ -71,6 +71,7 @@ #include "keyboard.h" #include "latency_gui.h" #include "plugin_eq_gui.h" +#include "timers.h" #include "new_plugin_preset_dialog.h" #include "pbd/i18n.h" @@ -460,6 +461,7 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi) , pin_management_button (_("Pinout")) , description_expander (_("Description")) , plugin_analysis_expander (_("Plugin analysis")) + , cpuload_expander (_("CPU Profile")) , latency_gui (0) , latency_dialog (0) , eqgui (0) @@ -520,6 +522,9 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi) plugin_analysis_expander.property_expanded().signal_changed().connect( sigc::mem_fun(*this, &PlugUIBase::toggle_plugin_analysis)); plugin_analysis_expander.set_expanded(false); + cpuload_expander.property_expanded().signal_changed().connect( sigc::mem_fun(*this, &PlugUIBase::toggle_cpuload_display)); + cpuload_expander.set_expanded(false); + insert->DropReferences.connect (death_connection, invalidator (*this), boost::bind (&PlugUIBase::plugin_going_away, this), gui_context()); plugin->PresetAdded.connect (*this, invalidator (*this), boost::bind (&PlugUIBase::preset_added_or_removed, this), gui_context ()); @@ -814,6 +819,53 @@ PlugUIBase::toggle_plugin_analysis() } void +PlugUIBase::update_cpu_label() +{ + uint64_t min, max; + double avg, dev; + string t; + if (insert->get_stats (min, max, avg, dev)) { + t = string_compose (_("Timing min: %1 [ms] max: %2 [ms]\navg: %3 [ms] std.dev: %4"), + rint (min / 100.) / 10., + rint (max / 100.) / 10., + rint (avg) / 1000., + rint (dev) / 1000.); + } else { + t = _("No data available"); + } + cpuload_label.set_text (t); +} + +void +PlugUIBase::toggle_cpuload_display() +{ + if (cpuload_expander.get_expanded() && !cpuload_expander.get_child()) { + update_cpu_label (); + cpuload_label.set_line_wrap(true); + cpuload_label.set_line_wrap_mode(Pango::WRAP_WORD); + update_cpu_label_connection = Timers::second_connect (sigc::mem_fun(*this, &PlugUIBase::update_cpu_label)); + + cpuload_expander.add(cpuload_label); + cpuload_expander.show_all(); + } + + if (!cpuload_expander.get_expanded()) { + update_cpu_label_connection.disconnect (); + const int child_height = cpuload_expander.get_child ()->get_height (); + cpuload_expander.remove(); + Gtk::Window *toplevel = (Gtk::Window*) cpuload_expander.get_ancestor (GTK_TYPE_WINDOW); + + if (toplevel) { + Gtk::Requisition wr; + toplevel->get_size (wr.width, wr.height); + wr.height -= child_height; + toplevel->resize (wr.width, wr.height); + } + } + +} + +void PlugUIBase::update_preset_list () { using namespace Menu_Helpers; diff --git a/gtk2_ardour/plugin_ui.h b/gtk2_ardour/plugin_ui.h index 53171cacbf..7156f57129 100644 --- a/gtk2_ardour/plugin_ui.h +++ b/gtk2_ardour/plugin_ui.h @@ -137,6 +137,8 @@ protected: Gtk::Expander description_expander; /** an expander containing the plugin analysis graph */ Gtk::Expander plugin_analysis_expander; + /** an expander containing the plugin cpu profile */ + Gtk::Expander cpuload_expander; /** a button which, when clicked, opens the latency GUI */ ArdourWidgets::ArdourButton latency_button; /** a button which sets all controls' automation setting to Manual */ @@ -149,8 +151,12 @@ protected: ArdourWidgets::ArdourButton automation_touch_all_button; /** a button which sets all controls' automation setting to Latch */ ArdourWidgets::ArdourButton automation_latch_all_button; + /** */ + Gtk::Label cpuload_label; void set_latency_label (); + void update_cpu_label (); + sigc::connection update_cpu_label_connection; LatencyGUI* latency_gui; ArdourWindow* latency_dialog; @@ -171,6 +177,7 @@ protected: bool bypass_button_release(GdkEventButton*); void toggle_description (); void toggle_plugin_analysis (); + void toggle_cpuload_display (); void processor_active_changed (boost::weak_ptr<ARDOUR::Processor> p); void plugin_going_away (); void automation_state_changed (); |