From 2073a5e858e50fac316523c89d8237655d4b890d Mon Sep 17 00:00:00 2001 From: Sergey Nikolaienkov Date: Wed, 2 Feb 2022 12:19:20 +0100 Subject: [PATCH] Give CompanionDeviceServiceConnector its own worker thread Allocate a dedicated ServiceThread to be used by CDM's CompanionDeviceServiceConnector's. Bug: 211398735 Test: atest --iterations 10 CtsCompanionDeviceManagerCoreTestCases Change-Id: I9405ec59bfd122b5a651f763fceade51a05b4296 --- .../CompanionDeviceServiceConnector.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceServiceConnector.java b/services/companion/java/com/android/server/companion/CompanionDeviceServiceConnector.java index 777917cd5a9ef..f2a58b74a65a8 100644 --- a/services/companion/java/com/android/server/companion/CompanionDeviceServiceConnector.java +++ b/services/companion/java/com/android/server/companion/CompanionDeviceServiceConnector.java @@ -17,6 +17,7 @@ package com.android.server.companion; import static android.content.Context.BIND_IMPORTANT; +import static android.os.Process.THREAD_PRIORITY_DEFAULT; import android.annotation.NonNull; import android.annotation.Nullable; @@ -28,10 +29,12 @@ import android.companion.ICompanionDeviceService; import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.os.Handler; import android.os.IBinder; import android.util.Log; import com.android.internal.infra.ServiceConnector; +import com.android.server.ServiceThread; /** * Manages a connection (binding) to an instance of {@link CompanionDeviceService} running in the @@ -106,6 +109,19 @@ class CompanionDeviceServiceConnector extends ServiceConnector.Impl + * (By default, {@link ServiceConnector.Impl} process jobs on the + * {@link android.os.Looper#getMainLooper() MainThread} which is a shared singleton thread + * within system_server and thus tends to get heavily congested) + */ + @Override + protected @NonNull Handler getJobHandler() { + return getServiceThread().getThreadHandler(); + } + @Override protected long getAutoDisconnectTimeoutMs() { // Do NOT auto-disconnect. @@ -116,4 +132,25 @@ class CompanionDeviceServiceConnector extends ServiceConnector.Impl + * Do NOT reference directly, use {@link #getServiceThread()} method instead. + */ + private static volatile @Nullable ServiceThread sServiceThread; }