Merge "SpatializerHelper: Deliver metrics to MediaMetrics" into tm-dev am: e2049a8968

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18510742

Change-Id: I2dff72b3ace4f3258b0618762ed0205a7bc6ac2a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Eric Laurent
2022-05-23 09:31:37 +00:00
committed by Automerger Merge Worker
2 changed files with 52 additions and 5 deletions

View File

@@ -107,6 +107,9 @@ public class MediaMetrics {
public static final Key<String> EVENT = createKey("event#", String.class);
// Generally string "true" or "false"
public static final Key<String> ENABLED = createKey("enabled", String.class);
// event generated is external (yes, no)
public static final Key<String> EXTERNAL = createKey("external", String.class);
@@ -122,6 +125,13 @@ public class MediaMetrics {
public static final Key<String> GROUP =
createKey("group", String.class);
// Generally string "true" or "false"
public static final Key<String> HAS_HEAD_TRACKER =
createKey("hasHeadTracker", String.class); // spatializer
// Generally string "true" or "false"
public static final Key<String> HEAD_TRACKER_ENABLED =
createKey("headTrackerEnabled", String.class); // spatializer
public static final Key<Integer> INDEX = createKey("index", Integer.class); // volume
public static final Key<String> LOG_SESSION_ID = createKey("logSessionId", String.class);
public static final Key<Integer> MAX_INDEX = createKey("maxIndex", Integer.class); // vol

View File

@@ -34,6 +34,7 @@ import android.media.ISpatializerHeadTrackerAvailableCallback;
import android.media.ISpatializerHeadTrackingCallback;
import android.media.ISpatializerHeadTrackingModeCallback;
import android.media.ISpatializerOutputCallback;
import android.media.MediaMetrics;
import android.media.SpatializationLevel;
import android.media.SpatializationMode;
import android.media.Spatializer;
@@ -524,6 +525,7 @@ public class SpatializerHelper {
final int deviceType = ada.getType();
final boolean wireless = isWireless(deviceType);
boolean isInList = false;
SADeviceState deviceUpdated = null; // non-null on update.
for (SADeviceState deviceState : mSADevices) {
if (deviceType == deviceState.mDeviceType
@@ -531,6 +533,7 @@ public class SpatializerHelper {
isInList = true;
if (forceEnable) {
deviceState.mEnabled = true;
deviceUpdated = deviceState;
}
break;
}
@@ -540,25 +543,54 @@ public class SpatializerHelper {
wireless ? ada.getAddress() : "");
dev.mEnabled = true;
mSADevices.add(dev);
deviceUpdated = dev;
}
onRoutingUpdated();
mAudioService.persistSpatialAudioDeviceSettings();
if (deviceUpdated != null) {
onRoutingUpdated();
mAudioService.persistSpatialAudioDeviceSettings();
logDeviceState(deviceUpdated, "addCompatibleAudioDevice");
}
}
private static final String METRICS_DEVICE_PREFIX = "audio.spatializer.device.";
// Device logging is accomplished in the Java Audio Service level.
// (System capabilities is done in the Native AudioPolicyManager level).
//
// There may be different devices with the same device type (aliasing).
// We always send the full device state info on each change.
private void logDeviceState(SADeviceState deviceState, String event) {
final String deviceName = AudioSystem.getDeviceName(deviceState.mDeviceType);
new MediaMetrics.Item(METRICS_DEVICE_PREFIX + deviceName)
.set(MediaMetrics.Property.ADDRESS, deviceState.mDeviceAddress)
.set(MediaMetrics.Property.ENABLED, deviceState.mEnabled ? "true" : "false")
.set(MediaMetrics.Property.EVENT, TextUtils.emptyIfNull(event))
.set(MediaMetrics.Property.HAS_HEAD_TRACKER,
deviceState.mHasHeadTracker ? "true" : "false") // this may be updated later.
.set(MediaMetrics.Property.HEAD_TRACKER_ENABLED,
deviceState.mHeadTrackerEnabled ? "true" : "false")
.record();
}
synchronized void removeCompatibleAudioDevice(@NonNull AudioDeviceAttributes ada) {
loglogi("removeCompatibleAudioDevice: dev=" + ada);
final int deviceType = ada.getType();
final boolean wireless = isWireless(deviceType);
SADeviceState deviceUpdated = null; // non-null on update.
for (SADeviceState deviceState : mSADevices) {
if (deviceType == deviceState.mDeviceType
&& (!wireless || ada.getAddress().equals(deviceState.mDeviceAddress))) {
deviceState.mEnabled = false;
deviceUpdated = deviceState;
break;
}
}
onRoutingUpdated();
mAudioService.persistSpatialAudioDeviceSettings();
if (deviceUpdated != null) {
onRoutingUpdated();
mAudioService.persistSpatialAudioDeviceSettings();
logDeviceState(deviceUpdated, "removeCompatibleAudioDevice");
}
}
/**
@@ -630,8 +662,10 @@ public class SpatializerHelper {
}
}
if (!knownDevice) {
mSADevices.add(new SADeviceState(ada.getType(), ada.getAddress()));
final SADeviceState deviceState = new SADeviceState(ada.getType(), ada.getAddress());
mSADevices.add(deviceState);
mAudioService.persistSpatialAudioDeviceSettings();
logDeviceState(deviceState, "addWirelessDeviceIfNew"); // may be updated later.
}
}
@@ -1070,6 +1104,7 @@ public class SpatializerHelper {
Log.i(TAG, "setHeadTrackerEnabled enabled:" + enabled + " device:" + ada);
deviceState.mHeadTrackerEnabled = enabled;
mAudioService.persistSpatialAudioDeviceSettings();
logDeviceState(deviceState, "setHeadTrackerEnabled");
break;
}
}
@@ -1119,6 +1154,7 @@ public class SpatializerHelper {
if (!deviceState.mHasHeadTracker) {
deviceState.mHasHeadTracker = true;
mAudioService.persistSpatialAudioDeviceSettings();
logDeviceState(deviceState, "setHasHeadTracker");
}
return deviceState.mHeadTrackerEnabled;
}
@@ -1585,6 +1621,7 @@ public class SpatializerHelper {
SADeviceState devState = SADeviceState.fromPersistedString(setting);
if (devState != null) {
mSADevices.add(devState);
logDeviceState(devState, "setSADeviceSettings");
}
}
}