Merge "Add external setParameter to audioflinger dumpsys"
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 43566b7..ed2b3c0 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -66,7 +66,6 @@
#include <media/MemoryLeakTrackUtil.h>
#include <media/nbaio/Pipe.h>
#include <media/nbaio/PipeReader.h>
-#include <media/AudioParameter.h>
#include <mediautils/BatteryNotifier.h>
#include <mediautils/ServiceUtilities.h>
#include <private/android_filesystem_config.h>
@@ -517,6 +516,15 @@
mPatchPanel.dump(fd);
+ // dump external setParameters
+ auto dumpLogger = [fd](SimpleLog& logger, const char* name) {
+ dprintf(fd, "\n%s setParameters:\n", name);
+ logger.dump(fd, " " /* prefix */);
+ };
+ dumpLogger(mRejectedSetParameterLog, "Rejected");
+ dumpLogger(mAppSetParameterLog, "App");
+ dumpLogger(mSystemSetParameterLog, "System");
+
BUFLOG_RESET;
if (locked) {
@@ -1229,16 +1237,33 @@
AudioParameter param = AudioParameter(keyValuePairs);
String8 value;
+ AudioParameter rejectedParam;
for (auto& key : kReservedParameters) {
if (param.get(key, value) == NO_ERROR) {
- ALOGW("%s: filtering key %s value %s from uid %d",
- __func__, key.string(), value.string(), callingUid);
+ rejectedParam.add(key, value);
param.remove(key);
}
}
+ logFilteredParameters(param.size() + rejectedParam.size(), keyValuePairs,
+ rejectedParam.size(), rejectedParam.toString(), callingUid);
keyValuePairs = param.toString();
}
+void AudioFlinger::logFilteredParameters(size_t originalKVPSize, const String8& originalKVPs,
+ size_t rejectedKVPSize, const String8& rejectedKVPs,
+ uid_t callingUid) {
+ auto prefix = String8::format("UID %5d", callingUid);
+ auto suffix = String8::format("%zu KVP received: %s", originalKVPSize, originalKVPs.c_str());
+ if (rejectedKVPSize != 0) {
+ auto error = String8::format("%zu KVP rejected: %s", rejectedKVPSize, rejectedKVPs.c_str());
+ ALOGW("%s: %s, %s, %s", __func__, prefix.c_str(), error.c_str(), suffix.c_str());
+ mRejectedSetParameterLog.log("%s, %s, %s", prefix.c_str(), error.c_str(), suffix.c_str());
+ } else {
+ auto& logger = (isServiceUid(callingUid) ? mSystemSetParameterLog : mAppSetParameterLog);
+ logger.log("%s, %s", prefix.c_str(), suffix.c_str());
+ }
+}
+
status_t AudioFlinger::setParameters(audio_io_handle_t ioHandle, const String8& keyValuePairs)
{
ALOGV("setParameters(): io %d, keyvalue %s, calling pid %d calling uid %d",
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 2d2da3e..9c36479 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -812,6 +812,9 @@
status_t checkStreamType(audio_stream_type_t stream) const;
void filterReservedParameters(String8& keyValuePairs, uid_t callingUid);
+ void logFilteredParameters(size_t originalKVPSize, const String8& originalKVPs,
+ size_t rejectedKVPSize, const String8& rejectedKVPs,
+ uid_t callingUid);
public:
// These methods read variables atomically without mLock,
@@ -832,7 +835,11 @@
PatchPanel mPatchPanel;
sp<EffectsFactoryHalInterface> mEffectsFactoryHal;
- bool mSystemReady;
+ bool mSystemReady;
+
+ SimpleLog mRejectedSetParameterLog;
+ SimpleLog mAppSetParameterLog;
+ SimpleLog mSystemSetParameterLog;
};
#undef INCLUDING_FROM_AUDIOFLINGER_H