Merge "Do not share VirtualDeviceImpl lock with SensorController" into udc-dev

This commit is contained in:
Ján Sebechlebský
2023-05-10 06:26:23 +00:00
committed by Android (Google) Code Review
4 changed files with 7 additions and 11 deletions

View File

@@ -53,19 +53,18 @@ public class SensorController {
private static AtomicInteger sNextDirectChannelHandle = new AtomicInteger(1); private static AtomicInteger sNextDirectChannelHandle = new AtomicInteger(1);
private final Object mLock; private final Object mLock = new Object();
private final int mVirtualDeviceId; private final int mVirtualDeviceId;
@GuardedBy("mLock") @GuardedBy("mLock")
private final Map<IBinder, SensorDescriptor> mSensorDescriptors = new ArrayMap<>(); private final ArrayMap<IBinder, SensorDescriptor> mSensorDescriptors = new ArrayMap<>();
@NonNull @NonNull
private final SensorManagerInternal.RuntimeSensorCallback mRuntimeSensorCallback; private final SensorManagerInternal.RuntimeSensorCallback mRuntimeSensorCallback;
private final SensorManagerInternal mSensorManagerInternal; private final SensorManagerInternal mSensorManagerInternal;
private final VirtualDeviceManagerInternal mVdmInternal; private final VirtualDeviceManagerInternal mVdmInternal;
public SensorController(@NonNull Object lock, int virtualDeviceId, public SensorController(int virtualDeviceId,
@Nullable IVirtualSensorCallback virtualSensorCallback) { @Nullable IVirtualSensorCallback virtualSensorCallback) {
mLock = lock;
mVirtualDeviceId = virtualDeviceId; mVirtualDeviceId = virtualDeviceId;
mRuntimeSensorCallback = new RuntimeSensorCallbackWrapper(virtualSensorCallback); mRuntimeSensorCallback = new RuntimeSensorCallbackWrapper(virtualSensorCallback);
mSensorManagerInternal = LocalServices.getService(SensorManagerInternal.class); mSensorManagerInternal = LocalServices.getService(SensorManagerInternal.class);
@@ -185,7 +184,7 @@ public class SensorController {
@VisibleForTesting @VisibleForTesting
Map<IBinder, SensorDescriptor> getSensorDescriptors() { Map<IBinder, SensorDescriptor> getSensorDescriptors() {
synchronized (mLock) { synchronized (mLock) {
return mSensorDescriptors; return new ArrayMap<>(mSensorDescriptors);
} }
} }

View File

@@ -266,8 +266,7 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
mInputController = inputController; mInputController = inputController;
} }
if (sensorController == null) { if (sensorController == null) {
mSensorController = new SensorController( mSensorController = new SensorController(mDeviceId, mParams.getVirtualSensorCallback());
mVirtualDeviceLock, mDeviceId, mParams.getVirtualSensorCallback());
} else { } else {
mSensorController = sensorController; mSensorController = sensorController;
} }

View File

@@ -70,8 +70,7 @@ public class SensorControllerTest {
LocalServices.removeServiceForTest(SensorManagerInternal.class); LocalServices.removeServiceForTest(SensorManagerInternal.class);
LocalServices.addService(SensorManagerInternal.class, mSensorManagerInternalMock); LocalServices.addService(SensorManagerInternal.class, mSensorManagerInternalMock);
mSensorController = mSensorController = new SensorController(VIRTUAL_DEVICE_ID, mVirtualSensorCallback);
new SensorController(new Object(), VIRTUAL_DEVICE_ID, mVirtualSensorCallback);
mSensorEvent = new VirtualSensorEvent.Builder(new float[] { 1f, 2f, 3f}).build(); mSensorEvent = new VirtualSensorEvent.Builder(new float[] { 1f, 2f, 3f}).build();
mVirtualSensorConfig = mVirtualSensorConfig =
new VirtualSensorConfig.Builder(Sensor.TYPE_ACCELEROMETER, VIRTUAL_SENSOR_NAME) new VirtualSensorConfig.Builder(Sensor.TYPE_ACCELEROMETER, VIRTUAL_SENSOR_NAME)

View File

@@ -359,8 +359,7 @@ public class VirtualDeviceManagerServiceTest {
mInputController = new InputController(mNativeWrapperMock, mInputController = new InputController(mNativeWrapperMock,
new Handler(TestableLooper.get(this).getLooper()), new Handler(TestableLooper.get(this).getLooper()),
mContext.getSystemService(WindowManager.class), threadVerifier); mContext.getSystemService(WindowManager.class), threadVerifier);
mSensorController = mSensorController = new SensorController(VIRTUAL_DEVICE_ID_1, mVirtualSensorCallback);
new SensorController(new Object(), VIRTUAL_DEVICE_ID_1, mVirtualSensorCallback);
mCameraAccessController = mCameraAccessController =
new CameraAccessController(mContext, mLocalService, mCameraAccessBlockedCallback); new CameraAccessController(mContext, mLocalService, mCameraAccessBlockedCallback);