summaryrefslogtreecommitdiff
path: root/simpleperf/app_api
diff options
context:
space:
mode:
authorYabin Cui <yabinc@google.com>2020-10-15 17:32:48 -0700
committerYabin Cui <yabinc@google.com>2020-10-16 15:11:19 -0700
commit902f90835d88f2cde551d4463b825c31a7c468e6 (patch)
tree6d4704046f9dd260e7c49a3905faa079bed1e1f4 /simpleperf/app_api
parent3babe8947d5c07e68ecaeb1a0d2da62cd0181d4a (diff)
downloadextras-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.cpp7
-rw-r--r--simpleperf/app_api/java/com/android/simpleperf/ProfileSession.java10
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";
}