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

Commit 80db4505 authored by Anton Potapov's avatar Anton Potapov
Browse files

Add system ui background handlers dispatch and delivery logging thresholds

Those thresholds would help us to further investigate bugs like this
one. Looper#showSlowLog prints Slog.w when the threshold is met. This risk free change will help us investigate issues when something got stuck in the background thread.

I've also removed misleading `run` from `UserTrackerImpl` because those are kotlin run to change context, which doesn't change execution thread.

Bug: 281851220
Test: manual
Change-Id: I127ec03e15f76295484e34b0ff0f3e7ad9ac9b88
parent 53c901a0
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -166,21 +166,19 @@ open class UserTrackerImpl internal constructor(
            }

            override fun onUserSwitching(newUserId: Int, reply: IRemoteCallback?) {
                backgroundHandler.run {
                handleUserSwitching(newUserId)
                reply?.sendResult(null)
            }
            }

            override fun onUserSwitchComplete(newUserId: Int) {
                backgroundHandler.run {
                handleUserSwitchComplete(newUserId)
            }
            }
        }, TAG)
    }

    @WorkerThread
    protected open fun handleBeforeUserSwitching(newUserId: Int) {
        Assert.isNotMainThread()
        setUserIdInternal(newUserId)
    }

+19 −3
Original line number Diff line number Diff line
@@ -29,18 +29,28 @@ import com.android.systemui.dagger.qualifiers.BroadcastRunning;
import com.android.systemui.dagger.qualifiers.LongRunning;
import com.android.systemui.dagger.qualifiers.Main;

import dagger.Module;
import dagger.Provides;

import java.util.concurrent.Executor;

import javax.inject.Named;

import dagger.Module;
import dagger.Provides;

/**
 * Dagger Module for classes found within the concurrent package.
 */
@Module
public abstract class SysUIConcurrencyModule {

    // Slow BG executor can potentially affect UI if UI is waiting for an updated state from this
    // thread
    private static final Long BG_SLOW_DISPATCH_THRESHOLD = 1000L;
    private static final Long BG_SLOW_DELIVERY_THRESHOLD = 1000L;
    private static final Long LONG_SLOW_DISPATCH_THRESHOLD = 2500L;
    private static final Long LONG_SLOW_DELIVERY_THRESHOLD = 2500L;
    private static final Long BROADCAST_SLOW_DISPATCH_THRESHOLD = 1000L;
    private static final Long BROADCAST_SLOW_DELIVERY_THRESHOLD = 1000L;

    /** Background Looper */
    @Provides
    @SysUISingleton
@@ -49,6 +59,8 @@ public abstract class SysUIConcurrencyModule {
        HandlerThread thread = new HandlerThread("SysUiBg",
                Process.THREAD_PRIORITY_BACKGROUND);
        thread.start();
        thread.getLooper().setSlowLogThresholdMs(BG_SLOW_DISPATCH_THRESHOLD,
                BG_SLOW_DELIVERY_THRESHOLD);
        return thread.getLooper();
    }

@@ -60,6 +72,8 @@ public abstract class SysUIConcurrencyModule {
        HandlerThread thread = new HandlerThread("BroadcastRunning",
                Process.THREAD_PRIORITY_BACKGROUND);
        thread.start();
        thread.getLooper().setSlowLogThresholdMs(BROADCAST_SLOW_DISPATCH_THRESHOLD,
                BROADCAST_SLOW_DELIVERY_THRESHOLD);
        return thread.getLooper();
    }

@@ -71,6 +85,8 @@ public abstract class SysUIConcurrencyModule {
        HandlerThread thread = new HandlerThread("SysUiLng",
                Process.THREAD_PRIORITY_BACKGROUND);
        thread.start();
        thread.getLooper().setSlowLogThresholdMs(LONG_SLOW_DISPATCH_THRESHOLD,
                LONG_SLOW_DELIVERY_THRESHOLD);
        return thread.getLooper();
    }