Index: media/audio/mac/audio_low_latency_input_mac.h |
diff --git a/media/audio/mac/audio_low_latency_input_mac.h b/media/audio/mac/audio_low_latency_input_mac.h |
index c66c8143f39aa4365121f04d52f79a65de8e352c..7b97760807afa0f138f1d34752f649f88f671a55 100644 |
--- a/media/audio/mac/audio_low_latency_input_mac.h |
+++ b/media/audio/mac/audio_low_latency_input_mac.h |
@@ -164,6 +164,13 @@ class MEDIA_EXPORT AUAudioInputStream |
// filters out some that make sense to add to UMA stats. |
void AddDevicePropertyChangesToUMA(bool startup_failed); |
+ // Updates capture timestamp, current lost frames, and total lost frames and |
+ // glitches. |
+ void UpdateCaptureTimestamp(const AudioTimeStamp* timestamp); |
+ |
+ // Called from the dtor and when the stream is reset. |
+ void ReportAndResetStats(); |
+ |
// Verifies that Open(), Start(), Stop() and Close() are all called on the |
// creating thread which is the main browser thread (CrBrowserMain) on Mac. |
base::ThreadChecker thread_checker_; |
@@ -174,6 +181,11 @@ class MEDIA_EXPORT AUAudioInputStream |
// Contains the desired number of audio frames in each callback. |
const size_t number_of_frames_; |
+ // Stores the number of frames that we actually get callbacks for. |
+ // This may be different from what we ask for, so we use this for stats in |
+ // order to understand how often this happens and what are the typical values. |
+ size_t number_of_frames_provided_; |
+ |
// The actual I/O buffer size for the input device connected to the active |
// AUHAL audio unit. |
size_t io_buffer_frame_size_; |
@@ -254,6 +266,20 @@ class MEDIA_EXPORT AUAudioInputStream |
// Only touched on the creating thread. |
bool device_listener_is_active_; |
+ // Stores the timestamp of the previous audio buffer provided by the OS. |
+ // We use this in combination with |last_number_of_frames_| to detect when |
+ // the OS has decided to skip providing frames (i.e. a glitch). |
+ // This can happen in case of high CPU load or excessive blocking on the |
+ // callback audio thread. |
+ // These variables are only touched on the callback thread and then read |
+ // in the dtor (when no longer receiving callbacks). |
+ // NOTE: Float64 and UInt32 types are used for native API compatibility. |
+ Float64 last_sample_time_; |
+ UInt32 last_number_of_frames_; |
+ UInt32 total_lost_frames_; |
+ UInt32 largest_glitch_frames_; |
+ int glitches_detected_; |
+ |
DISALLOW_COPY_AND_ASSIGN(AUAudioInputStream); |
}; |