summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTianjie Xu <xunchang@google.com>2016-09-13 00:56:31 +0200
committerGerrit Code Review <noreply-gerritcodereview@google.com>2016-09-13 00:56:31 +0200
commitcdf509cce2d6a2f42ea5a8abb3c1e42532853e42 (patch)
treec384a11d41d2ce932a2dba8b791e72dcabdb7111
parentMerge "Switch recovery to libbase logging" (diff)
parentsave uncrypt status to last_install (diff)
downloadandroid_bootable_recovery-cdf509cce2d6a2f42ea5a8abb3c1e42532853e42.tar
android_bootable_recovery-cdf509cce2d6a2f42ea5a8abb3c1e42532853e42.tar.gz
android_bootable_recovery-cdf509cce2d6a2f42ea5a8abb3c1e42532853e42.tar.bz2
android_bootable_recovery-cdf509cce2d6a2f42ea5a8abb3c1e42532853e42.tar.lz
android_bootable_recovery-cdf509cce2d6a2f42ea5a8abb3c1e42532853e42.tar.xz
android_bootable_recovery-cdf509cce2d6a2f42ea5a8abb3c1e42532853e42.tar.zst
android_bootable_recovery-cdf509cce2d6a2f42ea5a8abb3c1e42532853e42.zip
-rw-r--r--install.cpp14
-rw-r--r--uncrypt/uncrypt.cpp21
2 files changed, 34 insertions, 1 deletions
diff --git a/install.cpp b/install.cpp
index 92a62db5f..fac6151b3 100644
--- a/install.cpp
+++ b/install.cpp
@@ -27,10 +27,11 @@
#include <string>
#include <vector>
+#include <android-base/file.h>
+#include <android-base/logging.h>
#include <android-base/parseint.h>
#include <android-base/stringprintf.h>
#include <android-base/strings.h>
-#include <android-base/logging.h>
#include "common.h"
#include "error_code.h"
@@ -47,6 +48,7 @@ extern RecoveryUI* ui;
#define ASSUMED_UPDATE_BINARY_NAME "META-INF/com/google/android/update-binary"
#define PUBLIC_KEYS_FILE "/res/keys"
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
static const int VERIFICATION_PROGRESS_TIME = 60;
@@ -384,6 +386,16 @@ install_package(const char* path, bool* wipe_cache, const char* install_file,
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);
}
return result;
diff --git a/uncrypt/uncrypt.cpp b/uncrypt/uncrypt.cpp
index 7adf88cac..96edfd781 100644
--- a/uncrypt/uncrypt.cpp
+++ b/uncrypt/uncrypt.cpp
@@ -130,6 +130,7 @@
// devices, on which /cache partitions always exist.
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_STATUS = "/cache/recovery/uncrypt_status";
static const std::string UNCRYPT_SOCKET = "uncrypt";
static struct fstab* fstab = nullptr;
@@ -461,12 +462,32 @@ static bool uncrypt_wrapper(const char* input_path, const char* map_file, const
input_path = package.c_str();
}
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);
if (status != 0) {
write_status_to_socket(-1, socket);
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);
+
return true;
}