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

Commit 02a53686 authored by Lucas Dupin's avatar Lucas Dupin Committed by android-build-merger
Browse files

Merge "Avoid stuck wake-locks" into qt-dev

am: 13775aa4

Change-Id: Id51fe28e2b53d4d580ddcb437e18914471613504
parents c2341be2 13775aa4
Loading
Loading
Loading
Loading
+22 −3
Original line number Diff line number Diff line
@@ -30,6 +30,11 @@ public interface WakeLock {
    static final String TAG = "WakeLock";
    static final String REASON_WRAP = "wrap";

    /**
     * Default wake-lock timeout, to avoid battery regressions.
     */
    long DEFAULT_MAX_TIMEOUT = 20000;

    /**
     * @param why A tag that will be saved for sysui dumps.
     * @see android.os.PowerManager.WakeLock#acquire()
@@ -46,7 +51,14 @@ public interface WakeLock {
    Runnable wrap(Runnable r);

    static WakeLock createPartial(Context context, String tag) {
        return wrap(createPartialInner(context, tag));
        return createPartial(context, tag, DEFAULT_MAX_TIMEOUT);
    }

    /**
     * Creates a {@link WakeLock} that has a default release timeout.
     * @see android.os.PowerManager.WakeLock#acquire(long) */
    static WakeLock createPartial(Context context, String tag, long maxTimeout) {
        return wrap(createPartialInner(context, tag), maxTimeout);
    }

    @VisibleForTesting
@@ -66,7 +78,14 @@ public interface WakeLock {
        };
    }

    static WakeLock wrap(final PowerManager.WakeLock inner) {
    /**
     * Create a {@link WakeLock} containing a {@link PowerManager.WakeLock}.
     * @param inner To be wrapped.
     * @param maxTimeout When to expire.
     * @return The new wake lock.
     */
    @VisibleForTesting
    static WakeLock wrap(final PowerManager.WakeLock inner, long maxTimeout) {
        return new WakeLock() {
            private final HashMap<String, Integer> mActiveClients = new HashMap<>();

@@ -74,7 +93,7 @@ public interface WakeLock {
            public void acquire(String why) {
                mActiveClients.putIfAbsent(why, 0);
                mActiveClients.put(why, mActiveClients.get(why) + 1);
                inner.acquire();
                inner.acquire(maxTimeout);
            }

            /** @see PowerManager.WakeLock#release() */
+1 −9
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ public class WakeLockTest extends SysuiTestCase {
    @Before
    public void setUp() {
        mInner = WakeLock.createPartialInner(mContext, WakeLockTest.class.getName());
        mWakeLock = WakeLock.wrap(mInner);
        mWakeLock = WakeLock.wrap(mInner, 20000);
    }

    @After
@@ -69,14 +69,6 @@ public class WakeLockTest extends SysuiTestCase {
        assertFalse(mInner.isHeld());
    }

    @Test
    public void wakeLock_refCounted() {
        mWakeLock.acquire(WHY);
        mWakeLock.acquire(WHY);
        mWakeLock.release(WHY);
        assertTrue(mInner.isHeld());
    }

    @Test
    public void wakeLock_wrap() {
        boolean[] ran = new boolean[1];