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
This commit is contained in:
Kriti Dang
2021-10-15 13:36:32 +02:00
parent 420679dea6
commit f7709fdb59

View File

@@ -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.