From e9630038872065874c66c8f120555cf09d1ee060 Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Sat, 21 Jan 2017 15:53:11 -0800 Subject: [PATCH] PlayerBase: unregistration in player release The player state of PlayerBase was not kept in sync with its corresponding AudioPlaybackConfiguration. This caused the configuration to never be removed and gc'd because the state of PlayerBase when released was always the unitialized state of 0 == released state. Test: use a MediaPlayer then call release, verify the player is not showing in the AudioService dumpsys Bug: 30258418 Change-Id: I9a6704147949e1e45752e646648c8c882376752f --- media/java/android/media/PlayerBase.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/media/java/android/media/PlayerBase.java b/media/java/android/media/PlayerBase.java index 981939583e3be..bd0a1b42ce7d2 100644 --- a/media/java/android/media/PlayerBase.java +++ b/media/java/android/media/PlayerBase.java @@ -78,6 +78,7 @@ public abstract class PlayerBase { } mAttributes = attr; mImplType = implType; + mState = AudioPlaybackConfiguration.PLAYER_STATE_IDLE; }; /** @@ -138,7 +139,8 @@ public abstract class PlayerBase { void baseStart() { if (DEBUG) { Log.v(TAG, "baseStart() piid=" + mPlayerIId); } try { - getService().playerEvent(mPlayerIId, AudioPlaybackConfiguration.PLAYER_STATE_STARTED); + mState = AudioPlaybackConfiguration.PLAYER_STATE_STARTED; + getService().playerEvent(mPlayerIId, mState); } catch (RemoteException e) { Log.e(TAG, "Error talking to audio service, STARTED state will not be tracked", e); } @@ -152,7 +154,8 @@ public abstract class PlayerBase { void basePause() { if (DEBUG) { Log.v(TAG, "basePause() piid=" + mPlayerIId); } try { - getService().playerEvent(mPlayerIId, AudioPlaybackConfiguration.PLAYER_STATE_PAUSED); + mState = AudioPlaybackConfiguration.PLAYER_STATE_PAUSED; + getService().playerEvent(mPlayerIId, mState); } catch (RemoteException e) { Log.e(TAG, "Error talking to audio service, PAUSED state will not be tracked", e); } @@ -161,7 +164,8 @@ public abstract class PlayerBase { void baseStop() { if (DEBUG) { Log.v(TAG, "baseStop() piid=" + mPlayerIId); } try { - getService().playerEvent(mPlayerIId, AudioPlaybackConfiguration.PLAYER_STATE_STOPPED); + mState = AudioPlaybackConfiguration.PLAYER_STATE_STOPPED; + getService().playerEvent(mPlayerIId, mState); } catch (RemoteException e) { Log.e(TAG, "Error talking to audio service, STOPPED state will not be tracked", e); } @@ -193,7 +197,7 @@ public abstract class PlayerBase { * Releases AppOps related resources. */ void baseRelease() { - if (DEBUG) { Log.v(TAG, "baseRelease() piid=" + mPlayerIId); } + if (DEBUG) { Log.v(TAG, "baseRelease() piid=" + mPlayerIId + " state=" + mState); } try { if (mState != AudioPlaybackConfiguration.PLAYER_STATE_RELEASED) { getService().releasePlayer(mPlayerIId);