diff options
-rw-r--r-- | cmds/installd/otapreopt.cpp | 42 | ||||
-rw-r--r-- | libs/binder/ndk/include_ndk/android/binder_parcel_utils.h | 78 | ||||
-rwxr-xr-x | libs/binder/ndk/scripts/gen_parcel_helper.py | 6 |
3 files changed, 43 insertions, 83 deletions
diff --git a/cmds/installd/otapreopt.cpp b/cmds/installd/otapreopt.cpp index 28c7658d6e..b2e7047a65 100644 --- a/cmds/installd/otapreopt.cpp +++ b/cmds/installd/otapreopt.cpp @@ -322,21 +322,8 @@ private: return false; } const char* isa = parameters_.instruction_set; - - // Check whether the file exists where expected. std::string dalvik_cache = GetOTADataDirectory() + "/" + DALVIK_CACHE; std::string isa_path = dalvik_cache + "/" + isa; - std::string art_path = isa_path + "/system@framework@boot.art"; - std::string oat_path = isa_path + "/system@framework@boot.oat"; - bool cleared = false; - if (access(art_path.c_str(), F_OK) == 0 && access(oat_path.c_str(), F_OK) == 0) { - // Files exist, assume everything is alright if not forced. Otherwise clean up. - if (!force) { - return true; - } - ClearDirectory(isa_path); - cleared = true; - } // Reset umask in otapreopt, so that we control the the access for the files we create. umask(0); @@ -355,17 +342,34 @@ private: } } - // Prepare to create. - if (!cleared) { + // Check whether we have files in /data. + // TODO: check that the files are correct wrt/ jars. + std::string art_path = isa_path + "/system@framework@boot.art"; + std::string oat_path = isa_path + "/system@framework@boot.oat"; + bool cleared = false; + if (access(art_path.c_str(), F_OK) == 0 && access(oat_path.c_str(), F_OK) == 0) { + // Files exist, assume everything is alright if not forced. Otherwise clean up. + if (!force) { + return true; + } ClearDirectory(isa_path); + cleared = true; } + // Check whether we have an image in /system. + // TODO: check that the files are correct wrt/ jars. std::string preopted_boot_art_path = StringPrintf("/system/framework/%s/boot.art", isa); - if (access(preopted_boot_art_path.c_str(), F_OK) != 0) { - // No preopted boot image. Try to compile. - return Dex2oatBootImage(boot_classpath_, art_path, oat_path, isa); + if (access(preopted_boot_art_path.c_str(), F_OK) == 0) { + // Note: we ignore |force| here. + return true; } - return true; + + + if (!cleared) { + ClearDirectory(isa_path); + } + + return Dex2oatBootImage(boot_classpath_, art_path, oat_path, isa); } static bool CreatePath(const std::string& path) { diff --git a/libs/binder/ndk/include_ndk/android/binder_parcel_utils.h b/libs/binder/ndk/include_ndk/android/binder_parcel_utils.h index faeb78fdfa..bf0c956b0d 100644 --- a/libs/binder/ndk/include_ndk/android/binder_parcel_utils.h +++ b/libs/binder/ndk/include_ndk/android/binder_parcel_utils.h @@ -76,34 +76,18 @@ static inline void AParcel_stdVectorSetter(void* vectorData, size_t index, T val (*vec)[index] = value; } -/** - * Writes a vector to the next location in a non-null parcel. - */ -template <typename T> -static inline binder_status_t AParcel_writeVector(AParcel* parcel, const std::vector<T>& vec); - -/** - * Reads a vector to the next location in a non-null parcel. - */ -template <typename T> -static inline binder_status_t AParcel_readVector(const AParcel* parcel, std::vector<T>* vec); - // @START /** * Writes a vector of int32_t to the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_writeVector<int32_t>(AParcel* parcel, - const std::vector<int32_t>& vec) { +inline binder_status_t AParcel_writeVector(AParcel* parcel, const std::vector<int32_t>& vec) { return AParcel_writeInt32Array(parcel, vec.data(), vec.size()); } /** * Reads a vector of int32_t from the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_readVector<int32_t>(const AParcel* parcel, - std::vector<int32_t>* vec) { +inline binder_status_t AParcel_readVector(const AParcel* parcel, std::vector<int32_t>* vec) { void* vectorData = static_cast<void*>(vec); return AParcel_readInt32Array(parcel, &vectorData, &AParcel_stdVectorReallocator<int32_t>, AParcel_stdVectorGetter<int32_t>); @@ -112,18 +96,14 @@ inline binder_status_t AParcel_readVector<int32_t>(const AParcel* parcel, /** * Writes a vector of uint32_t to the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_writeVector<uint32_t>(AParcel* parcel, - const std::vector<uint32_t>& vec) { +inline binder_status_t AParcel_writeVector(AParcel* parcel, const std::vector<uint32_t>& vec) { return AParcel_writeUint32Array(parcel, vec.data(), vec.size()); } /** * Reads a vector of uint32_t from the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_readVector<uint32_t>(const AParcel* parcel, - std::vector<uint32_t>* vec) { +inline binder_status_t AParcel_readVector(const AParcel* parcel, std::vector<uint32_t>* vec) { void* vectorData = static_cast<void*>(vec); return AParcel_readUint32Array(parcel, &vectorData, &AParcel_stdVectorReallocator<uint32_t>, AParcel_stdVectorGetter<uint32_t>); @@ -132,18 +112,14 @@ inline binder_status_t AParcel_readVector<uint32_t>(const AParcel* parcel, /** * Writes a vector of int64_t to the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_writeVector<int64_t>(AParcel* parcel, - const std::vector<int64_t>& vec) { +inline binder_status_t AParcel_writeVector(AParcel* parcel, const std::vector<int64_t>& vec) { return AParcel_writeInt64Array(parcel, vec.data(), vec.size()); } /** * Reads a vector of int64_t from the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_readVector<int64_t>(const AParcel* parcel, - std::vector<int64_t>* vec) { +inline binder_status_t AParcel_readVector(const AParcel* parcel, std::vector<int64_t>* vec) { void* vectorData = static_cast<void*>(vec); return AParcel_readInt64Array(parcel, &vectorData, &AParcel_stdVectorReallocator<int64_t>, AParcel_stdVectorGetter<int64_t>); @@ -152,18 +128,14 @@ inline binder_status_t AParcel_readVector<int64_t>(const AParcel* parcel, /** * Writes a vector of uint64_t to the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_writeVector<uint64_t>(AParcel* parcel, - const std::vector<uint64_t>& vec) { +inline binder_status_t AParcel_writeVector(AParcel* parcel, const std::vector<uint64_t>& vec) { return AParcel_writeUint64Array(parcel, vec.data(), vec.size()); } /** * Reads a vector of uint64_t from the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_readVector<uint64_t>(const AParcel* parcel, - std::vector<uint64_t>* vec) { +inline binder_status_t AParcel_readVector(const AParcel* parcel, std::vector<uint64_t>* vec) { void* vectorData = static_cast<void*>(vec); return AParcel_readUint64Array(parcel, &vectorData, &AParcel_stdVectorReallocator<uint64_t>, AParcel_stdVectorGetter<uint64_t>); @@ -172,16 +144,14 @@ inline binder_status_t AParcel_readVector<uint64_t>(const AParcel* parcel, /** * Writes a vector of float to the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_writeVector<float>(AParcel* parcel, const std::vector<float>& vec) { +inline binder_status_t AParcel_writeVector(AParcel* parcel, const std::vector<float>& vec) { return AParcel_writeFloatArray(parcel, vec.data(), vec.size()); } /** * Reads a vector of float from the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_readVector<float>(const AParcel* parcel, std::vector<float>* vec) { +inline binder_status_t AParcel_readVector(const AParcel* parcel, std::vector<float>* vec) { void* vectorData = static_cast<void*>(vec); return AParcel_readFloatArray(parcel, &vectorData, &AParcel_stdVectorReallocator<float>, AParcel_stdVectorGetter<float>); @@ -190,17 +160,14 @@ inline binder_status_t AParcel_readVector<float>(const AParcel* parcel, std::vec /** * Writes a vector of double to the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_writeVector<double>(AParcel* parcel, - const std::vector<double>& vec) { +inline binder_status_t AParcel_writeVector(AParcel* parcel, const std::vector<double>& vec) { return AParcel_writeDoubleArray(parcel, vec.data(), vec.size()); } /** * Reads a vector of double from the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_readVector<double>(const AParcel* parcel, std::vector<double>* vec) { +inline binder_status_t AParcel_readVector(const AParcel* parcel, std::vector<double>* vec) { void* vectorData = static_cast<void*>(vec); return AParcel_readDoubleArray(parcel, &vectorData, &AParcel_stdVectorReallocator<double>, AParcel_stdVectorGetter<double>); @@ -209,8 +176,7 @@ inline binder_status_t AParcel_readVector<double>(const AParcel* parcel, std::ve /** * Writes a vector of bool to the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_writeVector<bool>(AParcel* parcel, const std::vector<bool>& vec) { +inline binder_status_t AParcel_writeVector(AParcel* parcel, const std::vector<bool>& vec) { return AParcel_writeBoolArray(parcel, static_cast<const void*>(&vec), AParcel_stdVectorGetter<bool>, vec.size()); } @@ -218,8 +184,7 @@ inline binder_status_t AParcel_writeVector<bool>(AParcel* parcel, const std::vec /** * Reads a vector of bool from the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_readVector<bool>(const AParcel* parcel, std::vector<bool>* vec) { +inline binder_status_t AParcel_readVector(const AParcel* parcel, std::vector<bool>* vec) { void* vectorData = static_cast<void*>(vec); return AParcel_readBoolArray(parcel, &vectorData, &AParcel_stdVectorReallocator<bool>, AParcel_stdVectorSetter<bool>); @@ -228,18 +193,14 @@ inline binder_status_t AParcel_readVector<bool>(const AParcel* parcel, std::vect /** * Writes a vector of char16_t to the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_writeVector<char16_t>(AParcel* parcel, - const std::vector<char16_t>& vec) { +inline binder_status_t AParcel_writeVector(AParcel* parcel, const std::vector<char16_t>& vec) { return AParcel_writeCharArray(parcel, vec.data(), vec.size()); } /** * Reads a vector of char16_t from the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_readVector<char16_t>(const AParcel* parcel, - std::vector<char16_t>* vec) { +inline binder_status_t AParcel_readVector(const AParcel* parcel, std::vector<char16_t>* vec) { void* vectorData = static_cast<void*>(vec); return AParcel_readCharArray(parcel, &vectorData, &AParcel_stdVectorReallocator<char16_t>, AParcel_stdVectorGetter<char16_t>); @@ -248,17 +209,14 @@ inline binder_status_t AParcel_readVector<char16_t>(const AParcel* parcel, /** * Writes a vector of int8_t to the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_writeVector<int8_t>(AParcel* parcel, - const std::vector<int8_t>& vec) { +inline binder_status_t AParcel_writeVector(AParcel* parcel, const std::vector<int8_t>& vec) { return AParcel_writeByteArray(parcel, vec.data(), vec.size()); } /** * Reads a vector of int8_t from the next location in a non-null parcel. */ -template <> -inline binder_status_t AParcel_readVector<int8_t>(const AParcel* parcel, std::vector<int8_t>* vec) { +inline binder_status_t AParcel_readVector(const AParcel* parcel, std::vector<int8_t>* vec) { void* vectorData = static_cast<void*>(vec); return AParcel_readByteArray(parcel, &vectorData, &AParcel_stdVectorReallocator<int8_t>, AParcel_stdVectorGetter<int8_t>); diff --git a/libs/binder/ndk/scripts/gen_parcel_helper.py b/libs/binder/ndk/scripts/gen_parcel_helper.py index 45f8d06883..2cf10d3b7a 100755 --- a/libs/binder/ndk/scripts/gen_parcel_helper.py +++ b/libs/binder/ndk/scripts/gen_parcel_helper.py @@ -152,8 +152,7 @@ def main(): cpp_helper += "/**\n" cpp_helper += " * Writes a vector of " + cpp + " to the next location in a non-null parcel.\n" cpp_helper += " */\n" - cpp_helper += "template<>\n" - cpp_helper += "inline binder_status_t AParcel_writeVector<" + cpp + ">(AParcel* parcel, const std::vector<" + cpp + ">& vec) {\n" + cpp_helper += "inline binder_status_t AParcel_writeVector(AParcel* parcel, const std::vector<" + cpp + ">& vec) {\n" write_args = "vec.data()" if nca: write_args = "static_cast<const void*>(&vec), AParcel_stdVectorGetter<" + cpp + ">" cpp_helper += " return AParcel_write" + pretty + "Array(parcel, " + write_args + ", vec.size());\n" @@ -162,8 +161,7 @@ def main(): cpp_helper += "/**\n" cpp_helper += " * Reads a vector of " + cpp + " from the next location in a non-null parcel.\n" cpp_helper += " */\n" - cpp_helper += "template<>\n" - cpp_helper += "inline binder_status_t AParcel_readVector<" + cpp + ">(const AParcel* parcel, std::vector<" + cpp + ">* vec) {\n" + cpp_helper += "inline binder_status_t AParcel_readVector(const AParcel* parcel, std::vector<" + cpp + ">* vec) {\n" cpp_helper += " void* vectorData = static_cast<void*>(vec);\n" read_args = [] read_args += ["parcel"] |