Add a getter for sleeping for offload
This allows wakelock releases to be state based instead of transition based. #exo-offload PiperOrigin-RevId: 337286501
This commit is contained in:
parent
d97dd8d5eb
commit
e589d7238a
@ -631,7 +631,7 @@ public interface ExoPlayer extends Player {
|
||||
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
|
||||
@ -660,9 +660,19 @@ public interface ExoPlayer extends Player {
|
||||
* <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();
|
||||
}
|
||||
|
@ -208,6 +208,11 @@ import java.util.concurrent.TimeoutException;
|
||||
internalPlayer.experimentalSetOffloadSchedulingEnabled(offloadSchedulingEnabled);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean experimentalIsSleepingForOffload() {
|
||||
return playbackInfo.sleepingForOffload;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public AudioComponent getAudioComponent() {
|
||||
|
@ -732,9 +732,16 @@ public class SimpleExoPlayer extends BasePlayer
|
||||
|
||||
@Override
|
||||
public void experimentalSetOffloadSchedulingEnabled(boolean offloadSchedulingEnabled) {
|
||||
verifyApplicationThread();
|
||||
player.experimentalSetOffloadSchedulingEnabled(offloadSchedulingEnabled);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean experimentalIsSleepingForOffload() {
|
||||
verifyApplicationThread();
|
||||
return player.experimentalIsSleepingForOffload();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public AudioComponent getAudioComponent() {
|
||||
@ -2154,7 +2161,9 @@ public class SimpleExoPlayer extends BasePlayer
|
||||
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:
|
||||
@ -2495,12 +2504,7 @@ public class SimpleExoPlayer extends BasePlayer
|
||||
|
||||
@Override
|
||||
public void onExperimentalSleepingForOffloadChanged(boolean sleepingForOffload) {
|
||||
if (sleepingForOffload) {
|
||||
// The wifi lock is not released to avoid interrupting downloads.
|
||||
wakeLockManager.setStayAwake(false);
|
||||
} else {
|
||||
updateWakeAndWifiLock();
|
||||
}
|
||||
updateWakeAndWifiLock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8327,6 +8327,7 @@ public final class ExoPlayerTest {
|
||||
sleepRenderer.sleepOnNextRender();
|
||||
|
||||
runUntilSleepingForOffload(player, /* expectedSleepForOffload= */ true);
|
||||
assertThat(player.experimentalIsSleepingForOffload()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -8345,6 +8346,7 @@ public final class ExoPlayerTest {
|
||||
player.experimentalSetOffloadSchedulingEnabled(false); // Force the player to exit offload sleep
|
||||
|
||||
runUntilSleepingForOffload(player, /* expectedSleepForOffload= */ false);
|
||||
assertThat(player.experimentalIsSleepingForOffload()).isFalse();
|
||||
runUntilPlaybackState(player, Player.STATE_ENDED);
|
||||
}
|
||||
|
||||
@ -8362,6 +8364,7 @@ public final class ExoPlayerTest {
|
||||
sleepRenderer.wakeup();
|
||||
|
||||
runUntilSleepingForOffload(player, /* expectedSleepForOffload= */ false);
|
||||
assertThat(player.experimentalIsSleepingForOffload()).isFalse();
|
||||
runUntilPlaybackState(player, Player.STATE_ENDED);
|
||||
}
|
||||
|
||||
|
@ -460,4 +460,9 @@ public abstract class StubExoPlayer extends BasePlayer implements ExoPlayer {
|
||||
public void experimentalSetOffloadSchedulingEnabled(boolean offloadSchedulingEnabled) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean experimentalIsSleepingForOffload() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user