Chromium Code Reviews| 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..51f9c3e73846278ac2fe7dde992f3c9af730986e 100644 |
| --- a/media/base/audio_renderer_mixer.cc |
| +++ b/media/base/audio_renderer_mixer.cc |
| @@ -10,20 +10,52 @@ |
| #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() { --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 +102,8 @@ void AudioRendererMixer::AddMixerInput(const AudioParameters& input_params, |
| } |
| converter->second->AddInput(input); |
| } |
| + |
| + input_count_tracker_->Increment(); |
| } |
| void AudioRendererMixer::RemoveMixerInput( |
| @@ -91,6 +125,8 @@ void AudioRendererMixer::RemoveMixerInput( |
| converters_.erase(converter); |
| } |
| } |
| + |
| + input_count_tracker_->Decrement(); |
| } |
| void AudioRendererMixer::AddErrorCallback(const base::Closure& error_cb) { |
| @@ -122,6 +158,11 @@ bool AudioRendererMixer::CurrentThreadIsRenderingThread() { |
| return audio_sink_->CurrentThreadIsRenderingThread(); |
| } |
| +void AudioRendererMixer::LogLifetimeUmaStats() { |
| + base::AutoLock auto_lock(lock_); |
| + input_count_tracker_.reset(); |
| +}; |
|
tommi (sloooow) - chröme
2016/06/29 12:26:52
nit: remove ;
o1ka
2016/06/29 13:57:32
removed the method (not used).
|
| + |
| int AudioRendererMixer::Render(AudioBus* audio_bus, |
| uint32_t frames_delayed, |
| uint32_t frames_skipped) { |