diff options
-rw-r--r-- | cmds/installd/InstalldNativeService.cpp | 27 | ||||
-rw-r--r-- | cmds/installd/InstalldNativeService.h | 7 | ||||
-rw-r--r-- | cmds/installd/binder/android/os/IInstalld.aidl | 3 | ||||
-rw-r--r-- | cmds/installd/dexopt.cpp | 40 | ||||
-rw-r--r-- | cmds/installd/installd_constants.h | 4 | ||||
-rw-r--r-- | cmds/installd/otapreopt.cpp | 2 | ||||
-rw-r--r-- | cmds/installd/tests/installd_dexopt_test.cpp | 9 | ||||
-rw-r--r-- | opengl/libs/EGL/FileBlobCache.cpp | 1 | ||||
-rw-r--r-- | opengl/tests/gl2_jni/Android.bp | 1 | ||||
-rw-r--r-- | opengl/tests/gl_jni/Android.bp | 1 | ||||
-rw-r--r-- | opengl/tests/gl_perfapp/Android.bp | 1 | ||||
-rw-r--r-- | opengl/tests/gldual/Android.bp | 1 |
12 files changed, 86 insertions, 11 deletions
diff --git a/cmds/installd/InstalldNativeService.cpp b/cmds/installd/InstalldNativeService.cpp index 6fee11b566..c0fb0f89a6 100644 --- a/cmds/installd/InstalldNativeService.cpp +++ b/cmds/installd/InstalldNativeService.cpp @@ -412,6 +412,33 @@ static bool prepare_app_profile_dir(const std::string& packageName, int32_t appI return true; } +binder::Status InstalldNativeService::createAppDataBatched( + const std::optional<std::vector<std::optional<std::string>>>& uuids, + const std::optional<std::vector<std::optional<std::string>>>& packageNames, + int32_t userId, int32_t flags, const std::vector<int32_t>& appIds, + const std::vector<std::string>& seInfos, const std::vector<int32_t>& targetSdkVersions, + int64_t* _aidl_return) { + ENFORCE_UID(AID_SYSTEM); + std::lock_guard<std::recursive_mutex> lock(mLock); + + ATRACE_BEGIN("createAppDataBatched"); + binder::Status ret; + for (size_t i = 0; i < uuids->size(); i++) { + std::optional<std::string> packageName = packageNames->at(i); + if (!packageName) { + continue; + } + ret = createAppData(uuids->at(i), *packageName, userId, flags, appIds[i], + seInfos[i], targetSdkVersions[i], _aidl_return); + if (!ret.isOk()) { + ATRACE_END(); + return ret; + } + } + ATRACE_END(); + return ok(); +} + binder::Status InstalldNativeService::createAppData(const std::optional<std::string>& uuid, const std::string& packageName, int32_t userId, int32_t flags, int32_t appId, const std::string& seInfo, int32_t targetSdkVersion, int64_t* _aidl_return) { diff --git a/cmds/installd/InstalldNativeService.h b/cmds/installd/InstalldNativeService.h index 1a8da5f865..3f44021b95 100644 --- a/cmds/installd/InstalldNativeService.h +++ b/cmds/installd/InstalldNativeService.h @@ -44,7 +44,12 @@ public: int32_t userSerial, int32_t flags); binder::Status destroyUserData(const std::optional<std::string>& uuid, int32_t userId, int32_t flags); - + binder::Status createAppDataBatched( + const std::optional<std::vector<std::optional<std::string>>>& uuids, + const std::optional<std::vector<std::optional<std::string>>>& packageNames, + int32_t userId, int32_t flags, const std::vector<int32_t>& appIds, + const std::vector<std::string>& seInfos, const std::vector<int32_t>& targetSdkVersions, + int64_t* _aidl_return); binder::Status createAppData(const std::optional<std::string>& uuid, const std::string& packageName, int32_t userId, int32_t flags, int32_t appId, const std::string& seInfo, int32_t targetSdkVersion, int64_t* _aidl_return); diff --git a/cmds/installd/binder/android/os/IInstalld.aidl b/cmds/installd/binder/android/os/IInstalld.aidl index 0b9a444c58..1e18a6ba70 100644 --- a/cmds/installd/binder/android/os/IInstalld.aidl +++ b/cmds/installd/binder/android/os/IInstalld.aidl @@ -23,6 +23,9 @@ interface IInstalld { long createAppData(@nullable @utf8InCpp String uuid, in @utf8InCpp String packageName, int userId, int flags, int appId, in @utf8InCpp String seInfo, int targetSdkVersion); + long createAppDataBatched(in @nullable @utf8InCpp String[] uuids, + in @nullable @utf8InCpp String[] packageNames, in int userId, int flags, in int[] appIds, + in @utf8InCpp String[] seInfos, in int[] targetSdkVersions); void restoreconAppData(@nullable @utf8InCpp String uuid, @utf8InCpp String packageName, int userId, int flags, int appId, @utf8InCpp String seInfo); void migrateAppData(@nullable @utf8InCpp String uuid, @utf8InCpp String packageName, diff --git a/cmds/installd/dexopt.cpp b/cmds/installd/dexopt.cpp index 1c4c98010e..9566cf66f6 100644 --- a/cmds/installd/dexopt.cpp +++ b/cmds/installd/dexopt.cpp @@ -262,6 +262,17 @@ static std::string MapPropertyToArg(const std::string& property, return ""; } +static std::string MapPropertyToArgWithBackup(const std::string& property, + const std::string& backupProperty, + const std::string& format, + const std::string& default_value = "") { + std::string value = GetProperty(property, default_value); + if (!value.empty()) { + return StringPrintf(format.c_str(), value.c_str()); + } + return MapPropertyToArg(backupProperty, format, default_value); +} + // Determines which binary we should use for execution (the debug or non-debug version). // e.g. dex2oatd vs dex2oat static const char* select_execution_binary(const char* binary, const char* debug_binary, @@ -321,6 +332,7 @@ class RunDex2Oat : public ExecVHelper { const char* compiler_filter, bool debuggable, bool post_bootcomplete, + bool for_restore, bool background_job_compile, int profile_fd, const char* class_loader_context, @@ -336,14 +348,24 @@ class RunDex2Oat : public ExecVHelper { std::string dex2oat_Xms_arg = MapPropertyToArg("dalvik.vm.dex2oat-Xms", "-Xms%s"); std::string dex2oat_Xmx_arg = MapPropertyToArg("dalvik.vm.dex2oat-Xmx", "-Xmx%s"); - const char* threads_property = post_bootcomplete - ? "dalvik.vm.dex2oat-threads" - : "dalvik.vm.boot-dex2oat-threads"; - std::string dex2oat_threads_arg = MapPropertyToArg(threads_property, "-j%s"); - const char* cpu_set_property = post_bootcomplete - ? "dalvik.vm.dex2oat-cpu-set" - : "dalvik.vm.boot-dex2oat-cpu-set"; - std::string dex2oat_cpu_set_arg = MapPropertyToArg(cpu_set_property, "--cpu-set=%s"); + std::string threads_format = "-j%s"; + std::string dex2oat_threads_arg = post_bootcomplete + ? (for_restore + ? MapPropertyToArgWithBackup( + "dalvik.vm.restore-dex2oat-threads", + "dalvik.vm.dex2oat-threads", + threads_format) + : MapPropertyToArg("dalvik.vm.dex2oat-threads", threads_format)) + : MapPropertyToArg("dalvik.vm.boot-dex2oat-threads", threads_format); + std::string cpu_set_format = "--cpu-set=%s"; + std::string dex2oat_cpu_set_arg = post_bootcomplete + ? (for_restore + ? MapPropertyToArgWithBackup( + "dalvik.vm.restore-dex2oat-cpu-set", + "dalvik.vm.dex2oat-cpu-set", + cpu_set_format) + : MapPropertyToArg("dalvik.vm.dex2oat-cpu-set", cpu_set_format)) + : MapPropertyToArg("dalvik.vm.boot-dex2oat-cpu-set", cpu_set_format); std::string bootclasspath; char* dex2oat_bootclasspath = getenv("DEX2OATBOOTCLASSPATH"); @@ -2075,6 +2097,7 @@ int dexopt(const char* dex_path, uid_t uid, const char* pkgname, const char* ins bool enable_hidden_api_checks = (dexopt_flags & DEXOPT_ENABLE_HIDDEN_API_CHECKS) != 0; bool generate_compact_dex = (dexopt_flags & DEXOPT_GENERATE_COMPACT_DEX) != 0; bool generate_app_image = (dexopt_flags & DEXOPT_GENERATE_APP_IMAGE) != 0; + bool for_restore = (dexopt_flags & DEXOPT_FOR_RESTORE) != 0; // Check if we're dealing with a secondary dex file and if we need to compile it. std::string oat_dir_str; @@ -2191,6 +2214,7 @@ int dexopt(const char* dex_path, uid_t uid, const char* pkgname, const char* ins compiler_filter, debuggable, boot_complete, + for_restore, background_job_compile, reference_profile_fd.get(), class_loader_context, diff --git a/cmds/installd/installd_constants.h b/cmds/installd/installd_constants.h index c928631d8f..b5ee481645 100644 --- a/cmds/installd/installd_constants.h +++ b/cmds/installd/installd_constants.h @@ -55,6 +55,7 @@ constexpr int DEXOPT_IDLE_BACKGROUND_JOB = 1 << 9; constexpr int DEXOPT_ENABLE_HIDDEN_API_CHECKS = 1 << 10; constexpr int DEXOPT_GENERATE_COMPACT_DEX = 1 << 11; constexpr int DEXOPT_GENERATE_APP_IMAGE = 1 << 12; +constexpr int DEXOPT_FOR_RESTORE = 1 << 13; // TODO(b/135202722): remove /* all known values for dexopt flags */ constexpr int DEXOPT_MASK = @@ -69,7 +70,8 @@ constexpr int DEXOPT_MASK = | DEXOPT_IDLE_BACKGROUND_JOB | DEXOPT_ENABLE_HIDDEN_API_CHECKS | DEXOPT_GENERATE_COMPACT_DEX - | DEXOPT_GENERATE_APP_IMAGE; + | DEXOPT_GENERATE_APP_IMAGE + | DEXOPT_FOR_RESTORE; // NOTE: keep in sync with StorageManager constexpr int FLAG_STORAGE_DE = 1 << 0; diff --git a/cmds/installd/otapreopt.cpp b/cmds/installd/otapreopt.cpp index d773790091..18f8268bf3 100644 --- a/cmds/installd/otapreopt.cpp +++ b/cmds/installd/otapreopt.cpp @@ -83,7 +83,7 @@ static_assert(DEXOPT_ENABLE_HIDDEN_API_CHECKS == 1 << 10, static_assert(DEXOPT_GENERATE_COMPACT_DEX == 1 << 11, "DEXOPT_GENERATE_COMPACT_DEX unexpected"); static_assert(DEXOPT_GENERATE_APP_IMAGE == 1 << 12, "DEXOPT_GENERATE_APP_IMAGE unexpected"); -static_assert(DEXOPT_MASK == (0x1dfe | DEXOPT_IDLE_BACKGROUND_JOB), +static_assert(DEXOPT_MASK == (0x3dfe | DEXOPT_IDLE_BACKGROUND_JOB), "DEXOPT_MASK unexpected."); diff --git a/cmds/installd/tests/installd_dexopt_test.cpp b/cmds/installd/tests/installd_dexopt_test.cpp index 7d8cf1f9e5..9a1888cf70 100644 --- a/cmds/installd/tests/installd_dexopt_test.cpp +++ b/cmds/installd/tests/installd_dexopt_test.cpp @@ -643,6 +643,15 @@ TEST_F(DexoptTest, DexoptPrimaryPublicCreateOatDir) { DEX2OAT_FROM_SCRATCH); } +TEST_F(DexoptTest, DexoptPrimaryPublicRestore) { + LOG(INFO) << "DexoptPrimaryPublicRestore"; + CompilePrimaryDexOk("verify", + DEXOPT_FOR_RESTORE | DEXOPT_BOOTCOMPLETE | DEXOPT_PUBLIC, + app_oat_dir_.c_str(), + kTestAppGid, + DEX2OAT_FROM_SCRATCH); +} + TEST_F(DexoptTest, DexoptPrimaryFailedInvalidFilter) { LOG(INFO) << "DexoptPrimaryFailedInvalidFilter"; binder::Status status; diff --git a/opengl/libs/EGL/FileBlobCache.cpp b/opengl/libs/EGL/FileBlobCache.cpp index 96a29e1378..328477806f 100644 --- a/opengl/libs/EGL/FileBlobCache.cpp +++ b/opengl/libs/EGL/FileBlobCache.cpp @@ -21,6 +21,7 @@ #include <inttypes.h> #include <sys/mman.h> #include <sys/stat.h> +#include <unistd.h> #include <log/log.h> diff --git a/opengl/tests/gl2_jni/Android.bp b/opengl/tests/gl2_jni/Android.bp index 65f89b159e..8d4323f9ca 100644 --- a/opengl/tests/gl2_jni/Android.bp +++ b/opengl/tests/gl2_jni/Android.bp @@ -17,6 +17,7 @@ cc_library_shared { "-Werror", "-Wno-error=unused-parameter", ], + header_libs: ["jni_headers"], srcs: ["jni/gl_code.cpp"], shared_libs: [ "liblog", diff --git a/opengl/tests/gl_jni/Android.bp b/opengl/tests/gl_jni/Android.bp index 5bec336dd1..0cb129a117 100644 --- a/opengl/tests/gl_jni/Android.bp +++ b/opengl/tests/gl_jni/Android.bp @@ -19,6 +19,7 @@ cc_library_shared { "-Werror", "-Wno-error=unused-parameter", ], + header_libs: ["jni_headers"], srcs: ["jni/gl_code.cpp"], shared_libs: [ "liblog", diff --git a/opengl/tests/gl_perfapp/Android.bp b/opengl/tests/gl_perfapp/Android.bp index cf899acfee..66afb6a82c 100644 --- a/opengl/tests/gl_perfapp/Android.bp +++ b/opengl/tests/gl_perfapp/Android.bp @@ -17,6 +17,7 @@ cc_library_shared { "-Werror", "-Wno-error=unused-parameter", ], + header_libs: ["jni_headers"], srcs: ["jni/gl_code.cpp"], shared_libs: [ "liblog", diff --git a/opengl/tests/gldual/Android.bp b/opengl/tests/gldual/Android.bp index 24325666e6..1006d44e47 100644 --- a/opengl/tests/gldual/Android.bp +++ b/opengl/tests/gldual/Android.bp @@ -20,6 +20,7 @@ cc_library_shared { "-Werror", "-Wno-error=unused-parameter", ], + header_libs: ["jni_headers"], srcs: ["jni/gl_code.cpp"], shared_libs: [ "liblog", |