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

Unified Diff: media/remoting/renderer_controller.cc

Issue 2696663002: Media Remoting: Don't auto suspend the media pipeline. (Closed)
Patch Set: Disable other auto suspend for optimization. Created 3 years, 10 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
Index: media/remoting/renderer_controller.cc
diff --git a/media/remoting/renderer_controller.cc b/media/remoting/renderer_controller.cc
index 6c11d411d2995655091a7411cf8c2b369c3f9ea7..d61d13685be08e3986d8bcda84e4bc2d50370168 100644
--- a/media/remoting/renderer_controller.cc
+++ b/media/remoting/renderer_controller.cc
@@ -32,8 +32,9 @@ void RendererController::OnStarted(bool success) {
VLOG(1) << "Remoting started successively.";
if (remote_rendering_started_) {
metrics_recorder_.DidStartSession();
- DCHECK(!switch_renderer_cb_.is_null());
- switch_renderer_cb_.Run();
+ DCHECK(client_);
+ client_->SwitchRenderer();
+ client_->DisablePipelineAutoSuspend(true);
miu 2017/02/13 23:36:08 The disable should happen before the SwitchRendere
xjz 2017/02/14 01:46:10 Done.
} else {
session_->StopRemoting(this);
}
@@ -52,8 +53,8 @@ void RendererController::OnSessionStateChanged() {
void RendererController::UpdateFromSessionState(StartTrigger start_trigger,
StopTrigger stop_trigger) {
VLOG(1) << "UpdateFromSessionState: " << session_->state();
- if (!sink_available_changed_cb_.is_null())
- sink_available_changed_cb_.Run(IsRemoteSinkAvailable());
+ if (client_)
+ client_->ActivateViewportIntersectionMonitoring(IsRemoteSinkAvailable());
UpdateInterstitial(base::nullopt);
UpdateAndMaybeSwitch(start_trigger, stop_trigger);
@@ -151,26 +152,6 @@ void RendererController::OnSetPoster(const GURL& poster_url) {
}
}
-void RendererController::SetSwitchRendererCallback(const base::Closure& cb) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!cb.is_null());
-
- switch_renderer_cb_ = cb;
- // Note: Not calling UpdateAndMaybeSwitch() here since this method should be
- // called during the initialization phase of this RendererController;
- // and definitely before a whole lot of other things that are needed to
- // trigger a switch.
-}
-
-void RendererController::SetRemoteSinkAvailableChangedCallback(
- const base::Callback<void(bool)>& cb) {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- sink_available_changed_cb_ = cb;
- if (!sink_available_changed_cb_.is_null())
- sink_available_changed_cb_.Run(IsRemoteSinkAvailable());
-}
-
base::WeakPtr<RpcBroker> RendererController::GetRpcBroker() const {
DCHECK(thread_checker_.CalledOnValidThread());
@@ -286,7 +267,7 @@ void RendererController::OnPaused() {
bool RendererController::ShouldBeRemoting() {
DCHECK(thread_checker_.CalledOnValidThread());
- if (switch_renderer_cb_.is_null()) {
+ if (!client_) {
DCHECK(!remote_rendering_started_);
return false; // No way to switch to the remoting renderer.
}
@@ -365,16 +346,16 @@ void RendererController::UpdateAndMaybeSwitch(StartTrigger start_trigger,
// Switch between local renderer and remoting renderer.
remote_rendering_started_ = should_be_remoting;
+ DCHECK(client_);
if (remote_rendering_started_) {
- DCHECK(!switch_renderer_cb_.is_null());
if (session_->state() == SharedSession::SESSION_PERMANENTLY_STOPPED) {
- switch_renderer_cb_.Run();
+ client_->SwitchRenderer();
return;
}
DCHECK_NE(start_trigger, UNKNOWN_START_TRIGGER);
metrics_recorder_.WillStartSession(start_trigger);
- // |switch_renderer_cb_.Run()| will be called after remoting is started
- // successfully.
+ // |MediaObserverClient::SwitchRenderer()| will be called after remoting is
+ // started successfully.
session_->StartRemoting(this);
} else {
// For encrypted content, it's only valid to switch to remoting renderer,
@@ -387,7 +368,8 @@ void RendererController::UpdateAndMaybeSwitch(StartTrigger start_trigger,
// Update the interstitial one last time before switching back to the local
// Renderer.
UpdateInterstitial(base::nullopt);
- switch_renderer_cb_.Run();
+ client_->SwitchRenderer();
+ client_->DisablePipelineAutoSuspend(false);
session_->StopRemoting(this);
}
}
@@ -489,5 +471,13 @@ void RendererController::OnRendererFatalError(StopTrigger stop_trigger) {
UpdateAndMaybeSwitch(UNKNOWN_START_TRIGGER, stop_trigger);
}
+void RendererController::SetClient(MediaObserverClient* client) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
miu 2017/02/13 23:36:08 nit: Add: DCHECK(client) and DCHECK(!client_), sin
xjz 2017/02/14 01:46:10 Done.
+ client_ = client;
+ if (client_)
miu 2017/02/13 23:36:08 nit: And then, no need to null-check here because
xjz 2017/02/14 01:46:10 Done.
+ client_->ActivateViewportIntersectionMonitoring(IsRemoteSinkAvailable());
+}
+
} // namespace remoting
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698