1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
content / browser / media / audible_metrics.cc [blame]
// Copyright 2016 The Chromium Authors
// 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 <utility>
#include "base/containers/contains.h"
#include "base/metrics/histogram_macros.h"
#include "base/time/default_tick_clock.h"
namespace content {
AudibleMetrics::AudibleMetrics()
: max_concurrent_audible_web_contents_in_session_(0),
clock_(base::DefaultTickClock::GetInstance()) {}
AudibleMetrics::~AudibleMetrics() = default;
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::WebContentsDestroyed(const WebContents* web_contents,
bool recently_audible) {
if (base::Contains(audible_web_contents_, web_contents))
RemoveAudibleWebContents(web_contents);
}
void AudibleMetrics::SetClockForTest(const base::TickClock* test_clock) {
clock_ = test_clock;
}
void AudibleMetrics::AddAudibleWebContents(const WebContents* web_contents) {
UMA_HISTOGRAM_CUSTOM_COUNTS(
"Media.Audible.ConcurrentTabsWhenStarting", audible_web_contents_.size(),
1, 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_->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.MaxConcurrentTabsInSession",
max_concurrent_audible_web_contents_in_session_,
1, 10, 11);
}
}
void AudibleMetrics::RemoveAudibleWebContents(const 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_->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