Revert "Introduce a new thread in system_server for the PermisisonController"

This reverts commit a256d31e72.

Reason for revert: b/195145506#comment13

Fixes: 195145506
Test: presubmit
Change-Id: Ib56f2588a08d4d86e313b1e840f1081321b4ccdc
This commit is contained in:
Hai Zhang
2021-08-13 17:49:20 +00:00
parent a256d31e72
commit 487cd5b1df
4 changed files with 12 additions and 101 deletions

View File

@@ -1,84 +0,0 @@
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server;
import android.os.Handler;
import android.os.HandlerExecutor;
import android.os.Looper;
import android.os.Trace;
import com.android.internal.annotations.GuardedBy;
import com.android.server.ServiceThread;
import java.util.concurrent.Executor;
/**
* Shared singleton thread for the system. This is a thread for handling
* calls to and from the PermissionController and handling synchronization
* between permissions and appops states.
*/
public final class PermissionThread extends ServiceThread {
private static final long SLOW_DISPATCH_THRESHOLD_MS = 100;
private static final long SLOW_DELIVERY_THRESHOLD_MS = 200;
private static final Object sLock = new Object();
@GuardedBy("sLock")
private static PermissionThread sInstance;
private static Handler sHandler;
private static HandlerExecutor sHandlerExecutor;
private PermissionThread() {
super("android.perm", android.os.Process.THREAD_PRIORITY_DEFAULT, /* allowIo= */ true);
}
private static void ensureThreadLocked() {
if (sInstance != null) {
return;
}
sInstance = new PermissionThread();
sInstance.start();
final Looper looper = sInstance.getLooper();
looper.setTraceTag(Trace.TRACE_TAG_SYSTEM_SERVER);
looper.setSlowLogThresholdMs(
SLOW_DISPATCH_THRESHOLD_MS, SLOW_DELIVERY_THRESHOLD_MS);
sHandler = new Handler(sInstance.getLooper());
sHandlerExecutor = new HandlerExecutor(sHandler);
}
public static PermissionThread get() {
synchronized (sLock) {
ensureThreadLocked();
return sInstance;
}
}
public static Handler getHandler() {
synchronized (sLock) {
ensureThreadLocked();
return sHandler;
}
}
public static Executor getExecutor() {
synchronized (sLock) {
ensureThreadLocked();
return sHandlerExecutor;
}
}
}

View File

@@ -33,7 +33,6 @@ import android.util.Log;
import android.util.SparseArray;
import com.android.internal.annotations.GuardedBy;
import com.android.server.PermissionThread;
/**
* Class that handles one-time permissions for a user
@@ -80,8 +79,7 @@ public class OneTimePermissionUserManager {
mContext = context;
mActivityManager = context.getSystemService(ActivityManager.class);
mAlarmManager = context.getSystemService(AlarmManager.class);
mPermissionControllerManager = new PermissionControllerManager(
mContext, PermissionThread.getHandler());
mPermissionControllerManager = context.getSystemService(PermissionControllerManager.class);
mHandler = context.getMainThreadHandler();
}

View File

@@ -145,7 +145,6 @@ import com.android.internal.util.function.TriFunction;
import com.android.internal.util.function.pooled.PooledLambda;
import com.android.server.FgThread;
import com.android.server.LocalServices;
import com.android.server.PermissionThread;
import com.android.server.ServiceThread;
import com.android.server.SystemConfig;
import com.android.server.Watchdog;
@@ -2057,7 +2056,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
private byte[] backupRuntimePermissions(@UserIdInt int userId) {
CompletableFuture<byte[]> backup = new CompletableFuture<>();
mPermissionControllerManager.getRuntimePermissionBackup(UserHandle.of(userId),
PermissionThread.getExecutor(), backup::complete);
mContext.getMainExecutor(), backup::complete);
try {
return backup.get(BACKUP_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
@@ -2102,7 +2101,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
}
mPermissionControllerManager.applyStagedRuntimePermissionBackup(packageName,
UserHandle.of(userId), PermissionThread.getExecutor(), (hasMoreBackup) -> {
UserHandle.of(userId), mContext.getMainExecutor(), (hasMoreBackup) -> {
if (hasMoreBackup) {
return;
}
@@ -4549,8 +4548,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
}
mPermissionControllerManager = new PermissionControllerManager(
mContext, PermissionThread.getHandler());
mPermissionControllerManager = mContext.getSystemService(PermissionControllerManager.class);
mPermissionPolicyInternal = LocalServices.getService(PermissionPolicyInternal.class);
}

View File

@@ -64,8 +64,8 @@ import com.android.internal.app.IAppOpsService;
import com.android.internal.infra.AndroidFuture;
import com.android.internal.util.IntPair;
import com.android.internal.util.function.pooled.PooledLambda;
import com.android.server.FgThread;
import com.android.server.LocalServices;
import com.android.server.PermissionThread;
import com.android.server.SystemService;
import com.android.server.pm.UserManagerInternal;
import com.android.server.pm.parsing.pkg.AndroidPackage;
@@ -279,7 +279,7 @@ public final class PermissionPolicyService extends SystemService {
PermissionControllerManager manager = mPermControllerManagers.get(user);
if (manager == null) {
manager = new PermissionControllerManager(
getUserContext(getContext(), user), PermissionThread.getHandler());
getUserContext(getContext(), user), FgThread.getHandler());
mPermControllerManagers.put(user, manager);
}
manager.updateUserSensitiveForApp(uid);
@@ -287,9 +287,8 @@ public final class PermissionPolicyService extends SystemService {
}, UserHandle.ALL, intentFilter, null, null);
PermissionControllerManager manager = new PermissionControllerManager(
getUserContext(getContext(), Process.myUserHandle()),
PermissionThread.getHandler());
PermissionThread.getHandler().postDelayed(manager::updateUserSensitive,
getUserContext(getContext(), Process.myUserHandle()), FgThread.getHandler());
FgThread.getHandler().postDelayed(manager::updateUserSensitive,
USER_SENSITIVE_UPDATE_DELAY_MS);
}
@@ -316,7 +315,7 @@ public final class PermissionPolicyService extends SystemService {
if (isStarted(changedUserId)) {
synchronized (mLock) {
if (mIsPackageSyncsScheduled.add(new Pair<>(packageName, changedUserId))) {
PermissionThread.getHandler().sendMessage(PooledLambda.obtainMessage(
FgThread.getHandler().sendMessage(PooledLambda.obtainMessage(
PermissionPolicyService
::synchronizePackagePermissionsAndAppOpsForUser,
this, packageName, changedUserId));
@@ -422,9 +421,9 @@ public final class PermissionPolicyService extends SystemService {
final PermissionControllerManager permissionControllerManager =
new PermissionControllerManager(
getUserContext(getContext(), UserHandle.of(userId)),
PermissionThread.getHandler());
FgThread.getHandler());
permissionControllerManager.grantOrUpgradeDefaultRuntimePermissions(
PermissionThread.getExecutor(), successful -> {
FgThread.getExecutor(), successful -> {
if (successful) {
future.complete(null);
} else {
@@ -528,7 +527,7 @@ public final class PermissionPolicyService extends SystemService {
synchronized (mLock) {
if (!mIsUidSyncScheduled.get(uid)) {
mIsUidSyncScheduled.put(uid, true);
PermissionThread.getHandler().sendMessage(PooledLambda.obtainMessage(
FgThread.getHandler().sendMessage(PooledLambda.obtainMessage(
PermissionPolicyService::resetAppOpPermissionsIfNotRequestedForUid,
this, uid));
}