Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5660d2e7 authored by Sally's avatar Sally
Browse files

Use volatile keyword instead of lock

The tracing check can cause lock contention

Bug: 225403116
Test: Builds
Change-Id: I75cc4b88acf9917485dbd9ebe122b103bd245ac9
parent fe5ac369
Loading
Loading
Loading
Loading
+24 −30
Original line number Original line Diff line number Diff line
@@ -50,7 +50,7 @@ public class AccessibilityTraceManager implements AccessibilityTrace {
    private final AccessibilityManagerService mService;
    private final AccessibilityManagerService mService;
    private final Object mA11yMSLock;
    private final Object mA11yMSLock;


    private long mEnabledLoggingFlags;
    private volatile long mEnabledLoggingFlags;


    private static AccessibilityTraceManager sInstance = null;
    private static AccessibilityTraceManager sInstance = null;


@@ -77,22 +77,17 @@ public class AccessibilityTraceManager implements AccessibilityTrace {


    @Override
    @Override
    public boolean isA11yTracingEnabled() {
    public boolean isA11yTracingEnabled() {
        synchronized (mA11yMSLock) {
        return mEnabledLoggingFlags != FLAGS_LOGGING_NONE;
        return mEnabledLoggingFlags != FLAGS_LOGGING_NONE;
    }
    }
    }


    @Override
    @Override
    public boolean isA11yTracingEnabledForTypes(long typeIdFlags) {
    public boolean isA11yTracingEnabledForTypes(long typeIdFlags) {
        synchronized (mA11yMSLock) {
        return ((typeIdFlags & mEnabledLoggingFlags) != FLAGS_LOGGING_NONE);
        return ((typeIdFlags & mEnabledLoggingFlags) != FLAGS_LOGGING_NONE);
    }
    }
    }


    @Override
    @Override
    public int getTraceStateForAccessibilityManagerClientState() {
    public int getTraceStateForAccessibilityManagerClientState() {
        int state = 0x0;
        int state = 0x0;
        synchronized (mA11yMSLock) {
        if (isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_INTERACTION_CONNECTION)) {
        if (isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_INTERACTION_CONNECTION)) {
            state |= STATE_FLAG_TRACE_A11Y_INTERACTION_CONNECTION_ENABLED;
            state |= STATE_FLAG_TRACE_A11Y_INTERACTION_CONNECTION_ENABLED;
        }
        }
@@ -105,7 +100,6 @@ public class AccessibilityTraceManager implements AccessibilityTrace {
        if (isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_SERVICE)) {
        if (isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_SERVICE)) {
            state |= STATE_FLAG_TRACE_A11Y_SERVICE_ENABLED;
            state |= STATE_FLAG_TRACE_A11Y_SERVICE_ENABLED;
        }
        }
        }
        return state;
        return state;
    }
    }


@@ -116,11 +110,11 @@ public class AccessibilityTraceManager implements AccessibilityTrace {
            return;
            return;
        }
        }


        synchronized (mA11yMSLock) {
        long oldEnabled = mEnabledLoggingFlags;
        long oldEnabled = mEnabledLoggingFlags;
        mEnabledLoggingFlags = loggingTypes;
        mEnabledLoggingFlags = loggingTypes;


        if (needToNotifyClients(oldEnabled)) {
        if (needToNotifyClients(oldEnabled)) {
            synchronized (mA11yMSLock) {
                mService.scheduleUpdateClientsIfNeededLocked(mService.getCurrentUserState());
                mService.scheduleUpdateClientsIfNeededLocked(mService.getCurrentUserState());
            }
            }
        }
        }
@@ -130,14 +124,14 @@ public class AccessibilityTraceManager implements AccessibilityTrace {


    @Override
    @Override
    public void stopTrace() {
    public void stopTrace() {
        boolean stop = false;
        boolean stop;
        synchronized (mA11yMSLock) {
        stop = isA11yTracingEnabled();
        stop = isA11yTracingEnabled();


        long oldEnabled = mEnabledLoggingFlags;
        long oldEnabled = mEnabledLoggingFlags;
        mEnabledLoggingFlags = FLAGS_LOGGING_NONE;
        mEnabledLoggingFlags = FLAGS_LOGGING_NONE;


        if (needToNotifyClients(oldEnabled)) {
        if (needToNotifyClients(oldEnabled)) {
            synchronized (mA11yMSLock) {
                mService.scheduleUpdateClientsIfNeededLocked(mService.getCurrentUserState());
                mService.scheduleUpdateClientsIfNeededLocked(mService.getCurrentUserState());
            }
            }
        }
        }