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

Commit 9d699265 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Disable concurrent mode when instrumentation is loaded" into main

parents 51d2f65b 671c3e1e
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.os;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.TestApi;
import android.app.ActivityThread;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Process;
import android.os.UserHandle;
@@ -111,7 +112,20 @@ public final class MessageQueue {
    private native static void nativeSetFileDescriptorEvents(long ptr, int fd, int events);

    MessageQueue(boolean quitAllowed) {
        mUseConcurrent = UserHandle.isCore(Process.myUid()) && !VMDebug.isDebuggingEnabled();
        // Concurrent mode modifies behavior that is observable via reflection and is commonly used
        // by tests.
        // For now, we limit it to system processes to avoid breaking apps and their tests.
        mUseConcurrent = UserHandle.isCore(Process.myUid());
        // Even then, we don't use it if instrumentation is loaded as it breaks some
        // platform tests.
        final ActivityThread activityThread = ActivityThread.currentActivityThread();
        if (activityThread != null) {
            final Instrumentation instrumentation = activityThread.getInstrumentation();
            mUseConcurrent &= instrumentation == null || !instrumentation.isInstrumenting();
        }
        // We can lift this restriction in the future after we've made it possible for test authors
        // to test Looper and MessageQueue without resorting to reflection.

        mQuitAllowed = quitAllowed;
        mPtr = nativeInit();
    }