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

Commit b068784d authored by Ben Miles's avatar Ben Miles
Browse files

Add timeout to subject for executing service ANRs

Change-Id: Ib442c23cd0b5384ac8ec3d1c0a6b4cf3c6ab4da2
Bug: 274467071
Test: atest TimeoutRecordTest. Also tested locally by triggering an ANR and inspecting the Subject.
parent c069d5d7
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -151,7 +151,11 @@ public class TimeoutRecord {

    /** Record for a service exec timeout. */
    @NonNull
    public static TimeoutRecord forServiceExec(@NonNull String reason) {
    public static TimeoutRecord forServiceExec(@NonNull String shortInstanceName,
            long timeoutDurationMs) {
        String reason =
                "executing service " + shortInstanceName + ", waited "
                        + timeoutDurationMs + "ms";
        return TimeoutRecord.endingNow(TimeoutKind.SERVICE_EXEC, reason);
    }

+3 −2
Original line number Diff line number Diff line
@@ -6640,8 +6640,9 @@ public final class ActiveServices {
                    mAm.mHandler.removeCallbacks(mLastAnrDumpClearer);
                    mAm.mHandler.postDelayed(mLastAnrDumpClearer,
                            LAST_ANR_LIFETIME_DURATION_MSECS);
                    String anrMessage = "executing service " + timeout.shortInstanceName;
                    timeoutRecord = TimeoutRecord.forServiceExec(anrMessage);
                    long waitedMillis = now - timeout.executingStart;
                    timeoutRecord = TimeoutRecord.forServiceExec(timeout.shortInstanceName,
                            waitedMillis);
                } else {
                    Message msg = mAm.mHandler.obtainMessage(
                            ActivityManagerService.SERVICE_TIMEOUT_MSG);
+2 −2
Original line number Diff line number Diff line
@@ -104,11 +104,11 @@ public class TimeoutRecordTest {

    @Test
    public void forServiceExec_returnsCorrectTimeoutRecord() {
        TimeoutRecord record = TimeoutRecord.forServiceExec("Test ANR reason");
        TimeoutRecord record = TimeoutRecord.forServiceExec("com.app.MyService", 1000L);

        assertNotNull(record);
        assertEquals(record.mKind, TimeoutRecord.TimeoutKind.SERVICE_EXEC);
        assertEquals(record.mReason, "Test ANR reason");
        assertEquals(record.mReason, "executing service com.app.MyService, waited 1000ms");
        assertTrue(record.mEndTakenBeforeLocks);
    }