diff options
| author | Eric Laurent <elaurent@google.com> | 2015-06-26 09:39:24 -0700 | 
|---|---|---|
| committer | Eric Laurent <elaurent@google.com> | 2015-06-26 12:38:13 -0700 | 
| commit | e8726fea8a53bf3474aa3c6deaf2f6c1f565e694 (patch) | |
| tree | d72b6ffcc7e33c178e3cac7c108b102041451cb6 /media | |
| parent | ed8505836c0b2fba0ab4be0c1eff31d4f241bc1d (diff) | |
| download | frameworks_av-e8726fea8a53bf3474aa3c6deaf2f6c1f565e694.zip frameworks_av-e8726fea8a53bf3474aa3c6deaf2f6c1f565e694.tar.gz frameworks_av-e8726fea8a53bf3474aa3c6deaf2f6c1f565e694.tar.bz2  | |
reduce number of binder calls from mediaserver
Reduce the number of audio port, audio patch and
IO config changed binder calls from mediaserver to
client processes:
- Do not call IO config changed callback if selected
device is the same as previously selected one on a given
audio flinger playback or capture thread.
- Do not call the audio port or audo patch list update
callback on a client if this client as no listener registered.
Bug: 22045560.
Change-Id: If780e105404de79b7cb5c80c27b793ceb6b1c423
Diffstat (limited to 'media')
| -rw-r--r-- | media/libmedia/AudioSystem.cpp | 24 | ||||
| -rw-r--r-- | media/libmedia/IAudioPolicyService.cpp | 17 | 
2 files changed, 32 insertions, 9 deletions
diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp index 6c2c226..f13bcf3 100644 --- a/media/libmedia/AudioSystem.cpp +++ b/media/libmedia/AudioSystem.cpp @@ -1043,7 +1043,11 @@ status_t AudioSystem::addAudioPortCallback(const sp<AudioPortCallback>& callback      if (gAudioPolicyServiceClient == 0) {          return NO_INIT;      } -    return gAudioPolicyServiceClient->addAudioPortCallback(callback); +    int ret = gAudioPolicyServiceClient->addAudioPortCallback(callback); +    if (ret == 1) { +        aps->setAudioPortCallbacksEnabled(true); +    } +    return (ret < 0) ? INVALID_OPERATION : NO_ERROR;  }  /*static*/ @@ -1056,7 +1060,11 @@ status_t AudioSystem::removeAudioPortCallback(const sp<AudioPortCallback>& callb      if (gAudioPolicyServiceClient == 0) {          return NO_INIT;      } -    return gAudioPolicyServiceClient->removeAudioPortCallback(callback); +    int ret = gAudioPolicyServiceClient->removeAudioPortCallback(callback); +    if (ret == 0) { +        aps->setAudioPortCallbacksEnabled(false); +    } +    return (ret < 0) ? INVALID_OPERATION : NO_ERROR;  }  status_t AudioSystem::addAudioDeviceCallback( @@ -1138,20 +1146,20 @@ status_t AudioSystem::stopAudioSource(audio_io_handle_t handle)  // --------------------------------------------------------------------------- -status_t AudioSystem::AudioPolicyServiceClient::addAudioPortCallback( +int AudioSystem::AudioPolicyServiceClient::addAudioPortCallback(          const sp<AudioPortCallback>& callback)  {      Mutex::Autolock _l(mLock);      for (size_t i = 0; i < mAudioPortCallbacks.size(); i++) {          if (mAudioPortCallbacks[i] == callback) { -            return INVALID_OPERATION; +            return -1;          }      }      mAudioPortCallbacks.add(callback); -    return NO_ERROR; +    return mAudioPortCallbacks.size();  } -status_t AudioSystem::AudioPolicyServiceClient::removeAudioPortCallback( +int AudioSystem::AudioPolicyServiceClient::removeAudioPortCallback(          const sp<AudioPortCallback>& callback)  {      Mutex::Autolock _l(mLock); @@ -1162,10 +1170,10 @@ status_t AudioSystem::AudioPolicyServiceClient::removeAudioPortCallback(          }      }      if (i == mAudioPortCallbacks.size()) { -        return INVALID_OPERATION; +        return -1;      }      mAudioPortCallbacks.removeAt(i); -    return NO_ERROR; +    return mAudioPortCallbacks.size();  } diff --git a/media/libmedia/IAudioPolicyService.cpp b/media/libmedia/IAudioPolicyService.cpp index fd18f17..3348441 100644 --- a/media/libmedia/IAudioPolicyService.cpp +++ b/media/libmedia/IAudioPolicyService.cpp @@ -72,7 +72,8 @@ enum {      GET_PHONE_STATE,      REGISTER_POLICY_MIXES,      START_AUDIO_SOURCE, -    STOP_AUDIO_SOURCE +    STOP_AUDIO_SOURCE, +    SET_AUDIO_PORT_CALLBACK_ENABLED,  };  #define MAX_ITEMS_PER_LIST 1024 @@ -646,6 +647,14 @@ public:          remote()->transact(REGISTER_CLIENT, data, &reply);      } +    virtual void setAudioPortCallbacksEnabled(bool enabled) +    { +        Parcel data, reply; +        data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); +        data.writeInt32(enabled ? 1 : 0); +        remote()->transact(SET_AUDIO_PORT_CALLBACK_ENABLED, data, &reply); +    } +      virtual status_t acquireSoundTriggerSession(audio_session_t *session,                                              audio_io_handle_t *ioHandle,                                              audio_devices_t *device) @@ -1219,6 +1228,12 @@ status_t BnAudioPolicyService::onTransact(              return NO_ERROR;          } break; +        case SET_AUDIO_PORT_CALLBACK_ENABLED: { +            CHECK_INTERFACE(IAudioPolicyService, data, reply); +            setAudioPortCallbacksEnabled(data.readInt32() == 1); +            return NO_ERROR; +        } break; +          case ACQUIRE_SOUNDTRIGGER_SESSION: {              CHECK_INTERFACE(IAudioPolicyService, data, reply);              sp<IAudioPolicyServiceClient> client = interface_cast<IAudioPolicyServiceClient>(  | 
