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();
|
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.
|
* 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
|
* <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}.
|
* <li>The {@link AudioSink} is playing with an offload {@link AudioTrack}.
|
||||||
* </ul>
|
* </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.
|
* <p>This method is experimental, and will be renamed or removed in a future release.
|
||||||
*
|
*
|
||||||
* @param offloadSchedulingEnabled Whether to enable offload scheduling.
|
* @param offloadSchedulingEnabled Whether to enable offload scheduling.
|
||||||
*/
|
*/
|
||||||
void experimentalSetOffloadSchedulingEnabled(boolean offloadSchedulingEnabled);
|
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);
|
internalPlayer.experimentalSetOffloadSchedulingEnabled(offloadSchedulingEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean experimentalIsSleepingForOffload() {
|
||||||
|
return playbackInfo.sleepingForOffload;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public AudioComponent getAudioComponent() {
|
public AudioComponent getAudioComponent() {
|
||||||
|
@ -732,9 +732,16 @@ public class SimpleExoPlayer extends BasePlayer
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void experimentalSetOffloadSchedulingEnabled(boolean offloadSchedulingEnabled) {
|
public void experimentalSetOffloadSchedulingEnabled(boolean offloadSchedulingEnabled) {
|
||||||
|
verifyApplicationThread();
|
||||||
player.experimentalSetOffloadSchedulingEnabled(offloadSchedulingEnabled);
|
player.experimentalSetOffloadSchedulingEnabled(offloadSchedulingEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean experimentalIsSleepingForOffload() {
|
||||||
|
verifyApplicationThread();
|
||||||
|
return player.experimentalIsSleepingForOffload();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public AudioComponent getAudioComponent() {
|
public AudioComponent getAudioComponent() {
|
||||||
@ -2154,7 +2161,9 @@ public class SimpleExoPlayer extends BasePlayer
|
|||||||
switch (playbackState) {
|
switch (playbackState) {
|
||||||
case Player.STATE_READY:
|
case Player.STATE_READY:
|
||||||
case Player.STATE_BUFFERING:
|
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());
|
wifiLockManager.setStayAwake(getPlayWhenReady());
|
||||||
break;
|
break;
|
||||||
case Player.STATE_ENDED:
|
case Player.STATE_ENDED:
|
||||||
@ -2495,12 +2504,7 @@ public class SimpleExoPlayer extends BasePlayer
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onExperimentalSleepingForOffloadChanged(boolean sleepingForOffload) {
|
public void onExperimentalSleepingForOffloadChanged(boolean sleepingForOffload) {
|
||||||
if (sleepingForOffload) {
|
updateWakeAndWifiLock();
|
||||||
// The wifi lock is not released to avoid interrupting downloads.
|
|
||||||
wakeLockManager.setStayAwake(false);
|
|
||||||
} else {
|
|
||||||
updateWakeAndWifiLock();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8327,6 +8327,7 @@ public final class ExoPlayerTest {
|
|||||||
sleepRenderer.sleepOnNextRender();
|
sleepRenderer.sleepOnNextRender();
|
||||||
|
|
||||||
runUntilSleepingForOffload(player, /* expectedSleepForOffload= */ true);
|
runUntilSleepingForOffload(player, /* expectedSleepForOffload= */ true);
|
||||||
|
assertThat(player.experimentalIsSleepingForOffload()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -8345,6 +8346,7 @@ public final class ExoPlayerTest {
|
|||||||
player.experimentalSetOffloadSchedulingEnabled(false); // Force the player to exit offload sleep
|
player.experimentalSetOffloadSchedulingEnabled(false); // Force the player to exit offload sleep
|
||||||
|
|
||||||
runUntilSleepingForOffload(player, /* expectedSleepForOffload= */ false);
|
runUntilSleepingForOffload(player, /* expectedSleepForOffload= */ false);
|
||||||
|
assertThat(player.experimentalIsSleepingForOffload()).isFalse();
|
||||||
runUntilPlaybackState(player, Player.STATE_ENDED);
|
runUntilPlaybackState(player, Player.STATE_ENDED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8362,6 +8364,7 @@ public final class ExoPlayerTest {
|
|||||||
sleepRenderer.wakeup();
|
sleepRenderer.wakeup();
|
||||||
|
|
||||||
runUntilSleepingForOffload(player, /* expectedSleepForOffload= */ false);
|
runUntilSleepingForOffload(player, /* expectedSleepForOffload= */ false);
|
||||||
|
assertThat(player.experimentalIsSleepingForOffload()).isFalse();
|
||||||
runUntilPlaybackState(player, Player.STATE_ENDED);
|
runUntilPlaybackState(player, Player.STATE_ENDED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -460,4 +460,9 @@ public abstract class StubExoPlayer extends BasePlayer implements ExoPlayer {
|
|||||||
public void experimentalSetOffloadSchedulingEnabled(boolean offloadSchedulingEnabled) {
|
public void experimentalSetOffloadSchedulingEnabled(boolean offloadSchedulingEnabled) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean experimentalIsSleepingForOffload() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user