Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 33421f06 authored by akihiro miura's avatar akihiro miura Committed by Mattias Nilsson
Browse files

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
parent 0a63944d
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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);
+3 −0
Original line number Diff line number Diff line
@@ -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)
+23 −0
Original line number Diff line number Diff line
@@ -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);
        }
+6 −0
Original line number Diff line number Diff line
@@ -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(() -> {