Commit e9406f77 authored by Dale Curtis's avatar Dale Curtis Committed by Chromium LUCI CQ

Add a histogram for the peak number of WebMediaPlayer instances.

This uses a base::SingleSamplMetric to log the peak number of
instances per RenderFrame. We'll use this value to establish a
limit on the maximum allowed.

R=sandersd

Bug: 1144736
Change-Id: Ic0dac59d8682da0ea3185dcf97e7273bd9e037c6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2587493
Commit-Queue: Dale Curtis <dalecurtis@chromium.org>
Reviewed-by: default avatarIlya Sherman <isherman@chromium.org>
Reviewed-by: default avatarDan Sanders <sandersd@chromium.org>
Reviewed-by: default avatarWeilun Shi <sweilun@chromium.org>
Auto-Submit: Dale Curtis <dalecurtis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#836917}
parent 1c169bad
...@@ -48,6 +48,11 @@ RendererWebMediaPlayerDelegate::RendererWebMediaPlayerDelegate( ...@@ -48,6 +48,11 @@ RendererWebMediaPlayerDelegate::RendererWebMediaPlayerDelegate(
is_low_end_ = base::SysInfo::IsLowEndDevice(); is_low_end_ = base::SysInfo::IsLowEndDevice();
idle_cleanup_timer_.SetTaskRunner( idle_cleanup_timer_.SetTaskRunner(
render_frame->GetTaskRunner(blink::TaskType::kInternalMedia)); render_frame->GetTaskRunner(blink::TaskType::kInternalMedia));
// This corresponds to UMA_HISTOGRAM_COUNTS_1000.
peak_player_count_uma_ =
base::SingleSampleMetricsFactory::Get()->CreateCustomCountsMetric(
"Media.PeakWebMediaPlayerCount", 0, 1000, 50);
} }
RendererWebMediaPlayerDelegate::~RendererWebMediaPlayerDelegate() {} RendererWebMediaPlayerDelegate::~RendererWebMediaPlayerDelegate() {}
...@@ -64,7 +69,12 @@ bool RendererWebMediaPlayerDelegate::IsFrameClosed() { ...@@ -64,7 +69,12 @@ bool RendererWebMediaPlayerDelegate::IsFrameClosed() {
} }
int RendererWebMediaPlayerDelegate::AddObserver(Observer* observer) { int RendererWebMediaPlayerDelegate::AddObserver(Observer* observer) {
return id_map_.Add(observer); const auto result = id_map_.Add(observer);
if (id_map_.size() > peak_player_count_) {
peak_player_count_ = id_map_.size();
peak_player_count_uma_->SetSample(peak_player_count_);
}
return result;
} }
void RendererWebMediaPlayerDelegate::RemoveObserver(int player_id) { void RendererWebMediaPlayerDelegate::RemoveObserver(int player_id) {
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/metrics/single_sample_metrics.h"
#include "base/single_thread_task_runner.h" #include "base/single_thread_task_runner.h"
#include "base/time/default_tick_clock.h" #include "base/time/default_tick_clock.h"
#include "base/timer/timer.h" #include "base/timer/timer.h"
...@@ -165,6 +166,10 @@ class CONTENT_EXPORT RendererWebMediaPlayerDelegate ...@@ -165,6 +166,10 @@ class CONTENT_EXPORT RendererWebMediaPlayerDelegate
// when the idle cleanup timer should be fired more aggressively. // when the idle cleanup timer should be fired more aggressively.
bool is_low_end_; bool is_low_end_;
// Records the peak player count for this render frame.
size_t peak_player_count_ = 0u;
std::unique_ptr<base::SingleSampleMetric> peak_player_count_uma_;
DISALLOW_COPY_AND_ASSIGN(RendererWebMediaPlayerDelegate); DISALLOW_COPY_AND_ASSIGN(RendererWebMediaPlayerDelegate);
}; };
......
...@@ -312,6 +312,20 @@ TEST_F(RendererWebMediaPlayerDelegateTest, IdleDelegatesAreSuspended) { ...@@ -312,6 +312,20 @@ TEST_F(RendererWebMediaPlayerDelegateTest, IdleDelegatesAreSuspended) {
} }
} }
TEST_F(RendererWebMediaPlayerDelegateTest, PeakPlayerHistogram) {
NiceMock<MockWebMediaPlayerDelegateObserver> observer;
NiceMock<MockWebMediaPlayerDelegateObserver> observer2;
delegate_manager_->AddObserver(&observer);
delegate_manager_->AddObserver(&observer2);
base::HistogramTester histogram_tester;
constexpr char kHistogramName[] = "Media.PeakWebMediaPlayerCount";
histogram_tester.ExpectTotalCount(kHistogramName, 0);
delegate_manager_.reset();
histogram_tester.ExpectUniqueSample(kHistogramName, 2, 1);
}
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
TEST_F(RendererWebMediaPlayerDelegateTest, Histograms) { TEST_F(RendererWebMediaPlayerDelegateTest, Histograms) {
......
...@@ -2781,6 +2781,16 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. ...@@ -2781,6 +2781,16 @@ reviews. Googlers can read more about this at go/gwsq-gerrit.
</summary> </summary>
</histogram> </histogram>
<histogram name="Media.PeakWebMediaPlayerCount" units="players"
expires_after="M95">
<owner>dalecurtis@google.com</owner>
<owner>media-dev@chromium.org</owner>
<summary>
Records the peak number of WebMediaPlayer objects per RenderFrame upon
RenderFrame destruction (both cleanly and via render process termination).
</summary>
</histogram>
<histogram name="Media.Pepper.PlayedSound" enum="Boolean" <histogram name="Media.Pepper.PlayedSound" enum="Boolean"
expires_after="2021-03-01"> expires_after="2021-03-01">
<owner>mlamouri@google.com</owner> <owner>mlamouri@google.com</owner>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment