Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(377)

Unified Diff: media/blink/webmediaplayer_impl.cc

Issue 2810333007: [Video] Record the results of background video optimization checks.
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/blink/webmediaplayer_impl.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/blink/webmediaplayer_impl.cc
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index 96ba8b569f4cc125fcd33c88f230e590f4ec849a..0bb3a568e59bef67d1eca4aa101e2c64bcbc2017 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -2195,12 +2195,23 @@ bool WebMediaPlayerImpl::ShouldPauseVideoWhenHidden() const {
return false;
#if defined(OS_ANDROID)
- if (IsRemote())
+ if (IsRemote()) {
+ UMA_HISTOGRAM_ENUMERATION("Media.Video.ShouldPauseVideoWhenHiddenResult",
+ BackgroundOptimizationResult::FAIL_FOR_REMOTE,
+ BackgroundOptimizationResult::RESULT_MAX + 1);
return false;
+ }
#endif
- return !HasAudio() || (IsResumeBackgroundVideosEnabled() &&
- video_locked_when_paused_when_hidden_);
+ if (!HasAudio()) {
+ ReportBackgroundOptimizationResult(
+ BackgroundOptimizationResult::SUCCESS_FOR_VIDEO_ONLY);
+ return true;
+ }
+
+ // Non an optimization so don't record the result.
+ return IsResumeBackgroundVideosEnabled() &&
+ video_locked_when_paused_when_hidden_;
}
// Otherwise only pause if the optimization is on and it's a video-only
@@ -2222,20 +2233,33 @@ bool WebMediaPlayerImpl::ShouldDisableVideoWhenHidden() const {
bool WebMediaPlayerImpl::IsBackgroundOptimizationCandidate() const {
DCHECK(main_task_runner_->BelongsToCurrentThread());
+ // Never optimize audio-only players.
+ if (!HasVideo())
+ return false;
+
#if defined(OS_ANDROID) // WMPI_CAST
// Don't optimize players being Cast.
- if (IsRemote())
+ if (IsRemote()) {
+ ReportBackgroundOptimizationResult(
+ BackgroundOptimizationResult::FAIL_FOR_REMOTE);
return false;
+ }
// Video-only players are always optimized (paused) on Android.
// Don't check the keyframe distance and duration.
- if (!HasAudio() && HasVideo())
+ if (!HasAudio()) {
+ ReportBackgroundOptimizationResult(
+ BackgroundOptimizationResult::SUCCESS_FOR_VIDEO_ONLY);
return true;
+ }
#endif // defined(OS_ANDROID)
// Don't optimize audio-only or streaming players.
- if (!HasVideo() || IsStreaming())
+ if (IsStreaming()) {
+ ReportBackgroundOptimizationResult(
+ BackgroundOptimizationResult::FAIL_FOR_STREAMING);
return false;
+ }
// Videos shorter than the maximum allowed keyframe distance can be optimized.
base::TimeDelta duration = GetPipelineMediaDuration();
@@ -2243,12 +2267,33 @@ bool WebMediaPlayerImpl::IsBackgroundOptimizationCandidate() const {
(load_type_ == kLoadTypeMediaSource)
? max_keyframe_distance_to_disable_background_video_mse_
: max_keyframe_distance_to_disable_background_video_;
- if (duration < max_keyframe_distance)
+ if (duration < max_keyframe_distance) {
+ ReportBackgroundOptimizationResult(
+ BackgroundOptimizationResult::SUCCESS_FOR_DURATION);
return true;
+ }
// Otherwise, only optimize videos with shorter average keyframe distance.
PipelineStatistics stats = GetPipelineStatistics();
- return stats.video_keyframe_distance_average < max_keyframe_distance;
+ bool is_candidate =
+ stats.video_keyframe_distance_average < max_keyframe_distance;
+ ReportBackgroundOptimizationResult(
+ is_candidate ? BackgroundOptimizationResult::SUCCESS_FOR_KEYFRAME_DISTANCE
+ : BackgroundOptimizationResult::FAIL_FOR_KEYFRAME_DISTANCE);
+ return is_candidate;
+}
+
+void WebMediaPlayerImpl::ReportBackgroundOptimizationResult(
+ BackgroundOptimizationResult result) const {
+ if (HasAudio()) {
+ UMA_HISTOGRAM_ENUMERATION("Media.Video.ShouldDisableVideoWhenHiddenResult",
+ result,
+ BackgroundOptimizationResult::RESULT_MAX + 1);
+ } else {
+ UMA_HISTOGRAM_ENUMERATION("Media.Video.ShouldPauseVideoWhenHiddenResult",
+ result,
+ BackgroundOptimizationResult::RESULT_MAX + 1);
+ }
}
void WebMediaPlayerImpl::UpdateBackgroundVideoOptimizationState() {
« no previous file with comments | « media/blink/webmediaplayer_impl.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698