13
0

Collect plugin runtime profile statistics.

This commit is contained in:
Robin Gareus 2018-05-17 22:09:33 +02:00
parent 3534035091
commit cb51c4c5aa
2 changed files with 20 additions and 0 deletions

View File

@ -25,6 +25,8 @@
#include <boost/weak_ptr.hpp>
#include "pbd/timing.h"
#include "ardour/ardour.h"
#include "ardour/libardour_visibility.h"
#include "ardour/chan_mapping.h"
@ -190,6 +192,8 @@ public:
bool load_preset (Plugin::PresetRecord);
bool get_stats (uint64_t& min, uint64_t& max, double& avg, double& dev) const;
/** A control that manipulates a plugin parameter (control port). */
struct PluginControl : public AutomationControl
{
@ -389,6 +393,8 @@ private:
CtrlOutMap _control_outputs;
void preset_load_set_value (uint32_t, float);
PBD::TimingStats _timing_stats;
};
} // namespace ARDOUR

View File

@ -617,6 +617,7 @@ PluginInsert::find_next_event (double now, double end, Evoral::ControlEvent& nex
void
PluginInsert::activate ()
{
_timing_stats.reset ();
for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
(*i)->activate ();
}
@ -638,6 +639,7 @@ PluginInsert::activate ()
void
PluginInsert::deactivate ()
{
_timing_stats.reset ();
Processor::deactivate ();
for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
@ -1204,6 +1206,7 @@ PluginInsert::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sa
}
if (_pending_active) {
_timing_stats.start ();
/* run as normal if we are active or moving from inactive to active */
if (_session.transport_rolling() || _session.bounce_processing()) {
@ -1212,8 +1215,10 @@ PluginInsert::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sa
Glib::Threads::Mutex::Lock lm (control_lock(), Glib::Threads::TRY_LOCK);
connect_and_run (bufs, start_sample, end_sample, speed, nframes, 0, lm.locked());
}
_timing_stats.update ();
} else {
_timing_stats.reset ();
// XXX should call ::silence() to run plugin(s) for consistent load.
// We'll need to change this anyway when bypass can be automated
bypass (bufs, nframes);
@ -3123,6 +3128,15 @@ PluginInsert::end_touch (uint32_t param_id)
}
}
bool
PluginInsert::get_stats (uint64_t& min, uint64_t& max, double& avg, double& dev) const
{
/* TODO: consider taking a try/lock: Don't run concurrently with
* TimingStats::update, TimingStats::reset.
*/
return _timing_stats.get_stats (min, max, avg, dev);
}
std::ostream& operator<<(std::ostream& o, const ARDOUR::PluginInsert::Match& m)
{
switch (m.method) {