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 |