Merge "Add fg playback restriction checks and logging" into main
diff --git a/services/audioflinger/IAfTrack.h b/services/audioflinger/IAfTrack.h
index c9c766f..04ae49e 100644
--- a/services/audioflinger/IAfTrack.h
+++ b/services/audioflinger/IAfTrack.h
@@ -395,6 +395,11 @@
virtual bool isDisabled() const = 0;
virtual int& fastIndex() = 0;
+
+ // Restricted due to OP_PLAY_AUDIO
+ virtual bool isPlaybackRestrictedOp() const = 0;
+ // Restricted due to OP_AUDIO_CONTROL_SOFT
+ virtual bool isPlaybackRestrictedControl() const = 0;
virtual bool isPlaybackRestricted() const = 0;
// Used by thread only
diff --git a/services/audioflinger/PlaybackTracks.h b/services/audioflinger/PlaybackTracks.h
index c335c70..6f39ee9 100644
--- a/services/audioflinger/PlaybackTracks.h
+++ b/services/audioflinger/PlaybackTracks.h
@@ -291,9 +291,20 @@
bool isDisabled() const final;
int& fastIndex() final { return mFastIndex; }
- bool isPlaybackRestricted() const final {
+
+ bool isPlaybackRestrictedOp() const final {
// The monitor is only created for tracks that can be silenced.
- return mOpPlayAudioMonitor ? !mOpPlayAudioMonitor->hasOpPlayAudio() : false; }
+ return mOpPlayAudioMonitor ? !mOpPlayAudioMonitor->hasOpPlayAudio() : false;
+ }
+
+ bool isPlaybackRestrictedControl() const final {
+ return false;
+ // return mOpAudioControlSoftMonitor ? !mOpAudioControlSoftMonitor->hasOp() : false;
+ }
+
+ bool isPlaybackRestricted() const final {
+ return isPlaybackRestrictedOp() || isPlaybackRestrictedControl();
+ }
const sp<AudioTrackServerProxy>& audioTrackServerProxy() const final {
return mAudioTrackServerProxy;
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 2d2ab54..1843030 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -5891,19 +5891,21 @@
/*muteState=*/{masterVolume == 0.f,
mStreamTypes[track->streamType()].volume == 0.f,
mStreamTypes[track->streamType()].mute,
- track->isPlaybackRestricted(),
+ track->isPlaybackRestrictedOp(),
vlf == 0.f && vrf == 0.f,
vh == 0.f,
- /*muteFromPortVolume=*/false});
+ /*muteFromPortVolume=*/false,
+ track->isPlaybackRestrictedControl()});
} else {
track->processMuteEvent_l(mAfThreadCallback->getOrCreateAudioManager(),
/*muteState=*/{masterVolume == 0.f,
track->getPortVolume() == 0.f,
/* muteFromStreamMuted= */ false,
- track->isPlaybackRestricted(),
+ track->isPlaybackRestrictedOp(),
vlf == 0.f && vrf == 0.f,
vh == 0.f,
- track->getPortMute()});
+ track->getPortMute(),
+ track->isPlaybackRestrictedControl()});
}
vlf *= volume;
vrf *= volume;
@@ -6093,19 +6095,21 @@
/*muteState=*/{masterVolume == 0.f,
mStreamTypes[track->streamType()].volume == 0.f,
mStreamTypes[track->streamType()].mute,
- track->isPlaybackRestricted(),
+ track->isPlaybackRestrictedOp(),
vlf == 0.f && vrf == 0.f,
vh == 0.f,
- /*muteFromPortVolume=*/false});
+ /*muteFromPortVolume=*/false,
+ track->isPlaybackRestrictedControl()});
} else {
track->processMuteEvent_l(mAfThreadCallback->getOrCreateAudioManager(),
/*muteState=*/{masterVolume == 0.f,
track->getPortVolume() == 0.f,
/* muteFromStreamMuted= */ false,
- track->isPlaybackRestricted(),
+ track->isPlaybackRestrictedOp(),
vlf == 0.f && vrf == 0.f,
vh == 0.f,
- track->getPortMute()});
+ track->getPortMute(),
+ track->isPlaybackRestrictedControl()});
}
// now apply the master volume and stream type volume and shaper volume
vlf *= v * vh;
@@ -6861,10 +6865,11 @@
/*muteState=*/{mMasterMute,
mStreamTypes[track->streamType()].volume == 0.f,
mStreamTypes[track->streamType()].mute,
- track->isPlaybackRestricted(),
+ track->isPlaybackRestrictedOp(),
clientVolumeMute,
shaperVolume == 0.f,
- /*muteFromPortVolume=*/false});
+ /*muteFromPortVolume=*/false,
+ track->isPlaybackRestrictedControl()});
} else {
if (mMasterMute || track->isPlaybackRestricted()) {
left = right = 0;
@@ -6890,10 +6895,11 @@
/*muteState=*/{mMasterMute,
track->getPortVolume() == 0.f,
/* muteFromStreamMuted= */ false,
- track->isPlaybackRestricted(),
+ track->isPlaybackRestrictedOp(),
clientVolumeMute,
shaperVolume == 0.f,
- track->getPortMute()});
+ track->getPortMute(),
+ track->isPlaybackRestrictedControl()});
}
if (lastTrack) {