From 243fbd3e5d3b929cdecf48f8fdc287749b02aecb Mon Sep 17 00:00:00 2001 From: zakcohen Date: Wed, 2 Jun 2021 10:33:31 -0700 Subject: [PATCH] AssistContentRequester move binder call to background thread. The call into system server is synchronous, so make the call off the main thread to avoid jank. Bug: 189251291 Test: Local with flag enabled Change-Id: I1787a0ad68488755bf19e813ecfe9fc079cfaed8 --- .../util/AssistContentRequester.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/quickstep/src/com/android/quickstep/util/AssistContentRequester.java b/quickstep/src/com/android/quickstep/util/AssistContentRequester.java index 71c6382323..b1e38ebcbb 100644 --- a/quickstep/src/com/android/quickstep/util/AssistContentRequester.java +++ b/quickstep/src/com/android/quickstep/util/AssistContentRequester.java @@ -54,6 +54,7 @@ public class AssistContentRequester { private final IActivityTaskManager mActivityTaskManager; private final String mPackageName; private final Executor mCallbackExecutor; + private final Executor mSystemInteractionExecutor; // If system loses the callback, our internal cache of original callback will also get cleared. private final Map mPendingCallbacks = @@ -63,6 +64,7 @@ public class AssistContentRequester { mActivityTaskManager = ActivityTaskManager.getService(); mPackageName = context.getApplicationContext().getPackageName(); mCallbackExecutor = Executors.MAIN_EXECUTOR; + mSystemInteractionExecutor = Executors.UI_HELPER_EXECUTOR; } /** @@ -71,13 +73,16 @@ public class AssistContentRequester { * @param taskId to query for the content. * @param callback to call when the content is available, called on the main thread. */ - public void requestAssistContent(int taskId, Callback callback) { - try { - mActivityTaskManager.requestAssistDataForTask( - new AssistDataReceiver(callback, this), taskId, mPackageName); - } catch (RemoteException e) { - Log.e(TAG, "Requesting assist content failed for task: " + taskId, e); - } + public void requestAssistContent(final int taskId, final Callback callback) { + // ActivityTaskManager interaction here is synchronous, so call off the main thread. + mSystemInteractionExecutor.execute(() -> { + try { + mActivityTaskManager.requestAssistDataForTask( + new AssistDataReceiver(callback, this), taskId, mPackageName); + } catch (RemoteException e) { + Log.e(TAG, "Requesting assist content failed for task: " + taskId, e); + } + }); } private void executeOnMainExecutor(Runnable callback) {