Adding binder tracking support in tests
- Whitelist specific binder calls when handling touch during swipe up
gestures
- Only track binding for touch handling and certain launcher lifecycle
changes for now
Bug: 140246642
Change-Id: I6ba30280dd17da358662870f8719ae851536ad8b
diff --git a/src/com/android/launcher3/BaseDraggingActivity.java b/src/com/android/launcher3/BaseDraggingActivity.java
index 994ba65..e2ef337 100644
--- a/src/com/android/launcher3/BaseDraggingActivity.java
+++ b/src/com/android/launcher3/BaseDraggingActivity.java
@@ -36,6 +36,7 @@
import com.android.launcher3.compat.LauncherAppsCompat;
import com.android.launcher3.model.AppLaunchTracker;
import com.android.launcher3.shortcuts.DeepShortcutManager;
+import com.android.launcher3.uioverrides.DejankBinderTracker;
import com.android.launcher3.uioverrides.DisplayRotationListener;
import com.android.launcher3.uioverrides.WallpaperColorInfo;
import com.android.launcher3.util.PackageManagerHelper;
@@ -65,7 +66,8 @@
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mIsSafeModeEnabled = getPackageManager().isSafeMode();
+ mIsSafeModeEnabled = DejankBinderTracker.whitelistIpcs(() ->
+ getPackageManager().isSafeMode());
mRotationListener = new DisplayRotationListener(this, this::onDeviceRotationChanged);
// Update theme
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index a2db411..4f8b20e 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -116,6 +116,7 @@
import com.android.launcher3.states.InternalStateHandler;
import com.android.launcher3.states.RotationHelper;
import com.android.launcher3.touch.ItemClickHandler;
+import com.android.launcher3.uioverrides.DejankBinderTracker;
import com.android.launcher3.uioverrides.UiFactory;
import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper;
import com.android.launcher3.userevent.nano.LauncherLogProto;
@@ -309,6 +310,7 @@
@Override
protected void onCreate(Bundle savedInstanceState) {
+ DejankBinderTracker.allowBinderTrackingInTests();
RaceConditionTracker.onEvent(ON_CREATE_EVT, ENTER);
if (DEBUG_STRICT_MODE) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
@@ -430,6 +432,7 @@
}
}
});
+ DejankBinderTracker.disallowBinderTrackingInTests();
}
protected LauncherOverlayManager getDefaultOverlay() {
@@ -941,6 +944,7 @@
@Override
protected void onStart() {
+ DejankBinderTracker.allowBinderTrackingInTests();
RaceConditionTracker.onEvent(ON_START_EVT, ENTER);
super.onStart();
if (!mDeferOverlayCallbacks) {
@@ -949,6 +953,7 @@
mAppWidgetHost.setListenIfResumed(true);
RaceConditionTracker.onEvent(ON_START_EVT, EXIT);
+ DejankBinderTracker.disallowBinderTrackingInTests();
}
private void handleDeferredResume() {
@@ -1043,6 +1048,7 @@
@Override
protected void onResume() {
+ DejankBinderTracker.allowBinderTrackingInTests();
RaceConditionTracker.onEvent(ON_RESUME_EVT, ENTER);
TraceHelper.beginSection("ON_RESUME");
super.onResume();
@@ -1068,6 +1074,7 @@
TraceHelper.endSection("ON_RESUME");
RaceConditionTracker.onEvent(ON_RESUME_EVT, EXIT);
+ DejankBinderTracker.disallowBinderTrackingInTests();
}
@Override
diff --git a/src/com/android/launcher3/util/MainThreadInitializedObject.java b/src/com/android/launcher3/util/MainThreadInitializedObject.java
index fe9c2c4..cf4e8c7 100644
--- a/src/com/android/launcher3/util/MainThreadInitializedObject.java
+++ b/src/com/android/launcher3/util/MainThreadInitializedObject.java
@@ -22,6 +22,7 @@
import androidx.annotation.VisibleForTesting;
+import com.android.launcher3.uioverrides.DejankBinderTracker;
import com.android.launcher3.util.ResourceBasedOverride.Overrides;
import java.util.concurrent.ExecutionException;
@@ -41,7 +42,8 @@
public T get(Context context) {
if (mValue == null) {
if (Looper.myLooper() == Looper.getMainLooper()) {
- mValue = mProvider.get(context.getApplicationContext());
+ mValue = DejankBinderTracker.whitelistIpcs(() ->
+ mProvider.get(context.getApplicationContext()));
} else {
try {
return MAIN_EXECUTOR.submit(() -> get(context)).get();