blob: 55cf7ed80483d2bb57cc9f6b46e5cba63e8d9848 [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.UserIdInt;
import android.app.AppOpsManager;
import android.os.Trace;
import android.util.SparseBooleanArray;
import android.util.SparseIntArray;
/**
* 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, String persistentDeviceId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#getNonDefaultUidModes");
try {
return mService.getNonDefaultUidModes(uid, persistentDeviceId);
} 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, String persistentDeviceId, int op) {
Trace.traceBegin(TRACE_TAG, "TaggedTracingAppOpsCheckingServiceInterfaceImpl#getUidMode");
try {
return mService.getUidMode(uid, persistentDeviceId, op);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public boolean setUidMode(
int uid, String persistentDeviceId, int op, @AppOpsManager.Mode int mode) {
Trace.traceBegin(TRACE_TAG, "TaggedTracingAppOpsCheckingServiceInterfaceImpl#setUidMode");
try {
return mService.setUidMode(uid, persistentDeviceId, 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 void clearAllModes() {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#clearAllModes");
try {
mService.clearAllModes();
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public SparseBooleanArray getForegroundOps(int uid, String persistentDeviceId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#getForegroundOps");
try {
return mService.getForegroundOps(uid, persistentDeviceId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public SparseBooleanArray getForegroundOps(String packageName, int userId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#getForegroundOps");
try {
return mService.getForegroundOps(packageName, userId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public boolean addAppOpsModeChangedListener(AppOpsModeChangedListener listener) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#addAppOpsModeChangedListener");
try {
return mService.addAppOpsModeChangedListener(listener);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
public boolean removeAppOpsModeChangedListener(AppOpsModeChangedListener listener) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#removeAppOpsModeChangedListener");
try {
return mService.removeAppOpsModeChangedListener(listener);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
}