Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5ed04898 authored by jiabin's avatar jiabin Committed by Automerger Merge Worker
Browse files

[automerge] Cache MMAP client silenced state. 2p: cfc10a47 am: 8998dedb

parents e7caf5cd 8998dedb
Loading
Loading
Loading
Loading
+12 −0
Original line number Original line Diff line number Diff line
@@ -9553,6 +9553,12 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client,
    if (isOutput()) {
    if (isOutput()) {
        ret = AudioSystem::startOutput(portId);
        ret = AudioSystem::startOutput(portId);
    } else {
    } else {
        {
            // Add the track record before starting input so that the silent status for the
            // client can be cached.
            Mutex::Autolock _l(mLock);
            setClientSilencedState_l(portId, false /*silenced*/);
        }
        ret = AudioSystem::startInput(portId);
        ret = AudioSystem::startInput(portId);
    }
    }


@@ -9571,6 +9577,7 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client,
        } else {
        } else {
            mHalStream->stop();
            mHalStream->stop();
        }
        }
        eraseClientSilencedState_l(portId);
        return PERMISSION_DENIED;
        return PERMISSION_DENIED;
    }
    }


@@ -9579,6 +9586,9 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client,
                                        mChannelMask, mSessionId, isOutput(),
                                        mChannelMask, mSessionId, isOutput(),
                                        client.attributionSource,
                                        client.attributionSource,
                                        IPCThreadState::self()->getCallingPid(), portId);
                                        IPCThreadState::self()->getCallingPid(), portId);
    if (!isOutput()) {
        track->setSilenced_l(isClientSilenced_l(portId));
    }


    if (isOutput()) {
    if (isOutput()) {
        // force volume update when a new track is added
        // force volume update when a new track is added
@@ -9636,6 +9646,7 @@ status_t AudioFlinger::MmapThread::stop(audio_port_handle_t handle)
    }
    }


    mActiveTracks.remove(track);
    mActiveTracks.remove(track);
    eraseClientSilencedState_l(track->portId());


    mLock.unlock();
    mLock.unlock();
    if (isOutput()) {
    if (isOutput()) {
@@ -10443,6 +10454,7 @@ void AudioFlinger::MmapCaptureThread::setRecordSilenced(audio_port_handle_t port
            broadcast_l();
            broadcast_l();
        }
        }
    }
    }
    setClientSilencedIfExists_l(portId, silenced);
}
}


void AudioFlinger::MmapCaptureThread::toAudioPortConfig(struct audio_port_config *config)
void AudioFlinger::MmapCaptureThread::toAudioPortConfig(struct audio_port_config *config)
+21 −0
Original line number Original line Diff line number Diff line
@@ -2046,6 +2046,26 @@ class MmapThread : public ThreadBase


    virtual     bool        isStreamInitialized() { return false; }
    virtual     bool        isStreamInitialized() { return false; }


                void        setClientSilencedState_l(audio_port_handle_t portId, bool silenced) {
                                mClientSilencedStates[portId] = silenced;
                            }

                size_t      eraseClientSilencedState_l(audio_port_handle_t portId) {
                                return mClientSilencedStates.erase(portId);
                            }

                bool        isClientSilenced_l(audio_port_handle_t portId) const {
                                const auto it = mClientSilencedStates.find(portId);
                                return it != mClientSilencedStates.end() ? it->second : false;
                            }

                void        setClientSilencedIfExists_l(audio_port_handle_t portId, bool silenced) {
                                const auto it = mClientSilencedStates.find(portId);
                                if (it != mClientSilencedStates.end()) {
                                    it->second = silenced;
                                }
                            }

 protected:
 protected:
                void        dumpInternals_l(int fd, const Vector<String16>& args) override;
                void        dumpInternals_l(int fd, const Vector<String16>& args) override;
                void        dumpTracks_l(int fd, const Vector<String16>& args) override;
                void        dumpTracks_l(int fd, const Vector<String16>& args) override;
@@ -2065,6 +2085,7 @@ class MmapThread : public ThreadBase
                AudioHwDevice* const    mAudioHwDev;
                AudioHwDevice* const    mAudioHwDev;
                ActiveTracks<MmapTrack> mActiveTracks;
                ActiveTracks<MmapTrack> mActiveTracks;
                float                   mHalVolFloat;
                float                   mHalVolFloat;
                std::map<audio_port_handle_t, bool> mClientSilencedStates;


                int32_t                 mNoCallbackWarningCount;
                int32_t                 mNoCallbackWarningCount;
     static     constexpr int32_t       kMaxNoCallbackWarnings = 5;
     static     constexpr int32_t       kMaxNoCallbackWarnings = 5;