diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-04-30 15:03:55 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-04-30 15:03:55 +0000 |
commit | 075f5170ef1995852d823d6d2e2d43fdee99654d (patch) | |
tree | 094a8429d5b11c0c3be65f7ef5b09a947fe8efe0 /gtk2_ardour/ardour_ui.cc | |
parent | e41527d5bac8a9369ddbd4f4f48c66f5b662bfc8 (diff) |
disk buffer stats patch ported from 2.X
git-svn-id: svn://localhost/ardour2/branches/3.0@5014 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/ardour_ui.cc')
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index ce435c4ad5..861feef6aa 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -909,8 +909,14 @@ void ARDOUR_UI::update_buffer_load () { char buf[64]; + uint32_t c, p; if (session) { + c = session->capture_load (); + p = session->playback_load (); + + push_buffer_stats (c, p); + snprintf (buf, sizeof (buf), _("Buffers p:%" PRIu32 "%% c:%" PRIu32 "%%"), session->playback_load(), session->capture_load()); buffer_load_label.set_text (buf); @@ -2933,10 +2939,60 @@ ARDOUR_UI::xrun_handler(nframes_t where) } void +ARDOUR_UI::push_buffer_stats (uint32_t capture, uint32_t playback) +{ + time_t now; + time (&now); + + while (disk_buffer_stats.size() > 60) { + disk_buffer_stats.pop_front (); + } + + disk_buffer_stats.push_back (DiskBufferStat (now, capture, playback)); +} + +void +ARDOUR_UI::write_buffer_stats () +{ + std::ofstream fout; + struct tm tm; + char buf[64]; + char* path; + + if ((path = tempnam (0, "ardourBuffering")) == 0) { + cerr << X_("cannot find temporary name for ardour buffer stats") << endl; + return; + } + + fout.open (path); + + if (!fout) { + cerr << string_compose (X_("cannot open file %1 for ardour buffer stats"), path) << endl; + return; + } + + for (list<DiskBufferStat>::iterator i = disk_buffer_stats.begin(); i != disk_buffer_stats.end(); ++i) { + localtime_r (&(*i).when, &tm); + strftime (buf, sizeof (buf), "%T", &tm); + fout << buf << ' ' << (*i).capture << ' ' << (*i).playback << endl; + } + + disk_buffer_stats.clear (); + + fout.close (); + + cerr << "Ardour buffering statistics can be found in: " << path << endl; + free (path); +} + +void ARDOUR_UI::disk_overrun_handler () { + ENSURE_GUI_THREAD (mem_fun(*this, &ARDOUR_UI::disk_overrun_handler)); + write_buffer_stats (); + if (!have_disk_speed_dialog_displayed) { have_disk_speed_dialog_displayed = true; MessageDialog* msg = new MessageDialog (*editor, _("\ @@ -2953,8 +3009,11 @@ quickly enough to keep up with recording.\n")); void ARDOUR_UI::disk_underrun_handler () { + ENSURE_GUI_THREAD (mem_fun(*this, &ARDOUR_UI::disk_underrun_handler)); + write_buffer_stats (); + if (!have_disk_speed_dialog_displayed) { have_disk_speed_dialog_displayed = true; MessageDialog* msg = new MessageDialog (*editor, |