Chromium Code Reviews| Index: content/browser/media/audible_metrics.cc |
| diff --git a/content/browser/media/audible_metrics.cc b/content/browser/media/audible_metrics.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..a12331663194c41527b9b3e4afdc0abf28acb897 |
| --- /dev/null |
| +++ b/content/browser/media/audible_metrics.cc |
| @@ -0,0 +1,79 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "content/browser/media/audible_metrics.h" |
| + |
| +#include "base/metrics/histogram_macros.h" |
| +#include "base/metrics/user_metrics.h" |
| +#include "base/time/default_tick_clock.h" |
| + |
| +namespace content { |
| + |
| +AudibleMetrics::AudibleMetrics() |
| + : max_concurrent_audible_web_contents_in_session_(0), |
| + clock_(new base::DefaultTickClock()) { |
| +} |
| + |
| +AudibleMetrics::~AudibleMetrics() { |
| +} |
| + |
| +void AudibleMetrics::UpdateAudibleWebContentsState( |
| + const WebContents* web_contents, bool audible) { |
| + bool found = |
| + audible_web_contents_.find(web_contents) != audible_web_contents_.end(); |
| + if (found == audible) |
| + return; |
| + |
| + if (audible) |
| + AddAudibleWebContents(web_contents); |
| + else |
| + RemoveAudibleWebContents(web_contents); |
| +} |
| + |
| +void AudibleMetrics::SetClockForTest(scoped_ptr<base::TickClock> test_clock) { |
| + clock_ = std::move(test_clock); |
| +} |
| + |
| +void AudibleMetrics::AddAudibleWebContents(const WebContents* web_contents) { |
| + base::RecordAction(base::UserMetricsAction("Media.Audible.AddTab")); |
| + |
| + UMA_HISTOGRAM_CUSTOM_COUNTS( |
| + "Media.Audible.ConcurrentTabsWhenStarting", audible_web_contents_.size(), |
| + 0, 10, 11); |
|
Mark P
2016/01/20 00:19:16
the min bucket should be 1.
(We always have an "un
mlamouri (slow - plz ping)
2016/01/20 11:31:52
Done.
|
| + |
| + audible_web_contents_.insert(web_contents); |
| + if (audible_web_contents_.size() > 1 && |
| + concurrent_web_contents_start_time_.is_null()) { |
| + concurrent_web_contents_start_time_ = clock_->NowTicks(); |
| + } |
| + |
| + if (audible_web_contents_.size() > |
| + max_concurrent_audible_web_contents_in_session_) { |
| + max_concurrent_audible_web_contents_in_session_ = |
| + audible_web_contents_.size(); |
| + |
| + UMA_HISTOGRAM_CUSTOM_COUNTS( |
| + "Media.Audible.ConcurrentTabsInSession", |
| + max_concurrent_audible_web_contents_in_session_, |
| + 1, 10, 10); |
|
Mark P
2016/01/20 00:19:15
nit: second 10 here might as well be 11 for consis
mlamouri (slow - plz ping)
2016/01/20 11:31:52
Done.
|
| + } |
| +} |
| + |
| +void AudibleMetrics::RemoveAudibleWebContents(const WebContents* web_contents) { |
| + base::RecordAction(base::UserMetricsAction("Media.Audible.RemoveTab")); |
| + |
| + audible_web_contents_.erase(web_contents); |
| + |
| + if (audible_web_contents_.size() <= 1 && |
| + !concurrent_web_contents_start_time_.is_null()) { |
| + base::TimeDelta concurrent_total_time = |
| + clock_->NowTicks() - concurrent_web_contents_start_time_; |
| + concurrent_web_contents_start_time_ = base::TimeTicks(); |
| + |
| + UMA_HISTOGRAM_LONG_TIMES("Media.Audible.ConcurrentTabsTime", |
| + concurrent_total_time); |
| + } |
| +} |
| + |
| +} // namespace content |