diff options
author | Yabin Cui <yabinc@google.com> | 2020-10-15 17:32:48 -0700 |
---|---|---|
committer | Yabin Cui <yabinc@google.com> | 2020-10-16 15:11:19 -0700 |
commit | 902f90835d88f2cde551d4463b825c31a7c468e6 (patch) | |
tree | 6d4704046f9dd260e7c49a3905faa079bed1e1f4 /simpleperf/app_api | |
parent | 3babe8947d5c07e68ecaeb1a0d2da62cd0181d4a (diff) | |
download | extras-902f90835d88f2cde551d4463b825c31a7c468e6.tar.gz |
simpleperf: support secondary android users.
1. Add --user option to simpleperf_app_runner.
2. When using run-as or simpleperf_app_runner, use `am get-current-user`
to get current user id.
3. In app_api, choose correct app data dir based on uid.
4. Update testdata apks.
Bug: 141267945
Test: run simpleperf_unit_test on different users.
Test: run CtsSimpleperfTestCases on different users.
Change-Id: Ib64c3dd55914176791ed05853b972813c5d01d40
Diffstat (limited to 'simpleperf/app_api')
-rw-r--r-- | simpleperf/app_api/cpp/simpleperf.cpp | 7 | ||||
-rw-r--r-- | simpleperf/app_api/java/com/android/simpleperf/ProfileSession.java | 10 |
2 files changed, 16 insertions, 1 deletions
diff --git a/simpleperf/app_api/cpp/simpleperf.cpp b/simpleperf/app_api/cpp/simpleperf.cpp index 71216fa0..74e17a3f 100644 --- a/simpleperf/app_api/cpp/simpleperf.cpp +++ b/simpleperf/app_api/cpp/simpleperf.cpp @@ -32,6 +32,8 @@ namespace simpleperf { +constexpr int AID_USER_OFFSET = 100000; + enum RecordCmd { CMD_PAUSE_RECORDING = 1, CMD_RESUME_RECORDING, @@ -477,6 +479,11 @@ ProfileSession::ProfileSession() { } } std::string app_data_dir = "/data/data/" + s; + int uid = getuid(); + if (uid >= AID_USER_OFFSET) { + int user_id = uid / AID_USER_OFFSET; + app_data_dir = "/data/user/" + std::to_string(user_id) + "/" + s; + } impl_ = new ProfileSessionImpl(app_data_dir); } diff --git a/simpleperf/app_api/java/com/android/simpleperf/ProfileSession.java b/simpleperf/app_api/java/com/android/simpleperf/ProfileSession.java index d1dbc53b..09896638 100644 --- a/simpleperf/app_api/java/com/android/simpleperf/ProfileSession.java +++ b/simpleperf/app_api/java/com/android/simpleperf/ProfileSession.java @@ -17,6 +17,7 @@ package com.android.simpleperf; import android.os.Build; +import android.system.Os; import android.system.OsConstants; import android.support.annotation.NonNull; @@ -106,7 +107,14 @@ public class ProfileSession { if (packageName.isEmpty()) { throw new Error("failed to find packageName"); } - mAppDataDir = "/data/data/" + packageName; + final int AID_USER_OFFSET = 100000; + int uid = Os.getuid(); + if (uid >= AID_USER_OFFSET) { + int user_id = uid / AID_USER_OFFSET; + mAppDataDir = "/data/user/" + user_id + "/" + packageName; + } else { + mAppDataDir = "/data/data/" + packageName; + } mSimpleperfDataDir = mAppDataDir + "/simpleperf_data"; } |