Merge "Introduce new lock to avoid lock-ordering issues." into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
0298091d08
@@ -52,6 +52,7 @@ import android.view.Display;
|
||||
import android.view.DisplayInfo;
|
||||
|
||||
import com.android.internal.R;
|
||||
import com.android.internal.annotations.GuardedBy;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.os.BackgroundThread;
|
||||
import com.android.server.LocalServices;
|
||||
@@ -2127,7 +2128,7 @@ public class DisplayModeDirector {
|
||||
}
|
||||
}
|
||||
|
||||
private final class SensorObserver implements ProximityActiveListener,
|
||||
private static final class SensorObserver implements ProximityActiveListener,
|
||||
DisplayManager.DisplayListener {
|
||||
private final String mProximitySensorName = null;
|
||||
private final String mProximitySensorType = Sensor.STRING_TYPE_PROXIMITY;
|
||||
@@ -2135,22 +2136,24 @@ public class DisplayModeDirector {
|
||||
private final BallotBox mBallotBox;
|
||||
private final Context mContext;
|
||||
private final Injector mInjector;
|
||||
@GuardedBy("mSensorObserverLock")
|
||||
private final SparseBooleanArray mDozeStateByDisplay = new SparseBooleanArray();
|
||||
private final Object mSensorObserverLock = new Object();
|
||||
|
||||
private DisplayManager mDisplayManager;
|
||||
private DisplayManagerInternal mDisplayManagerInternal;
|
||||
@GuardedBy("mSensorObserverLock")
|
||||
private boolean mIsProxActive = false;
|
||||
private final SparseBooleanArray mDozeStateByDisplay;
|
||||
|
||||
SensorObserver(Context context, BallotBox ballotBox, Injector injector) {
|
||||
mContext = context;
|
||||
mBallotBox = ballotBox;
|
||||
mInjector = injector;
|
||||
mDozeStateByDisplay = new SparseBooleanArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProximityActive(boolean isActive) {
|
||||
synchronized (mLock) {
|
||||
synchronized (mSensorObserverLock) {
|
||||
if (mIsProxActive != isActive) {
|
||||
mIsProxActive = isActive;
|
||||
recalculateVotesLocked();
|
||||
@@ -2166,7 +2169,7 @@ public class DisplayModeDirector {
|
||||
LocalServices.getService(SensorManagerInternal.class);
|
||||
sensorManager.addProximityActiveListener(BackgroundThread.getExecutor(), this);
|
||||
|
||||
synchronized (mLock) {
|
||||
synchronized (mSensorObserverLock) {
|
||||
for (Display d : mDisplayManager.getDisplays()) {
|
||||
mDozeStateByDisplay.put(d.getDisplayId(), mInjector.isDozeState(d));
|
||||
}
|
||||
@@ -2196,19 +2199,21 @@ public class DisplayModeDirector {
|
||||
|
||||
void dumpLocked(PrintWriter pw) {
|
||||
pw.println(" SensorObserver");
|
||||
pw.println(" mIsProxActive=" + mIsProxActive);
|
||||
pw.println(" mDozeStateByDisplay:");
|
||||
for (int i = 0; i < mDozeStateByDisplay.size(); i++) {
|
||||
final int id = mDozeStateByDisplay.keyAt(i);
|
||||
final boolean dozed = mDozeStateByDisplay.valueAt(i);
|
||||
pw.println(" " + id + " -> " + dozed);
|
||||
synchronized (mSensorObserverLock) {
|
||||
pw.println(" mIsProxActive=" + mIsProxActive);
|
||||
pw.println(" mDozeStateByDisplay:");
|
||||
for (int i = 0; i < mDozeStateByDisplay.size(); i++) {
|
||||
final int id = mDozeStateByDisplay.keyAt(i);
|
||||
final boolean dozed = mDozeStateByDisplay.valueAt(i);
|
||||
pw.println(" " + id + " -> " + dozed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisplayAdded(int displayId) {
|
||||
boolean isDozeState = mInjector.isDozeState(mDisplayManager.getDisplay(displayId));
|
||||
synchronized (mLock) {
|
||||
synchronized (mSensorObserverLock) {
|
||||
mDozeStateByDisplay.put(displayId, isDozeState);
|
||||
recalculateVotesLocked();
|
||||
}
|
||||
@@ -2217,7 +2222,7 @@ public class DisplayModeDirector {
|
||||
@Override
|
||||
public void onDisplayChanged(int displayId) {
|
||||
boolean wasDozeState = mDozeStateByDisplay.get(displayId);
|
||||
synchronized (mLock) {
|
||||
synchronized (mSensorObserverLock) {
|
||||
mDozeStateByDisplay.put(displayId,
|
||||
mInjector.isDozeState(mDisplayManager.getDisplay(displayId)));
|
||||
if (wasDozeState != mDozeStateByDisplay.get(displayId)) {
|
||||
@@ -2228,7 +2233,7 @@ public class DisplayModeDirector {
|
||||
|
||||
@Override
|
||||
public void onDisplayRemoved(int displayId) {
|
||||
synchronized (mLock) {
|
||||
synchronized (mSensorObserverLock) {
|
||||
mDozeStateByDisplay.delete(displayId);
|
||||
recalculateVotesLocked();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user