MediaMetrics: Fix inaccurate attribution of thread device
CreatePatch metric was overwriting the input and output device
before endIntervalGroup was called.
Use a separate last device field to send the device associated with
the endIntervalGroup.
Fix an issue with multiple devices that the '|' was not embedded
in the device string.
Test: adb shell dumpsys media.metrics
Bug: 247029889
Bug: 247907183
Change-Id: I659d9643782ff03ce5b196cce9f2e9d09c4e609c
diff --git a/services/mediametrics/StringUtils.cpp b/services/mediametrics/StringUtils.cpp
index 50525bc..d1c7a18 100644
--- a/services/mediametrics/StringUtils.cpp
+++ b/services/mediametrics/StringUtils.cpp
@@ -20,6 +20,8 @@
#include "StringUtils.h"
+#include "AudioTypes.h"
+
namespace android::mediametrics::stringutils {
std::string tokenizer(std::string::const_iterator& it,
@@ -99,4 +101,30 @@
return replaced;
}
+template <types::AudioEnumCategory CATEGORY>
+std::pair<std::string /* external statsd */, std::string /* internal */>
+parseDevicePairs(const std::string& devicePairs) {
+ std::pair<std::string, std::string> result{};
+ const auto devaddrvec = stringutils::getDeviceAddressPairs(devicePairs);
+ for (const auto& [device, addr] : devaddrvec) { // addr ignored for now.
+ if (!result.second.empty()) {
+ result.second.append("|"); // delimit devices with '|'.
+ result.first.append("|");
+ }
+ result.second.append(device);
+ result.first.append(types::lookup<CATEGORY, std::string>(device));
+ }
+ return result;
+}
+
+std::pair<std::string /* external statsd */, std::string /* internal */>
+parseOutputDevicePairs(const std::string& devicePairs) {
+ return parseDevicePairs<types::OUTPUT_DEVICE>(devicePairs);
+}
+
+std::pair<std::string /* external statsd */, std::string /* internal */>
+parseInputDevicePairs(const std::string& devicePairs) {
+ return parseDevicePairs<types::INPUT_DEVICE>(devicePairs);
+}
+
} // namespace android::mediametrics::stringutils