mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-11 00:56:33 +01:00
continuing work on presenting useful data in perf meter window
This commit is contained in:
parent
4c76ff503f
commit
e1495100a8
1 changed files with 70 additions and 44 deletions
|
|
@ -48,12 +48,12 @@ DspStatisticsGUI::DspStatisticsGUI ()
|
||||||
attach (buffer_size_label, 1, 2, row, row+1, Gtk::FILL, Gtk::SHRINK, 2, 0);
|
attach (buffer_size_label, 1, 2, row, row+1, Gtk::FILL, Gtk::SHRINK, 2, 0);
|
||||||
row++;
|
row++;
|
||||||
|
|
||||||
attach (*manage (new Gtk::Label (_("Device Wait: "), ALIGN_RIGHT, ALIGN_CENTER)), 0, 1, row, row+1, Gtk::FILL, Gtk::SHRINK, 2, 0);
|
attach (*manage (new Gtk::Label (_("Idle: "), ALIGN_RIGHT, ALIGN_CENTER)), 0, 1, row, row+1, Gtk::FILL, Gtk::SHRINK, 2, 0);
|
||||||
attach (*labels[AudioEngine::NTT + Session::NTT + AudioBackend::DeviceWait], 1, 2, row, row+1, Gtk::FILL, Gtk::SHRINK, 2, 0);
|
attach (*labels[AudioEngine::NTT + Session::NTT + AudioBackend::DeviceWait], 1, 2, row, row+1, Gtk::FILL, Gtk::SHRINK, 2, 0);
|
||||||
row++;
|
row++;
|
||||||
|
|
||||||
attach (*manage (new Gtk::Label (_("Backend process: "), ALIGN_RIGHT, ALIGN_CENTER)), 0, 1, row, row+1, Gtk::FILL, Gtk::SHRINK, 2, 0);
|
attach (*manage (new Gtk::Label (_("Backend pre-process: "), ALIGN_RIGHT, ALIGN_CENTER)), 0, 1, row, row+1, Gtk::FILL, Gtk::SHRINK, 2, 0);
|
||||||
attach (*labels[AudioEngine::NTT + Session::NTT + AudioBackend::ProcessCallback], 1, 2, row, row+1, Gtk::FILL, Gtk::SHRINK, 2, 0);
|
attach (*labels[AudioEngine::NTT + Session::NTT + AudioBackend::PreProcess], 1, 2, row, row+1, Gtk::FILL, Gtk::SHRINK, 2, 0);
|
||||||
row++;
|
row++;
|
||||||
|
|
||||||
attach (*manage (new Gtk::Label (_("Engine: "), ALIGN_RIGHT, ALIGN_CENTER)), 0, 1, row, row+1, Gtk::FILL, Gtk::SHRINK, 2, 0);
|
attach (*manage (new Gtk::Label (_("Engine: "), ALIGN_RIGHT, ALIGN_CENTER)), 0, 1, row, row+1, Gtk::FILL, Gtk::SHRINK, 2, 0);
|
||||||
|
|
@ -64,6 +64,10 @@ DspStatisticsGUI::DspStatisticsGUI ()
|
||||||
attach (*labels[AudioEngine::NTT + Session::OverallProcess], 1, 2, row, row+1, Gtk::FILL, Gtk::SHRINK, 2, 0);
|
attach (*labels[AudioEngine::NTT + Session::OverallProcess], 1, 2, row, row+1, Gtk::FILL, Gtk::SHRINK, 2, 0);
|
||||||
row++;
|
row++;
|
||||||
|
|
||||||
|
attach (*manage (new Gtk::Label (_("Backend post-process: "), ALIGN_RIGHT, ALIGN_CENTER)), 0, 1, row, row+1, Gtk::FILL, Gtk::SHRINK, 2, 0);
|
||||||
|
attach (*labels[AudioEngine::NTT + Session::NTT + AudioBackend::PostProcess], 1, 2, row, row+1, Gtk::FILL, Gtk::SHRINK, 2, 0);
|
||||||
|
row++;
|
||||||
|
|
||||||
show_all ();
|
show_all ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -83,58 +87,80 @@ DspStatisticsGUI::stop_updating ()
|
||||||
void
|
void
|
||||||
DspStatisticsGUI::update ()
|
DspStatisticsGUI::update ()
|
||||||
{
|
{
|
||||||
uint64_t min;
|
uint64_t min = 0;
|
||||||
uint64_t max;
|
uint64_t max = 0;
|
||||||
double avg;
|
double avg = 0.;
|
||||||
double dev;
|
double dev = 0.;
|
||||||
double minf;
|
|
||||||
double maxf;
|
|
||||||
char buf[64];
|
char buf[64];
|
||||||
|
|
||||||
int bufsize = AudioEngine::instance()->raw_buffer_size (DataType::AUDIO);
|
int bufsize = AudioEngine::instance()->samples_per_cycle ();
|
||||||
|
double bufsize_usecs = (bufsize * 1000000.0) / AudioEngine::instance()->sample_rate();
|
||||||
double bufsize_msecs = (bufsize * 1000.0) / AudioEngine::instance()->sample_rate();
|
double bufsize_msecs = (bufsize * 1000.0) / AudioEngine::instance()->sample_rate();
|
||||||
snprintf (buf, sizeof (buf), "%d samples / %5.2f msecs", bufsize, bufsize_msecs);
|
snprintf (buf, sizeof (buf), "%d samples / %5.2f msecs", bufsize, bufsize_msecs);
|
||||||
buffer_size_label.set_text (buf);
|
buffer_size_label.set_text (buf);
|
||||||
|
|
||||||
AudioEngine::instance()->dsp_stats[AudioEngine::ProcessCallback].get_stats (min, max, avg, dev);
|
if (AudioEngine::instance()->current_backend()->dsp_stats[AudioBackend::DeviceWait].get_stats (min, max, avg, dev)) {
|
||||||
|
|
||||||
minf = floor (min / 1000.0);
|
if (avg > 1000.0) {
|
||||||
maxf = floor (max / 1000.0);
|
|
||||||
avg /= 1000.0;
|
avg /= 1000.0;
|
||||||
dev /= 1000.0;
|
dev /= 1000.0;
|
||||||
|
|
||||||
snprintf (buf, sizeof (buf), "%7.2g msec %5.2g%% (%7.4g - %-7.2g .. %7.2g)", avg, (100.0 * avg) / bufsize_msecs, minf, maxf, dev);
|
|
||||||
labels[AudioEngine::ProcessCallback]->set_text (buf);
|
|
||||||
|
|
||||||
AudioEngine::instance()->current_backend()->dsp_stats[AudioBackend::DeviceWait].get_stats (min, max, avg, dev);
|
|
||||||
|
|
||||||
minf = floor (min / 1000.0);
|
|
||||||
maxf = floor (max / 1000.0);
|
|
||||||
avg /= 1000.0;
|
|
||||||
dev /= 1000.0;
|
|
||||||
|
|
||||||
snprintf (buf, sizeof (buf), "%7.2g msec %5.2g%% (%7.4g - %-7.2g .. %7.2g)", avg, (100.0 * avg) / bufsize_msecs, minf, maxf, dev);
|
|
||||||
labels[AudioEngine::NTT + Session::NTT + AudioBackend::DeviceWait]->set_text (buf);
|
|
||||||
|
|
||||||
AudioEngine::instance()->current_backend()->dsp_stats[AudioBackend::ProcessCallback].get_stats (min, max, avg, dev);
|
|
||||||
|
|
||||||
minf = floor (min / 1000.0);
|
|
||||||
maxf = floor (max / 1000.0);
|
|
||||||
avg /= 1000.0;
|
|
||||||
dev /= 1000.0;
|
|
||||||
|
|
||||||
snprintf (buf, sizeof (buf), "%7.2g msec %5.2g%% (%7.4g - %-7.2g .. %7.2g)", avg, (100.0 * avg) / bufsize_msecs, minf, maxf, dev);
|
|
||||||
labels[AudioEngine::NTT + Session::NTT + AudioBackend::ProcessCallback]->set_text (buf);
|
|
||||||
|
|
||||||
if (_session) {
|
|
||||||
_session->dsp_stats[AudioEngine::ProcessCallback].get_stats (min, max, avg, dev);
|
|
||||||
|
|
||||||
min = (uint64_t) floor (min / 1000.0);
|
min = (uint64_t) floor (min / 1000.0);
|
||||||
max = (uint64_t) floor (max / 1000.0);
|
max = (uint64_t) floor (max / 1000.0);
|
||||||
avg /= 1000.0;
|
snprintf (buf, sizeof (buf), "%7.2f msec %5.2f%% (%" PRId64 " - %" PRId64 " .. %7.2g)", avg, (100.0 * avg) / bufsize_msecs, min, max, dev);
|
||||||
dev /= 1000.0;
|
} else {
|
||||||
|
snprintf (buf, sizeof (buf), "%7.2f usec %5.2f%% (%" PRId64 " - %" PRId64 " .. %7.2g)", avg, (100.0 * avg) / bufsize_usecs, min, max, dev);
|
||||||
|
}
|
||||||
|
labels[AudioEngine::NTT + Session::NTT + AudioBackend::DeviceWait]->set_text (buf);
|
||||||
|
} else {
|
||||||
|
labels[AudioEngine::NTT + Session::NTT + AudioBackend::DeviceWait]->set_text (_("not measured"));
|
||||||
|
}
|
||||||
|
|
||||||
snprintf (buf, sizeof (buf), "%7.2g msec %5.2g%% (%7.4g - %-7.2g .. %7.2g)", avg, (100.0 * avg) / bufsize_msecs, minf, maxf, dev);
|
if (AudioEngine::instance()->current_backend()->dsp_stats[AudioBackend::PreProcess].get_stats (min, max, avg, dev)) {
|
||||||
|
|
||||||
|
snprintf (buf, sizeof (buf), "%7.2f usec %5.2f%% (%" PRId64 " - %" PRId64 " .. %7.2g)", avg, (100.0 * avg) / bufsize_usecs, min, max, dev);
|
||||||
|
labels[AudioEngine::NTT + Session::NTT + AudioBackend::PreProcess]->set_text (buf);
|
||||||
|
} else {
|
||||||
|
labels[AudioEngine::NTT + Session::NTT + AudioBackend::PreProcess]->set_text (_("not measured"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AudioEngine::instance()->current_backend()->dsp_stats[AudioBackend::PostProcess].get_stats (min, max, avg, dev)) {
|
||||||
|
|
||||||
|
snprintf (buf, sizeof (buf), "%7.2f usec %5.2f%% (%" PRId64 " - %" PRId64 " .. %7.2g)", avg, (100.0 * avg) / bufsize_usecs, min, max, dev);
|
||||||
|
labels[AudioEngine::NTT + Session::NTT + AudioBackend::PostProcess]->set_text (buf);
|
||||||
|
} else {
|
||||||
|
labels[AudioEngine::NTT + Session::NTT + AudioBackend::PostProcess]->set_text (_("not measured"));
|
||||||
|
}
|
||||||
|
|
||||||
|
AudioEngine::instance()->dsp_stats[AudioEngine::ProcessCallback].get_stats (min, max, avg, dev);
|
||||||
|
|
||||||
|
if (_session) {
|
||||||
|
|
||||||
|
uint64_t smin = 0;
|
||||||
|
uint64_t smax = 0;
|
||||||
|
double savg = 0.;
|
||||||
|
double sdev = 0.;
|
||||||
|
|
||||||
|
_session->dsp_stats[AudioEngine::ProcessCallback].get_stats (smin, smax, savg, sdev);
|
||||||
|
|
||||||
|
snprintf (buf, sizeof (buf), "%7.2f usec %5.2f%% (%" PRId64 " - %" PRId64 " .. %7.2g)", savg, (100.0 * savg) / bufsize_usecs, smin, smax, sdev);
|
||||||
labels[AudioEngine::NTT + Session::OverallProcess]->set_text (buf);
|
labels[AudioEngine::NTT + Session::OverallProcess]->set_text (buf);
|
||||||
|
|
||||||
|
/* Subtract session time from engine process time to show
|
||||||
|
* engine overhead
|
||||||
|
*/
|
||||||
|
|
||||||
|
min -= smin;
|
||||||
|
max -= smax;
|
||||||
|
avg -= savg;
|
||||||
|
dev -= sdev;
|
||||||
|
|
||||||
|
snprintf (buf, sizeof (buf), "%7.2f usec %5.2f%% (%" PRId64 " - %" PRId64 " .. %7.2g)", avg, (100.0 * avg) / bufsize_usecs, min, max, dev);
|
||||||
|
labels[AudioEngine::ProcessCallback]->set_text (buf);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
snprintf (buf, sizeof (buf), "%7.2f usec %5.2f%% (%" PRId64 " - %" PRId64 " .. %7.2g)", avg, (100.0 * avg) / bufsize_usecs, min, max, dev);
|
||||||
|
labels[AudioEngine::ProcessCallback]->set_text (buf);
|
||||||
|
labels[AudioEngine::NTT + Session::OverallProcess]->set_text (_("No session loaded"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue