Skip to content

Commit

Permalink
save uncrypt status to last_install
Browse files Browse the repository at this point in the history
Save the uncrypt time cost to /cache/recovery/uncrypt_status. Recovery
reads the file and saves its contents to last_install.

Bug: 31383361
Test: Tested on angler and uncrypt_time reports correctly.

(cherry picked from commit fe16b5c)

Change-Id: Id69681a35c7eb2f0eb21b48e3616dcda82ce41b8
  • Loading branch information
Tianjie Xu committed Sep 12, 2016
1 parent 62ab2a0 commit e16e799
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
13 changes: 13 additions & 0 deletions install.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
#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>
Expand All @@ -54,6 +56,7 @@ static constexpr const char* AB_OTA_PAYLOAD_PROPERTIES = "payload_properties.txt
static constexpr const char* AB_OTA_PAYLOAD = "payload.bin";
#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;
Expand Down Expand Up @@ -539,6 +542,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;
Expand Down
21 changes: 21 additions & 0 deletions uncrypt/uncrypt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,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;
Expand Down Expand Up @@ -466,12 +467,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;
}

Expand Down

0 comments on commit e16e799

Please sign in to comment.