Index: media/base/audio_renderer_mixer.cc |
diff --git a/media/base/audio_renderer_mixer.cc b/media/base/audio_renderer_mixer.cc |
index 008fcce793320af352ff80ab17ff51c8ea17cff3..93d8c751472d81cc4c65ac31bb46cba49fc3d501 100644 |
--- a/media/base/audio_renderer_mixer.cc |
+++ b/media/base/audio_renderer_mixer.cc |
@@ -10,20 +10,55 @@ |
#include "base/bind_helpers.h" |
#include "base/logging.h" |
#include "base/memory/ptr_util.h" |
+#include "base/metrics/histogram_macros.h" |
namespace media { |
enum { kPauseDelaySeconds = 10 }; |
+// Tracks the maximum value of a counter and logs it into a UMA histogram upon |
+// each increase of the maximum. NOT thread-safe, make sure it is used under |
+// lock. |
+class AudioRendererMixer::UMAMaxValueTracker { |
+ public: |
+ UMAMaxValueTracker(const UmaLogCallback& log_callback) |
+ : log_callback_(log_callback), count_(0), max_count_(0) {} |
+ |
+ ~UMAMaxValueTracker() {} |
+ |
+ // Increments the counter, updates the maximum. |
+ void Increment() { |
+ ++count_; |
+ if (max_count_ < count_) { |
+ max_count_ = count_; |
+ log_callback_.Run(max_count_); |
+ } |
+ } |
+ |
+ // Decrements the counter. |
+ void Decrement() { |
+ DCHECK_GE(count_, 0); |
+ --count_; |
+ } |
+ |
+ private: |
+ const UmaLogCallback log_callback_; |
+ int count_; |
+ int max_count_; |
+ DISALLOW_COPY_AND_ASSIGN(UMAMaxValueTracker); |
+}; |
+ |
AudioRendererMixer::AudioRendererMixer(const AudioParameters& output_params, |
- scoped_refptr<AudioRendererSink> sink) |
+ scoped_refptr<AudioRendererSink> sink, |
+ const UmaLogCallback& log_callback) |
: output_params_(output_params), |
audio_sink_(std::move(sink)), |
master_converter_(output_params, output_params, true), |
pause_delay_(base::TimeDelta::FromSeconds(kPauseDelaySeconds)), |
last_play_time_(base::TimeTicks::Now()), |
// Initialize |playing_| to true since Start() results in an auto-play. |
- playing_(true) { |
+ playing_(true), |
+ input_count_tracker_(new UMAMaxValueTracker(log_callback)) { |
DCHECK(audio_sink_); |
audio_sink_->Initialize(output_params, this); |
audio_sink_->Start(); |
@@ -70,6 +105,8 @@ void AudioRendererMixer::AddMixerInput(const AudioParameters& input_params, |
} |
converter->second->AddInput(input); |
} |
+ |
+ input_count_tracker_->Increment(); |
} |
void AudioRendererMixer::RemoveMixerInput( |
@@ -91,6 +128,8 @@ void AudioRendererMixer::RemoveMixerInput( |
converters_.erase(converter); |
} |
} |
+ |
+ input_count_tracker_->Decrement(); |
} |
void AudioRendererMixer::AddErrorCallback(const base::Closure& error_cb) { |