blob: a028ae16da2f321a800aacbc45d7ce52dbc9d043 [file] [log] [blame]
/*
* Copyright (C) 2022 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.appop;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.app.AppOpsManager;
import android.os.Trace;
import android.util.ArraySet;
import android.util.SparseBooleanArray;
import android.util.SparseIntArray;
import java.io.PrintWriter;
/**
* Surrounds all AppOpsCheckingServiceInterface method calls with Trace.traceBegin and
* Trace.traceEnd. These traces are used for performance testing.
*/
public class AppOpsCheckingServiceTracingDecorator implements AppOpsCheckingServiceInterface {
private static final long TRACE_TAG = Trace.TRACE_TAG_ACTIVITY_MANAGER;
private final AppOpsCheckingServiceInterface mService;
AppOpsCheckingServiceTracingDecorator(
@NonNull AppOpsCheckingServiceInterface appOpsCheckingServiceInterface) {
mService = appOpsCheckingServiceInterface;
}
@Override
public void writeState() {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#writeState");
try {
mService.writeState();
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public void readState() {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#readState");
try {
mService.readState();
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public void shutdown() {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#shutdown");
try {
mService.shutdown();
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public void systemReady() {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#systemReady");
try {
mService.systemReady();
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public SparseIntArray getNonDefaultUidModes(int uid) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#getNonDefaultUidModes");
try {
return mService.getNonDefaultUidModes(uid);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public SparseIntArray getNonDefaultPackageModes(String packageName, int userId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#getNonDefaultPackageModes");
try {
return mService.getNonDefaultPackageModes(packageName, userId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public int getUidMode(int uid, int op) {
Trace.traceBegin(TRACE_TAG, "TaggedTracingAppOpsCheckingServiceInterfaceImpl#getUidMode");
try {
return mService.getUidMode(uid, op);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public boolean setUidMode(int uid, int op, @AppOpsManager.Mode int mode) {
Trace.traceBegin(TRACE_TAG, "TaggedTracingAppOpsCheckingServiceInterfaceImpl#setUidMode");
try {
return mService.setUidMode(uid, op, mode);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public int getPackageMode(@NonNull String packageName, int op, @UserIdInt int userId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#getPackageMode");
try {
return mService.getPackageMode(packageName, op, userId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public void setPackageMode(@NonNull String packageName, int op, @AppOpsManager.Mode int mode,
@UserIdInt int userId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#setPackageMode");
try {
mService.setPackageMode(packageName, op, mode, userId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public boolean removePackage(@NonNull String packageName, @UserIdInt int userId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#removePackage");
try {
return mService.removePackage(packageName, userId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public void removeUid(int uid) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#removeUid");
try {
mService.removeUid(uid);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public boolean areUidModesDefault(int uid) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#areUidModesDefault");
try {
return mService.areUidModesDefault(uid);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public boolean arePackageModesDefault(String packageName, @UserIdInt int userId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#arePackageModesDefault");
try {
return mService.arePackageModesDefault(packageName, userId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public void clearAllModes() {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#clearAllModes");
try {
mService.clearAllModes();
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public void startWatchingOpModeChanged(@NonNull OnOpModeChangedListener changedListener,
int op) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#startWatchingOpModeChanged");
try {
mService.startWatchingOpModeChanged(changedListener, op);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public void startWatchingPackageModeChanged(@NonNull OnOpModeChangedListener changedListener,
@NonNull String packageName) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#startWatchingPackageModeChanged");
try {
mService.startWatchingPackageModeChanged(changedListener, packageName);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public void removeListener(@NonNull OnOpModeChangedListener changedListener) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#removeListener");
try {
mService.removeListener(changedListener);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public ArraySet<OnOpModeChangedListener> getOpModeChangedListeners(int op) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#getOpModeChangedListeners");
try {
return mService.getOpModeChangedListeners(op);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public ArraySet<OnOpModeChangedListener> getPackageModeChangedListeners(
@NonNull String packageName) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#getPackageModeChangedListeners");
try {
return mService.getPackageModeChangedListeners(packageName);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public void notifyWatchersOfChange(int op, int uid) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#notifyWatchersOfChange");
try {
mService.notifyWatchersOfChange(op, uid);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public void notifyOpChanged(@NonNull OnOpModeChangedListener changedListener, int op, int uid,
@Nullable String packageName) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#notifyOpChanged");
try {
mService.notifyOpChanged(changedListener, op, uid, packageName);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public void notifyOpChangedForAllPkgsInUid(int op, int uid, boolean onlyForeground,
@Nullable OnOpModeChangedListener callbackToIgnore) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#notifyOpChangedForAllPkgsInUid");
try {
mService.notifyOpChangedForAllPkgsInUid(op, uid, onlyForeground, callbackToIgnore);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public SparseBooleanArray evalForegroundUidOps(int uid, SparseBooleanArray foregroundOps) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#evalForegroundUidOps");
try {
return mService.evalForegroundUidOps(uid, foregroundOps);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public SparseBooleanArray evalForegroundPackageOps(String packageName,
SparseBooleanArray foregroundOps, @UserIdInt int userId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#evalForegroundPackageOps");
try {
return mService.evalForegroundPackageOps(packageName, foregroundOps, userId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public boolean dumpListeners(int dumpOp, int dumpUid, String dumpPackage,
PrintWriter printWriter) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#dumpListeners");
try {
return mService.dumpListeners(dumpOp, dumpUid, dumpPackage, printWriter);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
}