Extract profile files in their dedicated folder
Current profiles (the ones which have not been used for
compilation) are stored in /data/misc/profiles/cur/0/pkgname/.
Reference profiles (the merged of all user profiles, used for
compilation) are stored in /data/misc/profiles/ref/pkgname.
The profile analysis flow has been changed to use profman
before calling dex2oat. profman decides if there is a need
for compilation and does the merging.
Bug: 26719109
Bug: 26563023
Bug: 26881016
Change-Id: I5a86ed5fd07a28e2e580f9c108428527ba7993b6
diff --git a/cmds/installd/utils.cpp b/cmds/installd/utils.cpp
index d25bf71..74f4264 100644
--- a/cmds/installd/utils.cpp
+++ b/cmds/installd/utils.cpp
@@ -59,6 +59,11 @@
}
}
+static void check_package_name(const char* package_name) {
+ CHECK(is_valid_filename(package_name));
+ CHECK(is_valid_package_name(package_name) == 0);
+}
+
/**
* Create the path name where package app contents should be stored for
* the given volume UUID and package name. An empty UUID is assumed to
@@ -66,9 +71,7 @@
*/
std::string create_data_app_package_path(const char* volume_uuid,
const char* package_name) {
- CHECK(is_valid_filename(package_name));
- CHECK(is_valid_package_name(package_name) == 0);
-
+ check_package_name(package_name);
return StringPrintf("%s/%s",
create_data_app_path(volume_uuid).c_str(), package_name);
}
@@ -80,18 +83,14 @@
*/
std::string create_data_user_package_path(const char* volume_uuid,
userid_t user, const char* package_name) {
- CHECK(is_valid_filename(package_name));
- CHECK(is_valid_package_name(package_name) == 0);
-
+ check_package_name(package_name);
return StringPrintf("%s/%s",
create_data_user_path(volume_uuid, user).c_str(), package_name);
}
std::string create_data_user_de_package_path(const char* volume_uuid,
userid_t user, const char* package_name) {
- CHECK(is_valid_filename(package_name));
- CHECK(is_valid_package_name(package_name) == 0);
-
+ check_package_name(package_name);
return StringPrintf("%s/%s",
create_data_user_de_path(volume_uuid, user).c_str(), package_name);
}
@@ -161,6 +160,20 @@
return StringPrintf("%s/media/%u", create_data_path(volume_uuid).c_str(), userid);
}
+std::string create_data_user_profiles_path(userid_t userid) {
+ return StringPrintf("%s/cur/%u", android_profiles_dir.path, userid);
+}
+
+std::string create_data_user_profile_package_path(userid_t user, const char* package_name) {
+ check_package_name(package_name);
+ return StringPrintf("%s/%s",create_data_user_profiles_path(user).c_str(), package_name);
+}
+
+std::string create_data_ref_profile_package_path(const char* package_name) {
+ check_package_name(package_name);
+ return StringPrintf("%s/ref/%s", android_profiles_dir.path, package_name);
+}
+
std::vector<userid_t> get_known_users(const char* volume_uuid) {
std::vector<userid_t> users;