save uncrypt status to last_install

am: e16e799dfd

Change-Id: I0cac4258690c9ab6a6122a9e67c8453050aabcfc
This commit is contained in:
Tianjie Xu
2016-09-13 01:48:10 +00:00
committed by android-build-merger
2 changed files with 34 additions and 0 deletions

View File

@@ -30,6 +30,8 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include <android-base/file.h>
#include <android-base/logging.h>
#include <android-base/parseint.h> #include <android-base/parseint.h>
#include <android-base/stringprintf.h> #include <android-base/stringprintf.h>
#include <android-base/strings.h> #include <android-base/strings.h>
@@ -54,6 +56,7 @@ static constexpr const char* AB_OTA_PAYLOAD_PROPERTIES = "payload_properties.txt
static constexpr const char* AB_OTA_PAYLOAD = "payload.bin"; static constexpr const char* AB_OTA_PAYLOAD = "payload.bin";
#define PUBLIC_KEYS_FILE "/res/keys" #define PUBLIC_KEYS_FILE "/res/keys"
static constexpr const char* METADATA_PATH = "META-INF/com/android/metadata"; static constexpr const char* METADATA_PATH = "META-INF/com/android/metadata";
static constexpr const char* UNCRYPT_STATUS = "/cache/recovery/uncrypt_status";
// Default allocation of progress bar segments to operations // Default allocation of progress bar segments to operations
static const int VERIFICATION_PROGRESS_TIME = 60; static const int VERIFICATION_PROGRESS_TIME = 60;
@@ -539,6 +542,16 @@ install_package(const char* path, bool* wipe_cache, const char* install_file,
fprintf(install_log, "%s\n", s.c_str()); fprintf(install_log, "%s\n", s.c_str());
} }
if (ensure_path_mounted(UNCRYPT_STATUS) != 0) {
LOG(WARNING) << "Can't mount " << UNCRYPT_STATUS;
} else {
std::string uncrypt_status;
if (!android::base::ReadFileToString(UNCRYPT_STATUS, &uncrypt_status)) {
PLOG(WARNING) << "failed to read uncrypt status";
} else {
fprintf(install_log, "%s\n", android::base::Trim(uncrypt_status).c_str());
}
}
fclose(install_log); fclose(install_log);
} }
return result; return result;

View File

@@ -134,6 +134,7 @@
// devices, on which /cache partitions always exist. // devices, on which /cache partitions always exist.
static const std::string CACHE_BLOCK_MAP = "/cache/recovery/block.map"; static const std::string CACHE_BLOCK_MAP = "/cache/recovery/block.map";
static const std::string UNCRYPT_PATH_FILE = "/cache/recovery/uncrypt_file"; static const std::string UNCRYPT_PATH_FILE = "/cache/recovery/uncrypt_file";
static const std::string UNCRYPT_STATUS = "/cache/recovery/uncrypt_status";
static const std::string UNCRYPT_SOCKET = "uncrypt"; static const std::string UNCRYPT_SOCKET = "uncrypt";
static struct fstab* fstab = nullptr; static struct fstab* fstab = nullptr;
@@ -466,12 +467,32 @@ static bool uncrypt_wrapper(const char* input_path, const char* map_file, const
input_path = package.c_str(); input_path = package.c_str();
} }
CHECK(map_file != nullptr); CHECK(map_file != nullptr);
#define UNCRYPT_TIME_HOLDER 0x7FFFFFFF
// Intialize the uncrypt time cost to a huge number so that we can tell from
// the statistics if an uncrypt fails to finish.
if (!android::base::WriteStringToFile(android::base::StringPrintf(
"uncrypt_time: %d\n", UNCRYPT_TIME_HOLDER), UNCRYPT_STATUS)) {
PLOG(WARNING) << "failed to write to " << UNCRYPT_STATUS;
}
auto start = std::chrono::system_clock::now();
int status = uncrypt(input_path, map_file, socket); int status = uncrypt(input_path, map_file, socket);
if (status != 0) { if (status != 0) {
write_status_to_socket(-1, socket); write_status_to_socket(-1, socket);
return false; return false;
} }
std::chrono::duration<double> duration = std::chrono::system_clock::now() - start;
int count = static_cast<int>(duration.count());
// Overwrite the uncrypt_time if uncrypt finishes successfully.
if (!android::base::WriteStringToFile(
android::base::StringPrintf("uncrypt_time: %d\n", count), UNCRYPT_STATUS)) {
PLOG(WARNING) << "failed to write to " << UNCRYPT_STATUS;
}
write_status_to_socket(100, socket); write_status_to_socket(100, socket);
return true; return true;
} }