summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kriti Dang <kritidang@google.com> 2021-10-15 13:36:32 +0200
committer Kriti Dang <kritidang@google.com> 2021-11-15 14:21:51 +0100
commitf7709fdb591e36f6806460a8fe44dccfb396ec2b (patch)
tree5ab4c7f896cd08e407c3949ddf49ad8475a46109
parent420679dea6c620ce2aa011f4de0fa8c085e815ee (diff)
Fetch surround sound metrics
Register for media capabilities metrics and fetch the surround sound metrics Bug: 202395775 Test: m statsd_testdrive; statsd_testdrive 10130 Change-Id: I749263cb7b57c1fef5e8051dcb65851621170a70
-rw-r--r--services/core/java/com/android/server/stats/pull/StatsPullAtomService.java62
1 files changed, 62 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
index 0394d4cca110..fbfe9db0dca6 100644
--- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
+++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
@@ -95,6 +95,7 @@ import android.content.pm.UserInfo;
import android.hardware.biometrics.BiometricsProtoEnums;
import android.hardware.face.FaceManager;
import android.hardware.fingerprint.FingerprintManager;
+import android.media.AudioManager;
import android.net.ConnectivityManager;
import android.net.INetworkStatsService;
import android.net.INetworkStatsSession;
@@ -743,6 +744,8 @@ public class StatsPullAtomService extends SystemService {
return pullAccessibilityShortcutStatsLocked(atomTag, data);
case FrameworkStatsLog.ACCESSIBILITY_FLOATING_MENU_STATS:
return pullAccessibilityFloatingMenuStatsLocked(atomTag, data);
+ case FrameworkStatsLog.MEDIA_CAPABILITIES:
+ return pullMediaCapabilitiesStats(atomTag, data);
default:
throw new UnsupportedOperationException("Unknown tagId=" + atomTag);
}
@@ -940,6 +943,7 @@ public class StatsPullAtomService extends SystemService {
registerKeystoreCrashStats();
registerAccessibilityShortcutStats();
registerAccessibilityFloatingMenuStats();
+ registerMediaCapabilitiesStats();
}
private void initAndRegisterNetworkStatsPullers() {
@@ -4188,6 +4192,16 @@ public class StatsPullAtomService extends SystemService {
);
}
+ private void registerMediaCapabilitiesStats() {
+ int tagId = FrameworkStatsLog.MEDIA_CAPABILITIES;
+ mStatsManager.setPullAtomCallback(
+ tagId,
+ null, // use default PullAtomMetadata values
+ DIRECT_EXECUTOR,
+ mStatsCallbackImpl
+ );
+ }
+
int parseKeystoreStorageStats(KeystoreAtom[] atoms, List<StatsEvent> pulledData) {
for (KeystoreAtom atomWrapper : atoms) {
if (atomWrapper.payload.getTag() != KeystoreAtomPayload.storageStats) {
@@ -4470,6 +4484,54 @@ public class StatsPullAtomService extends SystemService {
return StatsManager.PULL_SUCCESS;
}
+ int pullMediaCapabilitiesStats(int atomTag, List<StatsEvent> pulledData) {
+ AudioManager audioManager = mContext.getSystemService(AudioManager.class);
+ if (audioManager == null) {
+ return StatsManager.PULL_SKIP;
+ }
+
+ // get the surround sound metrics information
+ Map<Integer, Boolean> surroundEncodingsMap = audioManager.getSurroundFormats();
+ byte[] surroundEncodings =
+ getAudioEncodingsAsProto(new ArrayList(surroundEncodingsMap.keySet()));
+ byte[] sinkSurroundEncodings =
+ getAudioEncodingsAsProto(audioManager.getReportedSurroundFormats());
+ List<Integer> disabledSurroundEncodingsList = new ArrayList<>();
+ List<Integer> enabledSurroundEncodingsList = new ArrayList<>();
+ for (int surroundEncoding: surroundEncodingsMap.keySet()) {
+ if (!surroundEncodingsMap.get(surroundEncoding)) {
+ disabledSurroundEncodingsList.add(surroundEncoding);
+ } else {
+ enabledSurroundEncodingsList.add(surroundEncoding);
+ }
+ }
+ byte[] disabledSurroundEncodings = getAudioEncodingsAsProto(disabledSurroundEncodingsList);
+ byte[] enabledSurroundEncodings = getAudioEncodingsAsProto(enabledSurroundEncodingsList);
+ int surroundOutputMode = audioManager.getEncodedSurroundMode();
+
+ // TODO(b/203185126) : Remove the display capabilities metrics mock and retrieve actual
+ // metrics
+ byte[] mockByteArray = new byte[0];
+ pulledData.add(
+ FrameworkStatsLog.buildStatsEvent(
+ atomTag, surroundEncodings, sinkSurroundEncodings,
+ disabledSurroundEncodings, enabledSurroundEncodings, surroundOutputMode,
+ mockByteArray, mockByteArray, -1, -1, mockByteArray,
+ -1, -1, 0.0f, false));
+
+ return StatsManager.PULL_SUCCESS;
+ }
+
+ private byte[] getAudioEncodingsAsProto(List<Integer> audioEncodings) {
+ ProtoOutputStream protoOutputStream = new ProtoOutputStream();
+ for (int audioEncoding : audioEncodings) {
+ protoOutputStream.write(
+ ProtoOutputStream.FIELD_COUNT_REPEATED | ProtoOutputStream.FIELD_TYPE_ENUM | 1,
+ audioEncoding);
+ }
+ return protoOutputStream.getBytes();
+ }
+
/**
* Counts how many accessibility services (including features) there are in the colon-separated
* string list.