Commit 201ce4ba authored by liberato@chromium.org's avatar liberato@chromium.org Committed by Commit Bot

Plumb power experiment signal to the renderer.

This CL plumbs the power experiment state to the media players in the
renderer that they are / are not the only playing player.  This
lets the renderer decide whether to start measuring power usage.

Bug: 1017783
Change-Id: I17e9b453c63482b20bf2b9c4d802ff346f7bd44e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1992686Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarDale Curtis <dalecurtis@chromium.org>
Commit-Queue: Frank Liberato <liberato@chromium.org>
Cr-Commit-Position: refs/heads/master@{#729937}
parent 0e641094
...@@ -40,6 +40,8 @@ void MediaPowerExperimentManager::PlayerStopped( ...@@ -40,6 +40,8 @@ void MediaPowerExperimentManager::PlayerStopped(
current_experiment_player_ && *current_experiment_player_ == player_id) { current_experiment_player_ && *current_experiment_player_ == player_id) {
current_experiment_player_.reset(); current_experiment_player_.reset();
current_experiment_cb_ = ExperimentCB(); current_experiment_cb_ = ExperimentCB();
// Note that there will be no incoming player; there's exactly one and we're
// removing it.
} }
players_.erase(player_id); players_.erase(player_id);
CheckExperimentState(); CheckExperimentState();
......
...@@ -360,6 +360,8 @@ void MediaWebContentsObserver::AddMediaPlayerEntry( ...@@ -360,6 +360,8 @@ void MediaWebContentsObserver::AddMediaPlayerEntry(
ActiveMediaPlayerMap* player_map) { ActiveMediaPlayerMap* player_map) {
(*player_map)[id.render_frame_host].insert(id.delegate_id); (*player_map)[id.render_frame_host].insert(id.delegate_id);
if (power_experiment_manager_) { if (power_experiment_manager_) {
// Bind the callback to a WeakPtr for the frame, so that we won't try to
// notify the frame after it's been destroyed.
power_experiment_manager_->PlayerStarted( power_experiment_manager_->PlayerStarted(
id, id,
base::BindRepeating(&MediaWebContentsObserver::OnExperimentStateChanged, base::BindRepeating(&MediaWebContentsObserver::OnExperimentStateChanged,
...@@ -426,7 +428,9 @@ void MediaWebContentsObserver::SuspendAllMediaPlayers() { ...@@ -426,7 +428,9 @@ void MediaWebContentsObserver::SuspendAllMediaPlayers() {
void MediaWebContentsObserver::OnExperimentStateChanged(MediaPlayerId id, void MediaWebContentsObserver::OnExperimentStateChanged(MediaPlayerId id,
bool is_starting) { bool is_starting) {
// TODO(liberato): Notify the player. id.render_frame_host->Send(
new MediaPlayerDelegateMsg_NotifyPowerExperimentState(
id.render_frame_host->GetRoutingID(), id.delegate_id, is_starting));
} }
void MediaWebContentsObserver::RemoveAllPlayers( void MediaWebContentsObserver::RemoveAllPlayers(
......
...@@ -68,6 +68,10 @@ IPC_MESSAGE_ROUTED2(MediaPlayerDelegateMsg_BecamePersistentVideo, ...@@ -68,6 +68,10 @@ IPC_MESSAGE_ROUTED2(MediaPlayerDelegateMsg_BecamePersistentVideo,
int /* delegate_id, distinguishes instances */, int /* delegate_id, distinguishes instances */,
double /* is_persistent */) double /* is_persistent */)
IPC_MESSAGE_ROUTED2(MediaPlayerDelegateMsg_NotifyPowerExperimentState,
int /* delegate_id, distinguishes instances */,
bool /* is experiment starting (true) or stopping? */)
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Messages from the renderer notifying the browser of playback state changes. // Messages from the renderer notifying the browser of playback state changes.
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
......
...@@ -237,6 +237,8 @@ bool RendererWebMediaPlayerDelegate::OnMessageReceived( ...@@ -237,6 +237,8 @@ bool RendererWebMediaPlayerDelegate::OnMessageReceived(
OnMediaDelegateVolumeMultiplierUpdate) OnMediaDelegateVolumeMultiplierUpdate)
IPC_MESSAGE_HANDLER(MediaPlayerDelegateMsg_BecamePersistentVideo, IPC_MESSAGE_HANDLER(MediaPlayerDelegateMsg_BecamePersistentVideo,
OnMediaDelegateBecamePersistentVideo) OnMediaDelegateBecamePersistentVideo)
IPC_MESSAGE_HANDLER(MediaPlayerDelegateMsg_NotifyPowerExperimentState,
OnMediaDelegatePowerExperimentState)
IPC_MESSAGE_UNHANDLED(return false) IPC_MESSAGE_UNHANDLED(return false)
IPC_END_MESSAGE_MAP() IPC_END_MESSAGE_MAP()
return true; return true;
...@@ -347,6 +349,14 @@ void RendererWebMediaPlayerDelegate::OnMediaDelegateBecamePersistentVideo( ...@@ -347,6 +349,14 @@ void RendererWebMediaPlayerDelegate::OnMediaDelegateBecamePersistentVideo(
observer->OnBecamePersistentVideo(value); observer->OnBecamePersistentVideo(value);
} }
void RendererWebMediaPlayerDelegate::OnMediaDelegatePowerExperimentState(
int player_id,
bool state) {
Observer* observer = id_map_.Lookup(player_id);
if (observer)
observer->OnPowerExperimentState(state);
}
void RendererWebMediaPlayerDelegate::ScheduleUpdateTask() { void RendererWebMediaPlayerDelegate::ScheduleUpdateTask() {
if (!pending_update_task_) { if (!pending_update_task_) {
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
......
...@@ -98,6 +98,7 @@ class CONTENT_EXPORT RendererWebMediaPlayerDelegate ...@@ -98,6 +98,7 @@ class CONTENT_EXPORT RendererWebMediaPlayerDelegate
void OnMediaDelegateSuspendAllMediaPlayers(); void OnMediaDelegateSuspendAllMediaPlayers();
void OnMediaDelegateVolumeMultiplierUpdate(int player_id, double multiplier); void OnMediaDelegateVolumeMultiplierUpdate(int player_id, double multiplier);
void OnMediaDelegateBecamePersistentVideo(int player_id, bool value); void OnMediaDelegateBecamePersistentVideo(int player_id, bool value);
void OnMediaDelegatePowerExperimentState(int player_id, bool state);
// Schedules UpdateTask() to run soon. // Schedules UpdateTask() to run soon.
void ScheduleUpdateTask(); void ScheduleUpdateTask();
......
...@@ -2428,6 +2428,11 @@ void WebMediaPlayerImpl::OnBecamePersistentVideo(bool value) { ...@@ -2428,6 +2428,11 @@ void WebMediaPlayerImpl::OnBecamePersistentVideo(bool value) {
MaybeSendOverlayInfoToDecoder(); MaybeSendOverlayInfoToDecoder();
} }
void WebMediaPlayerImpl::OnPowerExperimentState(bool state) {
if (power_status_helper_)
power_status_helper_->UpdatePowerExperimentState(state);
}
void WebMediaPlayerImpl::ScheduleRestart() { void WebMediaPlayerImpl::ScheduleRestart() {
// TODO(watk): All restart logic should be moved into PipelineController. // TODO(watk): All restart logic should be moved into PipelineController.
if (pipeline_controller_->IsPipelineRunning() && if (pipeline_controller_->IsPipelineRunning() &&
......
...@@ -241,6 +241,7 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl ...@@ -241,6 +241,7 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl
void OnSeekBackward(double seconds) override; void OnSeekBackward(double seconds) override;
void OnVolumeMultiplierUpdate(double multiplier) override; void OnVolumeMultiplierUpdate(double multiplier) override;
void OnBecamePersistentVideo(bool value) override; void OnBecamePersistentVideo(bool value) override;
void OnPowerExperimentState(bool state) override;
void RequestRemotePlaybackDisabled(bool disabled) override; void RequestRemotePlaybackDisabled(bool disabled) override;
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
......
...@@ -74,6 +74,10 @@ class BLINK_PLATFORM_EXPORT WebMediaPlayerDelegate { ...@@ -74,6 +74,10 @@ class BLINK_PLATFORM_EXPORT WebMediaPlayerDelegate {
// Called to set as the persistent video. A persistent video should hide its // Called to set as the persistent video. A persistent video should hide its
// controls and go fullscreen. // controls and go fullscreen.
virtual void OnBecamePersistentVideo(bool value) = 0; virtual void OnBecamePersistentVideo(bool value) = 0;
// Notify the player that it is now eligible to start recording power
// measurements if |state| is true, else it is no longer eligible.
virtual void OnPowerExperimentState(bool state) {}
}; };
// Returns true if the host frame is hidden or closed. // Returns true if the host frame is hidden or closed.
......
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