| 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..0908c780944c15a0650dbf71742f31746a49b82d
|
| --- /dev/null
|
| +++ b/content/browser/media/audible_metrics.cc
|
| @@ -0,0 +1,74 @@
|
| +// 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/time/default_clock.h"
|
| +
|
| +namespace content {
|
| +
|
| +AudibleMetrics::AudibleMetrics()
|
| + : max_concurrent_audible_web_contents_in_session_(0),
|
| + clock_(new base::DefaultClock()) {
|
| +}
|
| +
|
| +AudibleMetrics::~AudibleMetrics() {
|
| +}
|
| +
|
| +void AudibleMetrics::UpdateAudibleWebContentsState(
|
| + 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::Clock> testing_clock) {
|
| + clock_ = std::move(testing_clock);
|
| +}
|
| +
|
| +void AudibleMetrics::AddAudibleWebContents(WebContents* web_contents) {
|
| + UMA_HISTOGRAM_CUSTOM_COUNTS(
|
| + "Media.Audible.ConcurrentTabsWhenStarting", audible_web_contents_.size(),
|
| + 0, 10, 11);
|
| +
|
| + 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_->Now();
|
| + }
|
| +
|
| + 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);
|
| + }
|
| +}
|
| +
|
| +void AudibleMetrics::RemoveAudibleWebContents(WebContents* web_contents) {
|
| + 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_->Now() - concurrent_web_contents_start_time_;
|
| + concurrent_web_contents_start_time_ = base::Time();
|
| +
|
| + UMA_HISTOGRAM_LONG_TIMES("Media.Audible.ConcurrentTabsTime",
|
| + concurrent_total_time);
|
| + }
|
| +}
|
| +
|
| +} // namespace content
|
|
|