summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author akihiro miura <akihiro.miura@sony.com> 2017-10-20 19:30:27 +0900
committer Mattias Nilsson <mattias.nilsson@sony.com> 2023-10-31 16:12:23 +0100
commit33421f06b3bc67e00babae1037945d1c50509af4 (patch)
tree27fc8edcb8c8e9f73d39dfc4a058039b370dbd12
parent0a63944d29c27f4f7332500ffa3330e7eecf0e07 (diff)
Show event log when application data is deleted
Add event log to show the information of trigger for deleting application data. Log Format: - Event log name : installer_clear_app_data_caller - Caller PID - Caller UID - package which is the target for deleting data - flag - Event log name : installer_clear_app_data_call_stack - method name on Call stack - class name on Call stack - file name on Call stack - line number on Call stack - Event log name : pm_clear_app_data_caller - Caller PID - Caller UID - package which is the target for deleting data - Event log name : am_clear_app_data_caller - Caller PID - Caller UID - package which is the target for deleting data Manual test steps: Start a logcat viewer on a adb host with the device under test connected 1. Do $ adb logcat -b events | grep clear_app_data Delete app data on the device under test. 2. Go to Settings->Apps->All apps 4. Click on an app, for example Chrome 5. Click on [Storage and cache] 6. Click on [Clear storage] 7. Click on [Delete] 8. Observe: See output from the adb host with the logcat command. 10-17 13:01:57.649 1766 3657 I am_clear_app_data_caller: [7093,10268,com.android.chrome] 10-17 13:01:57.671 1766 3657 I pm_clear_app_data_caller: [1766,1000,com.android.chrome] 10-17 13:01:57.680 1766 2401 I installer_clear_app_data_caller: [1766,1000,com.android.chrome,7] 10-17 13:01:57.680 1766 2401 I installer_clear_app_data_call_stack: [clearAppData,com.android.server.pm.Installer,Installer.java,447] 10-17 13:01:57.680 1766 2401 I installer_clear_app_data_call_stack: [clearAppDataLeafLIF,com.android.server.pm.AppDataHelper,AppDataHelper.java,580] 10-17 13:01:57.680 1766 2401 I installer_clear_app_data_call_stack: [clearAppDataLIF,com.android.server.pm.AppDataHelper,AppDataHelper.java,565] 10-17 13:01:57.680 1766 2401 I installer_clear_app_data_call_stack: [clearApplicationUserDataLIF,com.android.server.pm.PackageManagerService,PackageManagerService.java,3495] 10-17 13:01:57.680 1766 2401 I installer_clear_app_data_call_stack: [-$$Nest$mclearApplicationUserDataLIF,com.android.server.pm.PackageManagerService,PackageManagerService.java,0] 10-17 13:01:57.680 1766 2401 I installer_clear_app_data_call_stack: [run,com.android.server.pm.PackageManagerService$IPackageManagerImpl$1,PackageManagerService.java,4789] 10-17 13:01:57.680 1766 2401 I installer_clear_app_data_call_stack: [handleCallback,android.os.Handler,Handler.java,958] 10-17 13:01:57.680 1766 2401 I installer_clear_app_data_call_stack: [dispatchMessage,android.os.Handler,Handler.java,99] 10-17 13:01:57.680 1766 2401 I installer_clear_app_data_call_stack: [loopOnce,android.os.Looper,Looper.java,205] 10-17 13:01:57.680 1766 2401 I installer_clear_app_data_call_stack: [loop,android.os.Looper,Looper.java,294] 10-17 13:01:57.680 1766 2401 I installer_clear_app_data_call_stack: [run,android.os.HandlerThread,HandlerThread.java,67] 10-17 13:01:57.680 1766 2401 I installer_clear_app_data_call_stack: [run,com.android.server.ServiceThread,ServiceThread.java,46] Bug: 305787657 Test: manual Change-Id: I9396c0fc23d43f1c88b268a0596e8682dd5a8377
-rw-r--r--services/core/java/com/android/server/EventLogTags.logtags9
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java1
-rw-r--r--services/core/java/com/android/server/am/EventLogTags.logtags3
-rw-r--r--services/core/java/com/android/server/pm/Installer.java23
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java6
5 files changed, 42 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/EventLogTags.logtags b/services/core/java/com/android/server/EventLogTags.logtags
index b67e62703067..a71966b916c9 100644
--- a/services/core/java/com/android/server/EventLogTags.logtags
+++ b/services/core/java/com/android/server/EventLogTags.logtags
@@ -179,6 +179,15 @@ option java_package com.android.server
3130 pm_snapshot_stats (build_count|1|1),(reuse_count|1|1),(big_builds|1|1),(short_lived|1|1),(max_build_time|1|3),(cumm_build_time|2|3)
# Snapshot rebuild instance
3131 pm_snapshot_rebuild (build_time|1|3),(lifetime|1|3)
+# Caller information to clear application data
+1003160 pm_clear_app_data_caller (pid|1),(uid|1),(package|3)
+# ---------------------------
+# Installer.java
+# ---------------------------
+# Caller Information to clear application data
+1003200 installer_clear_app_data_caller (pid|1),(uid|1),(package|3),(flags|1)
+# Call stack to clear application data
+1003201 installer_clear_app_data_call_stack (method|3),(class|3),(file|3),(line|1)
# ---------------------------
# InputMethodManagerService.java
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index e74371e6a66b..c0da30d0e153 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -3468,6 +3468,7 @@ public class ActivityManagerService extends IActivityManager.Stub
enforceNotIsolatedCaller("clearApplicationUserData");
int uid = Binder.getCallingUid();
int pid = Binder.getCallingPid();
+ EventLog.writeEvent(EventLogTags.AM_CLEAR_APP_DATA_CALLER, pid, uid, packageName);
final int resolvedUserId = mUserController.handleIncomingUser(pid, uid, userId, false,
ALLOW_FULL_ONLY, "clearApplicationUserData", null);
diff --git a/services/core/java/com/android/server/am/EventLogTags.logtags b/services/core/java/com/android/server/am/EventLogTags.logtags
index 9e9db6aff699..931914f17729 100644
--- a/services/core/java/com/android/server/am/EventLogTags.logtags
+++ b/services/core/java/com/android/server/am/EventLogTags.logtags
@@ -129,3 +129,6 @@ option java_package com.android.server.am
# Intent Sender redirect for UserHandle.USER_CURRENT
30110 am_intent_sender_redirect_user (userId|1|5)
+
+# Caller information to clear application data
+1030002 am_clear_app_data_caller (pid|1),(uid|1),(package|3)
diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java
index 9ac983dfebeb..c401dab3a482 100644
--- a/services/core/java/com/android/server/pm/Installer.java
+++ b/services/core/java/com/android/server/pm/Installer.java
@@ -24,6 +24,7 @@ import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.content.Context;
import android.content.pm.PackageStats;
+import android.os.Binder;
import android.os.Build;
import android.os.CreateAppDataArgs;
import android.os.CreateAppDataResult;
@@ -34,9 +35,11 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.storage.CrateMetadata;
import android.text.format.DateUtils;
+import android.util.EventLog;
import android.util.Slog;
import com.android.internal.os.BackgroundThread;
+import com.android.server.EventLogTags;
import com.android.server.SystemService;
import dalvik.system.BlockGuard;
@@ -438,6 +441,26 @@ public class Installer extends SystemService {
if (!checkBeforeRemote()) return;
try {
mInstalld.clearAppData(uuid, packageName, userId, flags, ceDataInode);
+
+ final StackTraceElement[] elements = Thread.currentThread().getStackTrace();
+ String className;
+ String methodName;
+ String fileName;
+ int lineNumber;
+ final int pid = Binder.getCallingPid();
+ final int uid = Binder.getCallingUid();
+ EventLog.writeEvent(EventLogTags.INSTALLER_CLEAR_APP_DATA_CALLER, pid, uid, packageName,
+ flags);
+ // Skip the first two elements since they are always the same, ie
+ // Thread#getStackTrace() and VMStack#getThreadStackTrace()
+ for (int i = 2; i < elements.length; i++) {
+ className = elements[i].getClassName();
+ methodName = elements[i].getMethodName();
+ fileName = elements[i].getFileName();
+ lineNumber = elements[i].getLineNumber();
+ EventLog.writeEvent(EventLogTags.INSTALLER_CLEAR_APP_DATA_CALL_STACK, methodName,
+ className, fileName, lineNumber);
+ }
} catch (Exception e) {
throw InstallerException.from(e);
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index daf3617be91c..a1c435af0452 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -4729,6 +4729,9 @@ public class PackageManagerService implements PackageSender, TestUtilityService
throw new SecurityException("Cannot clear data for a protected package: "
+ packageName);
}
+ final int callingPid = Binder.getCallingPid();
+ EventLog.writeEvent(EventLogTags.PM_CLEAR_APP_DATA_CALLER, callingPid, callingUid,
+ packageName);
// Queue up an async operation since the package deletion may take a little while.
mHandler.post(new Runnable() {
@@ -4861,6 +4864,9 @@ public class PackageManagerService implements PackageSender, TestUtilityService
/* checkShell= */ false, "delete application cache files");
final int hasAccessInstantApps = mContext.checkCallingOrSelfPermission(
android.Manifest.permission.ACCESS_INSTANT_APPS);
+ final int callingPid = Binder.getCallingPid();
+ EventLog.writeEvent(EventLogTags.PM_CLEAR_APP_DATA_CALLER, callingPid, callingUid,
+ packageName);
// Queue up an async operation since the package deletion may take a little while.
mHandler.post(() -> {