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

Commit 94ad0a26 authored by Jernej Virag's avatar Jernej Virag
Browse files

Cleanup release wakelock on bg thread flag

Bug: 316128516
Flag: EXEMPT removing delayed_wakelock_release_on_background_thread
Test: atest WakeLockTest
Change-Id: Ia83a469e342c367f7c8fd86c96a1f7e049b1836a
parent 72dad26d
Loading
Loading
Loading
Loading
+0 −10
Original line number Diff line number Diff line
@@ -907,16 +907,6 @@ flag {
    }
}

flag {
    name: "delayed_wakelock_release_on_background_thread"
    namespace: "systemui"
    description: "Released delayed wakelocks on background threads to avoid janking screen transitions."
    bug: "316128516"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "notify_power_manager_user_activity_background"
    namespace: "systemui"
+2 −22
Original line number Diff line number Diff line
@@ -21,43 +21,23 @@ import static org.junit.Assert.assertTrue;

import android.os.Build;
import android.os.PowerManager;
import android.platform.test.flag.junit.FlagsParameterization;
import android.platform.test.flag.junit.SetFlagsRule;

import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;

import com.android.systemui.Flags;
import com.android.systemui.SysuiTestCase;

import org.junit.After;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.List;

import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
import platform.test.runner.parameterized.Parameters;


@SmallTest
@RunWith(ParameterizedAndroidJunit4.class)
@RunWith(AndroidJUnit4.class)
public class WakeLockTest extends SysuiTestCase {

    @Parameters(name = "{0}")
    public static List<FlagsParameterization> getFlags() {
        return FlagsParameterization.allCombinationsOf(
                Flags.FLAG_DELAYED_WAKELOCK_RELEASE_ON_BACKGROUND_THREAD);
    }

    @Rule public final SetFlagsRule mSetFlagsRule;

    public WakeLockTest(FlagsParameterization flags) {
        mSetFlagsRule = new SetFlagsRule(SetFlagsRule.DefaultInitValueType.NULL_DEFAULT, flags);
    }

    private static final String WHY = "test";
    WakeLock mWakeLock;
    PowerManager.WakeLock mInner;
+2 −7
Original line number Diff line number Diff line
@@ -19,11 +19,8 @@ package com.android.systemui.util.wakelock;
import android.content.Context;
import android.os.Handler;

import com.android.systemui.Flags;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;

import dagger.Lazy;
import dagger.assisted.Assisted;
import dagger.assisted.AssistedFactory;
import dagger.assisted.AssistedInject;
@@ -40,13 +37,11 @@ public class DelayedWakeLock implements WakeLock {
    private final WakeLock mInner;

    @AssistedInject
    public DelayedWakeLock(@Background Lazy<Handler> bgHandler,
                           @Main Lazy<Handler> mainHandler,
    public DelayedWakeLock(@Background Handler bgHandler,
                           Context context, WakeLockLogger logger,
            @Assisted String tag) {
        mInner = WakeLock.createPartial(context, logger, tag);
        mHandler = Flags.delayedWakelockReleaseOnBackgroundThread() ? bgHandler.get()
                : mainHandler.get();
        mHandler = bgHandler;
    }

    @Override
+1 −58
Original line number Diff line number Diff line
@@ -18,14 +18,9 @@ package com.android.systemui.util.wakelock;

import android.content.Context;
import android.os.PowerManager;
import android.util.Log;

import androidx.annotation.VisibleForTesting;

import com.android.systemui.Flags;

import java.util.HashMap;

import javax.inject.Inject;

/** WakeLock wrapper for testability */
@@ -114,61 +109,9 @@ public interface WakeLock {
    @VisibleForTesting
    static WakeLock wrap(
            final PowerManager.WakeLock inner, WakeLockLogger logger, long maxTimeout) {
        if (Flags.delayedWakelockReleaseOnBackgroundThread()) {
        return new ClientTrackingWakeLock(inner, logger, maxTimeout);
    }

        // Non-thread safe implementation, remove when flag above is removed.
        return new WakeLock() {
            private final HashMap<String, Integer> mActiveClients = new HashMap<>();

            /** @see PowerManager.WakeLock#acquire() */
            public void acquire(String why) {
                mActiveClients.putIfAbsent(why, 0);
                int count = mActiveClients.get(why) + 1;
                mActiveClients.put(why, count);
                if (logger != null) {
                    logger.logAcquire(inner, why, count);
                }
                if (maxTimeout == Builder.NO_TIMEOUT) {
                    inner.acquire();
                } else {
                    inner.acquire(maxTimeout);
                }
            }

            /** @see PowerManager.WakeLock#release() */
            public void release(String why) {
                Integer count = mActiveClients.get(why);
                if (count == null) {
                    Log.wtf(TAG, "Releasing WakeLock with invalid reason: " + why,
                            new Throwable());
                    return;
                }
                count--;
                if (count == 0) {
                    mActiveClients.remove(why);
                } else {
                    mActiveClients.put(why, count);
                }
                if (logger != null) {
                    logger.logRelease(inner, why, count);
                }
                inner.release();
            }

            /** @see PowerManager.WakeLock#wrap(Runnable) */
            public Runnable wrap(Runnable runnable) {
                return wrapImpl(this, runnable);
            }

            @Override
            public String toString() {
                return "active clients= " + mActiveClients;
            }
        };
    }

    /**
     * An injectable Builder that wraps {@link #createPartial(Context, String, long)}.
     */