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

Commit 9a76c702 authored by John Wu's avatar John Wu
Browse files

[Ravenwood] Allow signal USR1 to trigger bug report

When certain tests are stuck, send signal USR1 to trigger a bug report
dump to assist debugging.

Bug: 434942993
Flag: EXEMPT host side change only
Test: manual
Change-Id: I2b4742de3aaa42b705165fa5b2fcbd9e5e89f3f8
parent 02785fcd
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import android.util.Log_ravenwood;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.os.RuntimeInit;
import com.android.ravenwood.OpenJdkWorkaround;
import com.android.ravenwood.RavenwoodRuntimeNative;
import com.android.ravenwood.common.RavenwoodInternalUtils;
import com.android.ravenwood.common.SneakyThrow;
@@ -209,6 +210,12 @@ public class RavenwoodDriver {
                    new RavenwoodErrorHandler.UncaughtExceptionHandler());
        }

        // `pkill -USR1 -f tradefed-isolation.jar` will trigger a full thread dumps
        OpenJdkWorkaround.registerSignalHandler("USR1", () -> {
            sRawStdErr.println("-----SIGUSR1 HANDLER-----");
            doBugreport(null, null, false);
        });

        // Some process-wide initialization:
        // - maybe redirect stdout/stderr
        // - override native system property functions
@@ -426,6 +433,13 @@ public class RavenwoodDriver {
            final PrintStream out = sRawStdErr;
            out.println("-----BEGIN ALL THREAD STACKS-----");

            var desc = RavenwoodErrorHandler.sCurrentDescription;
            if (desc != null) {
                out.format("Running test: %s:%s#%s\n",
                        RavenwoodEnvironment.getInstance().getTestModuleName(),
                        desc.getClassName(), desc.getMethodName());
            }

            var stacks = Thread.getAllStackTraces();
            var threads = stacks.keySet().stream().sorted(
                    Comparator.comparingLong(Thread::getId)).collect(Collectors.toList());
+6 −0
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import java.util.WeakHashMap;

import sun.misc.Signal;

public class OpenJdkWorkaround {

    // @GuardedBy("sAddressMap")
@@ -89,4 +91,8 @@ public class OpenJdkWorkaround {
        }
        return null;
    }

    public static void registerSignalHandler(String signal, Runnable handler) {
        Signal.handle(new Signal(signal), sig -> handler.run());
    }
}