Skip to content

Commit

Permalink
Add a getter for sleeping for offload
Browse files Browse the repository at this point in the history
This allows wakelock releases to be state based
instead of transition based.

#exo-offload

PiperOrigin-RevId: 337286501
  • Loading branch information
krocard authored and ojw28 committed Oct 17, 2020
1 parent d97dd8d commit e589d72
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -631,7 +631,7 @@ public ExoPlayer build() {
boolean getPauseAtEndOfMediaItems();

/**
* Sets whether audio offload scheduling is enabled. If enabled, ExoPlayer's main loop will as
* Sets whether audio offload scheduling is enabled. If enabled, ExoPlayer's main loop will run as
* rarely as possible when playing an audio stream using audio offload.
*
* <p>Only use this scheduling mode if the player is not displaying anything to the user. For
Expand Down Expand Up @@ -660,9 +660,19 @@ public ExoPlayer build() {
* <li>The {@link AudioSink} is playing with an offload {@link AudioTrack}.
* </ul>
*
* <p>The state where ExoPlayer main loop has been paused to save power during offload playback
* can be queried with {@link #experimentalIsSleepingForOffload()}.
*
* <p>This method is experimental, and will be renamed or removed in a future release.
*
* @param offloadSchedulingEnabled Whether to enable offload scheduling.
*/
void experimentalSetOffloadSchedulingEnabled(boolean offloadSchedulingEnabled);

/**
* Returns whether the player has paused its main loop to save power in offload scheduling mode.
*
* @see #experimentalSetOffloadSchedulingEnabled(boolean)
*/
boolean experimentalIsSleepingForOffload();
}
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,11 @@ public void experimentalSetOffloadSchedulingEnabled(boolean offloadSchedulingEna
internalPlayer.experimentalSetOffloadSchedulingEnabled(offloadSchedulingEnabled);
}

@Override
public boolean experimentalIsSleepingForOffload() {
return playbackInfo.sleepingForOffload;
}

@Override
@Nullable
public AudioComponent getAudioComponent() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -732,9 +732,16 @@ protected SimpleExoPlayer(Builder builder) {

@Override
public void experimentalSetOffloadSchedulingEnabled(boolean offloadSchedulingEnabled) {
verifyApplicationThread();
player.experimentalSetOffloadSchedulingEnabled(offloadSchedulingEnabled);
}

@Override
public boolean experimentalIsSleepingForOffload() {
verifyApplicationThread();
return player.experimentalIsSleepingForOffload();
}

@Override
@Nullable
public AudioComponent getAudioComponent() {
Expand Down Expand Up @@ -2154,7 +2161,9 @@ private void updateWakeAndWifiLock() {
switch (playbackState) {
case Player.STATE_READY:
case Player.STATE_BUFFERING:
wakeLockManager.setStayAwake(getPlayWhenReady());
boolean isSleeping = experimentalIsSleepingForOffload();
wakeLockManager.setStayAwake(getPlayWhenReady() && !isSleeping);
// The wifi lock is not released while sleeping to avoid interrupting downloads.
wifiLockManager.setStayAwake(getPlayWhenReady());
break;
case Player.STATE_ENDED:
Expand Down Expand Up @@ -2495,12 +2504,7 @@ public void onPlayWhenReadyChanged(

@Override
public void onExperimentalSleepingForOffloadChanged(boolean sleepingForOffload) {
if (sleepingForOffload) {
// The wifi lock is not released to avoid interrupting downloads.
wakeLockManager.setStayAwake(false);
} else {
updateWakeAndWifiLock();
}
updateWakeAndWifiLock();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8327,6 +8327,7 @@ public void enableOffloadScheduling_isEnable_playerSleeps() throws Exception {
sleepRenderer.sleepOnNextRender();

runUntilSleepingForOffload(player, /* expectedSleepForOffload= */ true);
assertThat(player.experimentalIsSleepingForOffload()).isTrue();
}

@Test
Expand All @@ -8345,6 +8346,7 @@ public void enableOffloadScheduling_isEnable_playerSleeps() throws Exception {
player.experimentalSetOffloadSchedulingEnabled(false); // Force the player to exit offload sleep

runUntilSleepingForOffload(player, /* expectedSleepForOffload= */ false);
assertThat(player.experimentalIsSleepingForOffload()).isFalse();
runUntilPlaybackState(player, Player.STATE_ENDED);
}

Expand All @@ -8362,6 +8364,7 @@ public void wakeupListenerWhileSleepingForOffload_isWokenUp_renderingResumes() t
sleepRenderer.wakeup();

runUntilSleepingForOffload(player, /* expectedSleepForOffload= */ false);
assertThat(player.experimentalIsSleepingForOffload()).isFalse();
runUntilPlaybackState(player, Player.STATE_ENDED);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -460,4 +460,9 @@ public boolean getPauseAtEndOfMediaItems() {
public void experimentalSetOffloadSchedulingEnabled(boolean offloadSchedulingEnabled) {
throw new UnsupportedOperationException();
}

@Override
public boolean experimentalIsSleepingForOffload() {
throw new UnsupportedOperationException();
}
}

0 comments on commit e589d72

Please sign in to comment.